From 227989134937f6c18939a17f245e0f7d4ebf8e61 Mon Sep 17 00:00:00 2001 From: mabonmn Date: Thu, 13 Mar 2025 18:43:18 -0500 Subject: [PATCH] Build --- BUILD.windows | 69 + ChangeLog | 148 + Dockerfile | 44 + Doxyfile | 1630 ++ INSTALL | 55 + INSTALL.macosx | 23 + INSTALL.server | 18 + LICENSE copy | 203 + Makefile | 109 + NOTICE | 43 + README copy.md | 57 + README.beta-ui | 28 + README.files | 21 + README.swig-python | 16 + base64/modp_b64.cc | 269 + base64/modp_b64.h | 234 + base64/modp_b64.o | Bin 0 -> 8064 bytes base64/modp_b64_data.h | 480 + docker-compose.yml | 12 + external/INSTALL | 8 + external/Jamroot | 263 + external/LICENSE_1_0.txt | 23 + external/b2 | Bin 0 -> 266680 bytes external/bin.v2/config.log | 14 + .../gregorian/date_generators.o | Bin 0 -> 1936 bytes .../threading-multi/gregorian/greg_month.o | Bin 0 -> 122016 bytes .../threading-multi/gregorian/greg_weekday.o | Bin 0 -> 4032 bytes .../threading-multi/libboost_date_time.a | Bin 0 -> 144112 bytes .../gregorian/date_generators.o | Bin 0 -> 2048 bytes .../threading-multi/gregorian/greg_month.o | Bin 0 -> 136704 bytes .../threading-multi/gregorian/greg_weekday.o | Bin 0 -> 4080 bytes .../threading-multi/libboost_date_time.a | Bin 0 -> 159844 bytes .../threading-multi/libboost_filesystem.a | Bin 0 -> 372282 bytes .../threading-multi/v2/src/v2_operations.o | Bin 0 -> 66192 bytes .../threading-multi/v2/src/v2_path.o | Bin 0 -> 40872 bytes .../threading-multi/v2/src/v2_portability.o | Bin 0 -> 14232 bytes .../v3/src/codecvt_error_category.o | Bin 0 -> 9176 bytes .../threading-multi/v3/src/operations.o | Bin 0 -> 117416 bytes .../link-static/threading-multi/v3/src/path.o | Bin 0 -> 40728 bytes .../threading-multi/v3/src/path_traits.o | Bin 0 -> 15832 bytes .../threading-multi/v3/src/portability.o | Bin 0 -> 14232 bytes .../threading-multi/v3/src/unique_path.o | Bin 0 -> 14424 bytes .../v3/src/utf8_codecvt_facet.o | Bin 0 -> 8176 bytes .../v3/src/windows_file_codecvt.o | Bin 0 -> 952 bytes .../threading-multi/libboost_filesystem.a | Bin 0 -> 378306 bytes .../threading-multi/v2/src/v2_operations.o | Bin 0 -> 69672 bytes .../threading-multi/v2/src/v2_path.o | Bin 0 -> 46280 bytes .../threading-multi/v2/src/v2_portability.o | Bin 0 -> 16392 bytes .../v3/src/codecvt_error_category.o | Bin 0 -> 9696 bytes .../threading-multi/v3/src/operations.o | Bin 0 -> 109488 bytes .../link-static/threading-multi/v3/src/path.o | Bin 0 -> 39432 bytes .../threading-multi/v3/src/path_traits.o | Bin 0 -> 15568 bytes .../threading-multi/v3/src/portability.o | Bin 0 -> 16392 bytes .../threading-multi/v3/src/unique_path.o | Bin 0 -> 15408 bytes .../v3/src/utf8_codecvt_facet.o | Bin 0 -> 9232 bytes .../v3/src/windows_file_codecvt.o | Bin 0 -> 960 bytes .../link-static/threading-multi/cmdline.o | Bin 0 -> 209896 bytes .../link-static/threading-multi/config_file.o | Bin 0 -> 99912 bytes .../link-static/threading-multi/convert.o | Bin 0 -> 36408 bytes .../libboost_program_options.a | Bin 0 -> 1123552 bytes .../threading-multi/options_description.o | Bin 0 -> 154872 bytes .../link-static/threading-multi/parsers.o | Bin 0 -> 204216 bytes .../threading-multi/positional_options.o | Bin 0 -> 10464 bytes .../link-static/threading-multi/split.o | Bin 0 -> 37512 bytes .../threading-multi/utf8_codecvt_facet.o | Bin 0 -> 8304 bytes .../threading-multi/value_semantic.o | Bin 0 -> 182416 bytes .../threading-multi/variables_map.o | Bin 0 -> 72968 bytes .../link-static/threading-multi/winmain.o | Bin 0 -> 936 bytes .../link-static/threading-multi/cmdline.o | Bin 0 -> 213928 bytes .../link-static/threading-multi/config_file.o | Bin 0 -> 103176 bytes .../link-static/threading-multi/convert.o | Bin 0 -> 35680 bytes .../libboost_program_options.a | Bin 0 -> 1168084 bytes .../threading-multi/options_description.o | Bin 0 -> 161248 bytes .../link-static/threading-multi/parsers.o | Bin 0 -> 214216 bytes .../threading-multi/positional_options.o | Bin 0 -> 9080 bytes .../link-static/threading-multi/split.o | Bin 0 -> 50800 bytes .../threading-multi/utf8_codecvt_facet.o | Bin 0 -> 9392 bytes .../threading-multi/value_semantic.o | Bin 0 -> 183944 bytes .../threading-multi/variables_map.o | Bin 0 -> 78064 bytes .../link-static/threading-multi/winmain.o | Bin 0 -> 952 bytes .../threading-multi/c_regex_traits.o | Bin 0 -> 16312 bytes .../threading-multi/cpp_regex_traits.o | Bin 0 -> 9168 bytes .../link-static/threading-multi/cregex.o | Bin 0 -> 548744 bytes .../link-static/threading-multi/fileiter.o | Bin 0 -> 55528 bytes .../release/link-static/threading-multi/icu.o | Bin 0 -> 936 bytes .../link-static/threading-multi/instances.o | Bin 0 -> 461240 bytes .../threading-multi/libboost_regex.a | Bin 0 -> 2465534 bytes .../link-static/threading-multi/posix_api.o | Bin 0 -> 289248 bytes .../link-static/threading-multi/regex.o | Bin 0 -> 60776 bytes .../link-static/threading-multi/regex_debug.o | Bin 0 -> 944 bytes .../threading-multi/regex_raw_buffer.o | Bin 0 -> 2008 bytes .../threading-multi/regex_traits_defaults.o | Bin 0 -> 16592 bytes .../threading-multi/static_mutex.o | Bin 0 -> 2744 bytes .../link-static/threading-multi/usinstances.o | Bin 0 -> 944 bytes .../threading-multi/w32_regex_traits.o | Bin 0 -> 944 bytes .../threading-multi/wc_regex_traits.o | Bin 0 -> 18752 bytes .../threading-multi/wide_posix_api.o | Bin 0 -> 290928 bytes .../link-static/threading-multi/winstances.o | Bin 0 -> 480016 bytes .../threading-multi/c_regex_traits.o | Bin 0 -> 16168 bytes .../threading-multi/cpp_regex_traits.o | Bin 0 -> 7544 bytes .../link-static/threading-multi/cregex.o | Bin 0 -> 572232 bytes .../link-static/threading-multi/fileiter.o | Bin 0 -> 47376 bytes .../release/link-static/threading-multi/icu.o | Bin 0 -> 944 bytes .../link-static/threading-multi/instances.o | Bin 0 -> 508224 bytes .../threading-multi/libboost_regex.a | Bin 0 -> 2584948 bytes .../link-static/threading-multi/posix_api.o | Bin 0 -> 291984 bytes .../link-static/threading-multi/regex.o | Bin 0 -> 60848 bytes .../link-static/threading-multi/regex_debug.o | Bin 0 -> 952 bytes .../threading-multi/regex_raw_buffer.o | Bin 0 -> 2152 bytes .../threading-multi/regex_traits_defaults.o | Bin 0 -> 15920 bytes .../threading-multi/static_mutex.o | Bin 0 -> 2936 bytes .../link-static/threading-multi/usinstances.o | Bin 0 -> 952 bytes .../threading-multi/w32_regex_traits.o | Bin 0 -> 960 bytes .../threading-multi/wc_regex_traits.o | Bin 0 -> 19112 bytes .../threading-multi/wide_posix_api.o | Bin 0 -> 292872 bytes .../link-static/threading-multi/winstances.o | Bin 0 -> 524808 bytes .../link-static/threading-multi/error_code.o | Bin 0 -> 15624 bytes .../threading-multi/libboost_system.a | Bin 0 -> 16286 bytes .../link-static/threading-multi/error_code.o | Bin 0 -> 20520 bytes .../threading-multi/libboost_system.a | Bin 0 -> 21182 bytes .../threading-multi/compiler_log_formatter.o | Bin 0 -> 24160 bytes .../link-static/threading-multi/cpp_main.o | Bin 0 -> 18040 bytes .../link-static/threading-multi/debug.o | Bin 0 -> 46888 bytes .../threading-multi/exception_safety.o | Bin 0 -> 109416 bytes .../threading-multi/execution_monitor.o | Bin 0 -> 43056 bytes .../link-static/threading-multi/framework.o | Bin 0 -> 123656 bytes .../threading-multi/interaction_based.o | Bin 0 -> 13896 bytes .../libboost_prg_exec_monitor.a | Bin 0 -> 114866 bytes .../libboost_test_exec_monitor.a | Bin 0 -> 1519178 bytes .../libboost_unit_test_framework.a | Bin 0 -> 1761774 bytes .../threading-multi/logged_expectations.o | Bin 0 -> 128728 bytes .../threading-multi/plain_report_formatter.o | Bin 0 -> 21192 bytes .../threading-multi/progress_monitor.o | Bin 0 -> 23968 bytes .../threading-multi/results_collector.o | Bin 0 -> 47120 bytes .../threading-multi/results_reporter.o | Bin 0 -> 15584 bytes .../link-static/threading-multi/test_main.o | Bin 0 -> 26464 bytes .../link-static/threading-multi/test_tools.o | Bin 0 -> 92880 bytes .../threading-multi/unit_test_log.o | Bin 0 -> 49096 bytes .../threading-multi/unit_test_main.o | Bin 0 -> 27336 bytes .../threading-multi/unit_test_monitor.o | Bin 0 -> 16376 bytes .../threading-multi/unit_test_parameters.o | Bin 0 -> 719792 bytes .../threading-multi/unit_test_suite.o | Bin 0 -> 36392 bytes .../threading-multi/xml_log_formatter.o | Bin 0 -> 33544 bytes .../threading-multi/xml_report_formatter.o | Bin 0 -> 23064 bytes .../threading-multi/compiler_log_formatter.o | Bin 0 -> 24848 bytes .../link-static/threading-multi/cpp_main.o | Bin 0 -> 19256 bytes .../link-static/threading-multi/debug.o | Bin 0 -> 55776 bytes .../threading-multi/exception_safety.o | Bin 0 -> 108448 bytes .../threading-multi/execution_monitor.o | Bin 0 -> 41304 bytes .../link-static/threading-multi/framework.o | Bin 0 -> 179128 bytes .../threading-multi/interaction_based.o | Bin 0 -> 14216 bytes .../libboost_prg_exec_monitor.a | Bin 0 -> 124684 bytes .../libboost_test_exec_monitor.a | Bin 0 -> 1827470 bytes .../libboost_unit_test_framework.a | Bin 0 -> 2079884 bytes .../threading-multi/logged_expectations.o | Bin 0 -> 147888 bytes .../threading-multi/plain_report_formatter.o | Bin 0 -> 27344 bytes .../threading-multi/progress_monitor.o | Bin 0 -> 34304 bytes .../threading-multi/results_collector.o | Bin 0 -> 64416 bytes .../threading-multi/results_reporter.o | Bin 0 -> 27656 bytes .../link-static/threading-multi/test_main.o | Bin 0 -> 36096 bytes .../link-static/threading-multi/test_tools.o | Bin 0 -> 102696 bytes .../threading-multi/unit_test_log.o | Bin 0 -> 64512 bytes .../threading-multi/unit_test_main.o | Bin 0 -> 42520 bytes .../threading-multi/unit_test_monitor.o | Bin 0 -> 23576 bytes .../threading-multi/unit_test_parameters.o | Bin 0 -> 820240 bytes .../threading-multi/unit_test_suite.o | Bin 0 -> 42280 bytes .../threading-multi/xml_log_formatter.o | Bin 0 -> 41392 bytes .../threading-multi/xml_report_formatter.o | Bin 0 -> 32160 bytes .../threading-multi/libboost_thread.a | Bin 0 -> 236168 bytes .../threading-multi/pthread/once.o | Bin 0 -> 2480 bytes .../threading-multi/pthread/thread.o | Bin 0 -> 209096 bytes .../threading-multi/libboost_thread.a | Bin 0 -> 245400 bytes .../threading-multi/pthread/once.o | Bin 0 -> 2616 bytes .../threading-multi/pthread/thread.o | Bin 0 -> 217712 bytes external/bjam | Bin 0 -> 266680 bytes external/boost-build.jam | 17 + external/boost.png | Bin 0 -> 6308 bytes external/boost/algorithm/string/compare.hpp | 199 + external/boost/algorithm/string/concept.hpp | 83 + external/boost/algorithm/string/config.hpp | 28 + external/boost/algorithm/string/constants.hpp | 36 + .../algorithm/string/detail/find_format.hpp | 204 + .../string/detail/find_format_all.hpp | 273 + .../string/detail/find_format_store.hpp | 89 + .../boost/algorithm/string/detail/finder.hpp | 646 + .../algorithm/string/detail/formatter.hpp | 119 + .../string/detail/replace_storage.hpp | 159 + .../algorithm/string/detail/sequence.hpp | 200 + .../boost/algorithm/string/detail/util.hpp | 106 + .../boost/algorithm/string/find_format.hpp | 287 + external/boost/algorithm/string/finder.hpp | 270 + external/boost/algorithm/string/formatter.hpp | 120 + external/boost/algorithm/string/replace.hpp | 928 + .../algorithm/string/sequence_traits.hpp | 193 + .../boost/algorithm/string/yes_no_type.hpp | 33 + external/boost/aligned_storage.hpp | 181 + external/boost/any.hpp | 253 + external/boost/assert.hpp | 131 + external/boost/bind.hpp | 24 + external/boost/bind/arg.hpp | 62 + external/boost/bind/bind.hpp | 1751 ++ external/boost/bind/bind_cc.hpp | 117 + external/boost/bind/bind_mf2_cc.hpp | 228 + external/boost/bind/bind_mf_cc.hpp | 227 + external/boost/bind/bind_template.hpp | 345 + external/boost/bind/mem_fn.hpp | 389 + external/boost/bind/mem_fn_cc.hpp | 103 + external/boost/bind/mem_fn_template.hpp | 1047 + external/boost/bind/mem_fn_vw.hpp | 130 + external/boost/bind/placeholders.hpp | 69 + external/boost/bind/storage.hpp | 475 + external/boost/call_traits.hpp | 24 + external/boost/cerrno.hpp | 331 + external/boost/checked_delete.hpp | 69 + external/boost/concept/assert.hpp | 46 + .../concept/detail/backward_compatibility.hpp | 16 + external/boost/concept/detail/borland.hpp | 30 + external/boost/concept/detail/concept_def.hpp | 51 + .../boost/concept/detail/concept_undef.hpp | 5 + external/boost/concept/detail/general.hpp | 75 + .../boost/concept/detail/has_constraints.hpp | 50 + external/boost/concept/detail/msvc.hpp | 114 + external/boost/concept/usage.hpp | 44 + external/boost/concept_check.hpp | 1083 + external/boost/config.hpp | 70 + external/boost/config/abi/borland_prefix.hpp | 27 + external/boost/config/abi/borland_suffix.hpp | 12 + external/boost/config/abi/msvc_prefix.hpp | 22 + external/boost/config/abi/msvc_suffix.hpp | 8 + external/boost/config/abi_prefix.hpp | 25 + external/boost/config/abi_suffix.hpp | 27 + external/boost/config/auto_link.hpp | 422 + external/boost/config/compiler/borland.hpp | 285 + external/boost/config/compiler/clang.hpp | 121 + external/boost/config/compiler/codegear.hpp | 178 + external/boost/config/compiler/comeau.hpp | 59 + external/boost/config/compiler/common_edg.hpp | 101 + external/boost/config/compiler/compaq_cxx.hpp | 19 + external/boost/config/compiler/cray.hpp | 61 + .../boost/config/compiler/digitalmars.hpp | 101 + external/boost/config/compiler/gcc.hpp | 252 + external/boost/config/compiler/gcc_xml.hpp | 59 + external/boost/config/compiler/greenhills.hpp | 28 + external/boost/config/compiler/hp_acc.hpp | 138 + external/boost/config/compiler/intel.hpp | 270 + external/boost/config/compiler/kai.hpp | 33 + external/boost/config/compiler/metrowerks.hpp | 142 + external/boost/config/compiler/mpw.hpp | 84 + external/boost/config/compiler/nvcc.hpp | 28 + external/boost/config/compiler/pathscale.hpp | 80 + external/boost/config/compiler/pgi.hpp | 77 + .../boost/config/compiler/sgi_mipspro.hpp | 29 + external/boost/config/compiler/sunpro_cc.hpp | 147 + external/boost/config/compiler/vacpp.hpp | 120 + external/boost/config/compiler/visualc.hpp | 287 + external/boost/config/no_tr1/cmath.hpp | 28 + external/boost/config/no_tr1/complex.hpp | 28 + external/boost/config/no_tr1/functional.hpp | 28 + external/boost/config/no_tr1/memory.hpp | 28 + external/boost/config/no_tr1/utility.hpp | 28 + external/boost/config/platform/aix.hpp | 33 + external/boost/config/platform/amigaos.hpp | 15 + external/boost/config/platform/beos.hpp | 26 + external/boost/config/platform/bsd.hpp | 86 + external/boost/config/platform/cray.hpp | 18 + external/boost/config/platform/cygwin.hpp | 58 + external/boost/config/platform/hpux.hpp | 87 + external/boost/config/platform/irix.hpp | 31 + external/boost/config/platform/linux.hpp | 103 + external/boost/config/platform/macos.hpp | 87 + external/boost/config/platform/qnxnto.hpp | 31 + external/boost/config/platform/solaris.hpp | 28 + external/boost/config/platform/symbian.hpp | 97 + external/boost/config/platform/vms.hpp | 25 + external/boost/config/platform/vxworks.hpp | 31 + external/boost/config/platform/win32.hpp | 71 + external/boost/config/posix_features.hpp | 95 + external/boost/config/requires_threads.hpp | 92 + .../boost/config/select_compiler_config.hpp | 112 + .../boost/config/select_platform_config.hpp | 105 + .../boost/config/select_stdlib_config.hpp | 85 + external/boost/config/stdlib/dinkumware.hpp | 145 + external/boost/config/stdlib/libcomo.hpp | 69 + external/boost/config/stdlib/libcpp.hpp | 36 + external/boost/config/stdlib/libstdcpp3.hpp | 155 + external/boost/config/stdlib/modena.hpp | 53 + external/boost/config/stdlib/msl.hpp | 81 + external/boost/config/stdlib/roguewave.hpp | 183 + external/boost/config/stdlib/sgi.hpp | 145 + external/boost/config/stdlib/stlport.hpp | 244 + external/boost/config/stdlib/vacpp.hpp | 51 + external/boost/config/suffix.hpp | 704 + external/boost/config/user.hpp | 124 + external/boost/config/warning_disable.hpp | 47 + external/boost/container/container_fwd.hpp | 177 + external/boost/cregex.hpp | 39 + external/boost/cstdint.hpp | 508 + external/boost/cstdlib.hpp | 41 + external/boost/current_function.hpp | 68 + external/boost/date_time/adjust_functors.hpp | 178 + external/boost/date_time/c_time.hpp | 123 + external/boost/date_time/compiler_config.hpp | 169 + .../boost/date_time/constrained_value.hpp | 121 + external/boost/date_time/date.hpp | 208 + .../boost/date_time/date_clock_device.hpp | 77 + external/boost/date_time/date_defs.hpp | 26 + external/boost/date_time/date_duration.hpp | 146 + .../boost/date_time/date_duration_types.hpp | 269 + .../boost/date_time/date_format_simple.hpp | 159 + external/boost/date_time/date_formatting.hpp | 133 + .../date_time/date_formatting_limited.hpp | 121 + .../date_time/date_formatting_locales.hpp | 233 + external/boost/date_time/date_generators.hpp | 509 + external/boost/date_time/date_iterator.hpp | 101 + external/boost/date_time/date_names_put.hpp | 320 + external/boost/date_time/date_parsing.hpp | 316 + external/boost/date_time/dst_rules.hpp | 391 + .../boost/date_time/filetime_functions.hpp | 170 + .../boost/date_time/gregorian/conversion.hpp | 68 + .../boost/date_time/gregorian/formatters.hpp | 162 + .../gregorian/formatters_limited.hpp | 81 + .../date_time/gregorian/greg_calendar.hpp | 48 + .../boost/date_time/gregorian/greg_date.hpp | 136 + .../boost/date_time/gregorian/greg_day.hpp | 57 + .../date_time/gregorian/greg_day_of_year.hpp | 38 + .../date_time/gregorian/greg_duration.hpp | 134 + .../gregorian/greg_duration_types.hpp | 43 + .../boost/date_time/gregorian/greg_facet.hpp | 354 + .../boost/date_time/gregorian/greg_month.hpp | 105 + .../date_time/gregorian/greg_weekday.hpp | 66 + .../boost/date_time/gregorian/greg_year.hpp | 53 + .../boost/date_time/gregorian/greg_ymd.hpp | 33 + .../date_time/gregorian/gregorian_types.hpp | 109 + .../boost/date_time/gregorian/parsers.hpp | 91 + .../boost/date_time/gregorian_calendar.hpp | 70 + .../boost/date_time/gregorian_calendar.ipp | 219 + external/boost/date_time/int_adapter.hpp | 509 + external/boost/date_time/iso_format.hpp | 303 + external/boost/date_time/locale_config.hpp | 31 + .../boost/date_time/microsec_time_clock.hpp | 127 + .../boost/date_time/parse_format_base.hpp | 29 + external/boost/date_time/period.hpp | 377 + .../boost/date_time/posix_time/conversion.hpp | 94 + .../posix_time/date_duration_operators.hpp | 114 + .../posix_time/posix_time_config.hpp | 178 + .../posix_time/posix_time_duration.hpp | 82 + .../posix_time/posix_time_system.hpp | 68 + .../date_time/posix_time/posix_time_types.hpp | 55 + external/boost/date_time/posix_time/ptime.hpp | 65 + .../date_time/posix_time/time_period.hpp | 29 + external/boost/date_time/special_defs.hpp | 25 + external/boost/date_time/time.hpp | 191 + external/boost/date_time/time_clock.hpp | 83 + external/boost/date_time/time_defs.hpp | 43 + external/boost/date_time/time_duration.hpp | 282 + external/boost/date_time/time_iterator.hpp | 52 + .../date_time/time_resolution_traits.hpp | 144 + .../boost/date_time/time_system_counted.hpp | 254 + .../boost/date_time/time_system_split.hpp | 207 + external/boost/date_time/wrapping_int.hpp | 169 + external/boost/date_time/year_month_day.hpp | 45 + external/boost/detail/binary_search.hpp | 216 + external/boost/detail/bitmask.hpp | 47 + external/boost/detail/call_traits.hpp | 164 + external/boost/detail/container_fwd.hpp | 159 + external/boost/detail/endian.hpp | 78 + external/boost/detail/fenv.hpp | 74 + external/boost/detail/indirect_traits.hpp | 487 + external/boost/detail/interlocked.hpp | 163 + .../boost/detail/is_function_ref_tester.hpp | 135 + external/boost/detail/iterator.hpp | 494 + external/boost/detail/lcast_precision.hpp | 184 + external/boost/detail/lightweight_main.hpp | 36 + external/boost/detail/lightweight_mutex.hpp | 22 + external/boost/detail/lightweight_test.hpp | 143 + external/boost/detail/limits.hpp | 449 + .../boost/detail/no_exceptions_support.hpp | 87 + external/boost/detail/ob_call_traits.hpp | 168 + external/boost/detail/reference_content.hpp | 141 + .../boost/detail/scoped_enum_emulation.hpp | 56 + external/boost/detail/sp_typeinfo.hpp | 135 + external/boost/detail/utf8_codecvt_facet.hpp | 190 + external/boost/detail/workaround.hpp | 267 + external/boost/enable_shared_from_this.hpp | 18 + .../exception/current_exception_cast.hpp | 43 + .../exception/detail/attribute_noreturn.hpp | 17 + .../exception/detail/error_info_impl.hpp | 75 + external/boost/exception/detail/type_info.hpp | 83 + external/boost/exception/exception.hpp | 456 + external/boost/exception/get_error_info.hpp | 130 + external/boost/filesystem.hpp | 41 + external/boost/filesystem/config.hpp | 35 + external/boost/filesystem/convenience.hpp | 35 + .../filesystem/detail/utf8_codecvt_facet.hpp | 24 + external/boost/filesystem/fstream.hpp | 35 + external/boost/filesystem/operations.hpp | 35 + external/boost/filesystem/path.hpp | 35 + external/boost/filesystem/v2/config.hpp | 106 + external/boost/filesystem/v2/convenience.hpp | 339 + external/boost/filesystem/v2/fstream.hpp | 613 + external/boost/filesystem/v2/operations.hpp | 1245 + external/boost/filesystem/v2/path.hpp | 1571 ++ external/boost/filesystem/v3/config.hpp | 85 + external/boost/filesystem/v3/convenience.hpp | 74 + external/boost/filesystem/v3/fstream.hpp | 208 + external/boost/filesystem/v3/operations.hpp | 1199 + external/boost/filesystem/v3/path.hpp | 760 + external/boost/filesystem/v3/path_traits.hpp | 247 + external/boost/format.hpp | 59 + external/boost/format/alt_sstream.hpp | 176 + external/boost/format/alt_sstream_impl.hpp | 313 + .../format/detail/compat_workarounds.hpp | 86 + .../boost/format/detail/config_macros.hpp | 97 + .../format/detail/msvc_disambiguater.hpp | 56 + external/boost/format/detail/unset_macros.hpp | 34 + .../format/detail/workarounds_gcc-2_95.hpp | 162 + .../format/detail/workarounds_stlport.hpp | 42 + external/boost/format/exceptions.hpp | 103 + external/boost/format/feed_args.hpp | 277 + external/boost/format/format_class.hpp | 168 + external/boost/format/format_fwd.hpp | 49 + .../boost/format/format_implementation.hpp | 329 + external/boost/format/free_funcs.hpp | 70 + external/boost/format/group.hpp | 684 + external/boost/format/internals.hpp | 201 + external/boost/format/internals_fwd.hpp | 60 + external/boost/format/parsing.hpp | 504 + external/boost/function.hpp | 66 + .../function/detail/function_iterate.hpp | 16 + .../function/detail/gen_maybe_include.pl | 37 + .../boost/function/detail/maybe_include.hpp | 267 + external/boost/function/detail/prologue.hpp | 26 + external/boost/function/function0.hpp | 12 + external/boost/function/function1.hpp | 12 + external/boost/function/function10.hpp | 12 + external/boost/function/function2.hpp | 12 + external/boost/function/function3.hpp | 12 + external/boost/function/function4.hpp | 12 + external/boost/function/function5.hpp | 12 + external/boost/function/function6.hpp | 12 + external/boost/function/function7.hpp | 12 + external/boost/function/function8.hpp | 12 + external/boost/function/function9.hpp | 12 + external/boost/function/function_base.hpp | 910 + external/boost/function/function_fwd.hpp | 70 + external/boost/function/function_template.hpp | 1136 + external/boost/function_equal.hpp | 28 + external/boost/functional/hash.hpp | 7 + .../hash/detail/float_functions.hpp | 246 + .../functional/hash/detail/hash_float.hpp | 101 + .../hash/detail/hash_float_generic.hpp | 91 + .../functional/hash/detail/hash_float_x86.hpp | 56 + .../boost/functional/hash/detail/limits.hpp | 61 + external/boost/functional/hash/extensions.hpp | 286 + external/boost/functional/hash/hash.hpp | 536 + external/boost/functional/hash/hash_fwd.hpp | 40 + external/boost/functional/hash_fwd.hpp | 7 + external/boost/get_pointer.hpp | 33 + external/boost/implicit_cast.hpp | 29 + external/boost/integer.hpp | 257 + external/boost/integer/integer_mask.hpp | 126 + external/boost/integer/static_log2.hpp | 127 + external/boost/integer_fwd.hpp | 164 + external/boost/integer_traits.hpp | 261 + external/boost/interprocess/creation_tags.hpp | 77 + external/boost/interprocess/detail/atomic.hpp | 593 + .../interprocess/detail/config_begin.hpp | 47 + .../boost/interprocess/detail/config_end.hpp | 17 + .../interprocess/detail/os_file_functions.hpp | 696 + .../detail/os_thread_functions.hpp | 211 + .../detail/posix_time_types_wrk.hpp | 42 + .../interprocess/detail/tmp_dir_helpers.hpp | 174 + .../boost/interprocess/detail/win32_api.hpp | 1766 ++ .../boost/interprocess/detail/workaround.hpp | 148 + external/boost/interprocess/errors.hpp | 236 + external/boost/interprocess/exceptions.hpp | 150 + .../boost/interprocess/interprocess_fwd.hpp | 418 + external/boost/interprocess/permissions.hpp | 132 + .../interprocess/streams/bufferstream.hpp | 444 + .../sync/interprocess_semaphore.hpp | 145 + .../sync/posix/ptime_to_timespec.hpp | 38 + .../interprocess/sync/posix/semaphore.hpp | 63 + .../sync/posix/semaphore_wrapper.hpp | 211 + .../interprocess/sync/spin/semaphore.hpp | 110 + external/boost/intrusive_ptr.hpp | 18 + external/boost/io/detail/quoted_manip.hpp | 190 + external/boost/io/ios_state.hpp | 439 + external/boost/io_fwd.hpp | 67 + external/boost/is_placeholder.hpp | 31 + external/boost/iterator.hpp | 59 + external/boost/iterator/detail/config_def.hpp | 137 + .../boost/iterator/detail/config_undef.hpp | 25 + external/boost/iterator/detail/enable_if.hpp | 86 + .../detail/facade_iterator_category.hpp | 200 + .../iterator/detail/minimum_category.hpp | 116 + external/boost/iterator/interoperable.hpp | 50 + external/boost/iterator/iterator_adaptor.hpp | 365 + .../boost/iterator/iterator_categories.hpp | 188 + external/boost/iterator/iterator_concepts.hpp | 284 + external/boost/iterator/iterator_facade.hpp | 878 + external/boost/iterator/iterator_traits.hpp | 92 + external/boost/iterator/reverse_iterator.hpp | 69 + external/boost/lexical_cast.hpp | 2195 ++ external/boost/limits.hpp | 146 + external/boost/make_shared.hpp | 17 + .../boost/math/policies/error_handling.hpp | 657 + external/boost/math/policies/policy.hpp | 982 + .../special_functions/detail/fp_traits.hpp | 570 + .../special_functions/detail/round_fwd.hpp | 80 + .../math/special_functions/fpclassify.hpp | 533 + .../boost/math/special_functions/math_fwd.hpp | 1070 + .../boost/math/special_functions/round.hpp | 92 + .../boost/math/special_functions/sign.hpp | 145 + external/boost/math/tools/config.hpp | 321 + external/boost/math/tools/precision.hpp | 337 + external/boost/math/tools/promotion.hpp | 150 + external/boost/math/tools/real_cast.hpp | 29 + external/boost/math/tools/user.hpp | 97 + external/boost/mem_fn.hpp | 24 + external/boost/memory_order.hpp | 53 + external/boost/move/move.hpp | 1222 + external/boost/mpl/O1_size.hpp | 40 + external/boost/mpl/O1_size_fwd.hpp | 24 + external/boost/mpl/advance.hpp | 76 + external/boost/mpl/advance_fwd.hpp | 28 + external/boost/mpl/always.hpp | 39 + external/boost/mpl/and.hpp | 60 + external/boost/mpl/apply.hpp | 229 + external/boost/mpl/apply_fwd.hpp | 107 + external/boost/mpl/apply_wrap.hpp | 234 + external/boost/mpl/arg.hpp | 131 + external/boost/mpl/arg_fwd.hpp | 28 + external/boost/mpl/assert.hpp | 370 + external/boost/mpl/at.hpp | 52 + external/boost/mpl/at_fwd.hpp | 24 + external/boost/mpl/aux_/O1_size_impl.hpp | 87 + external/boost/mpl/aux_/adl_barrier.hpp | 48 + external/boost/mpl/aux_/advance_backward.hpp | 128 + external/boost/mpl/aux_/advance_forward.hpp | 127 + external/boost/mpl/aux_/arg_typedef.hpp | 31 + external/boost/mpl/aux_/arithmetic_op.hpp | 92 + external/boost/mpl/aux_/arity.hpp | 39 + external/boost/mpl/aux_/arity_spec.hpp | 67 + external/boost/mpl/aux_/at_impl.hpp | 45 + external/boost/mpl/aux_/begin_end_impl.hpp | 101 + external/boost/mpl/aux_/clear_impl.hpp | 35 + external/boost/mpl/aux_/common_name_wknd.hpp | 34 + external/boost/mpl/aux_/comparison_op.hpp | 83 + external/boost/mpl/aux_/config/adl.hpp | 40 + external/boost/mpl/aux_/config/arrays.hpp | 30 + external/boost/mpl/aux_/config/bcc.hpp | 28 + external/boost/mpl/aux_/config/bind.hpp | 33 + external/boost/mpl/aux_/config/compiler.hpp | 66 + external/boost/mpl/aux_/config/ctps.hpp | 30 + .../mpl/aux_/config/dmc_ambiguous_ctps.hpp | 27 + external/boost/mpl/aux_/config/dtp.hpp | 46 + external/boost/mpl/aux_/config/eti.hpp | 47 + external/boost/mpl/aux_/config/forwarding.hpp | 27 + external/boost/mpl/aux_/config/gcc.hpp | 23 + external/boost/mpl/aux_/config/has_apply.hpp | 32 + external/boost/mpl/aux_/config/has_xxx.hpp | 34 + external/boost/mpl/aux_/config/integral.hpp | 38 + external/boost/mpl/aux_/config/intel.hpp | 21 + external/boost/mpl/aux_/config/lambda.hpp | 32 + external/boost/mpl/aux_/config/msvc.hpp | 21 + .../boost/mpl/aux_/config/msvc_typename.hpp | 26 + external/boost/mpl/aux_/config/nttp.hpp | 41 + .../mpl/aux_/config/overload_resolution.hpp | 29 + external/boost/mpl/aux_/config/pp_counter.hpp | 26 + .../boost/mpl/aux_/config/preprocessor.hpp | 39 + .../boost/mpl/aux_/config/static_constant.hpp | 25 + external/boost/mpl/aux_/config/ttp.hpp | 41 + external/boost/mpl/aux_/config/typeof.hpp | 38 + .../mpl/aux_/config/use_preprocessed.hpp | 19 + external/boost/mpl/aux_/config/workaround.hpp | 19 + external/boost/mpl/aux_/contains_impl.hpp | 61 + external/boost/mpl/aux_/count_args.hpp | 105 + external/boost/mpl/aux_/find_if_pred.hpp | 31 + external/boost/mpl/aux_/fold_impl.hpp | 43 + external/boost/mpl/aux_/fold_impl_body.hpp | 365 + external/boost/mpl/aux_/full_lambda.hpp | 354 + external/boost/mpl/aux_/has_apply.hpp | 32 + external/boost/mpl/aux_/has_begin.hpp | 23 + external/boost/mpl/aux_/has_rebind.hpp | 99 + external/boost/mpl/aux_/has_size.hpp | 23 + external/boost/mpl/aux_/has_tag.hpp | 23 + external/boost/mpl/aux_/has_type.hpp | 23 + .../boost/mpl/aux_/include_preprocessed.hpp | 42 + .../boost/mpl/aux_/inserter_algorithm.hpp | 159 + external/boost/mpl/aux_/integral_wrapper.hpp | 93 + external/boost/mpl/aux_/is_msvc_eti_arg.hpp | 64 + external/boost/mpl/aux_/iter_apply.hpp | 47 + external/boost/mpl/aux_/iter_fold_if_impl.hpp | 210 + external/boost/mpl/aux_/iter_fold_impl.hpp | 42 + .../boost/mpl/aux_/lambda_arity_param.hpp | 25 + external/boost/mpl/aux_/lambda_no_ctps.hpp | 193 + external/boost/mpl/aux_/lambda_spec.hpp | 49 + external/boost/mpl/aux_/lambda_support.hpp | 169 + external/boost/mpl/aux_/largest_int.hpp | 63 + external/boost/mpl/aux_/logical_op.hpp | 165 + external/boost/mpl/aux_/msvc_dtw.hpp | 68 + external/boost/mpl/aux_/msvc_eti_base.hpp | 77 + external/boost/mpl/aux_/msvc_is_class.hpp | 58 + external/boost/mpl/aux_/msvc_never_true.hpp | 34 + external/boost/mpl/aux_/msvc_type.hpp | 62 + external/boost/mpl/aux_/na.hpp | 95 + external/boost/mpl/aux_/na_assert.hpp | 34 + external/boost/mpl/aux_/na_fwd.hpp | 31 + external/boost/mpl/aux_/na_spec.hpp | 175 + external/boost/mpl/aux_/nested_type_wknd.hpp | 48 + external/boost/mpl/aux_/nttp_decl.hpp | 35 + .../boost/mpl/aux_/numeric_cast_utils.hpp | 77 + external/boost/mpl/aux_/numeric_op.hpp | 315 + .../preprocessed/bcc/advance_backward.hpp | 97 + .../aux_/preprocessed/bcc/advance_forward.hpp | 97 + .../boost/mpl/aux_/preprocessed/bcc/and.hpp | 69 + .../boost/mpl/aux_/preprocessed/bcc/apply.hpp | 169 + .../mpl/aux_/preprocessed/bcc/apply_fwd.hpp | 52 + .../mpl/aux_/preprocessed/bcc/apply_wrap.hpp | 461 + .../boost/mpl/aux_/preprocessed/bcc/arg.hpp | 117 + .../mpl/aux_/preprocessed/bcc/basic_bind.hpp | 300 + .../boost/mpl/aux_/preprocessed/bcc/bind.hpp | 397 + .../mpl/aux_/preprocessed/bcc/bind_fwd.hpp | 46 + .../mpl/aux_/preprocessed/bcc/bitand.hpp | 147 + .../boost/mpl/aux_/preprocessed/bcc/bitor.hpp | 147 + .../mpl/aux_/preprocessed/bcc/bitxor.hpp | 147 + .../boost/mpl/aux_/preprocessed/bcc/deque.hpp | 323 + .../mpl/aux_/preprocessed/bcc/divides.hpp | 146 + .../mpl/aux_/preprocessed/bcc/equal_to.hpp | 94 + .../mpl/aux_/preprocessed/bcc/fold_impl.hpp | 180 + .../mpl/aux_/preprocessed/bcc/full_lambda.hpp | 558 + .../mpl/aux_/preprocessed/bcc/greater.hpp | 94 + .../aux_/preprocessed/bcc/greater_equal.hpp | 94 + .../mpl/aux_/preprocessed/bcc/inherit.hpp | 139 + .../preprocessed/bcc/iter_fold_if_impl.hpp | 133 + .../aux_/preprocessed/bcc/iter_fold_impl.hpp | 180 + .../aux_/preprocessed/bcc/lambda_no_ctps.hpp | 229 + .../boost/mpl/aux_/preprocessed/bcc/less.hpp | 94 + .../mpl/aux_/preprocessed/bcc/less_equal.hpp | 94 + .../boost/mpl/aux_/preprocessed/bcc/list.hpp | 323 + .../mpl/aux_/preprocessed/bcc/list_c.hpp | 328 + .../boost/mpl/aux_/preprocessed/bcc/map.hpp | 323 + .../boost/mpl/aux_/preprocessed/bcc/minus.hpp | 146 + .../mpl/aux_/preprocessed/bcc/modulus.hpp | 101 + .../aux_/preprocessed/bcc/not_equal_to.hpp | 94 + .../boost/mpl/aux_/preprocessed/bcc/or.hpp | 69 + .../aux_/preprocessed/bcc/placeholders.hpp | 105 + .../boost/mpl/aux_/preprocessed/bcc/plus.hpp | 146 + .../boost/mpl/aux_/preprocessed/bcc/quote.hpp | 119 + .../preprocessed/bcc/reverse_fold_impl.hpp | 295 + .../bcc/reverse_iter_fold_impl.hpp | 295 + .../boost/mpl/aux_/preprocessed/bcc/set.hpp | 323 + .../boost/mpl/aux_/preprocessed/bcc/set_c.hpp | 328 + .../mpl/aux_/preprocessed/bcc/shift_left.hpp | 99 + .../mpl/aux_/preprocessed/bcc/shift_right.hpp | 99 + .../aux_/preprocessed/bcc/template_arity.hpp | 40 + .../boost/mpl/aux_/preprocessed/bcc/times.hpp | 146 + .../mpl/aux_/preprocessed/bcc/unpack_args.hpp | 97 + .../mpl/aux_/preprocessed/bcc/vector.hpp | 323 + .../mpl/aux_/preprocessed/bcc/vector_c.hpp | 309 + .../preprocessed/bcc551/advance_backward.hpp | 97 + .../preprocessed/bcc551/advance_forward.hpp | 97 + .../mpl/aux_/preprocessed/bcc551/and.hpp | 69 + .../mpl/aux_/preprocessed/bcc551/apply.hpp | 169 + .../aux_/preprocessed/bcc551/apply_fwd.hpp | 52 + .../aux_/preprocessed/bcc551/apply_wrap.hpp | 456 + .../mpl/aux_/preprocessed/bcc551/arg.hpp | 123 + .../aux_/preprocessed/bcc551/basic_bind.hpp | 306 + .../mpl/aux_/preprocessed/bcc551/bind.hpp | 403 + .../mpl/aux_/preprocessed/bcc551/bind_fwd.hpp | 46 + .../mpl/aux_/preprocessed/bcc551/bitand.hpp | 147 + .../mpl/aux_/preprocessed/bcc551/bitor.hpp | 147 + .../mpl/aux_/preprocessed/bcc551/bitxor.hpp | 147 + .../mpl/aux_/preprocessed/bcc551/deque.hpp | 323 + .../mpl/aux_/preprocessed/bcc551/divides.hpp | 146 + .../mpl/aux_/preprocessed/bcc551/equal_to.hpp | 94 + .../aux_/preprocessed/bcc551/fold_impl.hpp | 180 + .../aux_/preprocessed/bcc551/full_lambda.hpp | 558 + .../mpl/aux_/preprocessed/bcc551/greater.hpp | 94 + .../preprocessed/bcc551/greater_equal.hpp | 94 + .../mpl/aux_/preprocessed/bcc551/inherit.hpp | 141 + .../preprocessed/bcc551/iter_fold_if_impl.hpp | 133 + .../preprocessed/bcc551/iter_fold_impl.hpp | 180 + .../preprocessed/bcc551/lambda_no_ctps.hpp | 229 + .../mpl/aux_/preprocessed/bcc551/less.hpp | 94 + .../aux_/preprocessed/bcc551/less_equal.hpp | 94 + .../mpl/aux_/preprocessed/bcc551/list.hpp | 323 + .../mpl/aux_/preprocessed/bcc551/list_c.hpp | 328 + .../mpl/aux_/preprocessed/bcc551/map.hpp | 323 + .../mpl/aux_/preprocessed/bcc551/minus.hpp | 146 + .../mpl/aux_/preprocessed/bcc551/modulus.hpp | 101 + .../aux_/preprocessed/bcc551/not_equal_to.hpp | 94 + .../boost/mpl/aux_/preprocessed/bcc551/or.hpp | 69 + .../aux_/preprocessed/bcc551/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/bcc551/plus.hpp | 146 + .../mpl/aux_/preprocessed/bcc551/quote.hpp | 11 + .../preprocessed/bcc551/reverse_fold_impl.hpp | 295 + .../bcc551/reverse_iter_fold_impl.hpp | 295 + .../mpl/aux_/preprocessed/bcc551/set.hpp | 323 + .../mpl/aux_/preprocessed/bcc551/set_c.hpp | 328 + .../aux_/preprocessed/bcc551/shift_left.hpp | 99 + .../aux_/preprocessed/bcc551/shift_right.hpp | 99 + .../preprocessed/bcc551/template_arity.hpp | 40 + .../mpl/aux_/preprocessed/bcc551/times.hpp | 146 + .../aux_/preprocessed/bcc551/unpack_args.hpp | 97 + .../mpl/aux_/preprocessed/bcc551/vector.hpp | 323 + .../mpl/aux_/preprocessed/bcc551/vector_c.hpp | 309 + .../bcc_pre590/advance_backward.hpp | 97 + .../bcc_pre590/advance_forward.hpp | 97 + .../mpl/aux_/preprocessed/bcc_pre590/and.hpp | 69 + .../aux_/preprocessed/bcc_pre590/apply.hpp | 169 + .../preprocessed/bcc_pre590/apply_fwd.hpp | 52 + .../preprocessed/bcc_pre590/apply_wrap.hpp | 456 + .../mpl/aux_/preprocessed/bcc_pre590/arg.hpp | 117 + .../preprocessed/bcc_pre590/basic_bind.hpp | 300 + .../mpl/aux_/preprocessed/bcc_pre590/bind.hpp | 397 + .../aux_/preprocessed/bcc_pre590/bind_fwd.hpp | 46 + .../aux_/preprocessed/bcc_pre590/bitand.hpp | 147 + .../aux_/preprocessed/bcc_pre590/bitor.hpp | 147 + .../aux_/preprocessed/bcc_pre590/bitxor.hpp | 147 + .../aux_/preprocessed/bcc_pre590/deque.hpp | 323 + .../aux_/preprocessed/bcc_pre590/divides.hpp | 146 + .../aux_/preprocessed/bcc_pre590/equal_to.hpp | 94 + .../preprocessed/bcc_pre590/fold_impl.hpp | 180 + .../preprocessed/bcc_pre590/full_lambda.hpp | 558 + .../aux_/preprocessed/bcc_pre590/greater.hpp | 94 + .../preprocessed/bcc_pre590/greater_equal.hpp | 94 + .../aux_/preprocessed/bcc_pre590/inherit.hpp | 139 + .../bcc_pre590/iter_fold_if_impl.hpp | 133 + .../bcc_pre590/iter_fold_impl.hpp | 180 + .../bcc_pre590/lambda_no_ctps.hpp | 229 + .../mpl/aux_/preprocessed/bcc_pre590/less.hpp | 94 + .../preprocessed/bcc_pre590/less_equal.hpp | 94 + .../mpl/aux_/preprocessed/bcc_pre590/list.hpp | 323 + .../aux_/preprocessed/bcc_pre590/list_c.hpp | 328 + .../mpl/aux_/preprocessed/bcc_pre590/map.hpp | 323 + .../aux_/preprocessed/bcc_pre590/minus.hpp | 146 + .../aux_/preprocessed/bcc_pre590/modulus.hpp | 101 + .../preprocessed/bcc_pre590/not_equal_to.hpp | 94 + .../mpl/aux_/preprocessed/bcc_pre590/or.hpp | 69 + .../preprocessed/bcc_pre590/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/bcc_pre590/plus.hpp | 146 + .../aux_/preprocessed/bcc_pre590/quote.hpp | 11 + .../bcc_pre590/reverse_fold_impl.hpp | 295 + .../bcc_pre590/reverse_iter_fold_impl.hpp | 295 + .../mpl/aux_/preprocessed/bcc_pre590/set.hpp | 323 + .../aux_/preprocessed/bcc_pre590/set_c.hpp | 328 + .../preprocessed/bcc_pre590/shift_left.hpp | 99 + .../preprocessed/bcc_pre590/shift_right.hpp | 99 + .../bcc_pre590/template_arity.hpp | 40 + .../aux_/preprocessed/bcc_pre590/times.hpp | 146 + .../preprocessed/bcc_pre590/unpack_args.hpp | 97 + .../aux_/preprocessed/bcc_pre590/vector.hpp | 323 + .../aux_/preprocessed/bcc_pre590/vector_c.hpp | 309 + .../preprocessed/dmc/advance_backward.hpp | 97 + .../aux_/preprocessed/dmc/advance_forward.hpp | 97 + .../boost/mpl/aux_/preprocessed/dmc/and.hpp | 69 + .../boost/mpl/aux_/preprocessed/dmc/apply.hpp | 169 + .../mpl/aux_/preprocessed/dmc/apply_fwd.hpp | 52 + .../mpl/aux_/preprocessed/dmc/apply_wrap.hpp | 84 + .../boost/mpl/aux_/preprocessed/dmc/arg.hpp | 123 + .../mpl/aux_/preprocessed/dmc/basic_bind.hpp | 406 + .../boost/mpl/aux_/preprocessed/dmc/bind.hpp | 515 + .../mpl/aux_/preprocessed/dmc/bind_fwd.hpp | 53 + .../mpl/aux_/preprocessed/dmc/bitand.hpp | 147 + .../boost/mpl/aux_/preprocessed/dmc/bitor.hpp | 147 + .../mpl/aux_/preprocessed/dmc/bitxor.hpp | 147 + .../boost/mpl/aux_/preprocessed/dmc/deque.hpp | 323 + .../mpl/aux_/preprocessed/dmc/divides.hpp | 146 + .../mpl/aux_/preprocessed/dmc/equal_to.hpp | 94 + .../mpl/aux_/preprocessed/dmc/fold_impl.hpp | 180 + .../mpl/aux_/preprocessed/dmc/full_lambda.hpp | 536 + .../mpl/aux_/preprocessed/dmc/greater.hpp | 94 + .../aux_/preprocessed/dmc/greater_equal.hpp | 94 + .../mpl/aux_/preprocessed/dmc/inherit.hpp | 141 + .../preprocessed/dmc/iter_fold_if_impl.hpp | 133 + .../aux_/preprocessed/dmc/iter_fold_impl.hpp | 180 + .../aux_/preprocessed/dmc/lambda_no_ctps.hpp | 229 + .../boost/mpl/aux_/preprocessed/dmc/less.hpp | 94 + .../mpl/aux_/preprocessed/dmc/less_equal.hpp | 94 + .../boost/mpl/aux_/preprocessed/dmc/list.hpp | 323 + .../mpl/aux_/preprocessed/dmc/list_c.hpp | 328 + .../boost/mpl/aux_/preprocessed/dmc/map.hpp | 323 + .../boost/mpl/aux_/preprocessed/dmc/minus.hpp | 146 + .../mpl/aux_/preprocessed/dmc/modulus.hpp | 101 + .../aux_/preprocessed/dmc/not_equal_to.hpp | 94 + .../boost/mpl/aux_/preprocessed/dmc/or.hpp | 69 + .../aux_/preprocessed/dmc/placeholders.hpp | 105 + .../boost/mpl/aux_/preprocessed/dmc/plus.hpp | 146 + .../boost/mpl/aux_/preprocessed/dmc/quote.hpp | 123 + .../preprocessed/dmc/reverse_fold_impl.hpp | 231 + .../dmc/reverse_iter_fold_impl.hpp | 231 + .../boost/mpl/aux_/preprocessed/dmc/set.hpp | 323 + .../boost/mpl/aux_/preprocessed/dmc/set_c.hpp | 328 + .../mpl/aux_/preprocessed/dmc/shift_left.hpp | 99 + .../mpl/aux_/preprocessed/dmc/shift_right.hpp | 99 + .../aux_/preprocessed/dmc/template_arity.hpp | 11 + .../boost/mpl/aux_/preprocessed/dmc/times.hpp | 146 + .../mpl/aux_/preprocessed/dmc/unpack_args.hpp | 94 + .../mpl/aux_/preprocessed/dmc/vector.hpp | 323 + .../mpl/aux_/preprocessed/dmc/vector_c.hpp | 309 + .../preprocessed/gcc/advance_backward.hpp | 97 + .../aux_/preprocessed/gcc/advance_forward.hpp | 97 + .../boost/mpl/aux_/preprocessed/gcc/and.hpp | 69 + .../boost/mpl/aux_/preprocessed/gcc/apply.hpp | 169 + .../mpl/aux_/preprocessed/gcc/apply_fwd.hpp | 52 + .../mpl/aux_/preprocessed/gcc/apply_wrap.hpp | 84 + .../boost/mpl/aux_/preprocessed/gcc/arg.hpp | 123 + .../mpl/aux_/preprocessed/gcc/basic_bind.hpp | 440 + .../boost/mpl/aux_/preprocessed/gcc/bind.hpp | 561 + .../mpl/aux_/preprocessed/gcc/bind_fwd.hpp | 52 + .../mpl/aux_/preprocessed/gcc/bitand.hpp | 147 + .../boost/mpl/aux_/preprocessed/gcc/bitor.hpp | 147 + .../mpl/aux_/preprocessed/gcc/bitxor.hpp | 147 + .../boost/mpl/aux_/preprocessed/gcc/deque.hpp | 323 + .../mpl/aux_/preprocessed/gcc/divides.hpp | 146 + .../mpl/aux_/preprocessed/gcc/equal_to.hpp | 94 + .../mpl/aux_/preprocessed/gcc/fold_impl.hpp | 180 + .../mpl/aux_/preprocessed/gcc/full_lambda.hpp | 558 + .../mpl/aux_/preprocessed/gcc/greater.hpp | 94 + .../aux_/preprocessed/gcc/greater_equal.hpp | 94 + .../mpl/aux_/preprocessed/gcc/inherit.hpp | 141 + .../preprocessed/gcc/iter_fold_if_impl.hpp | 133 + .../aux_/preprocessed/gcc/iter_fold_impl.hpp | 180 + .../aux_/preprocessed/gcc/lambda_no_ctps.hpp | 229 + .../boost/mpl/aux_/preprocessed/gcc/less.hpp | 94 + .../mpl/aux_/preprocessed/gcc/less_equal.hpp | 94 + .../boost/mpl/aux_/preprocessed/gcc/list.hpp | 323 + .../mpl/aux_/preprocessed/gcc/list_c.hpp | 328 + .../boost/mpl/aux_/preprocessed/gcc/map.hpp | 323 + .../boost/mpl/aux_/preprocessed/gcc/minus.hpp | 146 + .../mpl/aux_/preprocessed/gcc/modulus.hpp | 101 + .../aux_/preprocessed/gcc/not_equal_to.hpp | 94 + .../boost/mpl/aux_/preprocessed/gcc/or.hpp | 69 + .../aux_/preprocessed/gcc/placeholders.hpp | 105 + .../boost/mpl/aux_/preprocessed/gcc/plus.hpp | 146 + .../boost/mpl/aux_/preprocessed/gcc/quote.hpp | 123 + .../preprocessed/gcc/reverse_fold_impl.hpp | 231 + .../gcc/reverse_iter_fold_impl.hpp | 231 + .../boost/mpl/aux_/preprocessed/gcc/set.hpp | 323 + .../boost/mpl/aux_/preprocessed/gcc/set_c.hpp | 328 + .../mpl/aux_/preprocessed/gcc/shift_left.hpp | 99 + .../mpl/aux_/preprocessed/gcc/shift_right.hpp | 99 + .../aux_/preprocessed/gcc/template_arity.hpp | 97 + .../boost/mpl/aux_/preprocessed/gcc/times.hpp | 146 + .../mpl/aux_/preprocessed/gcc/unpack_args.hpp | 94 + .../mpl/aux_/preprocessed/gcc/vector.hpp | 323 + .../mpl/aux_/preprocessed/gcc/vector_c.hpp | 309 + .../preprocessed/msvc60/advance_backward.hpp | 132 + .../preprocessed/msvc60/advance_forward.hpp | 132 + .../mpl/aux_/preprocessed/msvc60/and.hpp | 73 + .../mpl/aux_/preprocessed/msvc60/apply.hpp | 166 + .../aux_/preprocessed/msvc60/apply_fwd.hpp | 46 + .../aux_/preprocessed/msvc60/apply_wrap.hpp | 247 + .../mpl/aux_/preprocessed/msvc60/arg.hpp | 123 + .../aux_/preprocessed/msvc60/basic_bind.hpp | 328 + .../mpl/aux_/preprocessed/msvc60/bind.hpp | 432 + .../mpl/aux_/preprocessed/msvc60/bind_fwd.hpp | 46 + .../mpl/aux_/preprocessed/msvc60/bitand.hpp | 149 + .../mpl/aux_/preprocessed/msvc60/bitor.hpp | 149 + .../mpl/aux_/preprocessed/msvc60/bitxor.hpp | 149 + .../mpl/aux_/preprocessed/msvc60/deque.hpp | 556 + .../mpl/aux_/preprocessed/msvc60/divides.hpp | 148 + .../mpl/aux_/preprocessed/msvc60/equal_to.hpp | 102 + .../aux_/preprocessed/msvc60/fold_impl.hpp | 293 + .../aux_/preprocessed/msvc60/full_lambda.hpp | 554 + .../mpl/aux_/preprocessed/msvc60/greater.hpp | 102 + .../preprocessed/msvc60/greater_equal.hpp | 102 + .../mpl/aux_/preprocessed/msvc60/inherit.hpp | 166 + .../preprocessed/msvc60/iter_fold_if_impl.hpp | 133 + .../preprocessed/msvc60/iter_fold_impl.hpp | 293 + .../preprocessed/msvc60/lambda_no_ctps.hpp | 229 + .../mpl/aux_/preprocessed/msvc60/less.hpp | 102 + .../aux_/preprocessed/msvc60/less_equal.hpp | 102 + .../mpl/aux_/preprocessed/msvc60/list.hpp | 556 + .../mpl/aux_/preprocessed/msvc60/list_c.hpp | 534 + .../mpl/aux_/preprocessed/msvc60/map.hpp | 556 + .../mpl/aux_/preprocessed/msvc60/minus.hpp | 148 + .../mpl/aux_/preprocessed/msvc60/modulus.hpp | 115 + .../aux_/preprocessed/msvc60/not_equal_to.hpp | 102 + .../boost/mpl/aux_/preprocessed/msvc60/or.hpp | 73 + .../aux_/preprocessed/msvc60/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/msvc60/plus.hpp | 148 + .../mpl/aux_/preprocessed/msvc60/quote.hpp | 11 + .../preprocessed/msvc60/reverse_fold_impl.hpp | 343 + .../msvc60/reverse_iter_fold_impl.hpp | 343 + .../mpl/aux_/preprocessed/msvc60/set.hpp | 556 + .../mpl/aux_/preprocessed/msvc60/set_c.hpp | 534 + .../aux_/preprocessed/msvc60/shift_left.hpp | 114 + .../aux_/preprocessed/msvc60/shift_right.hpp | 114 + .../preprocessed/msvc60/template_arity.hpp | 46 + .../mpl/aux_/preprocessed/msvc60/times.hpp | 148 + .../aux_/preprocessed/msvc60/unpack_args.hpp | 109 + .../mpl/aux_/preprocessed/msvc60/vector.hpp | 556 + .../mpl/aux_/preprocessed/msvc60/vector_c.hpp | 534 + .../preprocessed/msvc70/advance_backward.hpp | 97 + .../preprocessed/msvc70/advance_forward.hpp | 97 + .../mpl/aux_/preprocessed/msvc70/and.hpp | 71 + .../mpl/aux_/preprocessed/msvc70/apply.hpp | 160 + .../aux_/preprocessed/msvc70/apply_fwd.hpp | 46 + .../aux_/preprocessed/msvc70/apply_wrap.hpp | 138 + .../mpl/aux_/preprocessed/msvc70/arg.hpp | 123 + .../aux_/preprocessed/msvc70/basic_bind.hpp | 328 + .../mpl/aux_/preprocessed/msvc70/bind.hpp | 432 + .../mpl/aux_/preprocessed/msvc70/bind_fwd.hpp | 46 + .../mpl/aux_/preprocessed/msvc70/bitand.hpp | 151 + .../mpl/aux_/preprocessed/msvc70/bitor.hpp | 151 + .../mpl/aux_/preprocessed/msvc70/bitxor.hpp | 151 + .../mpl/aux_/preprocessed/msvc70/deque.hpp | 556 + .../mpl/aux_/preprocessed/msvc70/divides.hpp | 150 + .../mpl/aux_/preprocessed/msvc70/equal_to.hpp | 102 + .../aux_/preprocessed/msvc70/fold_impl.hpp | 245 + .../aux_/preprocessed/msvc70/full_lambda.hpp | 554 + .../mpl/aux_/preprocessed/msvc70/greater.hpp | 102 + .../preprocessed/msvc70/greater_equal.hpp | 102 + .../mpl/aux_/preprocessed/msvc70/inherit.hpp | 166 + .../preprocessed/msvc70/iter_fold_if_impl.hpp | 133 + .../preprocessed/msvc70/iter_fold_impl.hpp | 245 + .../preprocessed/msvc70/lambda_no_ctps.hpp | 229 + .../mpl/aux_/preprocessed/msvc70/less.hpp | 102 + .../aux_/preprocessed/msvc70/less_equal.hpp | 102 + .../mpl/aux_/preprocessed/msvc70/list.hpp | 556 + .../mpl/aux_/preprocessed/msvc70/list_c.hpp | 534 + .../mpl/aux_/preprocessed/msvc70/map.hpp | 556 + .../mpl/aux_/preprocessed/msvc70/minus.hpp | 150 + .../mpl/aux_/preprocessed/msvc70/modulus.hpp | 115 + .../aux_/preprocessed/msvc70/not_equal_to.hpp | 102 + .../boost/mpl/aux_/preprocessed/msvc70/or.hpp | 71 + .../aux_/preprocessed/msvc70/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/msvc70/plus.hpp | 150 + .../mpl/aux_/preprocessed/msvc70/quote.hpp | 116 + .../preprocessed/msvc70/reverse_fold_impl.hpp | 295 + .../msvc70/reverse_iter_fold_impl.hpp | 295 + .../mpl/aux_/preprocessed/msvc70/set.hpp | 556 + .../mpl/aux_/preprocessed/msvc70/set_c.hpp | 534 + .../aux_/preprocessed/msvc70/shift_left.hpp | 114 + .../aux_/preprocessed/msvc70/shift_right.hpp | 114 + .../preprocessed/msvc70/template_arity.hpp | 46 + .../mpl/aux_/preprocessed/msvc70/times.hpp | 150 + .../aux_/preprocessed/msvc70/unpack_args.hpp | 109 + .../mpl/aux_/preprocessed/msvc70/vector.hpp | 556 + .../mpl/aux_/preprocessed/msvc70/vector_c.hpp | 534 + .../preprocessed/mwcw/advance_backward.hpp | 97 + .../preprocessed/mwcw/advance_forward.hpp | 97 + .../boost/mpl/aux_/preprocessed/mwcw/and.hpp | 69 + .../mpl/aux_/preprocessed/mwcw/apply.hpp | 169 + .../mpl/aux_/preprocessed/mwcw/apply_fwd.hpp | 52 + .../mpl/aux_/preprocessed/mwcw/apply_wrap.hpp | 456 + .../boost/mpl/aux_/preprocessed/mwcw/arg.hpp | 123 + .../mpl/aux_/preprocessed/mwcw/basic_bind.hpp | 440 + .../boost/mpl/aux_/preprocessed/mwcw/bind.hpp | 561 + .../mpl/aux_/preprocessed/mwcw/bind_fwd.hpp | 52 + .../mpl/aux_/preprocessed/mwcw/bitand.hpp | 147 + .../mpl/aux_/preprocessed/mwcw/bitor.hpp | 147 + .../mpl/aux_/preprocessed/mwcw/bitxor.hpp | 147 + .../mpl/aux_/preprocessed/mwcw/deque.hpp | 323 + .../mpl/aux_/preprocessed/mwcw/divides.hpp | 146 + .../mpl/aux_/preprocessed/mwcw/equal_to.hpp | 94 + .../mpl/aux_/preprocessed/mwcw/fold_impl.hpp | 180 + .../aux_/preprocessed/mwcw/full_lambda.hpp | 554 + .../mpl/aux_/preprocessed/mwcw/greater.hpp | 94 + .../aux_/preprocessed/mwcw/greater_equal.hpp | 94 + .../mpl/aux_/preprocessed/mwcw/inherit.hpp | 141 + .../preprocessed/mwcw/iter_fold_if_impl.hpp | 133 + .../aux_/preprocessed/mwcw/iter_fold_impl.hpp | 180 + .../aux_/preprocessed/mwcw/lambda_no_ctps.hpp | 229 + .../boost/mpl/aux_/preprocessed/mwcw/less.hpp | 94 + .../mpl/aux_/preprocessed/mwcw/less_equal.hpp | 94 + .../boost/mpl/aux_/preprocessed/mwcw/list.hpp | 323 + .../mpl/aux_/preprocessed/mwcw/list_c.hpp | 328 + .../boost/mpl/aux_/preprocessed/mwcw/map.hpp | 323 + .../mpl/aux_/preprocessed/mwcw/minus.hpp | 146 + .../mpl/aux_/preprocessed/mwcw/modulus.hpp | 101 + .../aux_/preprocessed/mwcw/not_equal_to.hpp | 94 + .../boost/mpl/aux_/preprocessed/mwcw/or.hpp | 69 + .../aux_/preprocessed/mwcw/placeholders.hpp | 105 + .../boost/mpl/aux_/preprocessed/mwcw/plus.hpp | 146 + .../mpl/aux_/preprocessed/mwcw/quote.hpp | 123 + .../preprocessed/mwcw/reverse_fold_impl.hpp | 231 + .../mwcw/reverse_iter_fold_impl.hpp | 231 + .../boost/mpl/aux_/preprocessed/mwcw/set.hpp | 323 + .../mpl/aux_/preprocessed/mwcw/set_c.hpp | 328 + .../mpl/aux_/preprocessed/mwcw/shift_left.hpp | 99 + .../aux_/preprocessed/mwcw/shift_right.hpp | 99 + .../aux_/preprocessed/mwcw/template_arity.hpp | 11 + .../mpl/aux_/preprocessed/mwcw/times.hpp | 146 + .../aux_/preprocessed/mwcw/unpack_args.hpp | 94 + .../mpl/aux_/preprocessed/mwcw/vector.hpp | 323 + .../mpl/aux_/preprocessed/mwcw/vector_c.hpp | 309 + .../preprocessed/no_ctps/advance_backward.hpp | 97 + .../preprocessed/no_ctps/advance_forward.hpp | 97 + .../mpl/aux_/preprocessed/no_ctps/and.hpp | 73 + .../mpl/aux_/preprocessed/no_ctps/apply.hpp | 268 + .../aux_/preprocessed/no_ctps/apply_fwd.hpp | 50 + .../aux_/preprocessed/no_ctps/apply_wrap.hpp | 78 + .../mpl/aux_/preprocessed/no_ctps/arg.hpp | 123 + .../aux_/preprocessed/no_ctps/basic_bind.hpp | 486 + .../mpl/aux_/preprocessed/no_ctps/bind.hpp | 590 + .../aux_/preprocessed/no_ctps/bind_fwd.hpp | 52 + .../mpl/aux_/preprocessed/no_ctps/bitand.hpp | 134 + .../mpl/aux_/preprocessed/no_ctps/bitor.hpp | 134 + .../mpl/aux_/preprocessed/no_ctps/bitxor.hpp | 134 + .../mpl/aux_/preprocessed/no_ctps/deque.hpp | 556 + .../mpl/aux_/preprocessed/no_ctps/divides.hpp | 133 + .../aux_/preprocessed/no_ctps/equal_to.hpp | 94 + .../aux_/preprocessed/no_ctps/fold_impl.hpp | 245 + .../aux_/preprocessed/no_ctps/full_lambda.hpp | 554 + .../mpl/aux_/preprocessed/no_ctps/greater.hpp | 94 + .../preprocessed/no_ctps/greater_equal.hpp | 94 + .../mpl/aux_/preprocessed/no_ctps/inherit.hpp | 166 + .../no_ctps/iter_fold_if_impl.hpp | 133 + .../preprocessed/no_ctps/iter_fold_impl.hpp | 245 + .../preprocessed/no_ctps/lambda_no_ctps.hpp | 229 + .../mpl/aux_/preprocessed/no_ctps/less.hpp | 94 + .../aux_/preprocessed/no_ctps/less_equal.hpp | 94 + .../mpl/aux_/preprocessed/no_ctps/list.hpp | 556 + .../mpl/aux_/preprocessed/no_ctps/list_c.hpp | 534 + .../mpl/aux_/preprocessed/no_ctps/map.hpp | 556 + .../mpl/aux_/preprocessed/no_ctps/minus.hpp | 133 + .../mpl/aux_/preprocessed/no_ctps/modulus.hpp | 101 + .../preprocessed/no_ctps/not_equal_to.hpp | 94 + .../mpl/aux_/preprocessed/no_ctps/or.hpp | 73 + .../preprocessed/no_ctps/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/no_ctps/plus.hpp | 133 + .../mpl/aux_/preprocessed/no_ctps/quote.hpp | 116 + .../no_ctps/reverse_fold_impl.hpp | 295 + .../no_ctps/reverse_iter_fold_impl.hpp | 295 + .../mpl/aux_/preprocessed/no_ctps/set.hpp | 556 + .../mpl/aux_/preprocessed/no_ctps/set_c.hpp | 534 + .../aux_/preprocessed/no_ctps/shift_left.hpp | 99 + .../aux_/preprocessed/no_ctps/shift_right.hpp | 99 + .../preprocessed/no_ctps/template_arity.hpp | 40 + .../mpl/aux_/preprocessed/no_ctps/times.hpp | 133 + .../aux_/preprocessed/no_ctps/unpack_args.hpp | 109 + .../mpl/aux_/preprocessed/no_ctps/vector.hpp | 556 + .../aux_/preprocessed/no_ctps/vector_c.hpp | 534 + .../preprocessed/no_ttp/advance_backward.hpp | 97 + .../preprocessed/no_ttp/advance_forward.hpp | 97 + .../mpl/aux_/preprocessed/no_ttp/and.hpp | 69 + .../mpl/aux_/preprocessed/no_ttp/apply.hpp | 169 + .../aux_/preprocessed/no_ttp/apply_fwd.hpp | 52 + .../aux_/preprocessed/no_ttp/apply_wrap.hpp | 84 + .../mpl/aux_/preprocessed/no_ttp/arg.hpp | 123 + .../aux_/preprocessed/no_ttp/basic_bind.hpp | 369 + .../mpl/aux_/preprocessed/no_ttp/bind.hpp | 466 + .../mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp | 52 + .../mpl/aux_/preprocessed/no_ttp/bitand.hpp | 157 + .../mpl/aux_/preprocessed/no_ttp/bitor.hpp | 157 + .../mpl/aux_/preprocessed/no_ttp/bitxor.hpp | 157 + .../mpl/aux_/preprocessed/no_ttp/deque.hpp | 323 + .../mpl/aux_/preprocessed/no_ttp/divides.hpp | 156 + .../mpl/aux_/preprocessed/no_ttp/equal_to.hpp | 98 + .../aux_/preprocessed/no_ttp/fold_impl.hpp | 180 + .../aux_/preprocessed/no_ttp/full_lambda.hpp | 554 + .../mpl/aux_/preprocessed/no_ttp/greater.hpp | 98 + .../preprocessed/no_ttp/greater_equal.hpp | 98 + .../mpl/aux_/preprocessed/no_ttp/inherit.hpp | 141 + .../preprocessed/no_ttp/iter_fold_if_impl.hpp | 133 + .../preprocessed/no_ttp/iter_fold_impl.hpp | 180 + .../preprocessed/no_ttp/lambda_no_ctps.hpp | 229 + .../mpl/aux_/preprocessed/no_ttp/less.hpp | 98 + .../aux_/preprocessed/no_ttp/less_equal.hpp | 98 + .../mpl/aux_/preprocessed/no_ttp/list.hpp | 323 + .../mpl/aux_/preprocessed/no_ttp/list_c.hpp | 328 + .../mpl/aux_/preprocessed/no_ttp/map.hpp | 323 + .../mpl/aux_/preprocessed/no_ttp/minus.hpp | 156 + .../mpl/aux_/preprocessed/no_ttp/modulus.hpp | 111 + .../aux_/preprocessed/no_ttp/not_equal_to.hpp | 98 + .../boost/mpl/aux_/preprocessed/no_ttp/or.hpp | 69 + .../aux_/preprocessed/no_ttp/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/no_ttp/plus.hpp | 156 + .../mpl/aux_/preprocessed/no_ttp/quote.hpp | 11 + .../preprocessed/no_ttp/reverse_fold_impl.hpp | 231 + .../no_ttp/reverse_iter_fold_impl.hpp | 231 + .../mpl/aux_/preprocessed/no_ttp/set.hpp | 323 + .../mpl/aux_/preprocessed/no_ttp/set_c.hpp | 328 + .../aux_/preprocessed/no_ttp/shift_left.hpp | 110 + .../aux_/preprocessed/no_ttp/shift_right.hpp | 110 + .../preprocessed/no_ttp/template_arity.hpp | 40 + .../mpl/aux_/preprocessed/no_ttp/times.hpp | 156 + .../aux_/preprocessed/no_ttp/unpack_args.hpp | 94 + .../mpl/aux_/preprocessed/no_ttp/vector.hpp | 323 + .../mpl/aux_/preprocessed/no_ttp/vector_c.hpp | 309 + .../preprocessed/plain/advance_backward.hpp | 97 + .../preprocessed/plain/advance_forward.hpp | 97 + .../boost/mpl/aux_/preprocessed/plain/and.hpp | 64 + .../mpl/aux_/preprocessed/plain/apply.hpp | 139 + .../mpl/aux_/preprocessed/plain/apply_fwd.hpp | 52 + .../aux_/preprocessed/plain/apply_wrap.hpp | 84 + .../boost/mpl/aux_/preprocessed/plain/arg.hpp | 123 + .../aux_/preprocessed/plain/basic_bind.hpp | 440 + .../mpl/aux_/preprocessed/plain/bind.hpp | 561 + .../mpl/aux_/preprocessed/plain/bind_fwd.hpp | 52 + .../mpl/aux_/preprocessed/plain/bitand.hpp | 142 + .../mpl/aux_/preprocessed/plain/bitor.hpp | 142 + .../mpl/aux_/preprocessed/plain/bitxor.hpp | 142 + .../mpl/aux_/preprocessed/plain/deque.hpp | 323 + .../mpl/aux_/preprocessed/plain/divides.hpp | 141 + .../mpl/aux_/preprocessed/plain/equal_to.hpp | 92 + .../mpl/aux_/preprocessed/plain/fold_impl.hpp | 180 + .../aux_/preprocessed/plain/full_lambda.hpp | 554 + .../mpl/aux_/preprocessed/plain/greater.hpp | 92 + .../aux_/preprocessed/plain/greater_equal.hpp | 92 + .../mpl/aux_/preprocessed/plain/inherit.hpp | 125 + .../preprocessed/plain/iter_fold_if_impl.hpp | 133 + .../preprocessed/plain/iter_fold_impl.hpp | 180 + .../preprocessed/plain/lambda_no_ctps.hpp | 228 + .../mpl/aux_/preprocessed/plain/less.hpp | 92 + .../aux_/preprocessed/plain/less_equal.hpp | 92 + .../mpl/aux_/preprocessed/plain/list.hpp | 323 + .../mpl/aux_/preprocessed/plain/list_c.hpp | 328 + .../boost/mpl/aux_/preprocessed/plain/map.hpp | 323 + .../mpl/aux_/preprocessed/plain/minus.hpp | 141 + .../mpl/aux_/preprocessed/plain/modulus.hpp | 99 + .../aux_/preprocessed/plain/not_equal_to.hpp | 92 + .../boost/mpl/aux_/preprocessed/plain/or.hpp | 64 + .../aux_/preprocessed/plain/placeholders.hpp | 105 + .../mpl/aux_/preprocessed/plain/plus.hpp | 141 + .../mpl/aux_/preprocessed/plain/quote.hpp | 123 + .../preprocessed/plain/reverse_fold_impl.hpp | 231 + .../plain/reverse_iter_fold_impl.hpp | 231 + .../boost/mpl/aux_/preprocessed/plain/set.hpp | 323 + .../mpl/aux_/preprocessed/plain/set_c.hpp | 328 + .../aux_/preprocessed/plain/shift_left.hpp | 97 + .../aux_/preprocessed/plain/shift_right.hpp | 97 + .../preprocessed/plain/template_arity.hpp | 11 + .../mpl/aux_/preprocessed/plain/times.hpp | 141 + .../aux_/preprocessed/plain/unpack_args.hpp | 94 + .../mpl/aux_/preprocessed/plain/vector.hpp | 323 + .../mpl/aux_/preprocessed/plain/vector_c.hpp | 309 + external/boost/mpl/aux_/preprocessor/add.hpp | 65 + .../mpl/aux_/preprocessor/def_params_tail.hpp | 105 + .../mpl/aux_/preprocessor/default_params.hpp | 67 + external/boost/mpl/aux_/preprocessor/enum.hpp | 62 + .../mpl/aux_/preprocessor/ext_params.hpp | 78 + .../mpl/aux_/preprocessor/filter_params.hpp | 28 + .../boost/mpl/aux_/preprocessor/params.hpp | 65 + .../aux_/preprocessor/partial_spec_params.hpp | 32 + .../boost/mpl/aux_/preprocessor/range.hpp | 23 + .../boost/mpl/aux_/preprocessor/repeat.hpp | 51 + external/boost/mpl/aux_/preprocessor/sub.hpp | 65 + .../boost/mpl/aux_/preprocessor/tuple.hpp | 29 + external/boost/mpl/aux_/push_back_impl.hpp | 70 + external/boost/mpl/aux_/push_front_impl.hpp | 71 + external/boost/mpl/aux_/reverse_fold_impl.hpp | 44 + .../boost/mpl/aux_/reverse_fold_impl_body.hpp | 412 + external/boost/mpl/aux_/sequence_wrapper.hpp | 292 + external/boost/mpl/aux_/size_impl.hpp | 52 + external/boost/mpl/aux_/static_cast.hpp | 27 + external/boost/mpl/aux_/template_arity.hpp | 189 + .../boost/mpl/aux_/template_arity_fwd.hpp | 23 + .../boost/mpl/aux_/traits_lambda_spec.hpp | 63 + external/boost/mpl/aux_/type_wrapper.hpp | 47 + external/boost/mpl/aux_/unwrap.hpp | 47 + external/boost/mpl/aux_/value_wknd.hpp | 89 + external/boost/mpl/aux_/yes_no.hpp | 58 + external/boost/mpl/back_fwd.hpp | 24 + external/boost/mpl/back_inserter.hpp | 34 + external/boost/mpl/begin_end.hpp | 57 + external/boost/mpl/begin_end_fwd.hpp | 27 + external/boost/mpl/bind.hpp | 551 + external/boost/mpl/bind_fwd.hpp | 99 + external/boost/mpl/bool.hpp | 39 + external/boost/mpl/bool_fwd.hpp | 33 + external/boost/mpl/clear.hpp | 39 + external/boost/mpl/clear_fwd.hpp | 24 + external/boost/mpl/comparison.hpp | 24 + external/boost/mpl/contains.hpp | 41 + external/boost/mpl/contains_fwd.hpp | 25 + external/boost/mpl/deref.hpp | 41 + external/boost/mpl/distance.hpp | 78 + external/boost/mpl/distance_fwd.hpp | 28 + external/boost/mpl/empty_fwd.hpp | 24 + external/boost/mpl/equal_to.hpp | 21 + external/boost/mpl/eval_if.hpp | 71 + external/boost/mpl/find.hpp | 38 + external/boost/mpl/find_if.hpp | 50 + external/boost/mpl/fold.hpp | 48 + external/boost/mpl/for_each.hpp | 116 + external/boost/mpl/front_fwd.hpp | 24 + external/boost/mpl/front_inserter.hpp | 33 + external/boost/mpl/greater.hpp | 21 + external/boost/mpl/greater_equal.hpp | 21 + external/boost/mpl/has_xxx.hpp | 640 + external/boost/mpl/identity.hpp | 45 + external/boost/mpl/if.hpp | 135 + external/boost/mpl/inserter.hpp | 32 + external/boost/mpl/int.hpp | 22 + external/boost/mpl/int_fwd.hpp | 27 + external/boost/mpl/integral_c.hpp | 51 + external/boost/mpl/integral_c_fwd.hpp | 32 + external/boost/mpl/integral_c_tag.hpp | 26 + external/boost/mpl/is_placeholder.hpp | 67 + external/boost/mpl/is_sequence.hpp | 112 + external/boost/mpl/iter_fold.hpp | 49 + external/boost/mpl/iter_fold_if.hpp | 117 + external/boost/mpl/iterator_range.hpp | 42 + external/boost/mpl/iterator_tags.hpp | 27 + external/boost/mpl/lambda.hpp | 29 + external/boost/mpl/lambda_fwd.hpp | 57 + external/boost/mpl/less.hpp | 21 + external/boost/mpl/less_equal.hpp | 21 + external/boost/mpl/limits/arity.hpp | 21 + external/boost/mpl/limits/list.hpp | 21 + external/boost/mpl/limits/unrolling.hpp | 21 + external/boost/mpl/limits/vector.hpp | 21 + external/boost/mpl/list.hpp | 57 + external/boost/mpl/list/aux_/O1_size.hpp | 33 + external/boost/mpl/list/aux_/begin_end.hpp | 44 + external/boost/mpl/list/aux_/clear.hpp | 34 + external/boost/mpl/list/aux_/empty.hpp | 34 + external/boost/mpl/list/aux_/front.hpp | 33 + .../mpl/list/aux_/include_preprocessed.hpp | 35 + external/boost/mpl/list/aux_/item.hpp | 55 + external/boost/mpl/list/aux_/iterator.hpp | 76 + external/boost/mpl/list/aux_/numbered.hpp | 68 + external/boost/mpl/list/aux_/numbered_c.hpp | 71 + external/boost/mpl/list/aux_/pop_front.hpp | 34 + .../list/aux_/preprocessed/plain/list10.hpp | 149 + .../list/aux_/preprocessed/plain/list10_c.hpp | 164 + .../list/aux_/preprocessed/plain/list20.hpp | 169 + .../list/aux_/preprocessed/plain/list20_c.hpp | 173 + .../list/aux_/preprocessed/plain/list30.hpp | 189 + .../list/aux_/preprocessed/plain/list30_c.hpp | 183 + .../list/aux_/preprocessed/plain/list40.hpp | 209 + .../list/aux_/preprocessed/plain/list40_c.hpp | 193 + .../list/aux_/preprocessed/plain/list50.hpp | 229 + .../list/aux_/preprocessed/plain/list50_c.hpp | 203 + external/boost/mpl/list/aux_/push_back.hpp | 36 + external/boost/mpl/list/aux_/push_front.hpp | 39 + external/boost/mpl/list/aux_/size.hpp | 33 + external/boost/mpl/list/aux_/tag.hpp | 24 + external/boost/mpl/list/list0.hpp | 42 + external/boost/mpl/list/list0_c.hpp | 31 + external/boost/mpl/list/list10.hpp | 43 + external/boost/mpl/list/list10_c.hpp | 43 + external/boost/mpl/list/list20.hpp | 43 + external/boost/mpl/list/list20_c.hpp | 43 + external/boost/mpl/list/list30.hpp | 43 + external/boost/mpl/list/list30_c.hpp | 43 + external/boost/mpl/list/list40.hpp | 43 + external/boost/mpl/list/list40_c.hpp | 43 + external/boost/mpl/list/list50.hpp | 43 + external/boost/mpl/list/list50_c.hpp | 43 + external/boost/mpl/logical.hpp | 21 + external/boost/mpl/long.hpp | 22 + external/boost/mpl/long_fwd.hpp | 27 + external/boost/mpl/minus.hpp | 21 + external/boost/mpl/multiplies.hpp | 53 + external/boost/mpl/negate.hpp | 81 + external/boost/mpl/next.hpp | 19 + external/boost/mpl/next_prior.hpp | 49 + external/boost/mpl/not.hpp | 51 + external/boost/mpl/not_equal_to.hpp | 21 + external/boost/mpl/numeric_cast.hpp | 41 + external/boost/mpl/or.hpp | 61 + external/boost/mpl/pair.hpp | 70 + external/boost/mpl/placeholders.hpp | 100 + external/boost/mpl/plus.hpp | 21 + external/boost/mpl/pop_back_fwd.hpp | 24 + external/boost/mpl/pop_front_fwd.hpp | 24 + external/boost/mpl/prior.hpp | 19 + external/boost/mpl/protect.hpp | 55 + external/boost/mpl/push_back.hpp | 53 + external/boost/mpl/push_back_fwd.hpp | 24 + external/boost/mpl/push_front.hpp | 52 + external/boost/mpl/push_front_fwd.hpp | 24 + external/boost/mpl/quote.hpp | 151 + external/boost/mpl/remove_if.hpp | 83 + external/boost/mpl/reverse_fold.hpp | 50 + external/boost/mpl/same_as.hpp | 55 + external/boost/mpl/sequence_tag.hpp | 124 + external/boost/mpl/sequence_tag_fwd.hpp | 26 + external/boost/mpl/size.hpp | 42 + external/boost/mpl/size_fwd.hpp | 24 + external/boost/mpl/size_t.hpp | 25 + external/boost/mpl/size_t_fwd.hpp | 28 + external/boost/mpl/tag.hpp | 52 + external/boost/mpl/times.hpp | 21 + external/boost/mpl/vector.hpp | 57 + external/boost/mpl/vector/aux_/O1_size.hpp | 56 + external/boost/mpl/vector/aux_/at.hpp | 116 + external/boost/mpl/vector/aux_/back.hpp | 59 + external/boost/mpl/vector/aux_/begin_end.hpp | 49 + external/boost/mpl/vector/aux_/clear.hpp | 55 + external/boost/mpl/vector/aux_/empty.hpp | 68 + external/boost/mpl/vector/aux_/front.hpp | 56 + .../mpl/vector/aux_/include_preprocessed.hpp | 55 + external/boost/mpl/vector/aux_/item.hpp | 103 + external/boost/mpl/vector/aux_/iterator.hpp | 130 + external/boost/mpl/vector/aux_/numbered.hpp | 218 + external/boost/mpl/vector/aux_/numbered_c.hpp | 77 + external/boost/mpl/vector/aux_/pop_back.hpp | 40 + external/boost/mpl/vector/aux_/pop_front.hpp | 40 + .../aux_/preprocessed/no_ctps/vector10.hpp | 1528 + .../aux_/preprocessed/no_ctps/vector10_c.hpp | 149 + .../aux_/preprocessed/no_ctps/vector20.hpp | 1804 ++ .../aux_/preprocessed/no_ctps/vector20_c.hpp | 195 + .../aux_/preprocessed/no_ctps/vector30.hpp | 2124 ++ .../aux_/preprocessed/no_ctps/vector30_c.hpp | 238 + .../aux_/preprocessed/no_ctps/vector40.hpp | 2444 ++ .../aux_/preprocessed/no_ctps/vector40_c.hpp | 281 + .../aux_/preprocessed/no_ctps/vector50.hpp | 2764 ++ .../aux_/preprocessed/no_ctps/vector50_c.hpp | 325 + .../aux_/preprocessed/plain/vector10.hpp | 829 + .../aux_/preprocessed/plain/vector10_c.hpp | 149 + .../aux_/preprocessed/plain/vector20.hpp | 1144 + .../aux_/preprocessed/plain/vector20_c.hpp | 195 + .../aux_/preprocessed/plain/vector30.hpp | 1464 + .../aux_/preprocessed/plain/vector30_c.hpp | 238 + .../aux_/preprocessed/plain/vector40.hpp | 1784 ++ .../aux_/preprocessed/plain/vector40_c.hpp | 281 + .../aux_/preprocessed/plain/vector50.hpp | 2104 ++ .../aux_/preprocessed/plain/vector50_c.hpp | 325 + .../preprocessed/typeof_based/vector10.hpp | 139 + .../preprocessed/typeof_based/vector10_c.hpp | 154 + .../preprocessed/typeof_based/vector20.hpp | 159 + .../preprocessed/typeof_based/vector20_c.hpp | 163 + .../preprocessed/typeof_based/vector30.hpp | 179 + .../preprocessed/typeof_based/vector30_c.hpp | 173 + .../preprocessed/typeof_based/vector40.hpp | 199 + .../preprocessed/typeof_based/vector40_c.hpp | 183 + .../preprocessed/typeof_based/vector50.hpp | 219 + .../preprocessed/typeof_based/vector50_c.hpp | 193 + external/boost/mpl/vector/aux_/push_back.hpp | 40 + external/boost/mpl/vector/aux_/push_front.hpp | 40 + external/boost/mpl/vector/aux_/size.hpp | 49 + external/boost/mpl/vector/aux_/tag.hpp | 32 + external/boost/mpl/vector/aux_/vector0.hpp | 52 + external/boost/mpl/vector/vector0.hpp | 34 + external/boost/mpl/vector/vector0_c.hpp | 31 + external/boost/mpl/vector/vector10.hpp | 45 + external/boost/mpl/vector/vector10_c.hpp | 46 + external/boost/mpl/vector/vector20.hpp | 45 + external/boost/mpl/vector/vector20_c.hpp | 46 + external/boost/mpl/vector/vector30.hpp | 45 + external/boost/mpl/vector/vector30_c.hpp | 47 + external/boost/mpl/vector/vector40.hpp | 45 + external/boost/mpl/vector/vector40_c.hpp | 46 + external/boost/mpl/vector/vector50.hpp | 45 + external/boost/mpl/vector/vector50_c.hpp | 46 + external/boost/mpl/void.hpp | 76 + external/boost/mpl/void_fwd.hpp | 26 + external/boost/next_prior.hpp | 51 + external/boost/non_type.hpp | 27 + external/boost/noncopyable.hpp | 36 + external/boost/none.hpp | 28 + external/boost/none_t.hpp | 24 + external/boost/numeric/conversion/bounds.hpp | 24 + external/boost/numeric/conversion/cast.hpp | 61 + .../numeric/conversion/conversion_traits.hpp | 39 + .../boost/numeric/conversion/converter.hpp | 68 + .../numeric/conversion/converter_policies.hpp | 186 + .../numeric/conversion/detail/bounds.hpp | 58 + .../conversion/detail/conversion_traits.hpp | 97 + .../numeric/conversion/detail/converter.hpp | 602 + .../conversion/detail/int_float_mixture.hpp | 72 + .../conversion/detail/is_subranged.hpp | 234 + .../boost/numeric/conversion/detail/meta.hpp | 120 + .../conversion/detail/numeric_cast_traits.hpp | 138 + .../conversion/detail/old_numeric_cast.hpp | 339 + .../numeric_cast_traits_common.hpp | 1741 ++ .../numeric_cast_traits_long_long.hpp | 347 + .../conversion/detail/sign_mixture.hpp | 72 + .../conversion/detail/udt_builtin_mixture.hpp | 69 + .../conversion/int_float_mixture_enum.hpp | 29 + .../conversion/numeric_cast_traits.hpp | 31 + .../numeric/conversion/sign_mixture_enum.hpp | 29 + .../conversion/udt_builtin_mixture_enum.hpp | 26 + external/boost/operators.hpp | 978 + external/boost/optional.hpp | 18 + external/boost/optional/optional.hpp | 991 + external/boost/optional/optional_fwd.hpp | 29 + external/boost/pending/integer_log2.hpp | 112 + .../boost/preprocessor/arithmetic/add.hpp | 51 + .../boost/preprocessor/arithmetic/dec.hpp | 288 + .../arithmetic/detail/div_base.hpp | 61 + .../boost/preprocessor/arithmetic/inc.hpp | 288 + .../boost/preprocessor/arithmetic/mod.hpp | 39 + .../boost/preprocessor/arithmetic/sub.hpp | 50 + external/boost/preprocessor/array/data.hpp | 28 + external/boost/preprocessor/array/elem.hpp | 29 + external/boost/preprocessor/array/size.hpp | 28 + external/boost/preprocessor/cat.hpp | 35 + external/boost/preprocessor/comma_if.hpp | 17 + .../preprocessor/comparison/less_equal.hpp | 39 + external/boost/preprocessor/config/config.hpp | 105 + .../boost/preprocessor/control/deduce_d.hpp | 22 + .../preprocessor/control/detail/dmc/while.hpp | 536 + .../preprocessor/control/detail/edg/while.hpp | 534 + .../control/detail/msvc/while.hpp | 277 + .../preprocessor/control/detail/while.hpp | 536 + .../boost/preprocessor/control/expr_if.hpp | 30 + .../boost/preprocessor/control/expr_iif.hpp | 31 + external/boost/preprocessor/control/if.hpp | 30 + external/boost/preprocessor/control/iif.hpp | 34 + external/boost/preprocessor/control/while.hpp | 312 + external/boost/preprocessor/debug/error.hpp | 33 + external/boost/preprocessor/dec.hpp | 17 + .../boost/preprocessor/detail/auto_rec.hpp | 293 + external/boost/preprocessor/detail/check.hpp | 48 + .../preprocessor/detail/dmc/auto_rec.hpp | 286 + .../boost/preprocessor/detail/is_binary.hpp | 30 + external/boost/preprocessor/empty.hpp | 17 + external/boost/preprocessor/enum.hpp | 17 + external/boost/preprocessor/enum_params.hpp | 17 + .../enum_params_with_a_default.hpp | 17 + .../preprocessor/enum_shifted_params.hpp | 17 + external/boost/preprocessor/expr_if.hpp | 17 + .../boost/preprocessor/facilities/empty.hpp | 21 + .../preprocessor/facilities/identity.hpp | 23 + .../preprocessor/facilities/intercept.hpp | 277 + .../preprocessor/facilities/overload.hpp | 25 + external/boost/preprocessor/identity.hpp | 17 + external/boost/preprocessor/inc.hpp | 17 + external/boost/preprocessor/iterate.hpp | 17 + .../iteration/detail/bounds/lower1.hpp | 99 + .../iteration/detail/bounds/lower2.hpp | 99 + .../iteration/detail/bounds/lower3.hpp | 99 + .../iteration/detail/bounds/lower4.hpp | 99 + .../iteration/detail/bounds/lower5.hpp | 99 + .../iteration/detail/bounds/upper1.hpp | 99 + .../iteration/detail/bounds/upper2.hpp | 99 + .../iteration/detail/bounds/upper3.hpp | 99 + .../iteration/detail/bounds/upper4.hpp | 99 + .../iteration/detail/bounds/upper5.hpp | 99 + .../preprocessor/iteration/detail/finish.hpp | 99 + .../iteration/detail/iter/forward1.hpp | 1342 + .../iteration/detail/iter/forward2.hpp | 1338 + .../iteration/detail/iter/forward3.hpp | 1338 + .../iteration/detail/iter/forward4.hpp | 1338 + .../iteration/detail/iter/forward5.hpp | 1338 + .../iteration/detail/iter/reverse1.hpp | 1296 + .../iteration/detail/iter/reverse2.hpp | 1296 + .../iteration/detail/iter/reverse3.hpp | 1296 + .../iteration/detail/iter/reverse4.hpp | 1296 + .../iteration/detail/iter/reverse5.hpp | 1296 + .../preprocessor/iteration/detail/local.hpp | 812 + .../preprocessor/iteration/detail/rlocal.hpp | 782 + .../preprocessor/iteration/detail/self.hpp | 21 + .../preprocessor/iteration/detail/start.hpp | 99 + .../boost/preprocessor/iteration/iterate.hpp | 82 + .../boost/preprocessor/iteration/local.hpp | 26 + .../boost/preprocessor/iteration/self.hpp | 19 + external/boost/preprocessor/list/adt.hpp | 73 + external/boost/preprocessor/list/append.hpp | 40 + .../list/detail/dmc/fold_left.hpp | 279 + .../list/detail/edg/fold_left.hpp | 536 + .../list/detail/edg/fold_right.hpp | 794 + .../preprocessor/list/detail/fold_left.hpp | 279 + .../preprocessor/list/detail/fold_right.hpp | 277 + .../boost/preprocessor/list/fold_left.hpp | 303 + .../boost/preprocessor/list/fold_right.hpp | 40 + .../boost/preprocessor/list/for_each_i.hpp | 65 + external/boost/preprocessor/list/reverse.hpp | 40 + .../boost/preprocessor/list/transform.hpp | 49 + external/boost/preprocessor/logical/and.hpp | 30 + .../boost/preprocessor/logical/bitand.hpp | 38 + external/boost/preprocessor/logical/bool.hpp | 288 + external/boost/preprocessor/logical/compl.hpp | 36 + external/boost/preprocessor/logical/not.hpp | 30 + .../boost/preprocessor/punctuation/comma.hpp | 21 + .../preprocessor/punctuation/comma_if.hpp | 31 + .../boost/preprocessor/punctuation/paren.hpp | 23 + external/boost/preprocessor/repeat.hpp | 17 + .../repetition/detail/dmc/for.hpp | 536 + .../repetition/detail/edg/for.hpp | 534 + .../preprocessor/repetition/detail/for.hpp | 536 + .../repetition/detail/msvc/for.hpp | 277 + .../boost/preprocessor/repetition/enum.hpp | 66 + .../repetition/enum_binary_params.hpp | 54 + .../preprocessor/repetition/enum_params.hpp | 41 + .../repetition/enum_params_with_a_default.hpp | 25 + .../repetition/enum_shifted_params.hpp | 44 + .../repetition/enum_trailing_params.hpp | 38 + .../boost/preprocessor/repetition/for.hpp | 306 + .../boost/preprocessor/repetition/repeat.hpp | 825 + .../repetition/repeat_from_to.hpp | 87 + external/boost/preprocessor/seq/cat.hpp | 49 + .../boost/preprocessor/seq/detail/split.hpp | 284 + external/boost/preprocessor/seq/elem.hpp | 304 + external/boost/preprocessor/seq/enum.hpp | 288 + external/boost/preprocessor/seq/first_n.hpp | 30 + external/boost/preprocessor/seq/fold_left.hpp | 1070 + external/boost/preprocessor/seq/for_each.hpp | 60 + .../boost/preprocessor/seq/for_each_i.hpp | 61 + external/boost/preprocessor/seq/rest_n.hpp | 30 + external/boost/preprocessor/seq/seq.hpp | 44 + external/boost/preprocessor/seq/size.hpp | 547 + external/boost/preprocessor/seq/subseq.hpp | 28 + external/boost/preprocessor/seq/transform.hpp | 48 + .../preprocessor/slot/detail/counter.hpp | 269 + .../boost/preprocessor/slot/detail/def.hpp | 49 + .../boost/preprocessor/slot/detail/shared.hpp | 247 + .../boost/preprocessor/slot/detail/slot1.hpp | 267 + .../boost/preprocessor/slot/detail/slot2.hpp | 267 + .../boost/preprocessor/slot/detail/slot3.hpp | 267 + .../boost/preprocessor/slot/detail/slot4.hpp | 267 + .../boost/preprocessor/slot/detail/slot5.hpp | 267 + external/boost/preprocessor/slot/slot.hpp | 32 + external/boost/preprocessor/stringize.hpp | 33 + external/boost/preprocessor/tuple/eat.hpp | 106 + external/boost/preprocessor/tuple/elem.hpp | 191 + external/boost/preprocessor/tuple/rem.hpp | 134 + external/boost/preprocessor/tuple/to_list.hpp | 116 + external/boost/preprocessor/variadic/elem.hpp | 94 + external/boost/preprocessor/variadic/size.hpp | 30 + external/boost/program_options.hpp | 25 + external/boost/program_options/cmdline.hpp | 90 + external/boost/program_options/config.hpp | 52 + .../boost/program_options/detail/cmdline.hpp | 147 + .../program_options/detail/config_file.hpp | 182 + .../boost/program_options/detail/convert.hpp | 107 + .../boost/program_options/detail/parsers.hpp | 146 + .../detail/utf8_codecvt_facet.hpp | 25 + .../program_options/detail/value_semantic.hpp | 207 + .../program_options/environment_iterator.hpp | 51 + .../boost/program_options/eof_iterator.hpp | 97 + external/boost/program_options/errors.hpp | 243 + external/boost/program_options/option.hpp | 70 + .../program_options/options_description.hpp | 264 + external/boost/program_options/parsers.hpp | 267 + .../program_options/positional_options.hpp | 74 + .../boost/program_options/value_semantic.hpp | 405 + .../boost/program_options/variables_map.hpp | 211 + external/boost/program_options/version.hpp | 19 + external/boost/progress.hpp | 143 + external/boost/random.hpp | 85 + external/boost/random/additive_combine.hpp | 283 + .../boost/random/bernoulli_distribution.hpp | 197 + .../boost/random/binomial_distribution.hpp | 422 + external/boost/random/cauchy_distribution.hpp | 214 + .../boost/random/chi_squared_distribution.hpp | 209 + external/boost/random/detail/auto_link.hpp | 42 + external/boost/random/detail/config.hpp | 18 + external/boost/random/detail/const_mod.hpp | 216 + .../boost/random/detail/disable_warnings.hpp | 23 + .../boost/random/detail/enable_warnings.hpp | 18 + .../boost/random/detail/generator_bits.hpp | 36 + .../random/detail/generator_seed_seq.hpp | 40 + external/boost/random/detail/integer_log2.hpp | 84 + .../boost/random/detail/iterator_mixin.hpp | 45 + .../boost/random/detail/large_arithmetic.hpp | 122 + external/boost/random/detail/operators.hpp | 84 + external/boost/random/detail/ptr_helper.hpp | 94 + external/boost/random/detail/seed.hpp | 114 + external/boost/random/detail/seed_impl.hpp | 397 + .../random/detail/signed_unsigned_tools.hpp | 89 + .../boost/random/detail/uniform_int_float.hpp | 76 + external/boost/random/detail/vector_io.hpp | 75 + external/boost/random/discard_block.hpp | 240 + .../boost/random/discrete_distribution.hpp | 453 + .../boost/random/exponential_distribution.hpp | 182 + .../random/extreme_value_distribution.hpp | 177 + .../boost/random/fisher_f_distribution.hpp | 183 + external/boost/random/gamma_distribution.hpp | 292 + external/boost/random/generate_canonical.hpp | 97 + .../boost/random/geometric_distribution.hpp | 267 + external/boost/random/independent_bits.hpp | 260 + .../boost/random/inversive_congruential.hpp | 267 + external/boost/random/lagged_fibonacci.hpp | 536 + external/boost/random/linear_congruential.hpp | 466 + .../boost/random/linear_feedback_shift.hpp | 217 + .../boost/random/lognormal_distribution.hpp | 254 + external/boost/random/mersenne_twister.hpp | 545 + .../random/negative_binomial_distribution.hpp | 220 + external/boost/random/normal_distribution.hpp | 223 + .../piecewise_constant_distribution.hpp | 466 + .../random/piecewise_linear_distribution.hpp | 530 + .../boost/random/poisson_distribution.hpp | 360 + external/boost/random/random_device.hpp | 142 + .../boost/random/random_number_generator.hpp | 73 + external/boost/random/ranlux.hpp | 99 + external/boost/random/seed_seq.hpp | 118 + external/boost/random/shuffle_order.hpp | 269 + external/boost/random/shuffle_output.hpp | 51 + .../boost/random/student_t_distribution.hpp | 180 + external/boost/random/subtract_with_carry.hpp | 613 + external/boost/random/taus88.hpp | 45 + .../boost/random/triangle_distribution.hpp | 232 + external/boost/random/uniform_01.hpp | 277 + external/boost/random/uniform_int.hpp | 99 + .../boost/random/uniform_int_distribution.hpp | 400 + external/boost/random/uniform_on_sphere.hpp | 229 + external/boost/random/uniform_real.hpp | 82 + .../random/uniform_real_distribution.hpp | 239 + external/boost/random/uniform_smallint.hpp | 288 + external/boost/random/variate_generator.hpp | 122 + .../boost/random/weibull_distribution.hpp | 177 + external/boost/random/xor_combine.hpp | 207 + external/boost/range/algorithm/equal.hpp | 188 + external/boost/range/as_literal.hpp | 127 + external/boost/range/begin.hpp | 143 + external/boost/range/concepts.hpp | 366 + external/boost/range/config.hpp | 54 + external/boost/range/const_iterator.hpp | 67 + external/boost/range/detail/as_literal.hpp | 33 + external/boost/range/detail/begin.hpp | 94 + external/boost/range/detail/common.hpp | 117 + .../boost/range/detail/const_iterator.hpp | 71 + external/boost/range/detail/detail_str.hpp | 376 + external/boost/range/detail/end.hpp | 101 + .../range/detail/extract_optional_type.hpp | 52 + .../range/detail/implementation_help.hpp | 103 + external/boost/range/detail/iterator.hpp | 78 + external/boost/range/detail/misc_concept.hpp | 33 + external/boost/range/detail/remove_extent.hpp | 157 + external/boost/range/detail/safe_bool.hpp | 72 + external/boost/range/detail/sfinae.hpp | 77 + external/boost/range/detail/size_type.hpp | 70 + external/boost/range/detail/str_types.hpp | 38 + external/boost/range/detail/value_type.hpp | 72 + external/boost/range/detail/vc6/end.hpp | 170 + external/boost/range/difference_type.hpp | 29 + external/boost/range/distance.hpp | 34 + external/boost/range/empty.hpp | 34 + external/boost/range/end.hpp | 136 + external/boost/range/functions.hpp | 27 + external/boost/range/iterator.hpp | 72 + external/boost/range/iterator_range.hpp | 16 + external/boost/range/iterator_range_core.hpp | 650 + external/boost/range/iterator_range_io.hpp | 93 + external/boost/range/mutable_iterator.hpp | 67 + external/boost/range/rbegin.hpp | 65 + external/boost/range/rend.hpp | 65 + external/boost/range/result_iterator.hpp | 33 + external/boost/range/reverse_iterator.hpp | 40 + external/boost/range/size.hpp | 52 + external/boost/range/size_type.hpp | 79 + external/boost/range/value_type.hpp | 34 + external/boost/ref.hpp | 189 + external/boost/regex.hpp | 37 + external/boost/regex/config.hpp | 432 + external/boost/regex/config/borland.hpp | 72 + external/boost/regex/config/cwchar.hpp | 207 + external/boost/regex/icu.hpp | 1031 + external/boost/regex/pattern_except.hpp | 100 + external/boost/regex/pending/object_cache.hpp | 165 + external/boost/regex/pending/static_mutex.hpp | 180 + .../boost/regex/pending/unicode_iterator.hpp | 756 + external/boost/regex/regex_traits.hpp | 35 + external/boost/regex/user.hpp | 93 + external/boost/regex/v4/basic_regex.hpp | 779 + .../boost/regex/v4/basic_regex_creator.hpp | 1573 ++ .../boost/regex/v4/basic_regex_parser.hpp | 2821 ++ external/boost/regex/v4/c_regex_traits.hpp | 211 + external/boost/regex/v4/char_regex_traits.hpp | 81 + external/boost/regex/v4/cpp_regex_traits.hpp | 1096 + external/boost/regex/v4/cregex.hpp | 330 + external/boost/regex/v4/error_type.hpp | 59 + external/boost/regex/v4/fileiter.hpp | 455 + external/boost/regex/v4/instances.hpp | 219 + external/boost/regex/v4/iterator_category.hpp | 91 + external/boost/regex/v4/iterator_traits.hpp | 135 + external/boost/regex/v4/match_flags.hpp | 138 + external/boost/regex/v4/match_results.hpp | 699 + external/boost/regex/v4/mem_block_cache.hpp | 99 + external/boost/regex/v4/perl_matcher.hpp | 584 + .../boost/regex/v4/perl_matcher_common.hpp | 990 + .../regex/v4/perl_matcher_non_recursive.hpp | 1639 ++ .../boost/regex/v4/perl_matcher_recursive.hpp | 991 + external/boost/regex/v4/primary_transform.hpp | 146 + external/boost/regex/v4/protected_call.hpp | 81 + external/boost/regex/v4/regbase.hpp | 180 + external/boost/regex/v4/regex.hpp | 202 + external/boost/regex/v4/regex_format.hpp | 1149 + external/boost/regex/v4/regex_fwd.hpp | 73 + external/boost/regex/v4/regex_grep.hpp | 155 + external/boost/regex/v4/regex_iterator.hpp | 201 + external/boost/regex/v4/regex_match.hpp | 382 + external/boost/regex/v4/regex_merge.hpp | 93 + external/boost/regex/v4/regex_raw_buffer.hpp | 210 + external/boost/regex/v4/regex_replace.hpp | 99 + external/boost/regex/v4/regex_search.hpp | 217 + external/boost/regex/v4/regex_split.hpp | 172 + .../boost/regex/v4/regex_token_iterator.hpp | 342 + external/boost/regex/v4/regex_traits.hpp | 189 + .../boost/regex/v4/regex_traits_defaults.hpp | 371 + external/boost/regex/v4/regex_workaround.hpp | 232 + external/boost/regex/v4/states.hpp | 301 + external/boost/regex/v4/sub_match.hpp | 512 + external/boost/regex/v4/syntax_type.hpp | 105 + external/boost/regex/v4/u32regex_iterator.hpp | 193 + .../regex/v4/u32regex_token_iterator.hpp | 377 + external/boost/regex/v4/w32_regex_traits.hpp | 741 + external/boost/regex_fwd.hpp | 33 + external/boost/scoped_array.hpp | 16 + external/boost/scoped_ptr.hpp | 16 + external/boost/shared_array.hpp | 19 + external/boost/shared_ptr.hpp | 19 + external/boost/smart_ptr.hpp | 31 + external/boost/smart_ptr/bad_weak_ptr.hpp | 59 + .../boost/smart_ptr/detail/atomic_count.hpp | 119 + .../smart_ptr/detail/atomic_count_gcc.hpp | 72 + .../smart_ptr/detail/atomic_count_gcc_x86.hpp | 77 + .../detail/atomic_count_pthreads.hpp | 96 + .../smart_ptr/detail/atomic_count_sync.hpp | 61 + .../smart_ptr/detail/atomic_count_win32.hpp | 63 + .../smart_ptr/detail/lightweight_mutex.hpp | 42 + external/boost/smart_ptr/detail/lwm_nop.hpp | 37 + .../boost/smart_ptr/detail/lwm_pthreads.hpp | 87 + .../boost/smart_ptr/detail/lwm_win32_cs.hpp | 108 + .../boost/smart_ptr/detail/operator_bool.hpp | 56 + .../smart_ptr/detail/quick_allocator.hpp | 199 + .../smart_ptr/detail/shared_array_nmt.hpp | 151 + .../boost/smart_ptr/detail/shared_count.hpp | 532 + .../boost/smart_ptr/detail/shared_ptr_nmt.hpp | 182 + .../boost/smart_ptr/detail/sp_convertible.hpp | 76 + .../smart_ptr/detail/sp_counted_base.hpp | 73 + .../detail/sp_counted_base_acc_ia64.hpp | 150 + .../smart_ptr/detail/sp_counted_base_aix.hpp | 142 + .../detail/sp_counted_base_cw_ppc.hpp | 170 + .../detail/sp_counted_base_gcc_ia64.hpp | 157 + .../detail/sp_counted_base_gcc_mips.hpp | 181 + .../detail/sp_counted_base_gcc_ppc.hpp | 181 + .../detail/sp_counted_base_gcc_sparc.hpp | 166 + .../detail/sp_counted_base_gcc_x86.hpp | 173 + .../smart_ptr/detail/sp_counted_base_nt.hpp | 107 + .../smart_ptr/detail/sp_counted_base_pt.hpp | 135 + .../smart_ptr/detail/sp_counted_base_spin.hpp | 131 + .../smart_ptr/detail/sp_counted_base_sync.hpp | 155 + .../smart_ptr/detail/sp_counted_base_w32.hpp | 130 + .../smart_ptr/detail/sp_counted_impl.hpp | 239 + .../boost/smart_ptr/detail/sp_has_sync.hpp | 53 + external/boost/smart_ptr/detail/spinlock.hpp | 56 + .../smart_ptr/detail/spinlock_gcc_arm.hpp | 102 + .../boost/smart_ptr/detail/spinlock_nt.hpp | 89 + .../boost/smart_ptr/detail/spinlock_pool.hpp | 91 + .../boost/smart_ptr/detail/spinlock_pt.hpp | 79 + .../boost/smart_ptr/detail/spinlock_sync.hpp | 87 + .../boost/smart_ptr/detail/spinlock_w32.hpp | 113 + external/boost/smart_ptr/detail/yield_k.hpp | 149 + .../smart_ptr/enable_shared_from_this.hpp | 79 + external/boost/smart_ptr/intrusive_ptr.hpp | 299 + external/boost/smart_ptr/make_shared.hpp | 981 + external/boost/smart_ptr/scoped_array.hpp | 107 + external/boost/smart_ptr/scoped_ptr.hpp | 131 + external/boost/smart_ptr/shared_array.hpp | 175 + external/boost/smart_ptr/shared_ptr.hpp | 717 + external/boost/smart_ptr/weak_ptr.hpp | 242 + external/boost/static_assert.hpp | 138 + external/boost/swap.hpp | 12 + external/boost/system/api_config.hpp | 42 + external/boost/system/config.hpp | 52 + external/boost/system/error_code.hpp | 513 + external/boost/system/system_error.hpp | 80 + external/boost/test/debug.hpp | 101 + external/boost/test/debug_config.hpp | 24 + external/boost/test/detail/config.hpp | 104 + .../boost/test/detail/enable_warnings.hpp | 30 + external/boost/test/detail/fwd_decl.hpp | 48 + external/boost/test/detail/global_typedef.hpp | 88 + external/boost/test/detail/log_level.hpp | 43 + .../boost/test/detail/suppress_warnings.hpp | 31 + .../test/detail/unit_test_parameters.hpp | 69 + external/boost/test/detail/workaround.hpp | 65 + external/boost/test/execution_monitor.hpp | 263 + .../boost/test/floating_point_comparison.hpp | 286 + external/boost/test/framework.hpp | 112 + .../test/impl/compiler_log_formatter.ipp | 222 + external/boost/test/impl/cpp_main.ipp | 139 + external/boost/test/impl/debug.ipp | 970 + external/boost/test/impl/exception_safety.ipp | 537 + .../boost/test/impl/execution_monitor.ipp | 1367 + external/boost/test/impl/framework.ipp | 503 + .../boost/test/impl/interaction_based.ipp | 90 + .../boost/test/impl/logged_expectations.ipp | 246 + .../test/impl/plain_report_formatter.ipp | 198 + external/boost/test/impl/progress_monitor.ipp | 110 + .../boost/test/impl/results_collector.ipp | 294 + external/boost/test/impl/results_reporter.ipp | 202 + external/boost/test/impl/test_main.ipp | 68 + external/boost/test/impl/test_tools.ipp | 628 + external/boost/test/impl/unit_test_log.ipp | 444 + external/boost/test/impl/unit_test_main.ipp | 246 + .../boost/test/impl/unit_test_monitor.ipp | 101 + .../boost/test/impl/unit_test_parameters.ipp | 527 + external/boost/test/impl/unit_test_suite.ipp | 346 + .../boost/test/impl/xml_log_formatter.ipp | 180 + .../boost/test/impl/xml_report_formatter.ipp | 115 + .../boost/test/included/prg_exec_monitor.hpp | 25 + external/boost/test/interaction_based.hpp | 262 + external/boost/test/mock_object.hpp | 328 + .../test/output/compiler_log_formatter.hpp | 68 + .../test/output/plain_report_formatter.hpp | 62 + .../boost/test/output/xml_log_formatter.hpp | 72 + .../test/output/xml_report_formatter.hpp | 58 + external/boost/test/output_test_stream.hpp | 78 + external/boost/test/predicate_result.hpp | 88 + external/boost/test/prg_exec_monitor.hpp | 68 + external/boost/test/progress_monitor.hpp | 70 + external/boost/test/results_collector.hpp | 112 + external/boost/test/results_reporter.hpp | 88 + external/boost/test/test_observer.hpp | 65 + external/boost/test/test_tools.hpp | 719 + external/boost/test/unit_test.hpp | 66 + external/boost/test/unit_test_log.hpp | 177 + .../boost/test/unit_test_log_formatter.hpp | 123 + external/boost/test/unit_test_monitor.hpp | 69 + external/boost/test/unit_test_suite.hpp | 245 + external/boost/test/unit_test_suite_impl.hpp | 434 + external/boost/test/utils/algorithm.hpp | 228 + external/boost/test/utils/assign_op.hpp | 41 + .../utils/basic_cstring/basic_cstring.hpp | 731 + .../utils/basic_cstring/basic_cstring_fwd.hpp | 40 + .../utils/basic_cstring/bcs_char_traits.hpp | 150 + .../test/utils/basic_cstring/compare.hpp | 115 + .../boost/test/utils/basic_cstring/io.hpp | 73 + external/boost/test/utils/callback.hpp | 310 + .../boost/test/utils/class_properties.hpp | 221 + external/boost/test/utils/custom_manip.hpp | 63 + external/boost/test/utils/fixed_mapping.hpp | 124 + external/boost/test/utils/foreach.hpp | 281 + .../utils/iterator/input_iterator_facade.hpp | 109 + .../test/utils/iterator/token_iterator.hpp | 418 + external/boost/test/utils/lazy_ostream.hpp | 114 + external/boost/test/utils/named_params.hpp | 329 + external/boost/test/utils/rtti.hpp | 64 + .../boost/test/utils/runtime/argument.hpp | 112 + .../utils/runtime/cla/argument_factory.hpp | 218 + .../test/utils/runtime/cla/argv_traverser.hpp | 98 + .../test/utils/runtime/cla/argv_traverser.ipp | 209 + .../utils/runtime/cla/basic_parameter.hpp | 85 + .../test/utils/runtime/cla/char_parameter.hpp | 98 + .../test/utils/runtime/cla/char_parameter.ipp | 57 + .../cla/detail/argument_value_usage.hpp | 82 + .../utils/runtime/cla/dual_name_parameter.hpp | 96 + .../utils/runtime/cla/dual_name_parameter.ipp | 90 + external/boost/test/utils/runtime/cla/fwd.hpp | 55 + .../test/utils/runtime/cla/id_policy.hpp | 145 + .../test/utils/runtime/cla/id_policy.ipp | 118 + .../runtime/cla/iface/argument_factory.hpp | 51 + .../utils/runtime/cla/iface/id_policy.hpp | 73 + .../boost/test/utils/runtime/cla/modifier.hpp | 69 + .../utils/runtime/cla/named_parameter.hpp | 93 + .../utils/runtime/cla/named_parameter.ipp | 129 + .../test/utils/runtime/cla/parameter.hpp | 150 + .../boost/test/utils/runtime/cla/parser.hpp | 153 + .../boost/test/utils/runtime/cla/parser.ipp | 258 + .../utils/runtime/cla/typed_parameter.hpp | 70 + .../test/utils/runtime/cla/validation.hpp | 55 + .../test/utils/runtime/cla/validation.ipp | 65 + .../utils/runtime/cla/value_generator.hpp | 81 + .../test/utils/runtime/cla/value_handler.hpp | 57 + external/boost/test/utils/runtime/config.hpp | 156 + .../test/utils/runtime/env/environment.hpp | 172 + .../test/utils/runtime/env/environment.ipp | 125 + external/boost/test/utils/runtime/env/fwd.hpp | 54 + .../boost/test/utils/runtime/env/modifier.hpp | 47 + .../boost/test/utils/runtime/env/variable.hpp | 223 + external/boost/test/utils/runtime/fwd.hpp | 41 + .../runtime/interpret_argument_value.hpp | 163 + .../boost/test/utils/runtime/parameter.hpp | 38 + external/boost/test/utils/runtime/trace.hpp | 30 + .../boost/test/utils/runtime/validation.hpp | 82 + .../boost/test/utils/trivial_singleton.hpp | 74 + .../boost/test/utils/wrap_stringstream.hpp | 164 + external/boost/test/utils/xml_printer.hpp | 118 + external/boost/thread/condition.hpp | 16 + external/boost/thread/condition_variable.hpp | 21 + external/boost/thread/detail/config.hpp | 115 + external/boost/thread/detail/move.hpp | 66 + external/boost/thread/detail/platform.hpp | 71 + external/boost/thread/detail/thread.hpp | 548 + external/boost/thread/detail/thread_group.hpp | 108 + .../boost/thread/detail/thread_heap_alloc.hpp | 23 + .../thread/detail/thread_interruption.hpp | 35 + external/boost/thread/detail/tss_hooks.hpp | 65 + external/boost/thread/exceptions.hpp | 182 + external/boost/thread/locks.hpp | 1626 ++ external/boost/thread/mutex.hpp | 21 + external/boost/thread/once.hpp | 33 + .../thread/pthread/condition_variable.hpp | 226 + .../thread/pthread/condition_variable_fwd.hpp | 111 + external/boost/thread/pthread/mutex.hpp | 239 + external/boost/thread/pthread/once.hpp | 94 + .../pthread/pthread_mutex_scoped_lock.hpp | 64 + .../boost/thread/pthread/shared_mutex.hpp | 303 + external/boost/thread/pthread/thread_data.hpp | 157 + .../thread/pthread/thread_heap_alloc.hpp | 242 + external/boost/thread/pthread/timespec.hpp | 36 + external/boost/thread/shared_mutex.hpp | 21 + external/boost/thread/thread.hpp | 27 + external/boost/thread/thread_time.hpp | 55 + external/boost/thread/tss.hpp | 113 + .../boost/thread/win32/basic_timed_mutex.hpp | 209 + .../boost/thread/win32/condition_variable.hpp | 418 + .../boost/thread/win32/interlocked_read.hpp | 80 + external/boost/thread/win32/mutex.hpp | 69 + external/boost/thread/win32/once.hpp | 205 + external/boost/thread/win32/shared_mutex.hpp | 619 + external/boost/thread/win32/thread_data.hpp | 183 + .../boost/thread/win32/thread_heap_alloc.hpp | 398 + .../boost/thread/win32/thread_primitives.hpp | 416 + external/boost/thread/xtime.hpp | 92 + external/boost/throw_exception.hpp | 91 + external/boost/timer.hpp | 72 + external/boost/token_functions.hpp | 665 + external/boost/token_iterator.hpp | 128 + external/boost/tokenizer.hpp | 98 + external/boost/type.hpp | 18 + external/boost/type_traits/add_const.hpp | 47 + external/boost/type_traits/add_cv.hpp | 48 + external/boost/type_traits/add_pointer.hpp | 72 + external/boost/type_traits/add_reference.hpp | 107 + .../type_traits/add_rvalue_reference.hpp | 66 + external/boost/type_traits/add_volatile.hpp | 47 + external/boost/type_traits/alignment_of.hpp | 128 + .../boost/type_traits/arithmetic_traits.hpp | 20 + .../type_traits/broken_compiler_spec.hpp | 117 + .../boost/type_traits/composite_traits.hpp | 29 + external/boost/type_traits/config.hpp | 76 + .../boost/type_traits/conversion_traits.hpp | 17 + external/boost/type_traits/cv_traits.hpp | 24 + external/boost/type_traits/decay.hpp | 44 + .../type_traits/detail/bool_trait_def.hpp | 196 + .../type_traits/detail/bool_trait_undef.hpp | 28 + .../type_traits/detail/cv_traits_impl.hpp | 97 + .../boost/type_traits/detail/false_result.hpp | 28 + external/boost/type_traits/detail/ice_and.hpp | 35 + external/boost/type_traits/detail/ice_eq.hpp | 36 + external/boost/type_traits/detail/ice_not.hpp | 31 + external/boost/type_traits/detail/ice_or.hpp | 34 + .../detail/is_function_ptr_helper.hpp | 220 + .../detail/is_function_ptr_tester.hpp | 654 + .../detail/is_mem_fun_pointer_impl.hpp | 817 + .../detail/is_mem_fun_pointer_tester.hpp | 2759 ++ .../type_traits/detail/size_t_trait_def.hpp | 60 + .../type_traits/detail/size_t_trait_undef.hpp | 16 + .../detail/template_arity_spec.hpp | 31 + .../type_traits/detail/type_trait_def.hpp | 67 + .../type_traits/detail/type_trait_undef.hpp | 19 + external/boost/type_traits/detail/wrap.hpp | 18 + .../boost/type_traits/detail/yes_no_type.hpp | 26 + .../type_traits/has_nothrow_constructor.hpp | 53 + .../boost/type_traits/has_nothrow_copy.hpp | 53 + .../type_traits/has_trivial_constructor.hpp | 51 + .../boost/type_traits/has_trivial_copy.hpp | 64 + .../type_traits/has_trivial_destructor.hpp | 49 + external/boost/type_traits/ice.hpp | 20 + .../boost/type_traits/integral_constant.hpp | 53 + external/boost/type_traits/intrinsics.hpp | 288 + external/boost/type_traits/is_abstract.hpp | 153 + external/boost/type_traits/is_arithmetic.hpp | 51 + external/boost/type_traits/is_array.hpp | 91 + .../boost/type_traits/is_base_and_derived.hpp | 254 + external/boost/type_traits/is_base_of.hpp | 51 + external/boost/type_traits/is_class.hpp | 140 + external/boost/type_traits/is_const.hpp | 165 + external/boost/type_traits/is_convertible.hpp | 431 + external/boost/type_traits/is_enum.hpp | 189 + external/boost/type_traits/is_float.hpp | 27 + .../boost/type_traits/is_floating_point.hpp | 27 + external/boost/type_traits/is_function.hpp | 106 + external/boost/type_traits/is_fundamental.hpp | 45 + external/boost/type_traits/is_integral.hpp | 78 + .../boost/type_traits/is_lvalue_reference.hpp | 118 + .../is_member_function_pointer.hpp | 136 + .../boost/type_traits/is_member_pointer.hpp | 116 + external/boost/type_traits/is_pod.hpp | 143 + external/boost/type_traits/is_pointer.hpp | 162 + external/boost/type_traits/is_polymorphic.hpp | 114 + external/boost/type_traits/is_reference.hpp | 45 + .../boost/type_traits/is_rvalue_reference.hpp | 29 + external/boost/type_traits/is_same.hpp | 103 + external/boost/type_traits/is_scalar.hpp | 55 + external/boost/type_traits/is_signed.hpp | 140 + external/boost/type_traits/is_union.hpp | 57 + external/boost/type_traits/is_unsigned.hpp | 135 + external/boost/type_traits/is_void.hpp | 38 + external/boost/type_traits/is_volatile.hpp | 152 + external/boost/type_traits/make_unsigned.hpp | 137 + .../boost/type_traits/msvc/remove_bounds.hpp | 43 + .../boost/type_traits/msvc/remove_const.hpp | 143 + external/boost/type_traits/msvc/remove_cv.hpp | 190 + .../boost/type_traits/msvc/remove_pointer.hpp | 42 + .../type_traits/msvc/remove_reference.hpp | 42 + .../type_traits/msvc/remove_volatile.hpp | 143 + external/boost/type_traits/msvc/typeof.hpp | 50 + external/boost/type_traits/remove_bounds.hpp | 48 + external/boost/type_traits/remove_const.hpp | 90 + external/boost/type_traits/remove_cv.hpp | 84 + external/boost/type_traits/remove_pointer.hpp | 92 + .../boost/type_traits/remove_reference.hpp | 70 + .../boost/type_traits/remove_volatile.hpp | 88 + .../boost/type_traits/type_with_alignment.hpp | 399 + external/boost/units/detail/utility.hpp | 104 + external/boost/utility.hpp | 20 + external/boost/utility/addressof.hpp | 102 + external/boost/utility/base_from_member.hpp | 87 + external/boost/utility/binary.hpp | 708 + external/boost/utility/compare_pointees.hpp | 68 + .../detail/in_place_factory_prefix.hpp | 36 + .../detail/in_place_factory_suffix.hpp | 23 + external/boost/utility/enable_if.hpp | 119 + external/boost/utility/in_place_factory.hpp | 88 + external/boost/utility/swap.hpp | 55 + external/boost/utility/value_init.hpp | 258 + external/boost/version.hpp | 35 + external/boost/visit_each.hpp | 29 + external/boost/weak_ptr.hpp | 18 + external/boostcpp.jam | 575 + external/bootstrap.bat | 81 + external/bootstrap.log | 29 + external/bootstrap.sh | 397 + external/doc/src/minimal.css | 22 + external/libs/config/test/config_info.cpp | 1141 + external/libs/date_time/build/Jamfile.v2 | 34 + external/libs/date_time/src/date_time.doc | 72 + .../src/gregorian/date_generators.cpp | 38 + .../date_time/src/gregorian/greg_month.cpp | 173 + .../date_time/src/gregorian/greg_names.hpp | 43 + .../date_time/src/gregorian/greg_weekday.cpp | 50 + .../src/gregorian/gregorian_types.cpp | 62 + .../src/posix_time/posix_time_types.cpp | 35 + external/libs/detail/utf8_codecvt_facet.cpp | 285 + external/libs/filesystem/build/Jamfile.v2 | 61 + external/libs/filesystem/v2/build/Jamfile.v2 | 31 + external/libs/filesystem/v2/doc/design.htm | 353 + external/libs/filesystem/v2/doc/do-list.htm | 42 + external/libs/filesystem/v2/doc/faq.htm | 150 + external/libs/filesystem/v2/doc/i18n.html | 426 + external/libs/filesystem/v2/doc/index.htm | 835 + .../filesystem/v2/doc/portability_guide.htm | 226 + .../libs/filesystem/v2/doc/reference.html | 3094 ++ .../libs/filesystem/v2/example/Jamfile.v2 | 16 + .../libs/filesystem/v2/example/file_size.cpp | 44 + .../libs/filesystem/v2/example/mbcopy.cpp | 92 + .../libs/filesystem/v2/example/mbpath.cpp | 82 + .../libs/filesystem/v2/example/mbpath.hpp | 44 + .../libs/filesystem/v2/example/path_table.cpp | 264 + .../libs/filesystem/v2/example/simple_ls.cpp | 89 + .../libs/filesystem/v2/src/v2_operations.cpp | 1381 + external/libs/filesystem/v2/src/v2_path.cpp | 177 + .../libs/filesystem/v2/src/v2_portability.cpp | 119 + external/libs/filesystem/v2/test/Jamfile.v2 | 43 + .../filesystem/v2/test/convenience_test.cpp | 176 + .../filesystem/v2/test/deprecated_test.cpp | 205 + .../libs/filesystem/v2/test/equivalent.cpp | 39 + .../libs/filesystem/v2/test/fstream_test.cpp | 184 + .../v2/test/large_file_support_test.cpp | 42 + external/libs/filesystem/v2/test/lpath.hpp | 101 + .../filesystem/v2/test/msvc/common.vsprops | 14 + .../convenience_test/convenience_test.vcproj | 197 + .../deprecated_test/deprecated_test.vcproj | 197 + .../filesystem/v2/test/msvc/filesystem-v2.sln | 119 + .../msvc/filesystem_dll/filesystem_dll.vcproj | 207 + .../msvc/fstream_test/fstream_test.vcproj | 199 + .../large_file_support_test.vcproj | 199 + .../v2/test/msvc/mbcopy/mbcopy.vcproj | 199 + .../v2/test/msvc/mbpath/mbpath.vcproj | 195 + .../operations_test/operations_test.vcproj | 197 + .../v2/test/msvc/path_test/path_test.vcproj | 197 + .../v2/test/msvc/simple_ls/simple_ls.vcproj | 195 + .../v2/test/msvc/system_dll/system_dll.vcproj | 193 + .../v2/test/msvc/wide_test/wide_test.vcproj | 198 + .../filesystem/v2/test/operations_test.cpp | 953 + .../libs/filesystem/v2/test/path_test.cpp | 1380 + .../libs/filesystem/v2/test/wide_test.cpp | 169 + external/libs/filesystem/v3/build/Jamfile.v2 | 32 + external/libs/filesystem/v3/doc/Jamfile.v2 | 19 + .../v3/doc/POSIX_filename_encoding.txt | 55 + .../libs/filesystem/v3/doc/deprecated.html | 385 + external/libs/filesystem/v3/doc/design.htm | 353 + external/libs/filesystem/v3/doc/do_list.html | 146 + external/libs/filesystem/v3/doc/faq.htm | 147 + external/libs/filesystem/v3/doc/index.htm | 495 + .../libs/filesystem/v3/doc/path_table.cpp | 260 + .../libs/filesystem/v3/doc/path_table.txt | 50 + .../filesystem/v3/doc/portability_guide.htm | 241 + .../libs/filesystem/v3/doc/reference.html | 3672 +++ .../filesystem/v3/doc/release_history.html | 125 + external/libs/filesystem/v3/doc/src/README | 14 + .../filesystem/v3/doc/src/boost_snippets.html | 124 + external/libs/filesystem/v3/doc/src/build.bat | 5 + .../libs/filesystem/v3/doc/src/source.html | 3562 +++ .../filesystem/v3/doc/src/tr2_snippets.html | 310 + external/libs/filesystem/v3/doc/tutorial.html | 1128 + external/libs/filesystem/v3/doc/v3.html | 151 + .../libs/filesystem/v3/doc/v3_design.html | 192 + .../libs/filesystem/v3/example/Jamfile.v2 | 27 + .../libs/filesystem/v3/example/error_demo.cpp | 185 + .../libs/filesystem/v3/example/file_size.cpp | 44 + .../filesystem/v3/example/file_status.cpp | 117 + .../libs/filesystem/v3/example/mbcopy.cpp | 90 + .../libs/filesystem/v3/example/mbpath.cpp | 80 + .../libs/filesystem/v3/example/mbpath.hpp | 44 + .../libs/filesystem/v3/example/path_info.cpp | 83 + .../libs/filesystem/v3/example/simple_ls.cpp | 91 + external/libs/filesystem/v3/example/stems.cpp | 31 + external/libs/filesystem/v3/example/tchar.cpp | 39 + .../filesystem/v3/example/test/Jamfile.v2 | 31 + .../libs/filesystem/v3/example/test/bld.bat | 7 + .../libs/filesystem/v3/example/test/bld.sh | 8 + .../libs/filesystem/v3/example/test/setup.bat | 13 + .../libs/filesystem/v3/example/test/setup.sh | 19 + external/libs/filesystem/v3/example/tut0.cpp | 25 + external/libs/filesystem/v3/example/tut1.cpp | 23 + external/libs/filesystem/v3/example/tut2.cpp | 40 + external/libs/filesystem/v3/example/tut3.cpp | 56 + external/libs/filesystem/v3/example/tut4.cpp | 65 + external/libs/filesystem/v3/example/tut5.cpp | 52 + external/libs/filesystem/v3/index.html | 14 + .../v3/src/codecvt_error_category.cpp | 93 + .../libs/filesystem/v3/src/operations.cpp | 2210 ++ external/libs/filesystem/v3/src/path.cpp | 847 + .../libs/filesystem/v3/src/path_traits.cpp | 209 + .../libs/filesystem/v3/src/portability.cpp | 128 + .../libs/filesystem/v3/src/unique_path.cpp | 151 + .../filesystem/v3/src/utf8_codecvt_facet.cpp | 27 + .../v3/src/windows_file_codecvt.cpp | 83 + .../v3/src/windows_file_codecvt.hpp | 56 + external/libs/filesystem/v3/test/Jamfile.v2 | 35 + .../filesystem/v3/test/convenience_test.cpp | 180 + .../filesystem/v3/test/deprecated_test.cpp | 251 + .../filesystem/v3/test/design_use_cases.cpp | 81 + .../libs/filesystem/v3/test/equivalent.cpp | 39 + .../libs/filesystem/v3/test/fstream_test.cpp | 173 + .../v3/test/large_file_support_test.cpp | 45 + .../libs/filesystem/v3/test/locale_info.cpp | 88 + .../filesystem/v3/test/long_path_test.cpp | 61 + .../filesystem/v3/test/msvc/common.vsprops | 21 + .../convenience_test/convenience_test.vcproj | 195 + .../deprecated_test/deprecated_test.vcproj | 195 + .../v3/test/msvc/error_demo/error_demo.vcproj | 191 + .../filesystem/v3/test/msvc/filesystem-v3.sln | 173 + .../msvc/filesystem_dll/filesystem_dll.vcproj | 227 + .../msvc/fstream_test/fstream_test.vcproj | 195 + .../operations_test/operations_test.vcproj | 194 + .../operations_unit_test.vcproj | 197 + .../v3/test/msvc/path_test/path_test.vcproj | 195 + .../path_test_dynamic_linkl.vcproj | 201 + .../msvc/path_unit_test/path_unit_test.vcproj | 195 + .../v3/test/msvc/simple_ls/simple_ls.vcproj | 201 + .../v3/test/msvc/system_dll/system_dll.vcproj | 199 + .../msvc/tchar_example/tchar_example.vcproj | 212 + .../filesystem/v3/test/msvc/tut0/tut0.vcproj | 190 + .../filesystem/v3/test/msvc/tut1/tut1.vcproj | 193 + .../filesystem/v3/test/msvc/tut2/tut2.vcproj | 189 + .../filesystem/v3/test/msvc/tut3/tut3.vcproj | 187 + .../filesystem/v3/test/msvc/tut4/tut4.vcproj | 189 + .../v3/test/msvc/wide_test/wide_test.vcproj | 191 + .../filesystem/v3/test/msvc10/common.props | 20 + .../convenience_test/convenience_test.vcxproj | 107 + .../deprecated_test/deprecated_test.vcxproj | 107 + .../msvc10/file_status/file_status.vcxproj | 100 + .../v3/test/msvc10/filesystem-v3.sln | 190 + .../filesystem_dll/filesystem_dll.vcxproj | 110 + .../msvc10/fstream_test/fstream_test.vcxproj | 107 + .../msvc10/locale_info/locale_info.vcxproj | 96 + .../long_path_test/long_path_test.vcxproj | 100 + .../operations_test/operations_test.vcxproj | 106 + .../operations_unit_test.vcxproj | 109 + .../test/msvc10/path_test/path_test.vcxproj | 107 + .../path_unit_test/path_unit_test.vcxproj | 107 + .../v3/test/msvc10/stems/stems.vcxproj | 92 + .../test/msvc10/system_dll/system_dll.vcxproj | 97 + .../v3/test/msvc10/tut1/tut1.vcxproj | 101 + .../v3/test/msvc10/tut2/tut2.vcxproj | 97 + .../v3/test/msvc10/tut3/tut3.vcxproj | 95 + .../v3/test/msvc10/tut4/tut4.vcxproj | 97 + .../v3/test/msvc10/tut5/tut5.vcxproj | 92 + .../v3/test/msvc10/tut6a/tut6a.vcxproj | 92 + .../v3/test/msvc10/tut6b/tut6b.vcxproj | 92 + .../v3/test/msvc10/tut6c/tut6c.vcxproj | 92 + .../windows_attributes.vcxproj | 92 + .../filesystem/v3/test/operations_test.cpp | 2005 ++ .../v3/test/operations_unit_test.cpp | 265 + .../libs/filesystem/v3/test/path_test.cpp | 1811 ++ .../filesystem/v3/test/path_unit_test.cpp | 1037 + .../libs/filesystem/v3/test/test_codecvt.hpp | 79 + .../filesystem/v3/test/windows_attributes.cpp | 108 + .../libs/program_options/build/Jamfile.v2 | 19 + external/libs/program_options/src/cmdline.cpp | 656 + .../libs/program_options/src/config_file.cpp | 196 + external/libs/program_options/src/convert.cpp | 161 + .../src/options_description.cpp | 624 + external/libs/program_options/src/parsers.cpp | 245 + .../src/positional_options.cpp | 53 + external/libs/program_options/src/split.cpp | 62 + .../src/utf8_codecvt_facet.cpp | 21 + .../program_options/src/value_semantic.cpp | 335 + .../program_options/src/variables_map.cpp | 231 + external/libs/program_options/src/winmain.cpp | 100 + external/libs/regex/build/Jamfile.v2 | 153 + external/libs/regex/build/bc_gen.sh | 271 + external/libs/regex/build/bcb6.mak | 1337 + external/libs/regex/build/common.sh | 66 + external/libs/regex/build/gcc-shared.mak | 190 + external/libs/regex/build/gcc.mak | 192 + external/libs/regex/build/gcc_gen.sh | 278 + external/libs/regex/build/generic.mak | 110 + external/libs/regex/build/generic_gen.sh | 154 + external/libs/regex/build/has_icu_test.cpp | 26 + external/libs/regex/build/sun_gen.sh | 225 + external/libs/regex/build/sunpro.mak | 316 + external/libs/regex/build/vc10.mak | 491 + external/libs/regex/build/vc6-stlport.mak | 496 + external/libs/regex/build/vc6.mak | 632 + external/libs/regex/build/vc7-stlport.mak | 496 + external/libs/regex/build/vc7.mak | 632 + external/libs/regex/build/vc71-stlport.mak | 496 + external/libs/regex/build/vc71.mak | 632 + external/libs/regex/build/vc8.mak | 632 + external/libs/regex/build/vc9.mak | 491 + external/libs/regex/build/vc_gen.sh | 509 + external/libs/regex/src/c_regex_traits.cpp | 193 + external/libs/regex/src/cpp_regex_traits.cpp | 117 + external/libs/regex/src/cregex.cpp | 660 + external/libs/regex/src/fileiter.cpp | 925 + external/libs/regex/src/icu.cpp | 507 + external/libs/regex/src/instances.cpp | 32 + external/libs/regex/src/internals.hpp | 35 + external/libs/regex/src/posix_api.cpp | 295 + external/libs/regex/src/regex.cpp | 226 + external/libs/regex/src/regex_debug.cpp | 59 + external/libs/regex/src/regex_raw_buffer.cpp | 70 + .../libs/regex/src/regex_traits_defaults.cpp | 692 + external/libs/regex/src/static_mutex.cpp | 179 + external/libs/regex/src/usinstances.cpp | 81 + external/libs/regex/src/w32_regex_traits.cpp | 650 + external/libs/regex/src/wc_regex_traits.cpp | 301 + external/libs/regex/src/wide_posix_api.cpp | 315 + external/libs/regex/src/winstances.cpp | 35 + .../test/config_info/regex_config_info.cpp | 73 + external/libs/smart_ptr/src/sp_collector.cpp | 270 + .../libs/smart_ptr/src/sp_debug_hooks.cpp | 243 + external/libs/system/build/Jamfile.v2 | 25 + external/libs/system/src/error_code.cpp | 429 + .../system/src/local_free_on_destruction.hpp | 40 + external/libs/test/build/Jamfile.v2 | 111 + .../libs/test/src/compiler_log_formatter.cpp | 18 + external/libs/test/src/cpp_main.cpp | 19 + external/libs/test/src/debug.cpp | 24 + external/libs/test/src/exception_safety.cpp | 19 + external/libs/test/src/execution_monitor.cpp | 18 + external/libs/test/src/framework.cpp | 18 + external/libs/test/src/interaction_based.cpp | 18 + .../libs/test/src/logged_expectations.cpp | 18 + .../libs/test/src/plain_report_formatter.cpp | 18 + external/libs/test/src/progress_monitor.cpp | 18 + external/libs/test/src/results_collector.cpp | 18 + external/libs/test/src/results_reporter.cpp | 18 + external/libs/test/src/test_main.cpp | 18 + external/libs/test/src/test_tools.cpp | 18 + external/libs/test/src/unit_test_log.cpp | 18 + external/libs/test/src/unit_test_main.cpp | 18 + external/libs/test/src/unit_test_monitor.cpp | 18 + .../libs/test/src/unit_test_parameters.cpp | 18 + external/libs/test/src/unit_test_suite.cpp | 18 + external/libs/test/src/xml_log_formatter.cpp | 18 + .../libs/test/src/xml_report_formatter.cpp | 18 + external/libs/thread/build/Jamfile.v2 | 207 + external/libs/thread/src/pthread/once.cpp | 53 + external/libs/thread/src/pthread/thread.cpp | 606 + external/libs/thread/src/pthread/timeconv.inl | 132 + external/libs/thread/src/tss_null.cpp | 38 + external/libs/thread/src/win32/thread.cpp | 633 + external/libs/thread/src/win32/timeconv.inl | 130 + external/libs/thread/src/win32/tss_dll.cpp | 76 + external/libs/thread/src/win32/tss_pe.cpp | 284 + external/project-config.jam | 31 + external/project-config.jam.1 | 34 + external/project-config.jam.2 | 31 + external/stage/lib/libboost_date_time.a | Bin 0 -> 144112 bytes external/stage/lib/libboost_filesystem.a | Bin 0 -> 372282 bytes .../stage/lib/libboost_prg_exec_monitor.a | Bin 0 -> 114866 bytes external/stage/lib/libboost_program_options.a | Bin 0 -> 1123552 bytes external/stage/lib/libboost_regex.a | Bin 0 -> 2465534 bytes external/stage/lib/libboost_system.a | Bin 0 -> 16286 bytes .../stage/lib/libboost_test_exec_monitor.a | Bin 0 -> 1519178 bytes external/stage/lib/libboost_thread.a | Bin 0 -> 236168 bytes .../stage/lib/libboost_unit_test_framework.a | Bin 0 -> 1761774 bytes external/tools/build/boost.css | 65 + external/tools/build/index.html | 21 + external/tools/build/v2/Jamroot.jam | 47 + external/tools/build/v2/boost-build.jam | 8 + external/tools/build/v2/boost.css | 63 + external/tools/build/v2/boost_build.png | Bin 0 -> 7437 bytes external/tools/build/v2/boost_build.svg | 174 + external/tools/build/v2/bootstrap.bat | 49 + external/tools/build/v2/bootstrap.jam | 18 + external/tools/build/v2/bootstrap.sh | 120 + external/tools/build/v2/build-system.jam | 1008 + external/tools/build/v2/build/__init__.py | 0 external/tools/build/v2/build/ac.jam | 198 + external/tools/build/v2/build/alias.jam | 73 + external/tools/build/v2/build/alias.py | 63 + .../tools/build/v2/build/build-request.jam | 322 + .../tools/build/v2/build/build_request.py | 216 + external/tools/build/v2/build/configure.jam | 237 + external/tools/build/v2/build/configure.py | 164 + external/tools/build/v2/build/engine.py | 172 + external/tools/build/v2/build/errors.py | 127 + external/tools/build/v2/build/feature.jam | 1335 + external/tools/build/v2/build/feature.py | 905 + external/tools/build/v2/build/generators.jam | 1408 + external/tools/build/v2/build/generators.py | 1089 + external/tools/build/v2/build/modifiers.jam | 232 + external/tools/build/v2/build/project.ann.py | 996 + external/tools/build/v2/build/project.jam | 1110 + external/tools/build/v2/build/project.py | 1120 + .../tools/build/v2/build/property-set.jam | 481 + external/tools/build/v2/build/property.jam | 788 + external/tools/build/v2/build/property.py | 593 + external/tools/build/v2/build/property_set.py | 449 + external/tools/build/v2/build/readme.txt | 13 + external/tools/build/v2/build/scanner.jam | 153 + external/tools/build/v2/build/scanner.py | 158 + external/tools/build/v2/build/targets.jam | 1659 ++ external/tools/build/v2/build/targets.py | 1401 + external/tools/build/v2/build/toolset.jam | 502 + external/tools/build/v2/build/toolset.py | 398 + external/tools/build/v2/build/type.jam | 425 + external/tools/build/v2/build/type.py | 313 + external/tools/build/v2/build/version.jam | 161 + .../tools/build/v2/build/virtual-target.jam | 1317 + .../tools/build/v2/build/virtual_target.py | 1118 + external/tools/build/v2/build_system.py | 872 + external/tools/build/v2/changes.txt | 317 + external/tools/build/v2/contrib/boost.jam | 321 + external/tools/build/v2/contrib/tntnet.jam | 208 + .../tools/build/v2/contrib/wxFormBuilder.jam | 195 + .../tools/build/v2/debian/boost-build.docs | 4 + .../build/v2/debian/boost-build.examples | 1 + external/tools/build/v2/debian/changelog | 6 + external/tools/build/v2/debian/conffiles | 1 + external/tools/build/v2/debian/control | 13 + external/tools/build/v2/debian/copyright | 0 external/tools/build/v2/debian/excludes | 14 + external/tools/build/v2/debian/rules | 56 + external/tools/build/v2/doc/bjam.qbk | 1696 ++ .../tools/build/v2/doc/development_plan.html | 130 + external/tools/build/v2/doc/history.qbk | 377 + external/tools/build/v2/doc/jamfile.jam | 26 + .../tools/build/v2/doc/src/architecture.xml | 636 + external/tools/build/v2/doc/src/catalog.xml | 9 + external/tools/build/v2/doc/src/extending.xml | 1207 + external/tools/build/v2/doc/src/faq.xml | 458 + external/tools/build/v2/doc/src/fragments.xml | 59 + external/tools/build/v2/doc/src/howto.xml | 34 + external/tools/build/v2/doc/src/install.xml | 150 + external/tools/build/v2/doc/src/overview.xml | 1682 ++ external/tools/build/v2/doc/src/recipes.xml | 11 + external/tools/build/v2/doc/src/reference.xml | 2325 ++ .../tools/build/v2/doc/src/standalone.xml | 47 + external/tools/build/v2/doc/src/tasks.xml | 774 + external/tools/build/v2/doc/src/tutorial.xml | 681 + external/tools/build/v2/doc/src/userman.xml | 40 + external/tools/build/v2/doc/tools.html | 92 + external/tools/build/v2/engine/Jambase | 2473 ++ .../tools/build/v2/engine/bin.linuxx86_64/b2 | Bin 0 -> 266680 bytes .../build/v2/engine/bin.linuxx86_64/bjam | Bin 0 -> 266680 bytes .../tools/build/v2/engine/boehm_gc/AmigaOS.c | 623 + .../build/v2/engine/boehm_gc/BCC_MAKEFILE | 87 + .../tools/build/v2/engine/boehm_gc/ChangeLog | 363 + .../build/v2/engine/boehm_gc/EMX_MAKEFILE | 140 + .../tools/build/v2/engine/boehm_gc/MacOS.c | 156 + .../v2/engine/boehm_gc/MacProjects.sit.hqx | 886 + .../boehm_gc/Mac_files/MacOS_Test_config.h | 91 + .../engine/boehm_gc/Mac_files/MacOS_config.h | 89 + .../v2/engine/boehm_gc/Mac_files/dataend.c | 9 + .../v2/engine/boehm_gc/Mac_files/datastart.c | 9 + .../build/v2/engine/boehm_gc/Makefile.DLLs | 107 + .../build/v2/engine/boehm_gc/Makefile.am | 206 + .../build/v2/engine/boehm_gc/Makefile.direct | 737 + .../build/v2/engine/boehm_gc/Makefile.dj | 428 + .../build/v2/engine/boehm_gc/Makefile.in | 1405 + .../build/v2/engine/boehm_gc/NT_MAKEFILE | 60 + .../boehm_gc/NT_STATIC_THREADS_MAKEFILE | 74 + .../v2/engine/boehm_gc/NT_THREADS_MAKEFILE | 2220 ++ .../boehm_gc/NT_X64_STATIC_THREADS_MAKEFILE | 74 + .../build/v2/engine/boehm_gc/OS2_MAKEFILE | 45 + .../build/v2/engine/boehm_gc/PCR-Makefile | 68 + .../build/v2/engine/boehm_gc/README.QUICK | 88 + .../build/v2/engine/boehm_gc/SMakefile.amiga | 177 + .../build/v2/engine/boehm_gc/WCC_MAKEFILE | 196 + .../build/v2/engine/boehm_gc/acinclude.m4 | 49 + .../tools/build/v2/engine/boehm_gc/aclocal.m4 | 929 + .../build/v2/engine/boehm_gc/add_gc_prefix.c | 20 + .../tools/build/v2/engine/boehm_gc/allchblk.c | 850 + .../tools/build/v2/engine/boehm_gc/alloc.c | 1023 + .../build/v2/engine/boehm_gc/alpha_mach_dep.S | 86 + .../build/v2/engine/boehm_gc/backgraph.c | 469 + .../tools/build/v2/engine/boehm_gc/bdw-gc.pc | 10 + .../build/v2/engine/boehm_gc/bdw-gc.pc.in | 10 + .../tools/build/v2/engine/boehm_gc/blacklst.c | 285 + .../tools/build/v2/engine/boehm_gc/callprocs | 4 + .../build/v2/engine/boehm_gc/checksums.c | 196 + .../tools/build/v2/engine/boehm_gc/compile | 142 + .../build/v2/engine/boehm_gc/config.guess | 1500 + .../tools/build/v2/engine/boehm_gc/config.sub | 1608 ++ .../tools/build/v2/engine/boehm_gc/configure | 23503 ++++++++++++++++ .../build/v2/engine/boehm_gc/configure.ac | 658 + .../build/v2/engine/boehm_gc/configure.host | 61 + .../engine/boehm_gc/configure_atomic_ops.sh | 4 + .../build/v2/engine/boehm_gc/cord/cord.am | 17 + .../build/v2/engine/boehm_gc/cord/cordbscs.c | 919 + .../build/v2/engine/boehm_gc/cord/cordprnt.c | 396 + .../build/v2/engine/boehm_gc/cord/cordtest.c | 235 + .../build/v2/engine/boehm_gc/cord/cordxtra.c | 621 + .../tools/build/v2/engine/boehm_gc/cord/de.c | 603 + .../build/v2/engine/boehm_gc/cord/de_cmds.h | 33 + .../build/v2/engine/boehm_gc/cord/de_win.ICO | Bin 0 -> 766 bytes .../build/v2/engine/boehm_gc/cord/de_win.RC | 78 + .../build/v2/engine/boehm_gc/cord/de_win.c | 370 + .../build/v2/engine/boehm_gc/cord/de_win.h | 103 + .../v2/engine/boehm_gc/darwin_stop_world.c | 599 + .../tools/build/v2/engine/boehm_gc/dbg_mlc.c | 1053 + .../tools/build/v2/engine/boehm_gc/depcomp | 436 + .../build/v2/engine/boehm_gc/digimars.mak | 90 + .../tools/build/v2/engine/boehm_gc/doc/README | 548 + .../v2/engine/boehm_gc/doc/README.DGUX386 | 215 + .../build/v2/engine/boehm_gc/doc/README.Mac | 390 + .../v2/engine/boehm_gc/doc/README.MacOSX | 1 + .../build/v2/engine/boehm_gc/doc/README.OS2 | 6 + .../build/v2/engine/boehm_gc/doc/README.amiga | 322 + .../v2/engine/boehm_gc/doc/README.arm.cross | 68 + .../v2/engine/boehm_gc/doc/README.autoconf | 59 + .../v2/engine/boehm_gc/doc/README.changes | 2594 ++ .../engine/boehm_gc/doc/README.contributors | 57 + .../build/v2/engine/boehm_gc/doc/README.cords | 53 + .../v2/engine/boehm_gc/doc/README.darwin | 142 + .../build/v2/engine/boehm_gc/doc/README.dj | 12 + .../v2/engine/boehm_gc/doc/README.environment | 135 + .../v2/engine/boehm_gc/doc/README.ews4800 | 81 + .../build/v2/engine/boehm_gc/doc/README.hp | 18 + .../build/v2/engine/boehm_gc/doc/README.linux | 131 + .../v2/engine/boehm_gc/doc/README.macros | 82 + .../v2/engine/boehm_gc/doc/README.rs6000 | 9 + .../build/v2/engine/boehm_gc/doc/README.sgi | 41 + .../v2/engine/boehm_gc/doc/README.solaris2 | 64 + .../build/v2/engine/boehm_gc/doc/README.uts | 2 + .../build/v2/engine/boehm_gc/doc/README.win32 | 221 + .../build/v2/engine/boehm_gc/doc/README.win64 | 17 + .../v2/engine/boehm_gc/doc/barrett_diagram | 106 + .../v2/engine/boehm_gc/doc/debugging.html | 306 + .../tools/build/v2/engine/boehm_gc/doc/doc.am | 55 + .../tools/build/v2/engine/boehm_gc/doc/gc.man | 97 + .../build/v2/engine/boehm_gc/doc/gcdescr.html | 621 + .../v2/engine/boehm_gc/doc/gcinterface.html | 278 + .../build/v2/engine/boehm_gc/doc/leak.html | 200 + .../v2/engine/boehm_gc/doc/overview.html | 446 + .../build/v2/engine/boehm_gc/doc/porting.html | 333 + .../build/v2/engine/boehm_gc/doc/scale.html | 210 + .../engine/boehm_gc/doc/simple_example.html | 202 + .../build/v2/engine/boehm_gc/doc/tree.html | 199 + .../tools/build/v2/engine/boehm_gc/dyn_load.c | 1190 + .../tools/build/v2/engine/boehm_gc/finalize.c | 869 + .../tools/build/v2/engine/boehm_gc/gc.mak | 2220 ++ .../tools/build/v2/engine/boehm_gc/gc_cpp.cc | 67 + .../tools/build/v2/engine/boehm_gc/gc_cpp.cpp | 2 + .../build/v2/engine/boehm_gc/gc_dlopen.c | 89 + .../tools/build/v2/engine/boehm_gc/gcj_mlc.c | 245 + .../tools/build/v2/engine/boehm_gc/gcname.c | 13 + .../tools/build/v2/engine/boehm_gc/headers.c | 394 + .../v2/engine/boehm_gc/hpux_test_and_clear.s | 21 + .../engine/boehm_gc/ia64_save_regs_in_stack.s | 12 + .../tools/build/v2/engine/boehm_gc/if_mach.c | 25 + .../build/v2/engine/boehm_gc/if_not_there.c | 38 + .../build/v2/engine/boehm_gc/include/cord.h | 327 + .../build/v2/engine/boehm_gc/include/ec.h | 70 + .../build/v2/engine/boehm_gc/include/gc.h | 1139 + .../v2/engine/boehm_gc/include/gc_allocator.h | 245 + .../boehm_gc/include/gc_amiga_redirects.h | 30 + .../v2/engine/boehm_gc/include/gc_backptr.h | 65 + .../boehm_gc/include/gc_config_macros.h | 179 + .../build/v2/engine/boehm_gc/include/gc_cpp.h | 374 + .../build/v2/engine/boehm_gc/include/gc_gcj.h | 94 + .../v2/engine/boehm_gc/include/gc_inline.h | 128 + .../v2/engine/boehm_gc/include/gc_mark.h | 201 + .../boehm_gc/include/gc_pthread_redirects.h | 54 + .../v2/engine/boehm_gc/include/gc_tiny_fl.h | 89 + .../v2/engine/boehm_gc/include/gc_typed.h | 111 + .../v2/engine/boehm_gc/include/include.am | 54 + .../v2/engine/boehm_gc/include/javaxfc.h | 21 + .../engine/boehm_gc/include/leak_detector.h | 9 + .../v2/engine/boehm_gc/include/new_gc_alloc.h | 484 + .../boehm_gc/include/private/cord_pos.h | 118 + .../include/private/darwin_semaphore.h | 68 + .../include/private/darwin_stop_world.h | 22 + .../engine/boehm_gc/include/private/dbg_mlc.h | 178 + .../engine/boehm_gc/include/private/gc_hdrs.h | 206 + .../boehm_gc/include/private/gc_locks.h | 210 + .../boehm_gc/include/private/gc_pmark.h | 494 + .../engine/boehm_gc/include/private/gc_priv.h | 2040 ++ .../boehm_gc/include/private/gcconfig.h | 2339 ++ .../boehm_gc/include/private/msvc_dbg.h | 69 + .../include/private/pthread_stop_world.h | 11 + .../include/private/pthread_support.h | 84 + .../boehm_gc/include/private/specific.h | 96 + .../include/private/thread_local_alloc.h | 152 + .../v2/engine/boehm_gc/include/weakpointer.h | 221 + .../tools/build/v2/engine/boehm_gc/install-sh | 251 + .../tools/build/v2/engine/boehm_gc/libtool.m4 | 6397 +++++ .../tools/build/v2/engine/boehm_gc/ltmain.sh | 6863 +++++ .../tools/build/v2/engine/boehm_gc/mach_dep.c | 242 + .../tools/build/v2/engine/boehm_gc/malloc.c | 510 + .../tools/build/v2/engine/boehm_gc/mallocx.c | 574 + .../tools/build/v2/engine/boehm_gc/mark.c | 1866 ++ .../tools/build/v2/engine/boehm_gc/mark_rts.c | 617 + .../v2/engine/boehm_gc/mips_sgi_mach_dep.s | 46 + .../v2/engine/boehm_gc/mips_ultrix_mach_dep.s | 26 + .../tools/build/v2/engine/boehm_gc/misc.c | 1177 + .../tools/build/v2/engine/boehm_gc/missing | 336 + .../build/v2/engine/boehm_gc/mkinstalldirs | 101 + .../tools/build/v2/engine/boehm_gc/msvc_dbg.c | 348 + .../tools/build/v2/engine/boehm_gc/new_hblk.c | 201 + .../tools/build/v2/engine/boehm_gc/obj_map.c | 90 + .../tools/build/v2/engine/boehm_gc/os_dep.c | 4333 +++ .../build/v2/engine/boehm_gc/pcr_interface.c | 179 + .../v2/engine/boehm_gc/pthread_stop_world.c | 537 + .../v2/engine/boehm_gc/pthread_support.c | 1495 + .../tools/build/v2/engine/boehm_gc/ptr_chck.c | 283 + .../build/v2/engine/boehm_gc/real_malloc.c | 31 + .../tools/build/v2/engine/boehm_gc/reclaim.c | 608 + .../v2/engine/boehm_gc/rs6000_mach_dep.s | 114 + .../tools/build/v2/engine/boehm_gc/setjmp_t.c | 135 + .../build/v2/engine/boehm_gc/sparc_mach_dep.S | 70 + .../engine/boehm_gc/sparc_netbsd_mach_dep.s | 34 + .../engine/boehm_gc/sparc_sunos4_mach_dep.s | 38 + .../tools/build/v2/engine/boehm_gc/specific.c | 165 + .../tools/build/v2/engine/boehm_gc/stubborn.c | 58 + .../v2/engine/boehm_gc/tests/leak_test.c | 25 + .../build/v2/engine/boehm_gc/tests/middle.c | 26 + .../build/v2/engine/boehm_gc/tests/test.c | 1634 ++ .../v2/engine/boehm_gc/tests/test_cpp.cc | 292 + .../build/v2/engine/boehm_gc/tests/tests.am | 57 + .../engine/boehm_gc/tests/thread_leak_test.c | 45 + .../v2/engine/boehm_gc/thread_local_alloc.c | 310 + .../build/v2/engine/boehm_gc/threadlibs.c | 63 + .../tools/build/v2/engine/boehm_gc/typd_mlc.c | 722 + .../tools/build/v2/engine/boehm_gc/version.h | 30 + .../build/v2/engine/boehm_gc/win32_threads.c | 1570 ++ external/tools/build/v2/engine/boost-jam.spec | 64 + .../tools/build/v2/engine/boost-no-inspect | 1 + external/tools/build/v2/engine/bootstrap/jam0 | Bin 0 -> 269040 bytes external/tools/build/v2/engine/build.bat | 532 + external/tools/build/v2/engine/build.jam | 1070 + external/tools/build/v2/engine/build.sh | 303 + external/tools/build/v2/engine/build_vms.com | 105 + external/tools/build/v2/engine/builtins.c | 2310 ++ external/tools/build/v2/engine/builtins.h | 69 + .../tools/build/v2/engine/bump_version.py | 80 + external/tools/build/v2/engine/class.c | 141 + external/tools/build/v2/engine/class.h | 13 + external/tools/build/v2/engine/command.c | 100 + external/tools/build/v2/engine/command.h | 61 + external/tools/build/v2/engine/compile.c | 1424 + external/tools/build/v2/engine/compile.h | 82 + .../tools/build/v2/engine/debian/changelog | 72 + external/tools/build/v2/engine/debian/control | 16 + .../tools/build/v2/engine/debian/copyright | 25 + .../tools/build/v2/engine/debian/jam.man.sgml | 236 + external/tools/build/v2/engine/debian/rules | 73 + external/tools/build/v2/engine/debug.c | 132 + external/tools/build/v2/engine/debug.h | 54 + external/tools/build/v2/engine/execcmd.h | 45 + external/tools/build/v2/engine/execmac.c | 69 + external/tools/build/v2/engine/execnt.c | 1296 + external/tools/build/v2/engine/execunix.c | 569 + external/tools/build/v2/engine/execvms.c | 161 + external/tools/build/v2/engine/expand.c | 733 + external/tools/build/v2/engine/expand.h | 14 + external/tools/build/v2/engine/filemac.c | 175 + external/tools/build/v2/engine/filent.c | 387 + external/tools/build/v2/engine/fileos2.c | 138 + external/tools/build/v2/engine/filesys.c | 83 + external/tools/build/v2/engine/filesys.h | 60 + external/tools/build/v2/engine/fileunix.c | 501 + external/tools/build/v2/engine/filevms.c | 327 + external/tools/build/v2/engine/frames.c | 22 + external/tools/build/v2/engine/frames.h | 37 + external/tools/build/v2/engine/glob.c | 152 + external/tools/build/v2/engine/hash.c | 459 + external/tools/build/v2/engine/hash.h | 25 + external/tools/build/v2/engine/hcache.c | 434 + external/tools/build/v2/engine/hcache.h | 18 + external/tools/build/v2/engine/hdrmacro.c | 137 + external/tools/build/v2/engine/hdrmacro.h | 14 + external/tools/build/v2/engine/headers.c | 203 + external/tools/build/v2/engine/headers.h | 16 + external/tools/build/v2/engine/jam.c | 632 + external/tools/build/v2/engine/jam.h | 579 + external/tools/build/v2/engine/jambase.c | 1691 ++ external/tools/build/v2/engine/jambase.h | 15 + external/tools/build/v2/engine/jamgram.c | 1830 ++ external/tools/build/v2/engine/jamgram.h | 140 + external/tools/build/v2/engine/jamgram.y | 371 + external/tools/build/v2/engine/jamgram.yy | 329 + external/tools/build/v2/engine/jamgramtab.h | 44 + external/tools/build/v2/engine/lists.c | 339 + external/tools/build/v2/engine/lists.h | 108 + external/tools/build/v2/engine/make.c | 814 + external/tools/build/v2/engine/make.h | 41 + external/tools/build/v2/engine/make1.c | 1145 + external/tools/build/v2/engine/md5.c | 381 + external/tools/build/v2/engine/md5.h | 91 + external/tools/build/v2/engine/mem.c | 75 + external/tools/build/v2/engine/mem.h | 134 + external/tools/build/v2/engine/mkjambase.c | 123 + external/tools/build/v2/engine/modules.c | 168 + external/tools/build/v2/engine/modules.h | 37 + .../tools/build/v2/engine/modules/order.c | 144 + external/tools/build/v2/engine/modules/path.c | 32 + .../build/v2/engine/modules/property-set.c | 110 + .../tools/build/v2/engine/modules/readme.txt | 3 + .../tools/build/v2/engine/modules/regex.c | 96 + .../tools/build/v2/engine/modules/sequence.c | 42 + external/tools/build/v2/engine/modules/set.c | 41 + external/tools/build/v2/engine/native.c | 36 + external/tools/build/v2/engine/native.h | 34 + external/tools/build/v2/engine/newstr.c | 174 + external/tools/build/v2/engine/newstr.h | 14 + external/tools/build/v2/engine/option.c | 94 + external/tools/build/v2/engine/option.h | 23 + external/tools/build/v2/engine/output.c | 125 + external/tools/build/v2/engine/output.h | 29 + external/tools/build/v2/engine/parse.c | 132 + external/tools/build/v2/engine/parse.h | 59 + external/tools/build/v2/engine/patchlevel.h | 17 + external/tools/build/v2/engine/pathmac.c | 252 + external/tools/build/v2/engine/pathsys.h | 91 + external/tools/build/v2/engine/pathunix.c | 457 + external/tools/build/v2/engine/pathvms.c | 406 + external/tools/build/v2/engine/pwd.c | 66 + external/tools/build/v2/engine/pwd.h | 10 + external/tools/build/v2/engine/regexp.c | 1328 + external/tools/build/v2/engine/regexp.h | 32 + external/tools/build/v2/engine/rules.c | 810 + external/tools/build/v2/engine/rules.h | 280 + external/tools/build/v2/engine/scan.c | 418 + external/tools/build/v2/engine/scan.h | 56 + external/tools/build/v2/engine/search.c | 223 + external/tools/build/v2/engine/search.h | 11 + external/tools/build/v2/engine/strings.c | 201 + external/tools/build/v2/engine/strings.h | 34 + external/tools/build/v2/engine/subst.c | 94 + external/tools/build/v2/engine/timestamp.c | 226 + external/tools/build/v2/engine/timestamp.h | 12 + external/tools/build/v2/engine/variable.c | 631 + external/tools/build/v2/engine/variable.h | 35 + external/tools/build/v2/engine/w32_getreg.c | 207 + external/tools/build/v2/engine/yyacc.c | 268 + .../tools/build/v2/example/boost-build.jam | 6 + .../build/v2/example/built_tool/Jamroot.jam | 8 + .../v2/example/built_tool/core/Jamfile.jam | 30 + .../build/v2/example/built_tool/core/a.td | 0 .../build/v2/example/built_tool/core/core.cpp | 5 + .../build/v2/example/built_tool/readme.txt | 5 + .../v2/example/built_tool/tblgen/Jamfile.jam | 4 + .../v2/example/built_tool/tblgen/tblgen.cpp | 9 + .../v2/example/customization/class.verbatim | 7 + .../v2/example/customization/codegen.cpp | 36 + .../v2/example/customization/inline_file.py | 44 + .../v2/example/customization/jamroot.jam | 9 + .../build/v2/example/customization/readme.txt | 11 + .../v2/example/customization/t1.verbatim | 2 + .../v2/example/customization/t2.verbatim | 0 .../v2/example/customization/usage.verbatim | 5 + .../v2/example/customization/verbatim.jam | 51 + .../v2/example/customization/verbatim.py | 47 + .../tools/build/v2/example/generate/REAME.txt | 11 + .../tools/build/v2/example/generate/a.cpp | 10 + .../tools/build/v2/example/generate/gen.jam | 26 + .../tools/build/v2/example/generate/gen.py | 16 + .../build/v2/example/generate/jamroot.jam | 9 + .../build/v2/example/generator/README.txt | 6 + .../tools/build/v2/example/generator/foo.gci | 10 + .../build/v2/example/generator/jamroot.jam | 6 + .../tools/build/v2/example/generator/soap.jam | 77 + .../build/v2/example/gettext/jamfile.jam | 26 + .../build/v2/example/gettext/jamroot.jam | 6 + .../tools/build/v2/example/gettext/main.cpp | 28 + .../tools/build/v2/example/gettext/readme.txt | 24 + .../tools/build/v2/example/gettext/russian.po | 21 + .../tools/build/v2/example/hello/hello.cpp | 16 + .../tools/build/v2/example/hello/jamroot.jam | 1 + .../tools/build/v2/example/hello/readme.txt | 7 + .../build/v2/example/libraries/app/app.cpp | 15 + .../v2/example/libraries/app/jamfile.jam | 9 + .../build/v2/example/libraries/jamroot.jam | 4 + .../v2/example/libraries/util/foo/bar.cpp | 13 + .../example/libraries/util/foo/include/lib1.h | 10 + .../v2/example/libraries/util/foo/jamfile.jam | 9 + external/tools/build/v2/example/make/foo.py | 2 + .../tools/build/v2/example/make/jamroot.jam | 13 + .../tools/build/v2/example/make/main_cpp.pro | 1 + .../tools/build/v2/example/make/readme.txt | 7 + .../build/v2/example/pch/include/pch.hpp | 19 + .../tools/build/v2/example/pch/jamroot.jam | 29 + .../v2/example/pch/source/hello_world.cpp | 15 + .../v2/example/python_modules/jamroot.jam | 8 + .../example/python_modules/python_helpers.jam | 15 + .../example/python_modules/python_helpers.py | 18 + .../v2/example/python_modules/readme.txt | 16 + external/tools/build/v2/example/qt/README.txt | 20 + .../build/v2/example/qt/qt3/hello/canvas.cpp | 73 + .../build/v2/example/qt/qt3/hello/canvas.h | 35 + .../build/v2/example/qt/qt3/hello/jamroot.jam | 13 + .../build/v2/example/qt/qt3/hello/main.cpp | 36 + .../example/qt/qt3/moccable-cpp/jamroot.jam | 11 + .../v2/example/qt/qt3/moccable-cpp/main.cpp | 41 + .../example/qt/qt3/uic/hello_world_widget.ui | 58 + .../build/v2/example/qt/qt3/uic/jamroot.jam | 15 + .../build/v2/example/qt/qt3/uic/main.cpp | 18 + .../build/v2/example/qt/qt4/hello/arrow.cpp | 158 + .../build/v2/example/qt/qt4/hello/arrow.h | 30 + .../build/v2/example/qt/qt4/hello/jamroot.jam | 14 + .../build/v2/example/qt/qt4/hello/main.cpp | 27 + .../example/qt/qt4/moccable-cpp/jamroot.jam | 18 + .../v2/example/qt/qt4/moccable-cpp/main.cpp | 39 + .../example/qt/qt4/uic/hello_world_widget.ui | 55 + .../build/v2/example/qt/qt4/uic/jamroot.jam | 18 + .../build/v2/example/qt/qt4/uic/main.cpp | 23 + external/tools/build/v2/example/variant/a.cpp | 7 + .../build/v2/example/variant/jamfile.jam | 11 + .../build/v2/example/variant/jamroot.jam | 14 + .../build/v2/example/variant/libs/jamfile.jam | 6 + .../tools/build/v2/example/variant/libs/l.cpp | 9 + .../tools/build/v2/example/variant/readme.txt | 11 + .../build/v2/example/versioned/hello.cpp | 12 + .../build/v2/example/versioned/jamfile.jam | 9 + .../build/v2/example/versioned/jamroot.jam | 8 + external/tools/build/v2/exceptions.py | 44 + external/tools/build/v2/hacking.txt | 154 + external/tools/build/v2/index.html | 165 + .../tools/build/v2/kernel/boost-build.jam | 5 + external/tools/build/v2/kernel/bootstrap.jam | 263 + external/tools/build/v2/kernel/bootstrap.py | 25 + external/tools/build/v2/kernel/class.jam | 420 + external/tools/build/v2/kernel/errors.jam | 274 + external/tools/build/v2/kernel/modules.jam | 354 + external/tools/build/v2/manager.py | 110 + external/tools/build/v2/nightly.sh | 30 + external/tools/build/v2/notes/README.txt | 8 + .../tools/build/v2/notes/build_dir_option.txt | 77 + .../build/v2/notes/relative_source_paths.txt | 76 + external/tools/build/v2/options/help.jam | 212 + external/tools/build/v2/release_procedure.txt | 83 + external/tools/build/v2/roll.sh | 66 + external/tools/build/v2/site-config.jam | 4 + external/tools/build/v2/test/BoostBuild.py | 921 + external/tools/build/v2/test/Jamrules | 4 + external/tools/build/v2/test/TestCmd.py | 651 + external/tools/build/v2/test/abs_workdir.py | 34 + .../tools/build/v2/test/absolute_sources.py | 96 + external/tools/build/v2/test/alias.py | 107 + external/tools/build/v2/test/alternatives.py | 113 + external/tools/build/v2/test/assert-equal.jam | 33 + external/tools/build/v2/test/bad_dirname.py | 22 + external/tools/build/v2/test/boost-build.jam | 14 + external/tools/build/v2/test/boostbook.py | 23 + external/tools/build/v2/test/boostbook/a.hpp | 16 + .../tools/build/v2/test/boostbook/docs.xml | 36 + .../tools/build/v2/test/boostbook/jamroot.jam | 3 + external/tools/build/v2/test/build_dir.py | 106 + external/tools/build/v2/test/build_file.py | 170 + external/tools/build/v2/test/build_no.py | 28 + external/tools/build/v2/test/c_file.py | 36 + external/tools/build/v2/test/chain.py | 56 + .../tools/build/v2/test/check-arguments.jam | 71 + .../tools/build/v2/test/check-bindrule.jam | 29 + .../tools/build/v2/test/check-jam-patches.jam | 293 + .../tools/build/v2/test/check-test-tools.jam | 26 + external/tools/build/v2/test/clean.py | 116 + external/tools/build/v2/test/composite.py | 25 + external/tools/build/v2/test/conditionals.py | 47 + external/tools/build/v2/test/conditionals2.py | 43 + external/tools/build/v2/test/conditionals3.py | 30 + .../build/v2/test/conditionals_multiple.py | 297 + external/tools/build/v2/test/configuration.py | 110 + external/tools/build/v2/test/copy_time.py | 76 + external/tools/build/v2/test/core_d12.py | 35 + .../tools/build/v2/test/core_delete_module.py | 51 + .../tools/build/v2/test/core_dependencies.py | 157 + .../tools/build/v2/test/core_import_module.py | 63 + .../tools/build/v2/test/core_modifiers.py | 51 + .../tools/build/v2/test/core_typecheck.py | 47 + external/tools/build/v2/test/core_varnames.py | 38 + .../tools/build/v2/test/custom_generator.py | 66 + external/tools/build/v2/test/default_build.py | 93 + .../tools/build/v2/test/default_features.py | 50 + .../tools/build/v2/test/default_toolset.py | 211 + .../tools/build/v2/test/dependency-test/a.cpp | 17 + .../tools/build/v2/test/dependency-test/a.h | 8 + .../tools/build/v2/test/dependency-test/a_c.c | 12 + .../tools/build/v2/test/dependency-test/b.cpp | 14 + .../tools/build/v2/test/dependency-test/b.h | 8 + .../tools/build/v2/test/dependency-test/c.cpp | 14 + .../tools/build/v2/test/dependency-test/e.cpp | 15 + .../build/v2/test/dependency-test/foo.jam | 34 + .../build/v2/test/dependency-test/foo.py | 26 + .../build/v2/test/dependency-test/jamfile.jam | 25 + .../build/v2/test/dependency-test/jamroot.jam | 7 + .../build/v2/test/dependency-test/src1/a.h | 10 + .../build/v2/test/dependency-test/src1/b.h | 10 + .../build/v2/test/dependency-test/src1/c.h | 8 + .../build/v2/test/dependency-test/src1/z.h | 5 + .../build/v2/test/dependency-test/src2/b.h | 8 + .../tools/build/v2/test/dependency-test/x.foo | 0 .../tools/build/v2/test/dependency-test/y.foo | 0 .../build/v2/test/dependency_property.py | 36 + .../tools/build/v2/test/dependency_test.py | 104 + .../build/v2/test/direct-request-test/a.cpp | 19 + .../build/v2/test/direct-request-test/b.cpp | 22 + .../v2/test/direct-request-test/b_inverse.cpp | 22 + .../v2/test/direct-request-test/jamfile.jam | 13 + .../v2/test/direct-request-test/jamfile2.jam | 9 + .../v2/test/direct-request-test/jamroot.jam | 6 + .../build/v2/test/direct_request_test.py | 40 + .../tools/build/v2/test/disambiguation.py | 32 + external/tools/build/v2/test/dll_path.py | 158 + .../tools/build/v2/test/double_loading.py | 30 + external/tools/build/v2/test/duplicate.py | 38 + external/tools/build/v2/test/echo_args.jam | 20 + external/tools/build/v2/test/empty.jam | 5 + .../tools/build/v2/test/engine/README.txt | 5 + .../build/v2/test/engine/action_status.jam | 28 + .../build/v2/test/engine/actions_quietly.jam | 55 + .../v2/test/engine/builtin_normalize_path.jam | 60 + .../build/v2/test/engine/builtin_shell.jam | 31 + .../test/engine/builtin_w32_getregnames.jam | 17 + .../tools/build/v2/test/engine/option_d2.jam | 50 + .../tools/build/v2/test/engine/option_l.jam | 34 + .../tools/build/v2/test/engine/option_n.jam | 44 + .../build/v2/test/engine/parallel_actions.jam | 91 + .../engine/parallel_multifile_actions_1.jam | 45 + .../engine/parallel_multifile_actions_2.jam | 49 + .../tools/build/v2/test/engine/rule_param.jam | 60 + .../v2/test/engine/stress_var_expand.jam | 14 + .../tools/build/v2/test/engine/target_var.jam | 16 + external/tools/build/v2/test/engine/test.bat | 53 + external/tools/build/v2/test/engine/test.jam | 91 + external/tools/build/v2/test/engine/test.sh | 53 + .../tools/build/v2/test/engine/var_expand.jam | 19 + .../build/v2/test/example_customization.py | 21 + .../tools/build/v2/test/example_gettext.py | 30 + .../tools/build/v2/test/example_libraries.py | 21 + external/tools/build/v2/test/example_make.py | 20 + external/tools/build/v2/test/example_qt4.py | 26 + external/tools/build/v2/test/exit_status.py | 26 + external/tools/build/v2/test/expansion.py | 80 + external/tools/build/v2/test/explicit.py | 64 + .../tools/build/v2/test/file_name_handling.py | 255 + .../build/v2/test/free_features_request.py | 42 + external/tools/build/v2/test/gcc_runtime.py | 33 + .../build/v2/test/generator_selection.py | 140 + .../tools/build/v2/test/generators-test/a.cpp | 22 + .../tools/build/v2/test/generators-test/b.cxx | 10 + .../tools/build/v2/test/generators-test/c.tui | 0 .../tools/build/v2/test/generators-test/d.wd | 0 .../tools/build/v2/test/generators-test/e.cpp | 8 + .../build/v2/test/generators-test/extra.jam | 120 + .../build/v2/test/generators-test/jamfile.jam | 19 + .../build/v2/test/generators-test/jamroot.jam | 95 + .../build/v2/test/generators-test/lex.jam | 26 + .../build/v2/test/generators-test/lib/c.cpp | 10 + .../v2/test/generators-test/lib/jamfile.jam | 9 + .../build/v2/test/generators-test/nm.jam | 43 + .../build/v2/test/generators-test/qt.jam | 34 + .../tools/build/v2/test/generators-test/x.l | 5 + .../build/v2/test/generators-test/y.x_pro | 0 .../tools/build/v2/test/generators-test/z.cpp | 16 + .../tools/build/v2/test/generators_test.py | 30 + .../build/v2/test/implicit_dependency.py | 81 + .../build/v2/test/indirect_conditional.py | 78 + .../tools/build/v2/test/inherit_toolset.py | 59 + .../build/v2/test/inherited_dependency.py | 237 + external/tools/build/v2/test/inline.py | 64 + external/tools/build/v2/test/jamfile.jam | 11 + .../build/v2/test/lib_source_property.py | 45 + external/tools/build/v2/test/library_chain.py | 166 + external/tools/build/v2/test/library_order.py | 100 + .../tools/build/v2/test/library_property.py | 56 + external/tools/build/v2/test/load_dir.py | 81 + external/tools/build/v2/test/load_order.py | 64 + external/tools/build/v2/test/loop.py | 25 + external/tools/build/v2/test/m1-01.py | 61 + external/tools/build/v2/test/m1-02.py | 90 + external/tools/build/v2/test/m1-03.py | 57 + external/tools/build/v2/test/make_rule.py | 58 + .../v2/test/module-actions/boost-build.jam | 5 + .../v2/test/module-actions/bootstrap.jam | 61 + .../tools/build/v2/test/module_actions.py | 53 + external/tools/build/v2/test/ndebug.py | 39 + external/tools/build/v2/test/no_type.py | 23 + external/tools/build/v2/test/notfile.py | 44 + .../tools/build/v2/test/ordered_include.py | 41 + .../tools/build/v2/test/ordered_properties.py | 33 + external/tools/build/v2/test/out_of_tree.py | 39 + external/tools/build/v2/test/path_features.py | 85 + external/tools/build/v2/test/pch.py | 55 + external/tools/build/v2/test/prebuilt.py | 43 + .../tools/build/v2/test/prebuilt/ext/a.cpp | 17 + .../build/v2/test/prebuilt/ext/debug/a.h | 13 + .../build/v2/test/prebuilt/ext/jamfile.jam | 13 + .../build/v2/test/prebuilt/ext/jamfile2.jam | 39 + .../build/v2/test/prebuilt/ext/jamfile3.jam | 46 + .../build/v2/test/prebuilt/ext/jamroot.jam | 5 + .../build/v2/test/prebuilt/ext/release/a.h | 13 + .../tools/build/v2/test/prebuilt/hello.cpp | 20 + .../tools/build/v2/test/prebuilt/jamfile.jam | 13 + .../tools/build/v2/test/prebuilt/jamroot.jam | 4 + external/tools/build/v2/test/preprocessor.py | 53 + external/tools/build/v2/test/print.py | 48 + .../tools/build/v2/test/project-test1.jam | 18 + .../v2/test/project-test1/dir/jamfile.jam | 10 + .../v2/test/project-test1/dir2/jamfile.jam | 9 + .../v2/test/project-test1/dir2/jamroot.jam | 4 + .../build/v2/test/project-test1/jamfile.jam | 10 + .../build/v2/test/project-test1/jamroot.jam | 6 + .../v2/test/project-test1/project-test1.jam | 21 + .../build/v2/test/project-test1/readme.txt | 8 + .../test/project-test1/standalone-project.jam | 12 + .../tools/build/v2/test/project-test3/a.cpp | 8 + .../build/v2/test/project-test3/jamfile.jam | 13 + .../build/v2/test/project-test3/jamroot.jam | 46 + .../build/v2/test/project-test3/lib/b.cpp | 8 + .../v2/test/project-test3/lib/jamfile.jam | 9 + .../build/v2/test/project-test3/lib2/c.cpp | 8 + .../build/v2/test/project-test3/lib2/d.cpp | 8 + .../v2/test/project-test3/lib2/helper/e.cpp | 8 + .../project-test3/lib2/helper/jamfile.jam | 9 + .../v2/test/project-test3/lib2/jamfile.jam | 11 + .../build/v2/test/project-test3/lib3/f.cpp | 8 + .../v2/test/project-test3/lib3/jamfile.jam | 37 + .../v2/test/project-test3/lib3/jamroot.jam | 5 + .../build/v2/test/project-test3/readme.txt | 7 + .../tools/build/v2/test/project-test4/a.cpp | 8 + .../build/v2/test/project-test4/a_gcc.cpp | 8 + .../build/v2/test/project-test4/jamfile.jam | 11 + .../build/v2/test/project-test4/jamfile3.jam | 5 + .../build/v2/test/project-test4/jamfile4.jam | 4 + .../build/v2/test/project-test4/jamfile5.jam | 6 + .../build/v2/test/project-test4/jamroot.jam | 47 + .../build/v2/test/project-test4/lib/b.cpp | 8 + .../v2/test/project-test4/lib/jamfile.jam | 6 + .../v2/test/project-test4/lib/jamfile1.jam | 2 + .../v2/test/project-test4/lib/jamfile2.jam | 4 + .../v2/test/project-test4/lib/jamfile3.jam | 2 + .../v2/test/project-test4/lib2/jamfile.jam | 8 + .../v2/test/project-test4/lib2/jamfile2.jam | 4 + .../build/v2/test/project-test4/readme.txt | 6 + .../build/v2/test/project_dependencies.py | 51 + external/tools/build/v2/test/project_glob.py | 161 + .../build/v2/test/project_root_constants.py | 66 + .../tools/build/v2/test/project_root_rule.py | 34 + external/tools/build/v2/test/project_test1.py | 78 + external/tools/build/v2/test/project_test3.py | 133 + external/tools/build/v2/test/project_test4.py | 65 + .../tools/build/v2/test/property_expansion.py | 29 + external/tools/build/v2/test/qt4.py | 19 + external/tools/build/v2/test/qt4/jamroot.jam | 79 + external/tools/build/v2/test/qt4/mock.cpp | 26 + external/tools/build/v2/test/qt4/mock.h | 21 + external/tools/build/v2/test/qt4/phonon.cpp | 23 + .../tools/build/v2/test/qt4/qt3support.cpp | 29 + .../tools/build/v2/test/qt4/qtassistant.cpp | 21 + external/tools/build/v2/test/qt4/qtcore.cpp | 22 + .../tools/build/v2/test/qt4/qtcorefail.cpp | 23 + .../tools/build/v2/test/qt4/qtdeclarative.cpp | 27 + external/tools/build/v2/test/qt4/qtgui.cpp | 42 + external/tools/build/v2/test/qt4/qthelp.cpp | 22 + .../tools/build/v2/test/qt4/qtmultimedia.cpp | 25 + .../tools/build/v2/test/qt4/qtnetwork.cpp | 33 + external/tools/build/v2/test/qt4/qtscript.cpp | 37 + .../tools/build/v2/test/qt4/qtscripttools.cpp | 47 + external/tools/build/v2/test/qt4/qtsql.cpp | 37 + external/tools/build/v2/test/qt4/qtsvg.cpp | 21 + external/tools/build/v2/test/qt4/qttest.cpp | 30 + external/tools/build/v2/test/qt4/qtwebkit.cpp | 24 + external/tools/build/v2/test/qt4/qtxml.cpp | 29 + .../tools/build/v2/test/qt4/qtxmlpatterns.cpp | 76 + external/tools/build/v2/test/railsys.py | 14 + .../v2/test/railsys/libx/include/test_libx.h | 25 + .../build/v2/test/railsys/libx/jamroot.jam | 13 + .../v2/test/railsys/libx/src/jamfile.jam | 19 + .../v2/test/railsys/libx/src/test_libx.cpp | 15 + .../v2/test/railsys/program/include/test_a.h | 22 + .../build/v2/test/railsys/program/jamfile.jam | 45 + .../build/v2/test/railsys/program/jamroot.jam | 14 + .../v2/test/railsys/program/liba/jamfile.jam | 14 + .../v2/test/railsys/program/liba/test_a.cpp | 17 + .../v2/test/railsys/program/main/jamfile.jam | 12 + .../v2/test/railsys/program/main/main.cpp | 19 + external/tools/build/v2/test/readme.txt | 6 + external/tools/build/v2/test/rebuilds.py | 51 + external/tools/build/v2/test/recursive.jam | 117 + external/tools/build/v2/test/regression.py | 124 + .../tools/build/v2/test/relative_sources.py | 38 + .../tools/build/v2/test/remove_requirement.py | 89 + external/tools/build/v2/test/resolution.py | 37 + external/tools/build/v2/test/searched_lib.py | 187 + external/tools/build/v2/test/skipping.py | 36 + external/tools/build/v2/test/sort_rule.py | 95 + .../tools/build/v2/test/source_locations.py | 42 + external/tools/build/v2/test/stage.py | 258 + external/tools/build/v2/test/standalone.py | 59 + .../test/startup/boost-root/boost-build.jam | 7 + .../startup/boost-root/build/boost-build.jam | 6 + .../startup/boost-root/build/bootstrap.jam | 7 + .../startup/bootstrap-env/boost-build.jam | 5 + .../bootstrap-explicit/boost-build.jam | 6 + .../startup/bootstrap-implicit/readme.txt | 5 + .../startup/no-bootstrap1/boost-build.jam | 6 + .../startup/no-bootstrap1/subdir/readme.txt | 5 + .../startup/no-bootstrap2/boost-build.jam | 6 + .../startup/no-bootstrap3/boost-build.jam | 5 + external/tools/build/v2/test/startup_v1.py | 81 + external/tools/build/v2/test/startup_v2.py | 79 + .../tools/build/v2/test/subdir1/file-to-bind | 1 + external/tools/build/v2/test/suffix.py | 78 + external/tools/build/v2/test/svn_tree.py | 668 + external/tools/build/v2/test/symlink.py | 41 + external/tools/build/v2/test/tag.py | 122 + external/tools/build/v2/test/template.py | 42 + .../build/v2/test/test-config-example.jam | 19 + external/tools/build/v2/test/test.jam | 23 + external/tools/build/v2/test/test1.py | 18 + external/tools/build/v2/test/test2.py | 25 + external/tools/build/v2/test/test2/Jamrules | 0 external/tools/build/v2/test/test2/foo.cpp | 10 + .../tools/build/v2/test/test2/jamfile.jam | 8 + external/tools/build/v2/test/test_all.py | 240 + .../build/v2/test/test_nt_line_length.jam | 39 + .../build/v2/test/test_result_dumping.py | 33 + external/tools/build/v2/test/test_system.html | 618 + .../test/testing-primitives/boost-build.jam | 5 + .../v2/test/testing-primitives/bootstrap.jam | 137 + .../tools/build/v2/test/testing_primitives.py | 30 + .../tools/build/v2/test/testing_support.py | 61 + external/tools/build/v2/test/timedata.py | 155 + external/tools/build/v2/test/tree.py | 120 + external/tools/build/v2/test/unit-tests.jam | 262 + external/tools/build/v2/test/unit_test.py | 36 + external/tools/build/v2/test/unit_tests.py | 13 + external/tools/build/v2/test/unused.py | 35 + external/tools/build/v2/test/unused/a.cpp | 9 + external/tools/build/v2/test/unused/b.cpp | 4 + external/tools/build/v2/test/unused/b.x | 0 .../tools/build/v2/test/unused/jamfile.jam | 11 + .../tools/build/v2/test/unused/jamroot.jam | 57 + .../tools/build/v2/test/use_requirements.py | 295 + external/tools/build/v2/test/using.py | 42 + external/tools/build/v2/test/v1-testing/a.cpp | 5 + external/tools/build/v2/test/v1-testing/b.cpp | 5 + .../build/v2/test/v1-testing/boost-build.jam | 6 + external/tools/build/v2/test/v1-testing/c.cpp | 16 + .../build/v2/test/v1-testing/jamfile.jam | 26 + external/tools/build/v2/test/v1_testing.py | 88 + .../tools/build/v2/test/v1_testing/Jamrules | 0 .../build/v2/test/v1_testing/boost-build.jam | 6 + .../tools/build/v2/test/v1_testing/foo.cpp | 22 + .../build/v2/test/v1_testing/jamfile.jam | 23 + .../build/v2/test/v1_testing/jamroot.jam | 5 + .../build/v2/test/v1_testing/lib-err.cpp | 7 + .../tools/build/v2/test/v1_testing/lib.cpp | 6 + external/tools/build/v2/test/wrapper.py | 38 + external/tools/build/v2/test/wrong_project.py | 41 + external/tools/build/v2/to_merge.sh | 16 + external/tools/build/v2/tools/__init__.py | 0 external/tools/build/v2/tools/acc.jam | 118 + external/tools/build/v2/tools/auto-index.jam | 212 + external/tools/build/v2/tools/bison.jam | 32 + .../tools/build/v2/tools/boostbook-config.jam | 13 + external/tools/build/v2/tools/boostbook.jam | 727 + external/tools/build/v2/tools/borland.jam | 220 + external/tools/build/v2/tools/builtin.jam | 960 + external/tools/build/v2/tools/builtin.py | 718 + external/tools/build/v2/tools/cast.jam | 91 + external/tools/build/v2/tools/cast.py | 69 + .../tools/build/v2/tools/clang-darwin.jam | 170 + external/tools/build/v2/tools/clang-linux.jam | 196 + external/tools/build/v2/tools/clang.jam | 27 + external/tools/build/v2/tools/common.jam | 986 + external/tools/build/v2/tools/common.py | 840 + external/tools/build/v2/tools/como-linux.jam | 103 + external/tools/build/v2/tools/como-win.jam | 117 + external/tools/build/v2/tools/como.jam | 29 + external/tools/build/v2/tools/convert.jam | 62 + external/tools/build/v2/tools/cw-config.jam | 34 + external/tools/build/v2/tools/cw.jam | 246 + external/tools/build/v2/tools/darwin.jam | 568 + external/tools/build/v2/tools/darwin.py | 57 + external/tools/build/v2/tools/dmc.jam | 134 + external/tools/build/v2/tools/docutils.jam | 84 + external/tools/build/v2/tools/doxproc.py | 859 + .../tools/build/v2/tools/doxygen-config.jam | 11 + external/tools/build/v2/tools/doxygen.jam | 776 + .../doxygen/windows-paths-check.doxyfile | 3 + .../v2/tools/doxygen/windows-paths-check.hpp | 0 external/tools/build/v2/tools/fop.jam | 69 + external/tools/build/v2/tools/fortran.jam | 55 + external/tools/build/v2/tools/gcc.jam | 1185 + external/tools/build/v2/tools/gcc.py | 796 + external/tools/build/v2/tools/generate.jam | 108 + external/tools/build/v2/tools/gettext.jam | 230 + external/tools/build/v2/tools/gfortran.jam | 39 + external/tools/build/v2/tools/hp_cxx.jam | 181 + external/tools/build/v2/tools/hpfortran.jam | 35 + external/tools/build/v2/tools/ifort.jam | 44 + .../tools/build/v2/tools/intel-darwin.jam | 220 + external/tools/build/v2/tools/intel-linux.jam | 250 + external/tools/build/v2/tools/intel-win.jam | 184 + external/tools/build/v2/tools/intel.jam | 34 + external/tools/build/v2/tools/lex.jam | 33 + external/tools/build/v2/tools/make.jam | 72 + external/tools/build/v2/tools/make.py | 59 + external/tools/build/v2/tools/mc.jam | 44 + external/tools/build/v2/tools/message.jam | 55 + external/tools/build/v2/tools/message.py | 46 + external/tools/build/v2/tools/midl.jam | 142 + external/tools/build/v2/tools/mipspro.jam | 145 + external/tools/build/v2/tools/mpi.jam | 583 + external/tools/build/v2/tools/msvc-config.jam | 12 + external/tools/build/v2/tools/msvc.jam | 1392 + external/tools/build/v2/tools/notfile.jam | 74 + external/tools/build/v2/tools/notfile.py | 51 + external/tools/build/v2/tools/package.jam | 165 + external/tools/build/v2/tools/package.py | 168 + external/tools/build/v2/tools/pathscale.jam | 168 + external/tools/build/v2/tools/pch.jam | 95 + external/tools/build/v2/tools/pch.py | 83 + external/tools/build/v2/tools/pgi.jam | 147 + .../tools/build/v2/tools/python-config.jam | 27 + external/tools/build/v2/tools/python.jam | 1267 + external/tools/build/v2/tools/qcc.jam | 236 + external/tools/build/v2/tools/qt.jam | 17 + external/tools/build/v2/tools/qt3.jam | 209 + external/tools/build/v2/tools/qt4.jam | 724 + .../tools/build/v2/tools/quickbook-config.jam | 44 + external/tools/build/v2/tools/quickbook.jam | 361 + external/tools/build/v2/tools/rc.jam | 156 + external/tools/build/v2/tools/rc.py | 189 + external/tools/build/v2/tools/stage.jam | 524 + external/tools/build/v2/tools/stage.py | 350 + external/tools/build/v2/tools/stlport.jam | 303 + external/tools/build/v2/tools/sun.jam | 142 + external/tools/build/v2/tools/symlink.jam | 140 + external/tools/build/v2/tools/symlink.py | 112 + external/tools/build/v2/tools/testing-aux.jam | 210 + external/tools/build/v2/tools/testing.jam | 581 + external/tools/build/v2/tools/testing.py | 342 + .../tools/build/v2/tools/types/__init__.py | 18 + external/tools/build/v2/tools/types/asm.jam | 4 + external/tools/build/v2/tools/types/asm.py | 13 + external/tools/build/v2/tools/types/cpp.jam | 86 + external/tools/build/v2/tools/types/cpp.py | 10 + external/tools/build/v2/tools/types/exe.jam | 9 + external/tools/build/v2/tools/types/exe.py | 11 + external/tools/build/v2/tools/types/html.jam | 4 + external/tools/build/v2/tools/types/html.py | 10 + external/tools/build/v2/tools/types/lib.jam | 74 + external/tools/build/v2/tools/types/lib.py | 77 + external/tools/build/v2/tools/types/obj.jam | 9 + external/tools/build/v2/tools/types/obj.py | 11 + external/tools/build/v2/tools/types/objc.jam | 26 + .../build/v2/tools/types/preprocessed.jam | 9 + external/tools/build/v2/tools/types/qt.jam | 10 + .../tools/build/v2/tools/types/register.jam | 39 + external/tools/build/v2/tools/types/rsp.jam | 4 + external/tools/build/v2/tools/types/rsp.py | 10 + external/tools/build/v2/tools/unix.jam | 224 + external/tools/build/v2/tools/unix.py | 150 + external/tools/build/v2/tools/vacpp.jam | 150 + external/tools/build/v2/tools/whale.jam | 116 + external/tools/build/v2/tools/xlf.jam | 39 + .../tools/build/v2/tools/xsltproc-config.jam | 37 + external/tools/build/v2/tools/xsltproc.jam | 194 + .../build/v2/tools/xsltproc/included.xsl | 11 + .../tools/build/v2/tools/xsltproc/test.xml | 2 + .../tools/build/v2/tools/xsltproc/test.xsl | 12 + external/tools/build/v2/tools/zlib.jam | 92 + external/tools/build/v2/user-config.jam | 92 + external/tools/build/v2/util/__init__.py | 136 + external/tools/build/v2/util/assert.jam | 336 + external/tools/build/v2/util/container.jam | 339 + external/tools/build/v2/util/doc.jam | 997 + external/tools/build/v2/util/indirect.jam | 115 + external/tools/build/v2/util/indirect.py | 15 + external/tools/build/v2/util/logger.py | 46 + external/tools/build/v2/util/numbers.jam | 218 + external/tools/build/v2/util/option.jam | 109 + external/tools/build/v2/util/option.py | 35 + external/tools/build/v2/util/order.jam | 169 + external/tools/build/v2/util/order.py | 121 + external/tools/build/v2/util/os.jam | 171 + external/tools/build/v2/util/os_j.py | 19 + external/tools/build/v2/util/path.jam | 934 + external/tools/build/v2/util/path.py | 904 + external/tools/build/v2/util/print.jam | 488 + external/tools/build/v2/util/regex.jam | 193 + external/tools/build/v2/util/regex.py | 25 + external/tools/build/v2/util/sequence.jam | 335 + external/tools/build/v2/util/sequence.py | 50 + external/tools/build/v2/util/set.jam | 93 + external/tools/build/v2/util/set.py | 42 + external/tools/build/v2/util/string.jam | 189 + external/tools/build/v2/util/utility.jam | 235 + external/tools/build/v2/util/utility.py | 155 + extra/lcs.c | 50 + extra/sdbf_test.cc | 40 + extra/sdhash-pcap.c | 83 + libsdbf.a | Bin 0 -> 1064142 bytes lz4/lz4.cc | 863 + lz4/lz4.h | 117 + lz4/lz4.o | Bin 0 -> 8680 bytes man/sdhash-cli.1 | 260 + man/sdhash-cli.pod | 155 + man/sdhash-srv.1 | 198 + man/sdhash-srv.pod | 88 + man/sdhash.1 | 335 + man/sdhash.pod | 228 + sdbf/base64.cc | 41 + sdbf/base64.o | Bin 0 -> 2512 bytes sdbf/bf_utils.cc | 380 + sdbf/bf_utils.o | Bin 0 -> 206184 bytes sdbf/bloom_filter.cc | 440 + sdbf/bloom_filter.h | 101 + sdbf/bloom_filter.o | Bin 0 -> 265560 bytes sdbf/entr64.cc | 72 + sdbf/entr64.o | Bin 0 -> 3648 bytes sdbf/error.cc | 66 + sdbf/error.o | Bin 0 -> 3584 bytes sdbf/index_info.h | 19 + sdbf/map_file.cc | 58 + sdbf/map_file.o | Bin 0 -> 17104 bytes sdbf/sdbf_class.cc | 413 + sdbf/sdbf_class.h | 118 + sdbf/sdbf_class.o | Bin 0 -> 76192 bytes sdbf/sdbf_conf.cc | 144 + sdbf/sdbf_conf.h | 58 + sdbf/sdbf_conf.o | Bin 0 -> 7752 bytes sdbf/sdbf_core.cc | 630 + sdbf/sdbf_core.o | Bin 0 -> 285008 bytes sdbf/sdbf_defines.h | 128 + sdbf/sdbf_set.cc | 412 + sdbf/sdbf_set.h | 97 + sdbf/sdbf_set.o | Bin 0 -> 101448 bytes sdbf/util.h | 36 + sdhash-gpu/Makefile | 21 + sdhash-gpu/matrixCompare.cpp | 190 + sdhash-gpu/matrixCompare.cu | 509 + sdhash-gpu/matrixCompare.h | 12 + sdhash-gpu/matrixCompare_vs2010.sln | 26 + sdhash-gpu/matrixCompare_vs2010.vcxproj | 238 + sdhash-gpu/readme.txt | 86 + sdhash-server/Makefile | 31 + sdhash-server/gen-cpp/sdhashsrv.cpp | 5323 ++++ sdhash-server/gen-cpp/sdhashsrv.h | 2629 ++ sdhash-server/gen-cpp/sdhashsrv_constants.cpp | 17 + sdhash-server/gen-cpp/sdhashsrv_constants.h | 24 + .../gen-cpp/sdhashsrv_server.skeleton.cpp | 144 + sdhash-server/gen-cpp/sdhashsrv_types.cpp | 76 + sdhash-server/gen-cpp/sdhashsrv_types.h | 70 + sdhash-server/gen-py/__init__.py | 0 sdhash-server/gen-py/sdhashsrv/__init__.py | 1 + sdhash-server/gen-py/sdhashsrv/constants.py | 11 + .../gen-py/sdhashsrv/sdhashsrv-remote | 228 + sdhash-server/gen-py/sdhashsrv/sdhashsrv.py | 3383 +++ sdhash-server/gen-py/sdhashsrv/ttypes.py | 95 + sdhash-server/sdhash-srv.cfg.example | 5 + sdhash-server/sdhashsrv.thrift | 45 + sdhash-server/src/sdhash-cli.cc | 281 + sdhash-server/src/sdhash-cli.h | 65 + sdhash-server/src/sdhash-mgr.cc | 73 + sdhash-server/src/sdhash-srv-main.cc | 815 + sdhash-server/src/sdhash-srv-opts.cc | 141 + sdhash-server/src/sdhash-srv.h | 58 + .../src/sdhashsrv_server.skeleton.cpp | 144 + sdhash-server/src/set_list.cc | 214 + sdhash-server/src/set_list.h | 12 + sdhash-src/sdhash.cc | 542 + sdhash-src/sdhash.h | 45 + sdhash-src/sdhash.o | Bin 0 -> 362872 bytes sdhash-src/sdhash_threads.cc | 371 + sdhash-src/sdhash_threads.h | 11 + sdhash-src/sdhash_threads.o | Bin 0 -> 124480 bytes sdhash-ui/cherrypy.conf | 10 + sdhash-ui/cherrypy/LICENSE.txt | 25 + sdhash-ui/cherrypy/__init__.py | 624 + sdhash-ui/cherrypy/_cpchecker.py | 327 + sdhash-ui/cherrypy/_cpcompat.py | 318 + sdhash-ui/cherrypy/_cpconfig.py | 295 + sdhash-ui/cherrypy/_cpdispatch.py | 636 + sdhash-ui/cherrypy/_cperror.py | 556 + sdhash-ui/cherrypy/_cplogging.py | 440 + sdhash-ui/cherrypy/_cpmodpy.py | 344 + sdhash-ui/cherrypy/_cpnative_server.py | 149 + sdhash-ui/cherrypy/_cpreqbody.py | 965 + sdhash-ui/cherrypy/_cprequest.py | 956 + sdhash-ui/cherrypy/_cpserver.py | 205 + sdhash-ui/cherrypy/_cpthreadinglocal.py | 239 + sdhash-ui/cherrypy/_cptools.py | 510 + sdhash-ui/cherrypy/_cptree.py | 290 + sdhash-ui/cherrypy/_cpwsgi.py | 408 + sdhash-ui/cherrypy/_cpwsgi_server.py | 63 + sdhash-ui/cherrypy/cherryd | 109 + sdhash-ui/cherrypy/favicon.ico | Bin 0 -> 1406 bytes sdhash-ui/cherrypy/lib/__init__.py | 45 + sdhash-ui/cherrypy/lib/auth.py | 87 + sdhash-ui/cherrypy/lib/auth_basic.py | 87 + sdhash-ui/cherrypy/lib/auth_digest.py | 365 + sdhash-ui/cherrypy/lib/caching.py | 465 + sdhash-ui/cherrypy/lib/covercp.py | 365 + sdhash-ui/cherrypy/lib/cpstats.py | 662 + sdhash-ui/cherrypy/lib/cptools.py | 617 + sdhash-ui/cherrypy/lib/encoding.py | 388 + sdhash-ui/cherrypy/lib/gctools.py | 214 + sdhash-ui/cherrypy/lib/http.py | 7 + sdhash-ui/cherrypy/lib/httpauth.py | 354 + sdhash-ui/cherrypy/lib/httputil.py | 506 + sdhash-ui/cherrypy/lib/jsontools.py | 87 + sdhash-ui/cherrypy/lib/profiler.py | 208 + sdhash-ui/cherrypy/lib/reprconf.py | 485 + sdhash-ui/cherrypy/lib/sessions.py | 871 + sdhash-ui/cherrypy/lib/static.py | 363 + sdhash-ui/cherrypy/lib/xmlrpcutil.py | 55 + sdhash-ui/cherrypy/process/__init__.py | 14 + sdhash-ui/cherrypy/process/plugins.py | 683 + sdhash-ui/cherrypy/process/servers.py | 427 + sdhash-ui/cherrypy/process/win32.py | 174 + sdhash-ui/cherrypy/process/wspbus.py | 432 + sdhash-ui/cherrypy/scaffold/__init__.py | 61 + sdhash-ui/cherrypy/scaffold/apache-fcgi.conf | 22 + sdhash-ui/cherrypy/scaffold/example.conf | 3 + sdhash-ui/cherrypy/scaffold/site.conf | 14 + .../static/made_with_cherrypy_small.png | Bin 0 -> 7455 bytes sdhash-ui/cherrypy/test/__init__.py | 27 + sdhash-ui/cherrypy/test/_test_decorators.py | 41 + sdhash-ui/cherrypy/test/_test_states_demo.py | 66 + sdhash-ui/cherrypy/test/benchmark.py | 409 + sdhash-ui/cherrypy/test/checkerdemo.py | 47 + sdhash-ui/cherrypy/test/helper.py | 494 + sdhash-ui/cherrypy/test/logtest.py | 188 + sdhash-ui/cherrypy/test/modfastcgi.py | 135 + sdhash-ui/cherrypy/test/modfcgid.py | 125 + sdhash-ui/cherrypy/test/modpy.py | 163 + sdhash-ui/cherrypy/test/modwsgi.py | 148 + sdhash-ui/cherrypy/test/sessiondemo.py | 153 + sdhash-ui/cherrypy/test/static/dirback.jpg | Bin 0 -> 18238 bytes sdhash-ui/cherrypy/test/static/has space.html | 1 + sdhash-ui/cherrypy/test/static/index.html | 1 + sdhash-ui/cherrypy/test/style.css | 1 + sdhash-ui/cherrypy/test/test.pem | 38 + sdhash-ui/cherrypy/test/test_auth_basic.py | 79 + sdhash-ui/cherrypy/test/test_auth_digest.py | 115 + sdhash-ui/cherrypy/test/test_bus.py | 263 + sdhash-ui/cherrypy/test/test_caching.py | 328 + sdhash-ui/cherrypy/test/test_config.py | 256 + sdhash-ui/cherrypy/test/test_config_server.py | 121 + sdhash-ui/cherrypy/test/test_conn.py | 734 + sdhash-ui/cherrypy/test/test_core.py | 688 + .../test/test_dynamicobjectmapping.py | 404 + sdhash-ui/cherrypy/test/test_encoding.py | 363 + sdhash-ui/cherrypy/test/test_etags.py | 83 + sdhash-ui/cherrypy/test/test_http.py | 212 + sdhash-ui/cherrypy/test/test_httpauth.py | 151 + sdhash-ui/cherrypy/test/test_httplib.py | 29 + sdhash-ui/cherrypy/test/test_json.py | 79 + sdhash-ui/cherrypy/test/test_logging.py | 157 + sdhash-ui/cherrypy/test/test_mime.py | 128 + sdhash-ui/cherrypy/test/test_misc_tools.py | 207 + sdhash-ui/cherrypy/test/test_objectmapping.py | 404 + sdhash-ui/cherrypy/test/test_proxy.py | 129 + sdhash-ui/cherrypy/test/test_refleaks.py | 59 + sdhash-ui/cherrypy/test/test_request_obj.py | 737 + sdhash-ui/cherrypy/test/test_routes.py | 69 + sdhash-ui/cherrypy/test/test_session.py | 464 + .../cherrypy/test/test_sessionauthenticate.py | 62 + sdhash-ui/cherrypy/test/test_states.py | 439 + sdhash-ui/cherrypy/test/test_static.py | 300 + sdhash-ui/cherrypy/test/test_tools.py | 399 + sdhash-ui/cherrypy/test/test_tutorials.py | 201 + sdhash-ui/cherrypy/test/test_virtualhost.py | 107 + sdhash-ui/cherrypy/test/test_wsgi_ns.py | 91 + sdhash-ui/cherrypy/test/test_wsgi_vhost.py | 36 + sdhash-ui/cherrypy/test/test_wsgiapps.py | 118 + sdhash-ui/cherrypy/test/test_xmlrpc.py | 179 + sdhash-ui/cherrypy/test/webtest.py | 575 + sdhash-ui/cherrypy/tutorial/README.txt | 16 + sdhash-ui/cherrypy/tutorial/__init__.py | 3 + .../cherrypy/tutorial/bonus-sqlobject.py | 168 + sdhash-ui/cherrypy/tutorial/custom_error.html | 14 + sdhash-ui/cherrypy/tutorial/pdf_file.pdf | Bin 0 -> 85698 bytes .../cherrypy/tutorial/tut01_helloworld.py | 35 + .../cherrypy/tutorial/tut02_expose_methods.py | 32 + .../cherrypy/tutorial/tut03_get_and_post.py | 53 + .../cherrypy/tutorial/tut04_complex_site.py | 98 + .../tutorial/tut05_derived_objects.py | 83 + .../cherrypy/tutorial/tut06_default_method.py | 64 + sdhash-ui/cherrypy/tutorial/tut07_sessions.py | 44 + .../tutorial/tut08_generators_and_yield.py | 47 + sdhash-ui/cherrypy/tutorial/tut09_files.py | 107 + .../cherrypy/tutorial/tut10_http_errors.py | 81 + sdhash-ui/cherrypy/tutorial/tutorial.conf | 4 + sdhash-ui/cherrypy/wsgiserver/__init__.py | 14 + sdhash-ui/cherrypy/wsgiserver/ssl_builtin.py | 91 + .../cherrypy/wsgiserver/ssl_pyopenssl.py | 256 + sdhash-ui/cherrypy/wsgiserver/wsgiserver2.py | 2322 ++ sdhash-ui/cherrypy/wsgiserver/wsgiserver3.py | 2040 ++ sdhash-ui/jinja2/LICENSE | 31 + sdhash-ui/jinja2/__init__.py | 69 + sdhash-ui/jinja2/_debugsupport.c | 78 + sdhash-ui/jinja2/_markupsafe/__init__.py | 225 + sdhash-ui/jinja2/_markupsafe/_bundle.py | 49 + sdhash-ui/jinja2/_markupsafe/_constants.py | 267 + sdhash-ui/jinja2/_markupsafe/_native.py | 45 + sdhash-ui/jinja2/_markupsafe/tests.py | 80 + sdhash-ui/jinja2/_stringdefs.py | 130 + sdhash-ui/jinja2/bccache.py | 301 + sdhash-ui/jinja2/compiler.py | 1649 ++ sdhash-ui/jinja2/constants.py | 32 + sdhash-ui/jinja2/debug.py | 339 + sdhash-ui/jinja2/defaults.py | 40 + sdhash-ui/jinja2/environment.py | 1121 + sdhash-ui/jinja2/exceptions.py | 143 + sdhash-ui/jinja2/ext.py | 612 + sdhash-ui/jinja2/filters.py | 801 + sdhash-ui/jinja2/lexer.py | 681 + sdhash-ui/jinja2/loaders.py | 450 + sdhash-ui/jinja2/meta.py | 102 + sdhash-ui/jinja2/nodes.py | 910 + sdhash-ui/jinja2/optimizer.py | 68 + sdhash-ui/jinja2/parser.py | 896 + sdhash-ui/jinja2/runtime.py | 548 + sdhash-ui/jinja2/sandbox.py | 361 + sdhash-ui/jinja2/tests.py | 161 + sdhash-ui/jinja2/testsuite/__init__.py | 95 + sdhash-ui/jinja2/testsuite/api.py | 245 + sdhash-ui/jinja2/testsuite/core_tags.py | 285 + sdhash-ui/jinja2/testsuite/debug.py | 60 + sdhash-ui/jinja2/testsuite/doctests.py | 29 + sdhash-ui/jinja2/testsuite/ext.py | 455 + sdhash-ui/jinja2/testsuite/filters.py | 356 + sdhash-ui/jinja2/testsuite/imports.py | 141 + sdhash-ui/jinja2/testsuite/inheritance.py | 227 + sdhash-ui/jinja2/testsuite/lexnparse.py | 387 + sdhash-ui/jinja2/testsuite/loader.py | 190 + sdhash-ui/jinja2/testsuite/regression.py | 255 + sdhash-ui/jinja2/testsuite/res/__init__.py | 0 .../testsuite/res/templates/broken.html | 3 + .../testsuite/res/templates/foo/test.html | 1 + .../testsuite/res/templates/syntaxerror.html | 4 + .../jinja2/testsuite/res/templates/test.html | 1 + sdhash-ui/jinja2/testsuite/security.py | 165 + sdhash-ui/jinja2/testsuite/tests.py | 93 + sdhash-ui/jinja2/testsuite/utils.py | 82 + sdhash-ui/jinja2/utils.py | 601 + sdhash-ui/jinja2/visitor.py | 87 + sdhash-ui/sdhashuiserver.py | 29 + sdhash-ui/serverui/__init__.py | 103 + sdhash-ui/serverui/serverconf.py | 5 + sdhash-ui/serverui/view.py | 216 + sdhash-ui/setup.py | 4 + sdhash-ui/thrift/TSCons.py | 33 + sdhash-ui/thrift/TSerialization.py | 34 + sdhash-ui/thrift/Thrift.py | 154 + sdhash-ui/thrift/__init__.py | 20 + sdhash.cfg.example | 4 + sdhash.py | 128 + 3462 files changed, 695376 insertions(+) create mode 100644 BUILD.windows create mode 100644 ChangeLog create mode 100644 Dockerfile create mode 100644 Doxyfile create mode 100644 INSTALL create mode 100644 INSTALL.macosx create mode 100644 INSTALL.server create mode 100644 LICENSE copy create mode 100644 Makefile create mode 100644 NOTICE create mode 100644 README copy.md create mode 100644 README.beta-ui create mode 100644 README.files create mode 100644 README.swig-python create mode 100644 base64/modp_b64.cc create mode 100644 base64/modp_b64.h create mode 100644 base64/modp_b64.o create mode 100644 base64/modp_b64_data.h create mode 100644 docker-compose.yml create mode 100644 external/INSTALL create mode 100644 external/Jamroot create mode 100644 external/LICENSE_1_0.txt create mode 100755 external/b2 create mode 100644 external/bin.v2/config.log create mode 100644 external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/date_generators.o create mode 100644 external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/greg_month.o create mode 100644 external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/greg_weekday.o create mode 100644 external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/libboost_date_time.a create mode 100644 external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/date_generators.o create mode 100644 external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/greg_month.o create mode 100644 external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/greg_weekday.o create mode 100644 external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/libboost_date_time.a create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/libboost_filesystem.a create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_operations.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_path.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_portability.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/codecvt_error_category.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/operations.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/path.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/path_traits.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/portability.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/unique_path.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/utf8_codecvt_facet.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/windows_file_codecvt.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/libboost_filesystem.a create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v2/src/v2_operations.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v2/src/v2_path.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v2/src/v2_portability.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/codecvt_error_category.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/operations.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/path.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/path_traits.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/portability.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/unique_path.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/utf8_codecvt_facet.o create mode 100644 external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/windows_file_codecvt.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/cmdline.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/config_file.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/convert.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/libboost_program_options.a create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/options_description.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/parsers.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/positional_options.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/split.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/utf8_codecvt_facet.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/value_semantic.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/variables_map.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/winmain.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/cmdline.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/config_file.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/convert.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/libboost_program_options.a create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/options_description.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/parsers.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/positional_options.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/split.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/utf8_codecvt_facet.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/value_semantic.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/variables_map.o create mode 100644 external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/winmain.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/c_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/cpp_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/cregex.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/fileiter.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/icu.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/instances.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/libboost_regex.a create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/posix_api.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex_debug.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex_raw_buffer.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex_traits_defaults.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/static_mutex.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/usinstances.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/w32_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/wc_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/wide_posix_api.o create mode 100644 external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/winstances.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/c_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/cpp_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/cregex.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/fileiter.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/icu.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/instances.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/libboost_regex.a create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/posix_api.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/regex.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/regex_debug.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/regex_raw_buffer.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/regex_traits_defaults.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/static_mutex.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/usinstances.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/w32_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/wc_regex_traits.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/wide_posix_api.o create mode 100644 external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/winstances.o create mode 100644 external/bin.v2/libs/system/build/gcc-13/release/link-static/threading-multi/error_code.o create mode 100644 external/bin.v2/libs/system/build/gcc-13/release/link-static/threading-multi/libboost_system.a create mode 100644 external/bin.v2/libs/system/build/gcc-5.4.0/release/link-static/threading-multi/error_code.o create mode 100644 external/bin.v2/libs/system/build/gcc-5.4.0/release/link-static/threading-multi/libboost_system.a create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/compiler_log_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/cpp_main.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/debug.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/exception_safety.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/execution_monitor.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/framework.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/interaction_based.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_prg_exec_monitor.a create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_test_exec_monitor.a create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_unit_test_framework.a create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/logged_expectations.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/plain_report_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/progress_monitor.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/results_collector.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/results_reporter.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/test_main.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/test_tools.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_log.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_main.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_monitor.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_parameters.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_suite.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/xml_log_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/xml_report_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/compiler_log_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/cpp_main.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/debug.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/exception_safety.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/execution_monitor.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/framework.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/interaction_based.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_prg_exec_monitor.a create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_test_exec_monitor.a create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_unit_test_framework.a create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/logged_expectations.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/plain_report_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/progress_monitor.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/results_collector.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/results_reporter.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/test_main.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/test_tools.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_log.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_main.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_monitor.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_parameters.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_suite.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/xml_log_formatter.o create mode 100644 external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/xml_report_formatter.o create mode 100644 external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/libboost_thread.a create mode 100644 external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/pthread/once.o create mode 100644 external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/pthread/thread.o create mode 100644 external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/libboost_thread.a create mode 100644 external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/pthread/once.o create mode 100644 external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/pthread/thread.o create mode 100755 external/bjam create mode 100644 external/boost-build.jam create mode 100644 external/boost.png create mode 100644 external/boost/algorithm/string/compare.hpp create mode 100644 external/boost/algorithm/string/concept.hpp create mode 100644 external/boost/algorithm/string/config.hpp create mode 100644 external/boost/algorithm/string/constants.hpp create mode 100644 external/boost/algorithm/string/detail/find_format.hpp create mode 100644 external/boost/algorithm/string/detail/find_format_all.hpp create mode 100644 external/boost/algorithm/string/detail/find_format_store.hpp create mode 100644 external/boost/algorithm/string/detail/finder.hpp create mode 100644 external/boost/algorithm/string/detail/formatter.hpp create mode 100644 external/boost/algorithm/string/detail/replace_storage.hpp create mode 100644 external/boost/algorithm/string/detail/sequence.hpp create mode 100644 external/boost/algorithm/string/detail/util.hpp create mode 100644 external/boost/algorithm/string/find_format.hpp create mode 100644 external/boost/algorithm/string/finder.hpp create mode 100644 external/boost/algorithm/string/formatter.hpp create mode 100644 external/boost/algorithm/string/replace.hpp create mode 100644 external/boost/algorithm/string/sequence_traits.hpp create mode 100644 external/boost/algorithm/string/yes_no_type.hpp create mode 100644 external/boost/aligned_storage.hpp create mode 100644 external/boost/any.hpp create mode 100644 external/boost/assert.hpp create mode 100644 external/boost/bind.hpp create mode 100644 external/boost/bind/arg.hpp create mode 100644 external/boost/bind/bind.hpp create mode 100644 external/boost/bind/bind_cc.hpp create mode 100644 external/boost/bind/bind_mf2_cc.hpp create mode 100644 external/boost/bind/bind_mf_cc.hpp create mode 100644 external/boost/bind/bind_template.hpp create mode 100644 external/boost/bind/mem_fn.hpp create mode 100644 external/boost/bind/mem_fn_cc.hpp create mode 100644 external/boost/bind/mem_fn_template.hpp create mode 100644 external/boost/bind/mem_fn_vw.hpp create mode 100644 external/boost/bind/placeholders.hpp create mode 100644 external/boost/bind/storage.hpp create mode 100644 external/boost/call_traits.hpp create mode 100644 external/boost/cerrno.hpp create mode 100644 external/boost/checked_delete.hpp create mode 100644 external/boost/concept/assert.hpp create mode 100644 external/boost/concept/detail/backward_compatibility.hpp create mode 100644 external/boost/concept/detail/borland.hpp create mode 100644 external/boost/concept/detail/concept_def.hpp create mode 100644 external/boost/concept/detail/concept_undef.hpp create mode 100644 external/boost/concept/detail/general.hpp create mode 100644 external/boost/concept/detail/has_constraints.hpp create mode 100644 external/boost/concept/detail/msvc.hpp create mode 100644 external/boost/concept/usage.hpp create mode 100644 external/boost/concept_check.hpp create mode 100644 external/boost/config.hpp create mode 100644 external/boost/config/abi/borland_prefix.hpp create mode 100644 external/boost/config/abi/borland_suffix.hpp create mode 100644 external/boost/config/abi/msvc_prefix.hpp create mode 100644 external/boost/config/abi/msvc_suffix.hpp create mode 100644 external/boost/config/abi_prefix.hpp create mode 100644 external/boost/config/abi_suffix.hpp create mode 100644 external/boost/config/auto_link.hpp create mode 100644 external/boost/config/compiler/borland.hpp create mode 100644 external/boost/config/compiler/clang.hpp create mode 100644 external/boost/config/compiler/codegear.hpp create mode 100644 external/boost/config/compiler/comeau.hpp create mode 100644 external/boost/config/compiler/common_edg.hpp create mode 100644 external/boost/config/compiler/compaq_cxx.hpp create mode 100644 external/boost/config/compiler/cray.hpp create mode 100644 external/boost/config/compiler/digitalmars.hpp create mode 100644 external/boost/config/compiler/gcc.hpp create mode 100644 external/boost/config/compiler/gcc_xml.hpp create mode 100644 external/boost/config/compiler/greenhills.hpp create mode 100644 external/boost/config/compiler/hp_acc.hpp create mode 100644 external/boost/config/compiler/intel.hpp create mode 100644 external/boost/config/compiler/kai.hpp create mode 100644 external/boost/config/compiler/metrowerks.hpp create mode 100644 external/boost/config/compiler/mpw.hpp create mode 100644 external/boost/config/compiler/nvcc.hpp create mode 100644 external/boost/config/compiler/pathscale.hpp create mode 100644 external/boost/config/compiler/pgi.hpp create mode 100644 external/boost/config/compiler/sgi_mipspro.hpp create mode 100644 external/boost/config/compiler/sunpro_cc.hpp create mode 100644 external/boost/config/compiler/vacpp.hpp create mode 100644 external/boost/config/compiler/visualc.hpp create mode 100644 external/boost/config/no_tr1/cmath.hpp create mode 100644 external/boost/config/no_tr1/complex.hpp create mode 100644 external/boost/config/no_tr1/functional.hpp create mode 100644 external/boost/config/no_tr1/memory.hpp create mode 100644 external/boost/config/no_tr1/utility.hpp create mode 100644 external/boost/config/platform/aix.hpp create mode 100644 external/boost/config/platform/amigaos.hpp create mode 100644 external/boost/config/platform/beos.hpp create mode 100644 external/boost/config/platform/bsd.hpp create mode 100644 external/boost/config/platform/cray.hpp create mode 100644 external/boost/config/platform/cygwin.hpp create mode 100644 external/boost/config/platform/hpux.hpp create mode 100644 external/boost/config/platform/irix.hpp create mode 100644 external/boost/config/platform/linux.hpp create mode 100644 external/boost/config/platform/macos.hpp create mode 100644 external/boost/config/platform/qnxnto.hpp create mode 100644 external/boost/config/platform/solaris.hpp create mode 100644 external/boost/config/platform/symbian.hpp create mode 100644 external/boost/config/platform/vms.hpp create mode 100644 external/boost/config/platform/vxworks.hpp create mode 100644 external/boost/config/platform/win32.hpp create mode 100644 external/boost/config/posix_features.hpp create mode 100644 external/boost/config/requires_threads.hpp create mode 100644 external/boost/config/select_compiler_config.hpp create mode 100644 external/boost/config/select_platform_config.hpp create mode 100644 external/boost/config/select_stdlib_config.hpp create mode 100644 external/boost/config/stdlib/dinkumware.hpp create mode 100644 external/boost/config/stdlib/libcomo.hpp create mode 100644 external/boost/config/stdlib/libcpp.hpp create mode 100644 external/boost/config/stdlib/libstdcpp3.hpp create mode 100644 external/boost/config/stdlib/modena.hpp create mode 100644 external/boost/config/stdlib/msl.hpp create mode 100644 external/boost/config/stdlib/roguewave.hpp create mode 100644 external/boost/config/stdlib/sgi.hpp create mode 100644 external/boost/config/stdlib/stlport.hpp create mode 100644 external/boost/config/stdlib/vacpp.hpp create mode 100644 external/boost/config/suffix.hpp create mode 100644 external/boost/config/user.hpp create mode 100644 external/boost/config/warning_disable.hpp create mode 100644 external/boost/container/container_fwd.hpp create mode 100644 external/boost/cregex.hpp create mode 100644 external/boost/cstdint.hpp create mode 100644 external/boost/cstdlib.hpp create mode 100644 external/boost/current_function.hpp create mode 100644 external/boost/date_time/adjust_functors.hpp create mode 100644 external/boost/date_time/c_time.hpp create mode 100644 external/boost/date_time/compiler_config.hpp create mode 100644 external/boost/date_time/constrained_value.hpp create mode 100644 external/boost/date_time/date.hpp create mode 100644 external/boost/date_time/date_clock_device.hpp create mode 100644 external/boost/date_time/date_defs.hpp create mode 100644 external/boost/date_time/date_duration.hpp create mode 100644 external/boost/date_time/date_duration_types.hpp create mode 100644 external/boost/date_time/date_format_simple.hpp create mode 100644 external/boost/date_time/date_formatting.hpp create mode 100644 external/boost/date_time/date_formatting_limited.hpp create mode 100644 external/boost/date_time/date_formatting_locales.hpp create mode 100644 external/boost/date_time/date_generators.hpp create mode 100644 external/boost/date_time/date_iterator.hpp create mode 100644 external/boost/date_time/date_names_put.hpp create mode 100644 external/boost/date_time/date_parsing.hpp create mode 100644 external/boost/date_time/dst_rules.hpp create mode 100644 external/boost/date_time/filetime_functions.hpp create mode 100644 external/boost/date_time/gregorian/conversion.hpp create mode 100644 external/boost/date_time/gregorian/formatters.hpp create mode 100644 external/boost/date_time/gregorian/formatters_limited.hpp create mode 100644 external/boost/date_time/gregorian/greg_calendar.hpp create mode 100644 external/boost/date_time/gregorian/greg_date.hpp create mode 100644 external/boost/date_time/gregorian/greg_day.hpp create mode 100644 external/boost/date_time/gregorian/greg_day_of_year.hpp create mode 100644 external/boost/date_time/gregorian/greg_duration.hpp create mode 100644 external/boost/date_time/gregorian/greg_duration_types.hpp create mode 100644 external/boost/date_time/gregorian/greg_facet.hpp create mode 100644 external/boost/date_time/gregorian/greg_month.hpp create mode 100644 external/boost/date_time/gregorian/greg_weekday.hpp create mode 100644 external/boost/date_time/gregorian/greg_year.hpp create mode 100644 external/boost/date_time/gregorian/greg_ymd.hpp create mode 100644 external/boost/date_time/gregorian/gregorian_types.hpp create mode 100644 external/boost/date_time/gregorian/parsers.hpp create mode 100644 external/boost/date_time/gregorian_calendar.hpp create mode 100644 external/boost/date_time/gregorian_calendar.ipp create mode 100644 external/boost/date_time/int_adapter.hpp create mode 100644 external/boost/date_time/iso_format.hpp create mode 100644 external/boost/date_time/locale_config.hpp create mode 100644 external/boost/date_time/microsec_time_clock.hpp create mode 100644 external/boost/date_time/parse_format_base.hpp create mode 100644 external/boost/date_time/period.hpp create mode 100644 external/boost/date_time/posix_time/conversion.hpp create mode 100644 external/boost/date_time/posix_time/date_duration_operators.hpp create mode 100644 external/boost/date_time/posix_time/posix_time_config.hpp create mode 100644 external/boost/date_time/posix_time/posix_time_duration.hpp create mode 100644 external/boost/date_time/posix_time/posix_time_system.hpp create mode 100644 external/boost/date_time/posix_time/posix_time_types.hpp create mode 100644 external/boost/date_time/posix_time/ptime.hpp create mode 100644 external/boost/date_time/posix_time/time_period.hpp create mode 100644 external/boost/date_time/special_defs.hpp create mode 100644 external/boost/date_time/time.hpp create mode 100644 external/boost/date_time/time_clock.hpp create mode 100644 external/boost/date_time/time_defs.hpp create mode 100644 external/boost/date_time/time_duration.hpp create mode 100644 external/boost/date_time/time_iterator.hpp create mode 100644 external/boost/date_time/time_resolution_traits.hpp create mode 100644 external/boost/date_time/time_system_counted.hpp create mode 100644 external/boost/date_time/time_system_split.hpp create mode 100644 external/boost/date_time/wrapping_int.hpp create mode 100644 external/boost/date_time/year_month_day.hpp create mode 100644 external/boost/detail/binary_search.hpp create mode 100644 external/boost/detail/bitmask.hpp create mode 100644 external/boost/detail/call_traits.hpp create mode 100644 external/boost/detail/container_fwd.hpp create mode 100644 external/boost/detail/endian.hpp create mode 100644 external/boost/detail/fenv.hpp create mode 100644 external/boost/detail/indirect_traits.hpp create mode 100644 external/boost/detail/interlocked.hpp create mode 100644 external/boost/detail/is_function_ref_tester.hpp create mode 100644 external/boost/detail/iterator.hpp create mode 100644 external/boost/detail/lcast_precision.hpp create mode 100644 external/boost/detail/lightweight_main.hpp create mode 100644 external/boost/detail/lightweight_mutex.hpp create mode 100644 external/boost/detail/lightweight_test.hpp create mode 100644 external/boost/detail/limits.hpp create mode 100644 external/boost/detail/no_exceptions_support.hpp create mode 100644 external/boost/detail/ob_call_traits.hpp create mode 100644 external/boost/detail/reference_content.hpp create mode 100644 external/boost/detail/scoped_enum_emulation.hpp create mode 100644 external/boost/detail/sp_typeinfo.hpp create mode 100644 external/boost/detail/utf8_codecvt_facet.hpp create mode 100644 external/boost/detail/workaround.hpp create mode 100644 external/boost/enable_shared_from_this.hpp create mode 100644 external/boost/exception/current_exception_cast.hpp create mode 100644 external/boost/exception/detail/attribute_noreturn.hpp create mode 100644 external/boost/exception/detail/error_info_impl.hpp create mode 100644 external/boost/exception/detail/type_info.hpp create mode 100644 external/boost/exception/exception.hpp create mode 100644 external/boost/exception/get_error_info.hpp create mode 100644 external/boost/filesystem.hpp create mode 100644 external/boost/filesystem/config.hpp create mode 100644 external/boost/filesystem/convenience.hpp create mode 100644 external/boost/filesystem/detail/utf8_codecvt_facet.hpp create mode 100644 external/boost/filesystem/fstream.hpp create mode 100644 external/boost/filesystem/operations.hpp create mode 100644 external/boost/filesystem/path.hpp create mode 100644 external/boost/filesystem/v2/config.hpp create mode 100644 external/boost/filesystem/v2/convenience.hpp create mode 100644 external/boost/filesystem/v2/fstream.hpp create mode 100644 external/boost/filesystem/v2/operations.hpp create mode 100644 external/boost/filesystem/v2/path.hpp create mode 100644 external/boost/filesystem/v3/config.hpp create mode 100644 external/boost/filesystem/v3/convenience.hpp create mode 100644 external/boost/filesystem/v3/fstream.hpp create mode 100644 external/boost/filesystem/v3/operations.hpp create mode 100644 external/boost/filesystem/v3/path.hpp create mode 100644 external/boost/filesystem/v3/path_traits.hpp create mode 100644 external/boost/format.hpp create mode 100644 external/boost/format/alt_sstream.hpp create mode 100644 external/boost/format/alt_sstream_impl.hpp create mode 100644 external/boost/format/detail/compat_workarounds.hpp create mode 100644 external/boost/format/detail/config_macros.hpp create mode 100644 external/boost/format/detail/msvc_disambiguater.hpp create mode 100644 external/boost/format/detail/unset_macros.hpp create mode 100644 external/boost/format/detail/workarounds_gcc-2_95.hpp create mode 100644 external/boost/format/detail/workarounds_stlport.hpp create mode 100644 external/boost/format/exceptions.hpp create mode 100644 external/boost/format/feed_args.hpp create mode 100644 external/boost/format/format_class.hpp create mode 100644 external/boost/format/format_fwd.hpp create mode 100644 external/boost/format/format_implementation.hpp create mode 100644 external/boost/format/free_funcs.hpp create mode 100644 external/boost/format/group.hpp create mode 100644 external/boost/format/internals.hpp create mode 100644 external/boost/format/internals_fwd.hpp create mode 100644 external/boost/format/parsing.hpp create mode 100644 external/boost/function.hpp create mode 100644 external/boost/function/detail/function_iterate.hpp create mode 100644 external/boost/function/detail/gen_maybe_include.pl create mode 100644 external/boost/function/detail/maybe_include.hpp create mode 100644 external/boost/function/detail/prologue.hpp create mode 100644 external/boost/function/function0.hpp create mode 100644 external/boost/function/function1.hpp create mode 100644 external/boost/function/function10.hpp create mode 100644 external/boost/function/function2.hpp create mode 100644 external/boost/function/function3.hpp create mode 100644 external/boost/function/function4.hpp create mode 100644 external/boost/function/function5.hpp create mode 100644 external/boost/function/function6.hpp create mode 100644 external/boost/function/function7.hpp create mode 100644 external/boost/function/function8.hpp create mode 100644 external/boost/function/function9.hpp create mode 100644 external/boost/function/function_base.hpp create mode 100644 external/boost/function/function_fwd.hpp create mode 100644 external/boost/function/function_template.hpp create mode 100644 external/boost/function_equal.hpp create mode 100644 external/boost/functional/hash.hpp create mode 100644 external/boost/functional/hash/detail/float_functions.hpp create mode 100644 external/boost/functional/hash/detail/hash_float.hpp create mode 100644 external/boost/functional/hash/detail/hash_float_generic.hpp create mode 100644 external/boost/functional/hash/detail/hash_float_x86.hpp create mode 100644 external/boost/functional/hash/detail/limits.hpp create mode 100644 external/boost/functional/hash/extensions.hpp create mode 100644 external/boost/functional/hash/hash.hpp create mode 100644 external/boost/functional/hash/hash_fwd.hpp create mode 100644 external/boost/functional/hash_fwd.hpp create mode 100644 external/boost/get_pointer.hpp create mode 100644 external/boost/implicit_cast.hpp create mode 100644 external/boost/integer.hpp create mode 100644 external/boost/integer/integer_mask.hpp create mode 100644 external/boost/integer/static_log2.hpp create mode 100644 external/boost/integer_fwd.hpp create mode 100644 external/boost/integer_traits.hpp create mode 100644 external/boost/interprocess/creation_tags.hpp create mode 100644 external/boost/interprocess/detail/atomic.hpp create mode 100644 external/boost/interprocess/detail/config_begin.hpp create mode 100644 external/boost/interprocess/detail/config_end.hpp create mode 100644 external/boost/interprocess/detail/os_file_functions.hpp create mode 100644 external/boost/interprocess/detail/os_thread_functions.hpp create mode 100644 external/boost/interprocess/detail/posix_time_types_wrk.hpp create mode 100644 external/boost/interprocess/detail/tmp_dir_helpers.hpp create mode 100644 external/boost/interprocess/detail/win32_api.hpp create mode 100644 external/boost/interprocess/detail/workaround.hpp create mode 100644 external/boost/interprocess/errors.hpp create mode 100644 external/boost/interprocess/exceptions.hpp create mode 100644 external/boost/interprocess/interprocess_fwd.hpp create mode 100644 external/boost/interprocess/permissions.hpp create mode 100644 external/boost/interprocess/streams/bufferstream.hpp create mode 100644 external/boost/interprocess/sync/interprocess_semaphore.hpp create mode 100644 external/boost/interprocess/sync/posix/ptime_to_timespec.hpp create mode 100644 external/boost/interprocess/sync/posix/semaphore.hpp create mode 100644 external/boost/interprocess/sync/posix/semaphore_wrapper.hpp create mode 100644 external/boost/interprocess/sync/spin/semaphore.hpp create mode 100644 external/boost/intrusive_ptr.hpp create mode 100644 external/boost/io/detail/quoted_manip.hpp create mode 100644 external/boost/io/ios_state.hpp create mode 100644 external/boost/io_fwd.hpp create mode 100644 external/boost/is_placeholder.hpp create mode 100644 external/boost/iterator.hpp create mode 100644 external/boost/iterator/detail/config_def.hpp create mode 100644 external/boost/iterator/detail/config_undef.hpp create mode 100644 external/boost/iterator/detail/enable_if.hpp create mode 100644 external/boost/iterator/detail/facade_iterator_category.hpp create mode 100644 external/boost/iterator/detail/minimum_category.hpp create mode 100644 external/boost/iterator/interoperable.hpp create mode 100644 external/boost/iterator/iterator_adaptor.hpp create mode 100644 external/boost/iterator/iterator_categories.hpp create mode 100644 external/boost/iterator/iterator_concepts.hpp create mode 100644 external/boost/iterator/iterator_facade.hpp create mode 100644 external/boost/iterator/iterator_traits.hpp create mode 100644 external/boost/iterator/reverse_iterator.hpp create mode 100644 external/boost/lexical_cast.hpp create mode 100644 external/boost/limits.hpp create mode 100644 external/boost/make_shared.hpp create mode 100644 external/boost/math/policies/error_handling.hpp create mode 100644 external/boost/math/policies/policy.hpp create mode 100644 external/boost/math/special_functions/detail/fp_traits.hpp create mode 100644 external/boost/math/special_functions/detail/round_fwd.hpp create mode 100644 external/boost/math/special_functions/fpclassify.hpp create mode 100644 external/boost/math/special_functions/math_fwd.hpp create mode 100644 external/boost/math/special_functions/round.hpp create mode 100644 external/boost/math/special_functions/sign.hpp create mode 100644 external/boost/math/tools/config.hpp create mode 100644 external/boost/math/tools/precision.hpp create mode 100644 external/boost/math/tools/promotion.hpp create mode 100644 external/boost/math/tools/real_cast.hpp create mode 100644 external/boost/math/tools/user.hpp create mode 100644 external/boost/mem_fn.hpp create mode 100644 external/boost/memory_order.hpp create mode 100644 external/boost/move/move.hpp create mode 100644 external/boost/mpl/O1_size.hpp create mode 100644 external/boost/mpl/O1_size_fwd.hpp create mode 100644 external/boost/mpl/advance.hpp create mode 100644 external/boost/mpl/advance_fwd.hpp create mode 100644 external/boost/mpl/always.hpp create mode 100644 external/boost/mpl/and.hpp create mode 100644 external/boost/mpl/apply.hpp create mode 100644 external/boost/mpl/apply_fwd.hpp create mode 100644 external/boost/mpl/apply_wrap.hpp create mode 100644 external/boost/mpl/arg.hpp create mode 100644 external/boost/mpl/arg_fwd.hpp create mode 100644 external/boost/mpl/assert.hpp create mode 100644 external/boost/mpl/at.hpp create mode 100644 external/boost/mpl/at_fwd.hpp create mode 100644 external/boost/mpl/aux_/O1_size_impl.hpp create mode 100644 external/boost/mpl/aux_/adl_barrier.hpp create mode 100644 external/boost/mpl/aux_/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/arg_typedef.hpp create mode 100644 external/boost/mpl/aux_/arithmetic_op.hpp create mode 100644 external/boost/mpl/aux_/arity.hpp create mode 100644 external/boost/mpl/aux_/arity_spec.hpp create mode 100644 external/boost/mpl/aux_/at_impl.hpp create mode 100644 external/boost/mpl/aux_/begin_end_impl.hpp create mode 100644 external/boost/mpl/aux_/clear_impl.hpp create mode 100644 external/boost/mpl/aux_/common_name_wknd.hpp create mode 100644 external/boost/mpl/aux_/comparison_op.hpp create mode 100644 external/boost/mpl/aux_/config/adl.hpp create mode 100644 external/boost/mpl/aux_/config/arrays.hpp create mode 100644 external/boost/mpl/aux_/config/bcc.hpp create mode 100644 external/boost/mpl/aux_/config/bind.hpp create mode 100644 external/boost/mpl/aux_/config/compiler.hpp create mode 100644 external/boost/mpl/aux_/config/ctps.hpp create mode 100644 external/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp create mode 100644 external/boost/mpl/aux_/config/dtp.hpp create mode 100644 external/boost/mpl/aux_/config/eti.hpp create mode 100644 external/boost/mpl/aux_/config/forwarding.hpp create mode 100644 external/boost/mpl/aux_/config/gcc.hpp create mode 100644 external/boost/mpl/aux_/config/has_apply.hpp create mode 100644 external/boost/mpl/aux_/config/has_xxx.hpp create mode 100644 external/boost/mpl/aux_/config/integral.hpp create mode 100644 external/boost/mpl/aux_/config/intel.hpp create mode 100644 external/boost/mpl/aux_/config/lambda.hpp create mode 100644 external/boost/mpl/aux_/config/msvc.hpp create mode 100644 external/boost/mpl/aux_/config/msvc_typename.hpp create mode 100644 external/boost/mpl/aux_/config/nttp.hpp create mode 100644 external/boost/mpl/aux_/config/overload_resolution.hpp create mode 100644 external/boost/mpl/aux_/config/pp_counter.hpp create mode 100644 external/boost/mpl/aux_/config/preprocessor.hpp create mode 100644 external/boost/mpl/aux_/config/static_constant.hpp create mode 100644 external/boost/mpl/aux_/config/ttp.hpp create mode 100644 external/boost/mpl/aux_/config/typeof.hpp create mode 100644 external/boost/mpl/aux_/config/use_preprocessed.hpp create mode 100644 external/boost/mpl/aux_/config/workaround.hpp create mode 100644 external/boost/mpl/aux_/contains_impl.hpp create mode 100644 external/boost/mpl/aux_/count_args.hpp create mode 100644 external/boost/mpl/aux_/find_if_pred.hpp create mode 100644 external/boost/mpl/aux_/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/fold_impl_body.hpp create mode 100644 external/boost/mpl/aux_/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/has_apply.hpp create mode 100644 external/boost/mpl/aux_/has_begin.hpp create mode 100644 external/boost/mpl/aux_/has_rebind.hpp create mode 100644 external/boost/mpl/aux_/has_size.hpp create mode 100644 external/boost/mpl/aux_/has_tag.hpp create mode 100644 external/boost/mpl/aux_/has_type.hpp create mode 100644 external/boost/mpl/aux_/include_preprocessed.hpp create mode 100644 external/boost/mpl/aux_/inserter_algorithm.hpp create mode 100644 external/boost/mpl/aux_/integral_wrapper.hpp create mode 100644 external/boost/mpl/aux_/is_msvc_eti_arg.hpp create mode 100644 external/boost/mpl/aux_/iter_apply.hpp create mode 100644 external/boost/mpl/aux_/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/lambda_arity_param.hpp create mode 100644 external/boost/mpl/aux_/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/lambda_spec.hpp create mode 100644 external/boost/mpl/aux_/lambda_support.hpp create mode 100644 external/boost/mpl/aux_/largest_int.hpp create mode 100644 external/boost/mpl/aux_/logical_op.hpp create mode 100644 external/boost/mpl/aux_/msvc_dtw.hpp create mode 100644 external/boost/mpl/aux_/msvc_eti_base.hpp create mode 100644 external/boost/mpl/aux_/msvc_is_class.hpp create mode 100644 external/boost/mpl/aux_/msvc_never_true.hpp create mode 100644 external/boost/mpl/aux_/msvc_type.hpp create mode 100644 external/boost/mpl/aux_/na.hpp create mode 100644 external/boost/mpl/aux_/na_assert.hpp create mode 100644 external/boost/mpl/aux_/na_fwd.hpp create mode 100644 external/boost/mpl/aux_/na_spec.hpp create mode 100644 external/boost/mpl/aux_/nested_type_wknd.hpp create mode 100644 external/boost/mpl/aux_/nttp_decl.hpp create mode 100644 external/boost/mpl/aux_/numeric_cast_utils.hpp create mode 100644 external/boost/mpl/aux_/numeric_op.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/and.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/apply.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/arg.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/bind.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/bitand.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/bitor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/bitxor.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/deque.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/divides.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/greater.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/inherit.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/less.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/less_equal.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/list.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/list_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/map.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/minus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/modulus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/or.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/placeholders.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/plus.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/quote.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/set.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/set_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/shift_left.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/shift_right.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/template_arity.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/times.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/vector.hpp create mode 100644 external/boost/mpl/aux_/preprocessed/plain/vector_c.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/add.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/def_params_tail.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/default_params.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/enum.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/ext_params.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/filter_params.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/params.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/partial_spec_params.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/range.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/repeat.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/sub.hpp create mode 100644 external/boost/mpl/aux_/preprocessor/tuple.hpp create mode 100644 external/boost/mpl/aux_/push_back_impl.hpp create mode 100644 external/boost/mpl/aux_/push_front_impl.hpp create mode 100644 external/boost/mpl/aux_/reverse_fold_impl.hpp create mode 100644 external/boost/mpl/aux_/reverse_fold_impl_body.hpp create mode 100644 external/boost/mpl/aux_/sequence_wrapper.hpp create mode 100644 external/boost/mpl/aux_/size_impl.hpp create mode 100644 external/boost/mpl/aux_/static_cast.hpp create mode 100644 external/boost/mpl/aux_/template_arity.hpp create mode 100644 external/boost/mpl/aux_/template_arity_fwd.hpp create mode 100644 external/boost/mpl/aux_/traits_lambda_spec.hpp create mode 100644 external/boost/mpl/aux_/type_wrapper.hpp create mode 100644 external/boost/mpl/aux_/unwrap.hpp create mode 100644 external/boost/mpl/aux_/value_wknd.hpp create mode 100644 external/boost/mpl/aux_/yes_no.hpp create mode 100644 external/boost/mpl/back_fwd.hpp create mode 100644 external/boost/mpl/back_inserter.hpp create mode 100644 external/boost/mpl/begin_end.hpp create mode 100644 external/boost/mpl/begin_end_fwd.hpp create mode 100644 external/boost/mpl/bind.hpp create mode 100644 external/boost/mpl/bind_fwd.hpp create mode 100644 external/boost/mpl/bool.hpp create mode 100644 external/boost/mpl/bool_fwd.hpp create mode 100644 external/boost/mpl/clear.hpp create mode 100644 external/boost/mpl/clear_fwd.hpp create mode 100644 external/boost/mpl/comparison.hpp create mode 100644 external/boost/mpl/contains.hpp create mode 100644 external/boost/mpl/contains_fwd.hpp create mode 100644 external/boost/mpl/deref.hpp create mode 100644 external/boost/mpl/distance.hpp create mode 100644 external/boost/mpl/distance_fwd.hpp create mode 100644 external/boost/mpl/empty_fwd.hpp create mode 100644 external/boost/mpl/equal_to.hpp create mode 100644 external/boost/mpl/eval_if.hpp create mode 100644 external/boost/mpl/find.hpp create mode 100644 external/boost/mpl/find_if.hpp create mode 100644 external/boost/mpl/fold.hpp create mode 100644 external/boost/mpl/for_each.hpp create mode 100644 external/boost/mpl/front_fwd.hpp create mode 100644 external/boost/mpl/front_inserter.hpp create mode 100644 external/boost/mpl/greater.hpp create mode 100644 external/boost/mpl/greater_equal.hpp create mode 100644 external/boost/mpl/has_xxx.hpp create mode 100644 external/boost/mpl/identity.hpp create mode 100644 external/boost/mpl/if.hpp create mode 100644 external/boost/mpl/inserter.hpp create mode 100644 external/boost/mpl/int.hpp create mode 100644 external/boost/mpl/int_fwd.hpp create mode 100644 external/boost/mpl/integral_c.hpp create mode 100644 external/boost/mpl/integral_c_fwd.hpp create mode 100644 external/boost/mpl/integral_c_tag.hpp create mode 100644 external/boost/mpl/is_placeholder.hpp create mode 100644 external/boost/mpl/is_sequence.hpp create mode 100644 external/boost/mpl/iter_fold.hpp create mode 100644 external/boost/mpl/iter_fold_if.hpp create mode 100644 external/boost/mpl/iterator_range.hpp create mode 100644 external/boost/mpl/iterator_tags.hpp create mode 100644 external/boost/mpl/lambda.hpp create mode 100644 external/boost/mpl/lambda_fwd.hpp create mode 100644 external/boost/mpl/less.hpp create mode 100644 external/boost/mpl/less_equal.hpp create mode 100644 external/boost/mpl/limits/arity.hpp create mode 100644 external/boost/mpl/limits/list.hpp create mode 100644 external/boost/mpl/limits/unrolling.hpp create mode 100644 external/boost/mpl/limits/vector.hpp create mode 100644 external/boost/mpl/list.hpp create mode 100644 external/boost/mpl/list/aux_/O1_size.hpp create mode 100644 external/boost/mpl/list/aux_/begin_end.hpp create mode 100644 external/boost/mpl/list/aux_/clear.hpp create mode 100644 external/boost/mpl/list/aux_/empty.hpp create mode 100644 external/boost/mpl/list/aux_/front.hpp create mode 100644 external/boost/mpl/list/aux_/include_preprocessed.hpp create mode 100644 external/boost/mpl/list/aux_/item.hpp create mode 100644 external/boost/mpl/list/aux_/iterator.hpp create mode 100644 external/boost/mpl/list/aux_/numbered.hpp create mode 100644 external/boost/mpl/list/aux_/numbered_c.hpp create mode 100644 external/boost/mpl/list/aux_/pop_front.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list10.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list20.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list30.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list40.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list50.hpp create mode 100644 external/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp create mode 100644 external/boost/mpl/list/aux_/push_back.hpp create mode 100644 external/boost/mpl/list/aux_/push_front.hpp create mode 100644 external/boost/mpl/list/aux_/size.hpp create mode 100644 external/boost/mpl/list/aux_/tag.hpp create mode 100644 external/boost/mpl/list/list0.hpp create mode 100644 external/boost/mpl/list/list0_c.hpp create mode 100644 external/boost/mpl/list/list10.hpp create mode 100644 external/boost/mpl/list/list10_c.hpp create mode 100644 external/boost/mpl/list/list20.hpp create mode 100644 external/boost/mpl/list/list20_c.hpp create mode 100644 external/boost/mpl/list/list30.hpp create mode 100644 external/boost/mpl/list/list30_c.hpp create mode 100644 external/boost/mpl/list/list40.hpp create mode 100644 external/boost/mpl/list/list40_c.hpp create mode 100644 external/boost/mpl/list/list50.hpp create mode 100644 external/boost/mpl/list/list50_c.hpp create mode 100644 external/boost/mpl/logical.hpp create mode 100644 external/boost/mpl/long.hpp create mode 100644 external/boost/mpl/long_fwd.hpp create mode 100644 external/boost/mpl/minus.hpp create mode 100644 external/boost/mpl/multiplies.hpp create mode 100644 external/boost/mpl/negate.hpp create mode 100644 external/boost/mpl/next.hpp create mode 100644 external/boost/mpl/next_prior.hpp create mode 100644 external/boost/mpl/not.hpp create mode 100644 external/boost/mpl/not_equal_to.hpp create mode 100644 external/boost/mpl/numeric_cast.hpp create mode 100644 external/boost/mpl/or.hpp create mode 100644 external/boost/mpl/pair.hpp create mode 100644 external/boost/mpl/placeholders.hpp create mode 100644 external/boost/mpl/plus.hpp create mode 100644 external/boost/mpl/pop_back_fwd.hpp create mode 100644 external/boost/mpl/pop_front_fwd.hpp create mode 100644 external/boost/mpl/prior.hpp create mode 100644 external/boost/mpl/protect.hpp create mode 100644 external/boost/mpl/push_back.hpp create mode 100644 external/boost/mpl/push_back_fwd.hpp create mode 100644 external/boost/mpl/push_front.hpp create mode 100644 external/boost/mpl/push_front_fwd.hpp create mode 100644 external/boost/mpl/quote.hpp create mode 100644 external/boost/mpl/remove_if.hpp create mode 100644 external/boost/mpl/reverse_fold.hpp create mode 100644 external/boost/mpl/same_as.hpp create mode 100644 external/boost/mpl/sequence_tag.hpp create mode 100644 external/boost/mpl/sequence_tag_fwd.hpp create mode 100644 external/boost/mpl/size.hpp create mode 100644 external/boost/mpl/size_fwd.hpp create mode 100644 external/boost/mpl/size_t.hpp create mode 100644 external/boost/mpl/size_t_fwd.hpp create mode 100644 external/boost/mpl/tag.hpp create mode 100644 external/boost/mpl/times.hpp create mode 100644 external/boost/mpl/vector.hpp create mode 100644 external/boost/mpl/vector/aux_/O1_size.hpp create mode 100644 external/boost/mpl/vector/aux_/at.hpp create mode 100644 external/boost/mpl/vector/aux_/back.hpp create mode 100644 external/boost/mpl/vector/aux_/begin_end.hpp create mode 100644 external/boost/mpl/vector/aux_/clear.hpp create mode 100644 external/boost/mpl/vector/aux_/empty.hpp create mode 100644 external/boost/mpl/vector/aux_/front.hpp create mode 100644 external/boost/mpl/vector/aux_/include_preprocessed.hpp create mode 100644 external/boost/mpl/vector/aux_/item.hpp create mode 100644 external/boost/mpl/vector/aux_/iterator.hpp create mode 100644 external/boost/mpl/vector/aux_/numbered.hpp create mode 100644 external/boost/mpl/vector/aux_/numbered_c.hpp create mode 100644 external/boost/mpl/vector/aux_/pop_back.hpp create mode 100644 external/boost/mpl/vector/aux_/pop_front.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp create mode 100644 external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp create mode 100644 external/boost/mpl/vector/aux_/push_back.hpp create mode 100644 external/boost/mpl/vector/aux_/push_front.hpp create mode 100644 external/boost/mpl/vector/aux_/size.hpp create mode 100644 external/boost/mpl/vector/aux_/tag.hpp create mode 100644 external/boost/mpl/vector/aux_/vector0.hpp create mode 100644 external/boost/mpl/vector/vector0.hpp create mode 100644 external/boost/mpl/vector/vector0_c.hpp create mode 100644 external/boost/mpl/vector/vector10.hpp create mode 100644 external/boost/mpl/vector/vector10_c.hpp create mode 100644 external/boost/mpl/vector/vector20.hpp create mode 100644 external/boost/mpl/vector/vector20_c.hpp create mode 100644 external/boost/mpl/vector/vector30.hpp create mode 100644 external/boost/mpl/vector/vector30_c.hpp create mode 100644 external/boost/mpl/vector/vector40.hpp create mode 100644 external/boost/mpl/vector/vector40_c.hpp create mode 100644 external/boost/mpl/vector/vector50.hpp create mode 100644 external/boost/mpl/vector/vector50_c.hpp create mode 100644 external/boost/mpl/void.hpp create mode 100644 external/boost/mpl/void_fwd.hpp create mode 100644 external/boost/next_prior.hpp create mode 100644 external/boost/non_type.hpp create mode 100644 external/boost/noncopyable.hpp create mode 100644 external/boost/none.hpp create mode 100644 external/boost/none_t.hpp create mode 100644 external/boost/numeric/conversion/bounds.hpp create mode 100644 external/boost/numeric/conversion/cast.hpp create mode 100644 external/boost/numeric/conversion/conversion_traits.hpp create mode 100644 external/boost/numeric/conversion/converter.hpp create mode 100644 external/boost/numeric/conversion/converter_policies.hpp create mode 100644 external/boost/numeric/conversion/detail/bounds.hpp create mode 100644 external/boost/numeric/conversion/detail/conversion_traits.hpp create mode 100644 external/boost/numeric/conversion/detail/converter.hpp create mode 100644 external/boost/numeric/conversion/detail/int_float_mixture.hpp create mode 100644 external/boost/numeric/conversion/detail/is_subranged.hpp create mode 100644 external/boost/numeric/conversion/detail/meta.hpp create mode 100644 external/boost/numeric/conversion/detail/numeric_cast_traits.hpp create mode 100644 external/boost/numeric/conversion/detail/old_numeric_cast.hpp create mode 100644 external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp create mode 100644 external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp create mode 100644 external/boost/numeric/conversion/detail/sign_mixture.hpp create mode 100644 external/boost/numeric/conversion/detail/udt_builtin_mixture.hpp create mode 100644 external/boost/numeric/conversion/int_float_mixture_enum.hpp create mode 100644 external/boost/numeric/conversion/numeric_cast_traits.hpp create mode 100644 external/boost/numeric/conversion/sign_mixture_enum.hpp create mode 100644 external/boost/numeric/conversion/udt_builtin_mixture_enum.hpp create mode 100644 external/boost/operators.hpp create mode 100644 external/boost/optional.hpp create mode 100644 external/boost/optional/optional.hpp create mode 100644 external/boost/optional/optional_fwd.hpp create mode 100644 external/boost/pending/integer_log2.hpp create mode 100644 external/boost/preprocessor/arithmetic/add.hpp create mode 100644 external/boost/preprocessor/arithmetic/dec.hpp create mode 100644 external/boost/preprocessor/arithmetic/detail/div_base.hpp create mode 100644 external/boost/preprocessor/arithmetic/inc.hpp create mode 100644 external/boost/preprocessor/arithmetic/mod.hpp create mode 100644 external/boost/preprocessor/arithmetic/sub.hpp create mode 100644 external/boost/preprocessor/array/data.hpp create mode 100644 external/boost/preprocessor/array/elem.hpp create mode 100644 external/boost/preprocessor/array/size.hpp create mode 100644 external/boost/preprocessor/cat.hpp create mode 100644 external/boost/preprocessor/comma_if.hpp create mode 100644 external/boost/preprocessor/comparison/less_equal.hpp create mode 100644 external/boost/preprocessor/config/config.hpp create mode 100644 external/boost/preprocessor/control/deduce_d.hpp create mode 100644 external/boost/preprocessor/control/detail/dmc/while.hpp create mode 100644 external/boost/preprocessor/control/detail/edg/while.hpp create mode 100644 external/boost/preprocessor/control/detail/msvc/while.hpp create mode 100644 external/boost/preprocessor/control/detail/while.hpp create mode 100644 external/boost/preprocessor/control/expr_if.hpp create mode 100644 external/boost/preprocessor/control/expr_iif.hpp create mode 100644 external/boost/preprocessor/control/if.hpp create mode 100644 external/boost/preprocessor/control/iif.hpp create mode 100644 external/boost/preprocessor/control/while.hpp create mode 100644 external/boost/preprocessor/debug/error.hpp create mode 100644 external/boost/preprocessor/dec.hpp create mode 100644 external/boost/preprocessor/detail/auto_rec.hpp create mode 100644 external/boost/preprocessor/detail/check.hpp create mode 100644 external/boost/preprocessor/detail/dmc/auto_rec.hpp create mode 100644 external/boost/preprocessor/detail/is_binary.hpp create mode 100644 external/boost/preprocessor/empty.hpp create mode 100644 external/boost/preprocessor/enum.hpp create mode 100644 external/boost/preprocessor/enum_params.hpp create mode 100644 external/boost/preprocessor/enum_params_with_a_default.hpp create mode 100644 external/boost/preprocessor/enum_shifted_params.hpp create mode 100644 external/boost/preprocessor/expr_if.hpp create mode 100644 external/boost/preprocessor/facilities/empty.hpp create mode 100644 external/boost/preprocessor/facilities/identity.hpp create mode 100644 external/boost/preprocessor/facilities/intercept.hpp create mode 100644 external/boost/preprocessor/facilities/overload.hpp create mode 100644 external/boost/preprocessor/identity.hpp create mode 100644 external/boost/preprocessor/inc.hpp create mode 100644 external/boost/preprocessor/iterate.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/lower1.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/lower2.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/lower3.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/lower4.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/lower5.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/upper1.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/upper2.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/upper3.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/upper4.hpp create mode 100644 external/boost/preprocessor/iteration/detail/bounds/upper5.hpp create mode 100644 external/boost/preprocessor/iteration/detail/finish.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/forward1.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/forward2.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/forward3.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/forward4.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/forward5.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/reverse1.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/reverse2.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/reverse3.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/reverse4.hpp create mode 100644 external/boost/preprocessor/iteration/detail/iter/reverse5.hpp create mode 100644 external/boost/preprocessor/iteration/detail/local.hpp create mode 100644 external/boost/preprocessor/iteration/detail/rlocal.hpp create mode 100644 external/boost/preprocessor/iteration/detail/self.hpp create mode 100644 external/boost/preprocessor/iteration/detail/start.hpp create mode 100644 external/boost/preprocessor/iteration/iterate.hpp create mode 100644 external/boost/preprocessor/iteration/local.hpp create mode 100644 external/boost/preprocessor/iteration/self.hpp create mode 100644 external/boost/preprocessor/list/adt.hpp create mode 100644 external/boost/preprocessor/list/append.hpp create mode 100644 external/boost/preprocessor/list/detail/dmc/fold_left.hpp create mode 100644 external/boost/preprocessor/list/detail/edg/fold_left.hpp create mode 100644 external/boost/preprocessor/list/detail/edg/fold_right.hpp create mode 100644 external/boost/preprocessor/list/detail/fold_left.hpp create mode 100644 external/boost/preprocessor/list/detail/fold_right.hpp create mode 100644 external/boost/preprocessor/list/fold_left.hpp create mode 100644 external/boost/preprocessor/list/fold_right.hpp create mode 100644 external/boost/preprocessor/list/for_each_i.hpp create mode 100644 external/boost/preprocessor/list/reverse.hpp create mode 100644 external/boost/preprocessor/list/transform.hpp create mode 100644 external/boost/preprocessor/logical/and.hpp create mode 100644 external/boost/preprocessor/logical/bitand.hpp create mode 100644 external/boost/preprocessor/logical/bool.hpp create mode 100644 external/boost/preprocessor/logical/compl.hpp create mode 100644 external/boost/preprocessor/logical/not.hpp create mode 100644 external/boost/preprocessor/punctuation/comma.hpp create mode 100644 external/boost/preprocessor/punctuation/comma_if.hpp create mode 100644 external/boost/preprocessor/punctuation/paren.hpp create mode 100644 external/boost/preprocessor/repeat.hpp create mode 100644 external/boost/preprocessor/repetition/detail/dmc/for.hpp create mode 100644 external/boost/preprocessor/repetition/detail/edg/for.hpp create mode 100644 external/boost/preprocessor/repetition/detail/for.hpp create mode 100644 external/boost/preprocessor/repetition/detail/msvc/for.hpp create mode 100644 external/boost/preprocessor/repetition/enum.hpp create mode 100644 external/boost/preprocessor/repetition/enum_binary_params.hpp create mode 100644 external/boost/preprocessor/repetition/enum_params.hpp create mode 100644 external/boost/preprocessor/repetition/enum_params_with_a_default.hpp create mode 100644 external/boost/preprocessor/repetition/enum_shifted_params.hpp create mode 100644 external/boost/preprocessor/repetition/enum_trailing_params.hpp create mode 100644 external/boost/preprocessor/repetition/for.hpp create mode 100644 external/boost/preprocessor/repetition/repeat.hpp create mode 100644 external/boost/preprocessor/repetition/repeat_from_to.hpp create mode 100644 external/boost/preprocessor/seq/cat.hpp create mode 100644 external/boost/preprocessor/seq/detail/split.hpp create mode 100644 external/boost/preprocessor/seq/elem.hpp create mode 100644 external/boost/preprocessor/seq/enum.hpp create mode 100644 external/boost/preprocessor/seq/first_n.hpp create mode 100644 external/boost/preprocessor/seq/fold_left.hpp create mode 100644 external/boost/preprocessor/seq/for_each.hpp create mode 100644 external/boost/preprocessor/seq/for_each_i.hpp create mode 100644 external/boost/preprocessor/seq/rest_n.hpp create mode 100644 external/boost/preprocessor/seq/seq.hpp create mode 100644 external/boost/preprocessor/seq/size.hpp create mode 100644 external/boost/preprocessor/seq/subseq.hpp create mode 100644 external/boost/preprocessor/seq/transform.hpp create mode 100644 external/boost/preprocessor/slot/detail/counter.hpp create mode 100644 external/boost/preprocessor/slot/detail/def.hpp create mode 100644 external/boost/preprocessor/slot/detail/shared.hpp create mode 100644 external/boost/preprocessor/slot/detail/slot1.hpp create mode 100644 external/boost/preprocessor/slot/detail/slot2.hpp create mode 100644 external/boost/preprocessor/slot/detail/slot3.hpp create mode 100644 external/boost/preprocessor/slot/detail/slot4.hpp create mode 100644 external/boost/preprocessor/slot/detail/slot5.hpp create mode 100644 external/boost/preprocessor/slot/slot.hpp create mode 100644 external/boost/preprocessor/stringize.hpp create mode 100644 external/boost/preprocessor/tuple/eat.hpp create mode 100644 external/boost/preprocessor/tuple/elem.hpp create mode 100644 external/boost/preprocessor/tuple/rem.hpp create mode 100644 external/boost/preprocessor/tuple/to_list.hpp create mode 100644 external/boost/preprocessor/variadic/elem.hpp create mode 100644 external/boost/preprocessor/variadic/size.hpp create mode 100644 external/boost/program_options.hpp create mode 100644 external/boost/program_options/cmdline.hpp create mode 100644 external/boost/program_options/config.hpp create mode 100644 external/boost/program_options/detail/cmdline.hpp create mode 100644 external/boost/program_options/detail/config_file.hpp create mode 100644 external/boost/program_options/detail/convert.hpp create mode 100644 external/boost/program_options/detail/parsers.hpp create mode 100644 external/boost/program_options/detail/utf8_codecvt_facet.hpp create mode 100644 external/boost/program_options/detail/value_semantic.hpp create mode 100644 external/boost/program_options/environment_iterator.hpp create mode 100644 external/boost/program_options/eof_iterator.hpp create mode 100644 external/boost/program_options/errors.hpp create mode 100644 external/boost/program_options/option.hpp create mode 100644 external/boost/program_options/options_description.hpp create mode 100644 external/boost/program_options/parsers.hpp create mode 100644 external/boost/program_options/positional_options.hpp create mode 100644 external/boost/program_options/value_semantic.hpp create mode 100644 external/boost/program_options/variables_map.hpp create mode 100644 external/boost/program_options/version.hpp create mode 100644 external/boost/progress.hpp create mode 100644 external/boost/random.hpp create mode 100644 external/boost/random/additive_combine.hpp create mode 100644 external/boost/random/bernoulli_distribution.hpp create mode 100644 external/boost/random/binomial_distribution.hpp create mode 100644 external/boost/random/cauchy_distribution.hpp create mode 100644 external/boost/random/chi_squared_distribution.hpp create mode 100644 external/boost/random/detail/auto_link.hpp create mode 100644 external/boost/random/detail/config.hpp create mode 100644 external/boost/random/detail/const_mod.hpp create mode 100644 external/boost/random/detail/disable_warnings.hpp create mode 100644 external/boost/random/detail/enable_warnings.hpp create mode 100644 external/boost/random/detail/generator_bits.hpp create mode 100644 external/boost/random/detail/generator_seed_seq.hpp create mode 100644 external/boost/random/detail/integer_log2.hpp create mode 100644 external/boost/random/detail/iterator_mixin.hpp create mode 100644 external/boost/random/detail/large_arithmetic.hpp create mode 100644 external/boost/random/detail/operators.hpp create mode 100644 external/boost/random/detail/ptr_helper.hpp create mode 100644 external/boost/random/detail/seed.hpp create mode 100644 external/boost/random/detail/seed_impl.hpp create mode 100644 external/boost/random/detail/signed_unsigned_tools.hpp create mode 100644 external/boost/random/detail/uniform_int_float.hpp create mode 100644 external/boost/random/detail/vector_io.hpp create mode 100644 external/boost/random/discard_block.hpp create mode 100644 external/boost/random/discrete_distribution.hpp create mode 100644 external/boost/random/exponential_distribution.hpp create mode 100644 external/boost/random/extreme_value_distribution.hpp create mode 100644 external/boost/random/fisher_f_distribution.hpp create mode 100644 external/boost/random/gamma_distribution.hpp create mode 100644 external/boost/random/generate_canonical.hpp create mode 100644 external/boost/random/geometric_distribution.hpp create mode 100644 external/boost/random/independent_bits.hpp create mode 100644 external/boost/random/inversive_congruential.hpp create mode 100644 external/boost/random/lagged_fibonacci.hpp create mode 100644 external/boost/random/linear_congruential.hpp create mode 100644 external/boost/random/linear_feedback_shift.hpp create mode 100644 external/boost/random/lognormal_distribution.hpp create mode 100644 external/boost/random/mersenne_twister.hpp create mode 100644 external/boost/random/negative_binomial_distribution.hpp create mode 100644 external/boost/random/normal_distribution.hpp create mode 100644 external/boost/random/piecewise_constant_distribution.hpp create mode 100644 external/boost/random/piecewise_linear_distribution.hpp create mode 100644 external/boost/random/poisson_distribution.hpp create mode 100644 external/boost/random/random_device.hpp create mode 100644 external/boost/random/random_number_generator.hpp create mode 100644 external/boost/random/ranlux.hpp create mode 100644 external/boost/random/seed_seq.hpp create mode 100644 external/boost/random/shuffle_order.hpp create mode 100644 external/boost/random/shuffle_output.hpp create mode 100644 external/boost/random/student_t_distribution.hpp create mode 100644 external/boost/random/subtract_with_carry.hpp create mode 100644 external/boost/random/taus88.hpp create mode 100644 external/boost/random/triangle_distribution.hpp create mode 100644 external/boost/random/uniform_01.hpp create mode 100644 external/boost/random/uniform_int.hpp create mode 100644 external/boost/random/uniform_int_distribution.hpp create mode 100644 external/boost/random/uniform_on_sphere.hpp create mode 100644 external/boost/random/uniform_real.hpp create mode 100644 external/boost/random/uniform_real_distribution.hpp create mode 100644 external/boost/random/uniform_smallint.hpp create mode 100644 external/boost/random/variate_generator.hpp create mode 100644 external/boost/random/weibull_distribution.hpp create mode 100644 external/boost/random/xor_combine.hpp create mode 100644 external/boost/range/algorithm/equal.hpp create mode 100644 external/boost/range/as_literal.hpp create mode 100644 external/boost/range/begin.hpp create mode 100644 external/boost/range/concepts.hpp create mode 100644 external/boost/range/config.hpp create mode 100644 external/boost/range/const_iterator.hpp create mode 100644 external/boost/range/detail/as_literal.hpp create mode 100644 external/boost/range/detail/begin.hpp create mode 100644 external/boost/range/detail/common.hpp create mode 100644 external/boost/range/detail/const_iterator.hpp create mode 100644 external/boost/range/detail/detail_str.hpp create mode 100644 external/boost/range/detail/end.hpp create mode 100644 external/boost/range/detail/extract_optional_type.hpp create mode 100644 external/boost/range/detail/implementation_help.hpp create mode 100644 external/boost/range/detail/iterator.hpp create mode 100644 external/boost/range/detail/misc_concept.hpp create mode 100644 external/boost/range/detail/remove_extent.hpp create mode 100644 external/boost/range/detail/safe_bool.hpp create mode 100644 external/boost/range/detail/sfinae.hpp create mode 100644 external/boost/range/detail/size_type.hpp create mode 100644 external/boost/range/detail/str_types.hpp create mode 100644 external/boost/range/detail/value_type.hpp create mode 100644 external/boost/range/detail/vc6/end.hpp create mode 100644 external/boost/range/difference_type.hpp create mode 100644 external/boost/range/distance.hpp create mode 100644 external/boost/range/empty.hpp create mode 100644 external/boost/range/end.hpp create mode 100644 external/boost/range/functions.hpp create mode 100644 external/boost/range/iterator.hpp create mode 100644 external/boost/range/iterator_range.hpp create mode 100644 external/boost/range/iterator_range_core.hpp create mode 100644 external/boost/range/iterator_range_io.hpp create mode 100644 external/boost/range/mutable_iterator.hpp create mode 100644 external/boost/range/rbegin.hpp create mode 100644 external/boost/range/rend.hpp create mode 100644 external/boost/range/result_iterator.hpp create mode 100644 external/boost/range/reverse_iterator.hpp create mode 100644 external/boost/range/size.hpp create mode 100644 external/boost/range/size_type.hpp create mode 100644 external/boost/range/value_type.hpp create mode 100644 external/boost/ref.hpp create mode 100644 external/boost/regex.hpp create mode 100644 external/boost/regex/config.hpp create mode 100644 external/boost/regex/config/borland.hpp create mode 100644 external/boost/regex/config/cwchar.hpp create mode 100644 external/boost/regex/icu.hpp create mode 100644 external/boost/regex/pattern_except.hpp create mode 100644 external/boost/regex/pending/object_cache.hpp create mode 100644 external/boost/regex/pending/static_mutex.hpp create mode 100644 external/boost/regex/pending/unicode_iterator.hpp create mode 100644 external/boost/regex/regex_traits.hpp create mode 100644 external/boost/regex/user.hpp create mode 100644 external/boost/regex/v4/basic_regex.hpp create mode 100644 external/boost/regex/v4/basic_regex_creator.hpp create mode 100644 external/boost/regex/v4/basic_regex_parser.hpp create mode 100644 external/boost/regex/v4/c_regex_traits.hpp create mode 100644 external/boost/regex/v4/char_regex_traits.hpp create mode 100644 external/boost/regex/v4/cpp_regex_traits.hpp create mode 100644 external/boost/regex/v4/cregex.hpp create mode 100644 external/boost/regex/v4/error_type.hpp create mode 100644 external/boost/regex/v4/fileiter.hpp create mode 100644 external/boost/regex/v4/instances.hpp create mode 100644 external/boost/regex/v4/iterator_category.hpp create mode 100644 external/boost/regex/v4/iterator_traits.hpp create mode 100644 external/boost/regex/v4/match_flags.hpp create mode 100644 external/boost/regex/v4/match_results.hpp create mode 100644 external/boost/regex/v4/mem_block_cache.hpp create mode 100644 external/boost/regex/v4/perl_matcher.hpp create mode 100644 external/boost/regex/v4/perl_matcher_common.hpp create mode 100644 external/boost/regex/v4/perl_matcher_non_recursive.hpp create mode 100644 external/boost/regex/v4/perl_matcher_recursive.hpp create mode 100644 external/boost/regex/v4/primary_transform.hpp create mode 100644 external/boost/regex/v4/protected_call.hpp create mode 100644 external/boost/regex/v4/regbase.hpp create mode 100644 external/boost/regex/v4/regex.hpp create mode 100644 external/boost/regex/v4/regex_format.hpp create mode 100644 external/boost/regex/v4/regex_fwd.hpp create mode 100644 external/boost/regex/v4/regex_grep.hpp create mode 100644 external/boost/regex/v4/regex_iterator.hpp create mode 100644 external/boost/regex/v4/regex_match.hpp create mode 100644 external/boost/regex/v4/regex_merge.hpp create mode 100644 external/boost/regex/v4/regex_raw_buffer.hpp create mode 100644 external/boost/regex/v4/regex_replace.hpp create mode 100644 external/boost/regex/v4/regex_search.hpp create mode 100644 external/boost/regex/v4/regex_split.hpp create mode 100644 external/boost/regex/v4/regex_token_iterator.hpp create mode 100644 external/boost/regex/v4/regex_traits.hpp create mode 100644 external/boost/regex/v4/regex_traits_defaults.hpp create mode 100644 external/boost/regex/v4/regex_workaround.hpp create mode 100644 external/boost/regex/v4/states.hpp create mode 100644 external/boost/regex/v4/sub_match.hpp create mode 100644 external/boost/regex/v4/syntax_type.hpp create mode 100644 external/boost/regex/v4/u32regex_iterator.hpp create mode 100644 external/boost/regex/v4/u32regex_token_iterator.hpp create mode 100644 external/boost/regex/v4/w32_regex_traits.hpp create mode 100644 external/boost/regex_fwd.hpp create mode 100644 external/boost/scoped_array.hpp create mode 100644 external/boost/scoped_ptr.hpp create mode 100644 external/boost/shared_array.hpp create mode 100644 external/boost/shared_ptr.hpp create mode 100644 external/boost/smart_ptr.hpp create mode 100644 external/boost/smart_ptr/bad_weak_ptr.hpp create mode 100644 external/boost/smart_ptr/detail/atomic_count.hpp create mode 100644 external/boost/smart_ptr/detail/atomic_count_gcc.hpp create mode 100644 external/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp create mode 100644 external/boost/smart_ptr/detail/atomic_count_pthreads.hpp create mode 100644 external/boost/smart_ptr/detail/atomic_count_sync.hpp create mode 100644 external/boost/smart_ptr/detail/atomic_count_win32.hpp create mode 100644 external/boost/smart_ptr/detail/lightweight_mutex.hpp create mode 100644 external/boost/smart_ptr/detail/lwm_nop.hpp create mode 100644 external/boost/smart_ptr/detail/lwm_pthreads.hpp create mode 100644 external/boost/smart_ptr/detail/lwm_win32_cs.hpp create mode 100644 external/boost/smart_ptr/detail/operator_bool.hpp create mode 100644 external/boost/smart_ptr/detail/quick_allocator.hpp create mode 100644 external/boost/smart_ptr/detail/shared_array_nmt.hpp create mode 100644 external/boost/smart_ptr/detail/shared_count.hpp create mode 100644 external/boost/smart_ptr/detail/shared_ptr_nmt.hpp create mode 100644 external/boost/smart_ptr/detail/sp_convertible.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_aix.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_nt.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_pt.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_spin.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_sync.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_base_w32.hpp create mode 100644 external/boost/smart_ptr/detail/sp_counted_impl.hpp create mode 100644 external/boost/smart_ptr/detail/sp_has_sync.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock_gcc_arm.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock_nt.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock_pool.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock_pt.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock_sync.hpp create mode 100644 external/boost/smart_ptr/detail/spinlock_w32.hpp create mode 100644 external/boost/smart_ptr/detail/yield_k.hpp create mode 100644 external/boost/smart_ptr/enable_shared_from_this.hpp create mode 100644 external/boost/smart_ptr/intrusive_ptr.hpp create mode 100644 external/boost/smart_ptr/make_shared.hpp create mode 100644 external/boost/smart_ptr/scoped_array.hpp create mode 100644 external/boost/smart_ptr/scoped_ptr.hpp create mode 100644 external/boost/smart_ptr/shared_array.hpp create mode 100644 external/boost/smart_ptr/shared_ptr.hpp create mode 100644 external/boost/smart_ptr/weak_ptr.hpp create mode 100644 external/boost/static_assert.hpp create mode 100644 external/boost/swap.hpp create mode 100644 external/boost/system/api_config.hpp create mode 100644 external/boost/system/config.hpp create mode 100644 external/boost/system/error_code.hpp create mode 100644 external/boost/system/system_error.hpp create mode 100644 external/boost/test/debug.hpp create mode 100644 external/boost/test/debug_config.hpp create mode 100644 external/boost/test/detail/config.hpp create mode 100644 external/boost/test/detail/enable_warnings.hpp create mode 100644 external/boost/test/detail/fwd_decl.hpp create mode 100644 external/boost/test/detail/global_typedef.hpp create mode 100644 external/boost/test/detail/log_level.hpp create mode 100644 external/boost/test/detail/suppress_warnings.hpp create mode 100644 external/boost/test/detail/unit_test_parameters.hpp create mode 100644 external/boost/test/detail/workaround.hpp create mode 100644 external/boost/test/execution_monitor.hpp create mode 100644 external/boost/test/floating_point_comparison.hpp create mode 100644 external/boost/test/framework.hpp create mode 100644 external/boost/test/impl/compiler_log_formatter.ipp create mode 100644 external/boost/test/impl/cpp_main.ipp create mode 100644 external/boost/test/impl/debug.ipp create mode 100644 external/boost/test/impl/exception_safety.ipp create mode 100644 external/boost/test/impl/execution_monitor.ipp create mode 100644 external/boost/test/impl/framework.ipp create mode 100644 external/boost/test/impl/interaction_based.ipp create mode 100644 external/boost/test/impl/logged_expectations.ipp create mode 100644 external/boost/test/impl/plain_report_formatter.ipp create mode 100644 external/boost/test/impl/progress_monitor.ipp create mode 100644 external/boost/test/impl/results_collector.ipp create mode 100644 external/boost/test/impl/results_reporter.ipp create mode 100644 external/boost/test/impl/test_main.ipp create mode 100644 external/boost/test/impl/test_tools.ipp create mode 100644 external/boost/test/impl/unit_test_log.ipp create mode 100644 external/boost/test/impl/unit_test_main.ipp create mode 100644 external/boost/test/impl/unit_test_monitor.ipp create mode 100644 external/boost/test/impl/unit_test_parameters.ipp create mode 100644 external/boost/test/impl/unit_test_suite.ipp create mode 100644 external/boost/test/impl/xml_log_formatter.ipp create mode 100644 external/boost/test/impl/xml_report_formatter.ipp create mode 100644 external/boost/test/included/prg_exec_monitor.hpp create mode 100644 external/boost/test/interaction_based.hpp create mode 100644 external/boost/test/mock_object.hpp create mode 100644 external/boost/test/output/compiler_log_formatter.hpp create mode 100644 external/boost/test/output/plain_report_formatter.hpp create mode 100644 external/boost/test/output/xml_log_formatter.hpp create mode 100644 external/boost/test/output/xml_report_formatter.hpp create mode 100644 external/boost/test/output_test_stream.hpp create mode 100644 external/boost/test/predicate_result.hpp create mode 100644 external/boost/test/prg_exec_monitor.hpp create mode 100644 external/boost/test/progress_monitor.hpp create mode 100644 external/boost/test/results_collector.hpp create mode 100644 external/boost/test/results_reporter.hpp create mode 100644 external/boost/test/test_observer.hpp create mode 100644 external/boost/test/test_tools.hpp create mode 100644 external/boost/test/unit_test.hpp create mode 100644 external/boost/test/unit_test_log.hpp create mode 100644 external/boost/test/unit_test_log_formatter.hpp create mode 100644 external/boost/test/unit_test_monitor.hpp create mode 100644 external/boost/test/unit_test_suite.hpp create mode 100644 external/boost/test/unit_test_suite_impl.hpp create mode 100644 external/boost/test/utils/algorithm.hpp create mode 100644 external/boost/test/utils/assign_op.hpp create mode 100644 external/boost/test/utils/basic_cstring/basic_cstring.hpp create mode 100644 external/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp create mode 100644 external/boost/test/utils/basic_cstring/bcs_char_traits.hpp create mode 100644 external/boost/test/utils/basic_cstring/compare.hpp create mode 100644 external/boost/test/utils/basic_cstring/io.hpp create mode 100644 external/boost/test/utils/callback.hpp create mode 100644 external/boost/test/utils/class_properties.hpp create mode 100644 external/boost/test/utils/custom_manip.hpp create mode 100644 external/boost/test/utils/fixed_mapping.hpp create mode 100644 external/boost/test/utils/foreach.hpp create mode 100644 external/boost/test/utils/iterator/input_iterator_facade.hpp create mode 100644 external/boost/test/utils/iterator/token_iterator.hpp create mode 100644 external/boost/test/utils/lazy_ostream.hpp create mode 100644 external/boost/test/utils/named_params.hpp create mode 100644 external/boost/test/utils/rtti.hpp create mode 100644 external/boost/test/utils/runtime/argument.hpp create mode 100644 external/boost/test/utils/runtime/cla/argument_factory.hpp create mode 100644 external/boost/test/utils/runtime/cla/argv_traverser.hpp create mode 100644 external/boost/test/utils/runtime/cla/argv_traverser.ipp create mode 100644 external/boost/test/utils/runtime/cla/basic_parameter.hpp create mode 100644 external/boost/test/utils/runtime/cla/char_parameter.hpp create mode 100644 external/boost/test/utils/runtime/cla/char_parameter.ipp create mode 100644 external/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp create mode 100644 external/boost/test/utils/runtime/cla/dual_name_parameter.hpp create mode 100644 external/boost/test/utils/runtime/cla/dual_name_parameter.ipp create mode 100644 external/boost/test/utils/runtime/cla/fwd.hpp create mode 100644 external/boost/test/utils/runtime/cla/id_policy.hpp create mode 100644 external/boost/test/utils/runtime/cla/id_policy.ipp create mode 100644 external/boost/test/utils/runtime/cla/iface/argument_factory.hpp create mode 100644 external/boost/test/utils/runtime/cla/iface/id_policy.hpp create mode 100644 external/boost/test/utils/runtime/cla/modifier.hpp create mode 100644 external/boost/test/utils/runtime/cla/named_parameter.hpp create mode 100644 external/boost/test/utils/runtime/cla/named_parameter.ipp create mode 100644 external/boost/test/utils/runtime/cla/parameter.hpp create mode 100644 external/boost/test/utils/runtime/cla/parser.hpp create mode 100644 external/boost/test/utils/runtime/cla/parser.ipp create mode 100644 external/boost/test/utils/runtime/cla/typed_parameter.hpp create mode 100644 external/boost/test/utils/runtime/cla/validation.hpp create mode 100644 external/boost/test/utils/runtime/cla/validation.ipp create mode 100644 external/boost/test/utils/runtime/cla/value_generator.hpp create mode 100644 external/boost/test/utils/runtime/cla/value_handler.hpp create mode 100644 external/boost/test/utils/runtime/config.hpp create mode 100644 external/boost/test/utils/runtime/env/environment.hpp create mode 100644 external/boost/test/utils/runtime/env/environment.ipp create mode 100644 external/boost/test/utils/runtime/env/fwd.hpp create mode 100644 external/boost/test/utils/runtime/env/modifier.hpp create mode 100644 external/boost/test/utils/runtime/env/variable.hpp create mode 100644 external/boost/test/utils/runtime/fwd.hpp create mode 100644 external/boost/test/utils/runtime/interpret_argument_value.hpp create mode 100644 external/boost/test/utils/runtime/parameter.hpp create mode 100644 external/boost/test/utils/runtime/trace.hpp create mode 100644 external/boost/test/utils/runtime/validation.hpp create mode 100644 external/boost/test/utils/trivial_singleton.hpp create mode 100644 external/boost/test/utils/wrap_stringstream.hpp create mode 100644 external/boost/test/utils/xml_printer.hpp create mode 100644 external/boost/thread/condition.hpp create mode 100644 external/boost/thread/condition_variable.hpp create mode 100644 external/boost/thread/detail/config.hpp create mode 100644 external/boost/thread/detail/move.hpp create mode 100644 external/boost/thread/detail/platform.hpp create mode 100644 external/boost/thread/detail/thread.hpp create mode 100644 external/boost/thread/detail/thread_group.hpp create mode 100644 external/boost/thread/detail/thread_heap_alloc.hpp create mode 100644 external/boost/thread/detail/thread_interruption.hpp create mode 100644 external/boost/thread/detail/tss_hooks.hpp create mode 100644 external/boost/thread/exceptions.hpp create mode 100644 external/boost/thread/locks.hpp create mode 100644 external/boost/thread/mutex.hpp create mode 100644 external/boost/thread/once.hpp create mode 100644 external/boost/thread/pthread/condition_variable.hpp create mode 100644 external/boost/thread/pthread/condition_variable_fwd.hpp create mode 100644 external/boost/thread/pthread/mutex.hpp create mode 100644 external/boost/thread/pthread/once.hpp create mode 100644 external/boost/thread/pthread/pthread_mutex_scoped_lock.hpp create mode 100644 external/boost/thread/pthread/shared_mutex.hpp create mode 100644 external/boost/thread/pthread/thread_data.hpp create mode 100644 external/boost/thread/pthread/thread_heap_alloc.hpp create mode 100644 external/boost/thread/pthread/timespec.hpp create mode 100644 external/boost/thread/shared_mutex.hpp create mode 100644 external/boost/thread/thread.hpp create mode 100644 external/boost/thread/thread_time.hpp create mode 100644 external/boost/thread/tss.hpp create mode 100644 external/boost/thread/win32/basic_timed_mutex.hpp create mode 100644 external/boost/thread/win32/condition_variable.hpp create mode 100644 external/boost/thread/win32/interlocked_read.hpp create mode 100644 external/boost/thread/win32/mutex.hpp create mode 100644 external/boost/thread/win32/once.hpp create mode 100644 external/boost/thread/win32/shared_mutex.hpp create mode 100644 external/boost/thread/win32/thread_data.hpp create mode 100644 external/boost/thread/win32/thread_heap_alloc.hpp create mode 100644 external/boost/thread/win32/thread_primitives.hpp create mode 100644 external/boost/thread/xtime.hpp create mode 100644 external/boost/throw_exception.hpp create mode 100644 external/boost/timer.hpp create mode 100644 external/boost/token_functions.hpp create mode 100644 external/boost/token_iterator.hpp create mode 100644 external/boost/tokenizer.hpp create mode 100644 external/boost/type.hpp create mode 100644 external/boost/type_traits/add_const.hpp create mode 100644 external/boost/type_traits/add_cv.hpp create mode 100644 external/boost/type_traits/add_pointer.hpp create mode 100644 external/boost/type_traits/add_reference.hpp create mode 100644 external/boost/type_traits/add_rvalue_reference.hpp create mode 100644 external/boost/type_traits/add_volatile.hpp create mode 100644 external/boost/type_traits/alignment_of.hpp create mode 100644 external/boost/type_traits/arithmetic_traits.hpp create mode 100644 external/boost/type_traits/broken_compiler_spec.hpp create mode 100644 external/boost/type_traits/composite_traits.hpp create mode 100644 external/boost/type_traits/config.hpp create mode 100644 external/boost/type_traits/conversion_traits.hpp create mode 100644 external/boost/type_traits/cv_traits.hpp create mode 100644 external/boost/type_traits/decay.hpp create mode 100644 external/boost/type_traits/detail/bool_trait_def.hpp create mode 100644 external/boost/type_traits/detail/bool_trait_undef.hpp create mode 100644 external/boost/type_traits/detail/cv_traits_impl.hpp create mode 100644 external/boost/type_traits/detail/false_result.hpp create mode 100644 external/boost/type_traits/detail/ice_and.hpp create mode 100644 external/boost/type_traits/detail/ice_eq.hpp create mode 100644 external/boost/type_traits/detail/ice_not.hpp create mode 100644 external/boost/type_traits/detail/ice_or.hpp create mode 100644 external/boost/type_traits/detail/is_function_ptr_helper.hpp create mode 100644 external/boost/type_traits/detail/is_function_ptr_tester.hpp create mode 100644 external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp create mode 100644 external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp create mode 100644 external/boost/type_traits/detail/size_t_trait_def.hpp create mode 100644 external/boost/type_traits/detail/size_t_trait_undef.hpp create mode 100644 external/boost/type_traits/detail/template_arity_spec.hpp create mode 100644 external/boost/type_traits/detail/type_trait_def.hpp create mode 100644 external/boost/type_traits/detail/type_trait_undef.hpp create mode 100644 external/boost/type_traits/detail/wrap.hpp create mode 100644 external/boost/type_traits/detail/yes_no_type.hpp create mode 100644 external/boost/type_traits/has_nothrow_constructor.hpp create mode 100644 external/boost/type_traits/has_nothrow_copy.hpp create mode 100644 external/boost/type_traits/has_trivial_constructor.hpp create mode 100644 external/boost/type_traits/has_trivial_copy.hpp create mode 100644 external/boost/type_traits/has_trivial_destructor.hpp create mode 100644 external/boost/type_traits/ice.hpp create mode 100644 external/boost/type_traits/integral_constant.hpp create mode 100644 external/boost/type_traits/intrinsics.hpp create mode 100644 external/boost/type_traits/is_abstract.hpp create mode 100644 external/boost/type_traits/is_arithmetic.hpp create mode 100644 external/boost/type_traits/is_array.hpp create mode 100644 external/boost/type_traits/is_base_and_derived.hpp create mode 100644 external/boost/type_traits/is_base_of.hpp create mode 100644 external/boost/type_traits/is_class.hpp create mode 100644 external/boost/type_traits/is_const.hpp create mode 100644 external/boost/type_traits/is_convertible.hpp create mode 100644 external/boost/type_traits/is_enum.hpp create mode 100644 external/boost/type_traits/is_float.hpp create mode 100644 external/boost/type_traits/is_floating_point.hpp create mode 100644 external/boost/type_traits/is_function.hpp create mode 100644 external/boost/type_traits/is_fundamental.hpp create mode 100644 external/boost/type_traits/is_integral.hpp create mode 100644 external/boost/type_traits/is_lvalue_reference.hpp create mode 100644 external/boost/type_traits/is_member_function_pointer.hpp create mode 100644 external/boost/type_traits/is_member_pointer.hpp create mode 100644 external/boost/type_traits/is_pod.hpp create mode 100644 external/boost/type_traits/is_pointer.hpp create mode 100644 external/boost/type_traits/is_polymorphic.hpp create mode 100644 external/boost/type_traits/is_reference.hpp create mode 100644 external/boost/type_traits/is_rvalue_reference.hpp create mode 100644 external/boost/type_traits/is_same.hpp create mode 100644 external/boost/type_traits/is_scalar.hpp create mode 100644 external/boost/type_traits/is_signed.hpp create mode 100644 external/boost/type_traits/is_union.hpp create mode 100644 external/boost/type_traits/is_unsigned.hpp create mode 100644 external/boost/type_traits/is_void.hpp create mode 100644 external/boost/type_traits/is_volatile.hpp create mode 100644 external/boost/type_traits/make_unsigned.hpp create mode 100644 external/boost/type_traits/msvc/remove_bounds.hpp create mode 100644 external/boost/type_traits/msvc/remove_const.hpp create mode 100644 external/boost/type_traits/msvc/remove_cv.hpp create mode 100644 external/boost/type_traits/msvc/remove_pointer.hpp create mode 100644 external/boost/type_traits/msvc/remove_reference.hpp create mode 100644 external/boost/type_traits/msvc/remove_volatile.hpp create mode 100644 external/boost/type_traits/msvc/typeof.hpp create mode 100644 external/boost/type_traits/remove_bounds.hpp create mode 100644 external/boost/type_traits/remove_const.hpp create mode 100644 external/boost/type_traits/remove_cv.hpp create mode 100644 external/boost/type_traits/remove_pointer.hpp create mode 100644 external/boost/type_traits/remove_reference.hpp create mode 100644 external/boost/type_traits/remove_volatile.hpp create mode 100644 external/boost/type_traits/type_with_alignment.hpp create mode 100644 external/boost/units/detail/utility.hpp create mode 100644 external/boost/utility.hpp create mode 100644 external/boost/utility/addressof.hpp create mode 100644 external/boost/utility/base_from_member.hpp create mode 100644 external/boost/utility/binary.hpp create mode 100644 external/boost/utility/compare_pointees.hpp create mode 100644 external/boost/utility/detail/in_place_factory_prefix.hpp create mode 100644 external/boost/utility/detail/in_place_factory_suffix.hpp create mode 100644 external/boost/utility/enable_if.hpp create mode 100644 external/boost/utility/in_place_factory.hpp create mode 100644 external/boost/utility/swap.hpp create mode 100644 external/boost/utility/value_init.hpp create mode 100644 external/boost/version.hpp create mode 100644 external/boost/visit_each.hpp create mode 100644 external/boost/weak_ptr.hpp create mode 100644 external/boostcpp.jam create mode 100644 external/bootstrap.bat create mode 100644 external/bootstrap.log create mode 100755 external/bootstrap.sh create mode 100644 external/doc/src/minimal.css create mode 100644 external/libs/config/test/config_info.cpp create mode 100644 external/libs/date_time/build/Jamfile.v2 create mode 100644 external/libs/date_time/src/date_time.doc create mode 100644 external/libs/date_time/src/gregorian/date_generators.cpp create mode 100644 external/libs/date_time/src/gregorian/greg_month.cpp create mode 100644 external/libs/date_time/src/gregorian/greg_names.hpp create mode 100644 external/libs/date_time/src/gregorian/greg_weekday.cpp create mode 100644 external/libs/date_time/src/gregorian/gregorian_types.cpp create mode 100644 external/libs/date_time/src/posix_time/posix_time_types.cpp create mode 100644 external/libs/detail/utf8_codecvt_facet.cpp create mode 100644 external/libs/filesystem/build/Jamfile.v2 create mode 100644 external/libs/filesystem/v2/build/Jamfile.v2 create mode 100644 external/libs/filesystem/v2/doc/design.htm create mode 100644 external/libs/filesystem/v2/doc/do-list.htm create mode 100644 external/libs/filesystem/v2/doc/faq.htm create mode 100644 external/libs/filesystem/v2/doc/i18n.html create mode 100644 external/libs/filesystem/v2/doc/index.htm create mode 100644 external/libs/filesystem/v2/doc/portability_guide.htm create mode 100644 external/libs/filesystem/v2/doc/reference.html create mode 100644 external/libs/filesystem/v2/example/Jamfile.v2 create mode 100644 external/libs/filesystem/v2/example/file_size.cpp create mode 100644 external/libs/filesystem/v2/example/mbcopy.cpp create mode 100644 external/libs/filesystem/v2/example/mbpath.cpp create mode 100644 external/libs/filesystem/v2/example/mbpath.hpp create mode 100644 external/libs/filesystem/v2/example/path_table.cpp create mode 100644 external/libs/filesystem/v2/example/simple_ls.cpp create mode 100644 external/libs/filesystem/v2/src/v2_operations.cpp create mode 100644 external/libs/filesystem/v2/src/v2_path.cpp create mode 100644 external/libs/filesystem/v2/src/v2_portability.cpp create mode 100644 external/libs/filesystem/v2/test/Jamfile.v2 create mode 100644 external/libs/filesystem/v2/test/convenience_test.cpp create mode 100644 external/libs/filesystem/v2/test/deprecated_test.cpp create mode 100644 external/libs/filesystem/v2/test/equivalent.cpp create mode 100644 external/libs/filesystem/v2/test/fstream_test.cpp create mode 100644 external/libs/filesystem/v2/test/large_file_support_test.cpp create mode 100644 external/libs/filesystem/v2/test/lpath.hpp create mode 100644 external/libs/filesystem/v2/test/msvc/common.vsprops create mode 100644 external/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/filesystem-v2.sln create mode 100644 external/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj create mode 100644 external/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj create mode 100644 external/libs/filesystem/v2/test/operations_test.cpp create mode 100644 external/libs/filesystem/v2/test/path_test.cpp create mode 100644 external/libs/filesystem/v2/test/wide_test.cpp create mode 100644 external/libs/filesystem/v3/build/Jamfile.v2 create mode 100644 external/libs/filesystem/v3/doc/Jamfile.v2 create mode 100644 external/libs/filesystem/v3/doc/POSIX_filename_encoding.txt create mode 100644 external/libs/filesystem/v3/doc/deprecated.html create mode 100644 external/libs/filesystem/v3/doc/design.htm create mode 100644 external/libs/filesystem/v3/doc/do_list.html create mode 100644 external/libs/filesystem/v3/doc/faq.htm create mode 100644 external/libs/filesystem/v3/doc/index.htm create mode 100644 external/libs/filesystem/v3/doc/path_table.cpp create mode 100644 external/libs/filesystem/v3/doc/path_table.txt create mode 100644 external/libs/filesystem/v3/doc/portability_guide.htm create mode 100644 external/libs/filesystem/v3/doc/reference.html create mode 100644 external/libs/filesystem/v3/doc/release_history.html create mode 100644 external/libs/filesystem/v3/doc/src/README create mode 100644 external/libs/filesystem/v3/doc/src/boost_snippets.html create mode 100644 external/libs/filesystem/v3/doc/src/build.bat create mode 100644 external/libs/filesystem/v3/doc/src/source.html create mode 100644 external/libs/filesystem/v3/doc/src/tr2_snippets.html create mode 100644 external/libs/filesystem/v3/doc/tutorial.html create mode 100644 external/libs/filesystem/v3/doc/v3.html create mode 100644 external/libs/filesystem/v3/doc/v3_design.html create mode 100644 external/libs/filesystem/v3/example/Jamfile.v2 create mode 100644 external/libs/filesystem/v3/example/error_demo.cpp create mode 100644 external/libs/filesystem/v3/example/file_size.cpp create mode 100644 external/libs/filesystem/v3/example/file_status.cpp create mode 100644 external/libs/filesystem/v3/example/mbcopy.cpp create mode 100644 external/libs/filesystem/v3/example/mbpath.cpp create mode 100644 external/libs/filesystem/v3/example/mbpath.hpp create mode 100644 external/libs/filesystem/v3/example/path_info.cpp create mode 100644 external/libs/filesystem/v3/example/simple_ls.cpp create mode 100644 external/libs/filesystem/v3/example/stems.cpp create mode 100644 external/libs/filesystem/v3/example/tchar.cpp create mode 100644 external/libs/filesystem/v3/example/test/Jamfile.v2 create mode 100644 external/libs/filesystem/v3/example/test/bld.bat create mode 100755 external/libs/filesystem/v3/example/test/bld.sh create mode 100644 external/libs/filesystem/v3/example/test/setup.bat create mode 100755 external/libs/filesystem/v3/example/test/setup.sh create mode 100644 external/libs/filesystem/v3/example/tut0.cpp create mode 100644 external/libs/filesystem/v3/example/tut1.cpp create mode 100644 external/libs/filesystem/v3/example/tut2.cpp create mode 100644 external/libs/filesystem/v3/example/tut3.cpp create mode 100644 external/libs/filesystem/v3/example/tut4.cpp create mode 100644 external/libs/filesystem/v3/example/tut5.cpp create mode 100644 external/libs/filesystem/v3/index.html create mode 100644 external/libs/filesystem/v3/src/codecvt_error_category.cpp create mode 100644 external/libs/filesystem/v3/src/operations.cpp create mode 100644 external/libs/filesystem/v3/src/path.cpp create mode 100644 external/libs/filesystem/v3/src/path_traits.cpp create mode 100644 external/libs/filesystem/v3/src/portability.cpp create mode 100644 external/libs/filesystem/v3/src/unique_path.cpp create mode 100644 external/libs/filesystem/v3/src/utf8_codecvt_facet.cpp create mode 100644 external/libs/filesystem/v3/src/windows_file_codecvt.cpp create mode 100644 external/libs/filesystem/v3/src/windows_file_codecvt.hpp create mode 100644 external/libs/filesystem/v3/test/Jamfile.v2 create mode 100644 external/libs/filesystem/v3/test/convenience_test.cpp create mode 100644 external/libs/filesystem/v3/test/deprecated_test.cpp create mode 100644 external/libs/filesystem/v3/test/design_use_cases.cpp create mode 100644 external/libs/filesystem/v3/test/equivalent.cpp create mode 100644 external/libs/filesystem/v3/test/fstream_test.cpp create mode 100644 external/libs/filesystem/v3/test/large_file_support_test.cpp create mode 100644 external/libs/filesystem/v3/test/locale_info.cpp create mode 100644 external/libs/filesystem/v3/test/long_path_test.cpp create mode 100644 external/libs/filesystem/v3/test/msvc/common.vsprops create mode 100644 external/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/filesystem-v3.sln create mode 100644 external/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj create mode 100644 external/libs/filesystem/v3/test/msvc10/common.props create mode 100644 external/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/filesystem-v3.sln create mode 100644 external/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj create mode 100644 external/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj create mode 100644 external/libs/filesystem/v3/test/operations_test.cpp create mode 100644 external/libs/filesystem/v3/test/operations_unit_test.cpp create mode 100644 external/libs/filesystem/v3/test/path_test.cpp create mode 100644 external/libs/filesystem/v3/test/path_unit_test.cpp create mode 100644 external/libs/filesystem/v3/test/test_codecvt.hpp create mode 100644 external/libs/filesystem/v3/test/windows_attributes.cpp create mode 100644 external/libs/program_options/build/Jamfile.v2 create mode 100644 external/libs/program_options/src/cmdline.cpp create mode 100644 external/libs/program_options/src/config_file.cpp create mode 100644 external/libs/program_options/src/convert.cpp create mode 100644 external/libs/program_options/src/options_description.cpp create mode 100644 external/libs/program_options/src/parsers.cpp create mode 100644 external/libs/program_options/src/positional_options.cpp create mode 100644 external/libs/program_options/src/split.cpp create mode 100644 external/libs/program_options/src/utf8_codecvt_facet.cpp create mode 100644 external/libs/program_options/src/value_semantic.cpp create mode 100644 external/libs/program_options/src/variables_map.cpp create mode 100644 external/libs/program_options/src/winmain.cpp create mode 100644 external/libs/regex/build/Jamfile.v2 create mode 100644 external/libs/regex/build/bc_gen.sh create mode 100644 external/libs/regex/build/bcb6.mak create mode 100644 external/libs/regex/build/common.sh create mode 100644 external/libs/regex/build/gcc-shared.mak create mode 100644 external/libs/regex/build/gcc.mak create mode 100644 external/libs/regex/build/gcc_gen.sh create mode 100644 external/libs/regex/build/generic.mak create mode 100644 external/libs/regex/build/generic_gen.sh create mode 100644 external/libs/regex/build/has_icu_test.cpp create mode 100644 external/libs/regex/build/sun_gen.sh create mode 100644 external/libs/regex/build/sunpro.mak create mode 100644 external/libs/regex/build/vc10.mak create mode 100644 external/libs/regex/build/vc6-stlport.mak create mode 100644 external/libs/regex/build/vc6.mak create mode 100644 external/libs/regex/build/vc7-stlport.mak create mode 100644 external/libs/regex/build/vc7.mak create mode 100644 external/libs/regex/build/vc71-stlport.mak create mode 100644 external/libs/regex/build/vc71.mak create mode 100644 external/libs/regex/build/vc8.mak create mode 100644 external/libs/regex/build/vc9.mak create mode 100644 external/libs/regex/build/vc_gen.sh create mode 100644 external/libs/regex/src/c_regex_traits.cpp create mode 100644 external/libs/regex/src/cpp_regex_traits.cpp create mode 100644 external/libs/regex/src/cregex.cpp create mode 100644 external/libs/regex/src/fileiter.cpp create mode 100644 external/libs/regex/src/icu.cpp create mode 100644 external/libs/regex/src/instances.cpp create mode 100644 external/libs/regex/src/internals.hpp create mode 100644 external/libs/regex/src/posix_api.cpp create mode 100644 external/libs/regex/src/regex.cpp create mode 100644 external/libs/regex/src/regex_debug.cpp create mode 100644 external/libs/regex/src/regex_raw_buffer.cpp create mode 100644 external/libs/regex/src/regex_traits_defaults.cpp create mode 100644 external/libs/regex/src/static_mutex.cpp create mode 100644 external/libs/regex/src/usinstances.cpp create mode 100644 external/libs/regex/src/w32_regex_traits.cpp create mode 100644 external/libs/regex/src/wc_regex_traits.cpp create mode 100644 external/libs/regex/src/wide_posix_api.cpp create mode 100644 external/libs/regex/src/winstances.cpp create mode 100644 external/libs/regex/test/config_info/regex_config_info.cpp create mode 100644 external/libs/smart_ptr/src/sp_collector.cpp create mode 100644 external/libs/smart_ptr/src/sp_debug_hooks.cpp create mode 100644 external/libs/system/build/Jamfile.v2 create mode 100644 external/libs/system/src/error_code.cpp create mode 100644 external/libs/system/src/local_free_on_destruction.hpp create mode 100644 external/libs/test/build/Jamfile.v2 create mode 100644 external/libs/test/src/compiler_log_formatter.cpp create mode 100644 external/libs/test/src/cpp_main.cpp create mode 100644 external/libs/test/src/debug.cpp create mode 100644 external/libs/test/src/exception_safety.cpp create mode 100644 external/libs/test/src/execution_monitor.cpp create mode 100644 external/libs/test/src/framework.cpp create mode 100644 external/libs/test/src/interaction_based.cpp create mode 100644 external/libs/test/src/logged_expectations.cpp create mode 100644 external/libs/test/src/plain_report_formatter.cpp create mode 100644 external/libs/test/src/progress_monitor.cpp create mode 100644 external/libs/test/src/results_collector.cpp create mode 100644 external/libs/test/src/results_reporter.cpp create mode 100644 external/libs/test/src/test_main.cpp create mode 100644 external/libs/test/src/test_tools.cpp create mode 100644 external/libs/test/src/unit_test_log.cpp create mode 100644 external/libs/test/src/unit_test_main.cpp create mode 100644 external/libs/test/src/unit_test_monitor.cpp create mode 100644 external/libs/test/src/unit_test_parameters.cpp create mode 100644 external/libs/test/src/unit_test_suite.cpp create mode 100644 external/libs/test/src/xml_log_formatter.cpp create mode 100644 external/libs/test/src/xml_report_formatter.cpp create mode 100644 external/libs/thread/build/Jamfile.v2 create mode 100644 external/libs/thread/src/pthread/once.cpp create mode 100644 external/libs/thread/src/pthread/thread.cpp create mode 100644 external/libs/thread/src/pthread/timeconv.inl create mode 100644 external/libs/thread/src/tss_null.cpp create mode 100644 external/libs/thread/src/win32/thread.cpp create mode 100644 external/libs/thread/src/win32/timeconv.inl create mode 100644 external/libs/thread/src/win32/tss_dll.cpp create mode 100644 external/libs/thread/src/win32/tss_pe.cpp create mode 100644 external/project-config.jam create mode 100644 external/project-config.jam.1 create mode 100644 external/project-config.jam.2 create mode 100644 external/stage/lib/libboost_date_time.a create mode 100644 external/stage/lib/libboost_filesystem.a create mode 100644 external/stage/lib/libboost_prg_exec_monitor.a create mode 100644 external/stage/lib/libboost_program_options.a create mode 100644 external/stage/lib/libboost_regex.a create mode 100644 external/stage/lib/libboost_system.a create mode 100644 external/stage/lib/libboost_test_exec_monitor.a create mode 100644 external/stage/lib/libboost_thread.a create mode 100644 external/stage/lib/libboost_unit_test_framework.a create mode 100644 external/tools/build/boost.css create mode 100644 external/tools/build/index.html create mode 100644 external/tools/build/v2/Jamroot.jam create mode 100644 external/tools/build/v2/boost-build.jam create mode 100644 external/tools/build/v2/boost.css create mode 100644 external/tools/build/v2/boost_build.png create mode 100644 external/tools/build/v2/boost_build.svg create mode 100644 external/tools/build/v2/bootstrap.bat create mode 100644 external/tools/build/v2/bootstrap.jam create mode 100755 external/tools/build/v2/bootstrap.sh create mode 100644 external/tools/build/v2/build-system.jam create mode 100644 external/tools/build/v2/build/__init__.py create mode 100644 external/tools/build/v2/build/ac.jam create mode 100644 external/tools/build/v2/build/alias.jam create mode 100755 external/tools/build/v2/build/alias.py create mode 100644 external/tools/build/v2/build/build-request.jam create mode 100644 external/tools/build/v2/build/build_request.py create mode 100644 external/tools/build/v2/build/configure.jam create mode 100644 external/tools/build/v2/build/configure.py create mode 100644 external/tools/build/v2/build/engine.py create mode 100644 external/tools/build/v2/build/errors.py create mode 100644 external/tools/build/v2/build/feature.jam create mode 100644 external/tools/build/v2/build/feature.py create mode 100644 external/tools/build/v2/build/generators.jam create mode 100644 external/tools/build/v2/build/generators.py create mode 100644 external/tools/build/v2/build/modifiers.jam create mode 100644 external/tools/build/v2/build/project.ann.py create mode 100644 external/tools/build/v2/build/project.jam create mode 100644 external/tools/build/v2/build/project.py create mode 100644 external/tools/build/v2/build/property-set.jam create mode 100644 external/tools/build/v2/build/property.jam create mode 100644 external/tools/build/v2/build/property.py create mode 100644 external/tools/build/v2/build/property_set.py create mode 100644 external/tools/build/v2/build/readme.txt create mode 100644 external/tools/build/v2/build/scanner.jam create mode 100644 external/tools/build/v2/build/scanner.py create mode 100644 external/tools/build/v2/build/targets.jam create mode 100644 external/tools/build/v2/build/targets.py create mode 100644 external/tools/build/v2/build/toolset.jam create mode 100644 external/tools/build/v2/build/toolset.py create mode 100644 external/tools/build/v2/build/type.jam create mode 100644 external/tools/build/v2/build/type.py create mode 100644 external/tools/build/v2/build/version.jam create mode 100644 external/tools/build/v2/build/virtual-target.jam create mode 100644 external/tools/build/v2/build/virtual_target.py create mode 100644 external/tools/build/v2/build_system.py create mode 100644 external/tools/build/v2/changes.txt create mode 100644 external/tools/build/v2/contrib/boost.jam create mode 100644 external/tools/build/v2/contrib/tntnet.jam create mode 100644 external/tools/build/v2/contrib/wxFormBuilder.jam create mode 100644 external/tools/build/v2/debian/boost-build.docs create mode 100644 external/tools/build/v2/debian/boost-build.examples create mode 100644 external/tools/build/v2/debian/changelog create mode 100644 external/tools/build/v2/debian/conffiles create mode 100644 external/tools/build/v2/debian/control create mode 100644 external/tools/build/v2/debian/copyright create mode 100644 external/tools/build/v2/debian/excludes create mode 100755 external/tools/build/v2/debian/rules create mode 100644 external/tools/build/v2/doc/bjam.qbk create mode 100644 external/tools/build/v2/doc/development_plan.html create mode 100644 external/tools/build/v2/doc/history.qbk create mode 100644 external/tools/build/v2/doc/jamfile.jam create mode 100644 external/tools/build/v2/doc/src/architecture.xml create mode 100644 external/tools/build/v2/doc/src/catalog.xml create mode 100644 external/tools/build/v2/doc/src/extending.xml create mode 100644 external/tools/build/v2/doc/src/faq.xml create mode 100644 external/tools/build/v2/doc/src/fragments.xml create mode 100644 external/tools/build/v2/doc/src/howto.xml create mode 100644 external/tools/build/v2/doc/src/install.xml create mode 100644 external/tools/build/v2/doc/src/overview.xml create mode 100644 external/tools/build/v2/doc/src/recipes.xml create mode 100644 external/tools/build/v2/doc/src/reference.xml create mode 100644 external/tools/build/v2/doc/src/standalone.xml create mode 100644 external/tools/build/v2/doc/src/tasks.xml create mode 100644 external/tools/build/v2/doc/src/tutorial.xml create mode 100644 external/tools/build/v2/doc/src/userman.xml create mode 100644 external/tools/build/v2/doc/tools.html create mode 100644 external/tools/build/v2/engine/Jambase create mode 100755 external/tools/build/v2/engine/bin.linuxx86_64/b2 create mode 100755 external/tools/build/v2/engine/bin.linuxx86_64/bjam create mode 100644 external/tools/build/v2/engine/boehm_gc/AmigaOS.c create mode 100644 external/tools/build/v2/engine/boehm_gc/BCC_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/ChangeLog create mode 100644 external/tools/build/v2/engine/boehm_gc/EMX_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/MacOS.c create mode 100644 external/tools/build/v2/engine/boehm_gc/MacProjects.sit.hqx create mode 100644 external/tools/build/v2/engine/boehm_gc/Mac_files/MacOS_Test_config.h create mode 100644 external/tools/build/v2/engine/boehm_gc/Mac_files/MacOS_config.h create mode 100644 external/tools/build/v2/engine/boehm_gc/Mac_files/dataend.c create mode 100644 external/tools/build/v2/engine/boehm_gc/Mac_files/datastart.c create mode 100644 external/tools/build/v2/engine/boehm_gc/Makefile.DLLs create mode 100644 external/tools/build/v2/engine/boehm_gc/Makefile.am create mode 100644 external/tools/build/v2/engine/boehm_gc/Makefile.direct create mode 100644 external/tools/build/v2/engine/boehm_gc/Makefile.dj create mode 100644 external/tools/build/v2/engine/boehm_gc/Makefile.in create mode 100755 external/tools/build/v2/engine/boehm_gc/NT_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/NT_STATIC_THREADS_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/NT_THREADS_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/NT_X64_STATIC_THREADS_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/OS2_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/PCR-Makefile create mode 100644 external/tools/build/v2/engine/boehm_gc/README.QUICK create mode 100644 external/tools/build/v2/engine/boehm_gc/SMakefile.amiga create mode 100644 external/tools/build/v2/engine/boehm_gc/WCC_MAKEFILE create mode 100644 external/tools/build/v2/engine/boehm_gc/acinclude.m4 create mode 100644 external/tools/build/v2/engine/boehm_gc/aclocal.m4 create mode 100644 external/tools/build/v2/engine/boehm_gc/add_gc_prefix.c create mode 100644 external/tools/build/v2/engine/boehm_gc/allchblk.c create mode 100644 external/tools/build/v2/engine/boehm_gc/alloc.c create mode 100644 external/tools/build/v2/engine/boehm_gc/alpha_mach_dep.S create mode 100644 external/tools/build/v2/engine/boehm_gc/backgraph.c create mode 100644 external/tools/build/v2/engine/boehm_gc/bdw-gc.pc create mode 100644 external/tools/build/v2/engine/boehm_gc/bdw-gc.pc.in create mode 100644 external/tools/build/v2/engine/boehm_gc/blacklst.c create mode 100755 external/tools/build/v2/engine/boehm_gc/callprocs create mode 100644 external/tools/build/v2/engine/boehm_gc/checksums.c create mode 100755 external/tools/build/v2/engine/boehm_gc/compile create mode 100755 external/tools/build/v2/engine/boehm_gc/config.guess create mode 100644 external/tools/build/v2/engine/boehm_gc/config.sub create mode 100755 external/tools/build/v2/engine/boehm_gc/configure create mode 100644 external/tools/build/v2/engine/boehm_gc/configure.ac create mode 100644 external/tools/build/v2/engine/boehm_gc/configure.host create mode 100755 external/tools/build/v2/engine/boehm_gc/configure_atomic_ops.sh create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/cord.am create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/cordbscs.c create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/cordprnt.c create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/cordtest.c create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/cordxtra.c create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/de.c create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/de_cmds.h create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/de_win.ICO create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/de_win.RC create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/de_win.c create mode 100644 external/tools/build/v2/engine/boehm_gc/cord/de_win.h create mode 100644 external/tools/build/v2/engine/boehm_gc/darwin_stop_world.c create mode 100644 external/tools/build/v2/engine/boehm_gc/dbg_mlc.c create mode 100755 external/tools/build/v2/engine/boehm_gc/depcomp create mode 100644 external/tools/build/v2/engine/boehm_gc/digimars.mak create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.DGUX386 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.Mac create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.MacOSX create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.OS2 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.amiga create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.arm.cross create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.autoconf create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.changes create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.contributors create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.cords create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.darwin create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.dj create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.environment create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.ews4800 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.hp create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.linux create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.macros create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.rs6000 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.sgi create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.solaris2 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.uts create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.win32 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/README.win64 create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/barrett_diagram create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/debugging.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/doc.am create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/gc.man create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/gcdescr.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/gcinterface.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/leak.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/overview.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/porting.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/scale.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/simple_example.html create mode 100644 external/tools/build/v2/engine/boehm_gc/doc/tree.html create mode 100644 external/tools/build/v2/engine/boehm_gc/dyn_load.c create mode 100644 external/tools/build/v2/engine/boehm_gc/finalize.c create mode 100644 external/tools/build/v2/engine/boehm_gc/gc.mak create mode 100644 external/tools/build/v2/engine/boehm_gc/gc_cpp.cc create mode 100644 external/tools/build/v2/engine/boehm_gc/gc_cpp.cpp create mode 100644 external/tools/build/v2/engine/boehm_gc/gc_dlopen.c create mode 100644 external/tools/build/v2/engine/boehm_gc/gcj_mlc.c create mode 100644 external/tools/build/v2/engine/boehm_gc/gcname.c create mode 100644 external/tools/build/v2/engine/boehm_gc/headers.c create mode 100644 external/tools/build/v2/engine/boehm_gc/hpux_test_and_clear.s create mode 100644 external/tools/build/v2/engine/boehm_gc/ia64_save_regs_in_stack.s create mode 100644 external/tools/build/v2/engine/boehm_gc/if_mach.c create mode 100644 external/tools/build/v2/engine/boehm_gc/if_not_there.c create mode 100644 external/tools/build/v2/engine/boehm_gc/include/cord.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/ec.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_allocator.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_amiga_redirects.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_backptr.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_config_macros.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_cpp.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_gcj.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_inline.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_mark.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_pthread_redirects.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_tiny_fl.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/gc_typed.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/include.am create mode 100644 external/tools/build/v2/engine/boehm_gc/include/javaxfc.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/leak_detector.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/new_gc_alloc.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/cord_pos.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/darwin_semaphore.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/darwin_stop_world.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/dbg_mlc.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/gc_hdrs.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/gc_locks.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/gc_pmark.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/gc_priv.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/gcconfig.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/msvc_dbg.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/pthread_stop_world.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/pthread_support.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/specific.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/private/thread_local_alloc.h create mode 100644 external/tools/build/v2/engine/boehm_gc/include/weakpointer.h create mode 100755 external/tools/build/v2/engine/boehm_gc/install-sh create mode 100644 external/tools/build/v2/engine/boehm_gc/libtool.m4 create mode 100755 external/tools/build/v2/engine/boehm_gc/ltmain.sh create mode 100644 external/tools/build/v2/engine/boehm_gc/mach_dep.c create mode 100644 external/tools/build/v2/engine/boehm_gc/malloc.c create mode 100644 external/tools/build/v2/engine/boehm_gc/mallocx.c create mode 100644 external/tools/build/v2/engine/boehm_gc/mark.c create mode 100644 external/tools/build/v2/engine/boehm_gc/mark_rts.c create mode 100644 external/tools/build/v2/engine/boehm_gc/mips_sgi_mach_dep.s create mode 100644 external/tools/build/v2/engine/boehm_gc/mips_ultrix_mach_dep.s create mode 100644 external/tools/build/v2/engine/boehm_gc/misc.c create mode 100755 external/tools/build/v2/engine/boehm_gc/missing create mode 100755 external/tools/build/v2/engine/boehm_gc/mkinstalldirs create mode 100644 external/tools/build/v2/engine/boehm_gc/msvc_dbg.c create mode 100644 external/tools/build/v2/engine/boehm_gc/new_hblk.c create mode 100644 external/tools/build/v2/engine/boehm_gc/obj_map.c create mode 100644 external/tools/build/v2/engine/boehm_gc/os_dep.c create mode 100644 external/tools/build/v2/engine/boehm_gc/pcr_interface.c create mode 100644 external/tools/build/v2/engine/boehm_gc/pthread_stop_world.c create mode 100644 external/tools/build/v2/engine/boehm_gc/pthread_support.c create mode 100644 external/tools/build/v2/engine/boehm_gc/ptr_chck.c create mode 100644 external/tools/build/v2/engine/boehm_gc/real_malloc.c create mode 100644 external/tools/build/v2/engine/boehm_gc/reclaim.c create mode 100644 external/tools/build/v2/engine/boehm_gc/rs6000_mach_dep.s create mode 100644 external/tools/build/v2/engine/boehm_gc/setjmp_t.c create mode 100644 external/tools/build/v2/engine/boehm_gc/sparc_mach_dep.S create mode 100644 external/tools/build/v2/engine/boehm_gc/sparc_netbsd_mach_dep.s create mode 100644 external/tools/build/v2/engine/boehm_gc/sparc_sunos4_mach_dep.s create mode 100644 external/tools/build/v2/engine/boehm_gc/specific.c create mode 100644 external/tools/build/v2/engine/boehm_gc/stubborn.c create mode 100644 external/tools/build/v2/engine/boehm_gc/tests/leak_test.c create mode 100644 external/tools/build/v2/engine/boehm_gc/tests/middle.c create mode 100644 external/tools/build/v2/engine/boehm_gc/tests/test.c create mode 100644 external/tools/build/v2/engine/boehm_gc/tests/test_cpp.cc create mode 100644 external/tools/build/v2/engine/boehm_gc/tests/tests.am create mode 100644 external/tools/build/v2/engine/boehm_gc/tests/thread_leak_test.c create mode 100644 external/tools/build/v2/engine/boehm_gc/thread_local_alloc.c create mode 100644 external/tools/build/v2/engine/boehm_gc/threadlibs.c create mode 100644 external/tools/build/v2/engine/boehm_gc/typd_mlc.c create mode 100644 external/tools/build/v2/engine/boehm_gc/version.h create mode 100644 external/tools/build/v2/engine/boehm_gc/win32_threads.c create mode 100644 external/tools/build/v2/engine/boost-jam.spec create mode 100644 external/tools/build/v2/engine/boost-no-inspect create mode 100755 external/tools/build/v2/engine/bootstrap/jam0 create mode 100644 external/tools/build/v2/engine/build.bat create mode 100644 external/tools/build/v2/engine/build.jam create mode 100755 external/tools/build/v2/engine/build.sh create mode 100644 external/tools/build/v2/engine/build_vms.com create mode 100644 external/tools/build/v2/engine/builtins.c create mode 100644 external/tools/build/v2/engine/builtins.h create mode 100644 external/tools/build/v2/engine/bump_version.py create mode 100644 external/tools/build/v2/engine/class.c create mode 100644 external/tools/build/v2/engine/class.h create mode 100644 external/tools/build/v2/engine/command.c create mode 100644 external/tools/build/v2/engine/command.h create mode 100644 external/tools/build/v2/engine/compile.c create mode 100644 external/tools/build/v2/engine/compile.h create mode 100644 external/tools/build/v2/engine/debian/changelog create mode 100644 external/tools/build/v2/engine/debian/control create mode 100644 external/tools/build/v2/engine/debian/copyright create mode 100644 external/tools/build/v2/engine/debian/jam.man.sgml create mode 100755 external/tools/build/v2/engine/debian/rules create mode 100644 external/tools/build/v2/engine/debug.c create mode 100644 external/tools/build/v2/engine/debug.h create mode 100644 external/tools/build/v2/engine/execcmd.h create mode 100644 external/tools/build/v2/engine/execmac.c create mode 100644 external/tools/build/v2/engine/execnt.c create mode 100644 external/tools/build/v2/engine/execunix.c create mode 100644 external/tools/build/v2/engine/execvms.c create mode 100644 external/tools/build/v2/engine/expand.c create mode 100644 external/tools/build/v2/engine/expand.h create mode 100644 external/tools/build/v2/engine/filemac.c create mode 100644 external/tools/build/v2/engine/filent.c create mode 100644 external/tools/build/v2/engine/fileos2.c create mode 100644 external/tools/build/v2/engine/filesys.c create mode 100644 external/tools/build/v2/engine/filesys.h create mode 100644 external/tools/build/v2/engine/fileunix.c create mode 100644 external/tools/build/v2/engine/filevms.c create mode 100644 external/tools/build/v2/engine/frames.c create mode 100644 external/tools/build/v2/engine/frames.h create mode 100644 external/tools/build/v2/engine/glob.c create mode 100644 external/tools/build/v2/engine/hash.c create mode 100644 external/tools/build/v2/engine/hash.h create mode 100644 external/tools/build/v2/engine/hcache.c create mode 100644 external/tools/build/v2/engine/hcache.h create mode 100644 external/tools/build/v2/engine/hdrmacro.c create mode 100644 external/tools/build/v2/engine/hdrmacro.h create mode 100644 external/tools/build/v2/engine/headers.c create mode 100644 external/tools/build/v2/engine/headers.h create mode 100644 external/tools/build/v2/engine/jam.c create mode 100644 external/tools/build/v2/engine/jam.h create mode 100644 external/tools/build/v2/engine/jambase.c create mode 100644 external/tools/build/v2/engine/jambase.h create mode 100644 external/tools/build/v2/engine/jamgram.c create mode 100644 external/tools/build/v2/engine/jamgram.h create mode 100644 external/tools/build/v2/engine/jamgram.y create mode 100644 external/tools/build/v2/engine/jamgram.yy create mode 100644 external/tools/build/v2/engine/jamgramtab.h create mode 100644 external/tools/build/v2/engine/lists.c create mode 100644 external/tools/build/v2/engine/lists.h create mode 100644 external/tools/build/v2/engine/make.c create mode 100644 external/tools/build/v2/engine/make.h create mode 100644 external/tools/build/v2/engine/make1.c create mode 100644 external/tools/build/v2/engine/md5.c create mode 100644 external/tools/build/v2/engine/md5.h create mode 100644 external/tools/build/v2/engine/mem.c create mode 100644 external/tools/build/v2/engine/mem.h create mode 100644 external/tools/build/v2/engine/mkjambase.c create mode 100644 external/tools/build/v2/engine/modules.c create mode 100644 external/tools/build/v2/engine/modules.h create mode 100644 external/tools/build/v2/engine/modules/order.c create mode 100644 external/tools/build/v2/engine/modules/path.c create mode 100644 external/tools/build/v2/engine/modules/property-set.c create mode 100644 external/tools/build/v2/engine/modules/readme.txt create mode 100644 external/tools/build/v2/engine/modules/regex.c create mode 100644 external/tools/build/v2/engine/modules/sequence.c create mode 100644 external/tools/build/v2/engine/modules/set.c create mode 100644 external/tools/build/v2/engine/native.c create mode 100644 external/tools/build/v2/engine/native.h create mode 100644 external/tools/build/v2/engine/newstr.c create mode 100644 external/tools/build/v2/engine/newstr.h create mode 100644 external/tools/build/v2/engine/option.c create mode 100644 external/tools/build/v2/engine/option.h create mode 100644 external/tools/build/v2/engine/output.c create mode 100644 external/tools/build/v2/engine/output.h create mode 100644 external/tools/build/v2/engine/parse.c create mode 100644 external/tools/build/v2/engine/parse.h create mode 100644 external/tools/build/v2/engine/patchlevel.h create mode 100644 external/tools/build/v2/engine/pathmac.c create mode 100644 external/tools/build/v2/engine/pathsys.h create mode 100644 external/tools/build/v2/engine/pathunix.c create mode 100644 external/tools/build/v2/engine/pathvms.c create mode 100644 external/tools/build/v2/engine/pwd.c create mode 100644 external/tools/build/v2/engine/pwd.h create mode 100644 external/tools/build/v2/engine/regexp.c create mode 100644 external/tools/build/v2/engine/regexp.h create mode 100644 external/tools/build/v2/engine/rules.c create mode 100644 external/tools/build/v2/engine/rules.h create mode 100644 external/tools/build/v2/engine/scan.c create mode 100644 external/tools/build/v2/engine/scan.h create mode 100644 external/tools/build/v2/engine/search.c create mode 100644 external/tools/build/v2/engine/search.h create mode 100644 external/tools/build/v2/engine/strings.c create mode 100644 external/tools/build/v2/engine/strings.h create mode 100644 external/tools/build/v2/engine/subst.c create mode 100644 external/tools/build/v2/engine/timestamp.c create mode 100644 external/tools/build/v2/engine/timestamp.h create mode 100644 external/tools/build/v2/engine/variable.c create mode 100644 external/tools/build/v2/engine/variable.h create mode 100644 external/tools/build/v2/engine/w32_getreg.c create mode 100644 external/tools/build/v2/engine/yyacc.c create mode 100644 external/tools/build/v2/example/boost-build.jam create mode 100644 external/tools/build/v2/example/built_tool/Jamroot.jam create mode 100644 external/tools/build/v2/example/built_tool/core/Jamfile.jam create mode 100644 external/tools/build/v2/example/built_tool/core/a.td create mode 100644 external/tools/build/v2/example/built_tool/core/core.cpp create mode 100644 external/tools/build/v2/example/built_tool/readme.txt create mode 100644 external/tools/build/v2/example/built_tool/tblgen/Jamfile.jam create mode 100644 external/tools/build/v2/example/built_tool/tblgen/tblgen.cpp create mode 100644 external/tools/build/v2/example/customization/class.verbatim create mode 100644 external/tools/build/v2/example/customization/codegen.cpp create mode 100755 external/tools/build/v2/example/customization/inline_file.py create mode 100644 external/tools/build/v2/example/customization/jamroot.jam create mode 100644 external/tools/build/v2/example/customization/readme.txt create mode 100644 external/tools/build/v2/example/customization/t1.verbatim create mode 100644 external/tools/build/v2/example/customization/t2.verbatim create mode 100644 external/tools/build/v2/example/customization/usage.verbatim create mode 100644 external/tools/build/v2/example/customization/verbatim.jam create mode 100644 external/tools/build/v2/example/customization/verbatim.py create mode 100644 external/tools/build/v2/example/generate/REAME.txt create mode 100644 external/tools/build/v2/example/generate/a.cpp create mode 100644 external/tools/build/v2/example/generate/gen.jam create mode 100644 external/tools/build/v2/example/generate/gen.py create mode 100644 external/tools/build/v2/example/generate/jamroot.jam create mode 100644 external/tools/build/v2/example/generator/README.txt create mode 100644 external/tools/build/v2/example/generator/foo.gci create mode 100644 external/tools/build/v2/example/generator/jamroot.jam create mode 100644 external/tools/build/v2/example/generator/soap.jam create mode 100644 external/tools/build/v2/example/gettext/jamfile.jam create mode 100644 external/tools/build/v2/example/gettext/jamroot.jam create mode 100644 external/tools/build/v2/example/gettext/main.cpp create mode 100644 external/tools/build/v2/example/gettext/readme.txt create mode 100644 external/tools/build/v2/example/gettext/russian.po create mode 100644 external/tools/build/v2/example/hello/hello.cpp create mode 100644 external/tools/build/v2/example/hello/jamroot.jam create mode 100644 external/tools/build/v2/example/hello/readme.txt create mode 100644 external/tools/build/v2/example/libraries/app/app.cpp create mode 100644 external/tools/build/v2/example/libraries/app/jamfile.jam create mode 100644 external/tools/build/v2/example/libraries/jamroot.jam create mode 100644 external/tools/build/v2/example/libraries/util/foo/bar.cpp create mode 100644 external/tools/build/v2/example/libraries/util/foo/include/lib1.h create mode 100644 external/tools/build/v2/example/libraries/util/foo/jamfile.jam create mode 100644 external/tools/build/v2/example/make/foo.py create mode 100644 external/tools/build/v2/example/make/jamroot.jam create mode 100644 external/tools/build/v2/example/make/main_cpp.pro create mode 100644 external/tools/build/v2/example/make/readme.txt create mode 100644 external/tools/build/v2/example/pch/include/pch.hpp create mode 100644 external/tools/build/v2/example/pch/jamroot.jam create mode 100644 external/tools/build/v2/example/pch/source/hello_world.cpp create mode 100644 external/tools/build/v2/example/python_modules/jamroot.jam create mode 100644 external/tools/build/v2/example/python_modules/python_helpers.jam create mode 100644 external/tools/build/v2/example/python_modules/python_helpers.py create mode 100644 external/tools/build/v2/example/python_modules/readme.txt create mode 100644 external/tools/build/v2/example/qt/README.txt create mode 100644 external/tools/build/v2/example/qt/qt3/hello/canvas.cpp create mode 100644 external/tools/build/v2/example/qt/qt3/hello/canvas.h create mode 100644 external/tools/build/v2/example/qt/qt3/hello/jamroot.jam create mode 100644 external/tools/build/v2/example/qt/qt3/hello/main.cpp create mode 100644 external/tools/build/v2/example/qt/qt3/moccable-cpp/jamroot.jam create mode 100644 external/tools/build/v2/example/qt/qt3/moccable-cpp/main.cpp create mode 100644 external/tools/build/v2/example/qt/qt3/uic/hello_world_widget.ui create mode 100644 external/tools/build/v2/example/qt/qt3/uic/jamroot.jam create mode 100644 external/tools/build/v2/example/qt/qt3/uic/main.cpp create mode 100644 external/tools/build/v2/example/qt/qt4/hello/arrow.cpp create mode 100644 external/tools/build/v2/example/qt/qt4/hello/arrow.h create mode 100644 external/tools/build/v2/example/qt/qt4/hello/jamroot.jam create mode 100644 external/tools/build/v2/example/qt/qt4/hello/main.cpp create mode 100644 external/tools/build/v2/example/qt/qt4/moccable-cpp/jamroot.jam create mode 100644 external/tools/build/v2/example/qt/qt4/moccable-cpp/main.cpp create mode 100644 external/tools/build/v2/example/qt/qt4/uic/hello_world_widget.ui create mode 100644 external/tools/build/v2/example/qt/qt4/uic/jamroot.jam create mode 100644 external/tools/build/v2/example/qt/qt4/uic/main.cpp create mode 100644 external/tools/build/v2/example/variant/a.cpp create mode 100644 external/tools/build/v2/example/variant/jamfile.jam create mode 100644 external/tools/build/v2/example/variant/jamroot.jam create mode 100644 external/tools/build/v2/example/variant/libs/jamfile.jam create mode 100644 external/tools/build/v2/example/variant/libs/l.cpp create mode 100644 external/tools/build/v2/example/variant/readme.txt create mode 100644 external/tools/build/v2/example/versioned/hello.cpp create mode 100644 external/tools/build/v2/example/versioned/jamfile.jam create mode 100644 external/tools/build/v2/example/versioned/jamroot.jam create mode 100644 external/tools/build/v2/exceptions.py create mode 100644 external/tools/build/v2/hacking.txt create mode 100644 external/tools/build/v2/index.html create mode 100644 external/tools/build/v2/kernel/boost-build.jam create mode 100644 external/tools/build/v2/kernel/bootstrap.jam create mode 100644 external/tools/build/v2/kernel/bootstrap.py create mode 100644 external/tools/build/v2/kernel/class.jam create mode 100644 external/tools/build/v2/kernel/errors.jam create mode 100644 external/tools/build/v2/kernel/modules.jam create mode 100644 external/tools/build/v2/manager.py create mode 100755 external/tools/build/v2/nightly.sh create mode 100644 external/tools/build/v2/notes/README.txt create mode 100644 external/tools/build/v2/notes/build_dir_option.txt create mode 100644 external/tools/build/v2/notes/relative_source_paths.txt create mode 100644 external/tools/build/v2/options/help.jam create mode 100644 external/tools/build/v2/release_procedure.txt create mode 100755 external/tools/build/v2/roll.sh create mode 100644 external/tools/build/v2/site-config.jam create mode 100644 external/tools/build/v2/test/BoostBuild.py create mode 100644 external/tools/build/v2/test/Jamrules create mode 100644 external/tools/build/v2/test/TestCmd.py create mode 100644 external/tools/build/v2/test/abs_workdir.py create mode 100644 external/tools/build/v2/test/absolute_sources.py create mode 100644 external/tools/build/v2/test/alias.py create mode 100644 external/tools/build/v2/test/alternatives.py create mode 100644 external/tools/build/v2/test/assert-equal.jam create mode 100644 external/tools/build/v2/test/bad_dirname.py create mode 100644 external/tools/build/v2/test/boost-build.jam create mode 100644 external/tools/build/v2/test/boostbook.py create mode 100644 external/tools/build/v2/test/boostbook/a.hpp create mode 100644 external/tools/build/v2/test/boostbook/docs.xml create mode 100644 external/tools/build/v2/test/boostbook/jamroot.jam create mode 100644 external/tools/build/v2/test/build_dir.py create mode 100644 external/tools/build/v2/test/build_file.py create mode 100644 external/tools/build/v2/test/build_no.py create mode 100644 external/tools/build/v2/test/c_file.py create mode 100644 external/tools/build/v2/test/chain.py create mode 100644 external/tools/build/v2/test/check-arguments.jam create mode 100644 external/tools/build/v2/test/check-bindrule.jam create mode 100644 external/tools/build/v2/test/check-jam-patches.jam create mode 100644 external/tools/build/v2/test/check-test-tools.jam create mode 100644 external/tools/build/v2/test/clean.py create mode 100644 external/tools/build/v2/test/composite.py create mode 100644 external/tools/build/v2/test/conditionals.py create mode 100644 external/tools/build/v2/test/conditionals2.py create mode 100644 external/tools/build/v2/test/conditionals3.py create mode 100755 external/tools/build/v2/test/conditionals_multiple.py create mode 100755 external/tools/build/v2/test/configuration.py create mode 100755 external/tools/build/v2/test/copy_time.py create mode 100644 external/tools/build/v2/test/core_d12.py create mode 100644 external/tools/build/v2/test/core_delete_module.py create mode 100644 external/tools/build/v2/test/core_dependencies.py create mode 100644 external/tools/build/v2/test/core_import_module.py create mode 100644 external/tools/build/v2/test/core_modifiers.py create mode 100644 external/tools/build/v2/test/core_typecheck.py create mode 100644 external/tools/build/v2/test/core_varnames.py create mode 100644 external/tools/build/v2/test/custom_generator.py create mode 100644 external/tools/build/v2/test/default_build.py create mode 100644 external/tools/build/v2/test/default_features.py create mode 100755 external/tools/build/v2/test/default_toolset.py create mode 100644 external/tools/build/v2/test/dependency-test/a.cpp create mode 100644 external/tools/build/v2/test/dependency-test/a.h create mode 100644 external/tools/build/v2/test/dependency-test/a_c.c create mode 100644 external/tools/build/v2/test/dependency-test/b.cpp create mode 100644 external/tools/build/v2/test/dependency-test/b.h create mode 100644 external/tools/build/v2/test/dependency-test/c.cpp create mode 100644 external/tools/build/v2/test/dependency-test/e.cpp create mode 100644 external/tools/build/v2/test/dependency-test/foo.jam create mode 100644 external/tools/build/v2/test/dependency-test/foo.py create mode 100644 external/tools/build/v2/test/dependency-test/jamfile.jam create mode 100644 external/tools/build/v2/test/dependency-test/jamroot.jam create mode 100644 external/tools/build/v2/test/dependency-test/src1/a.h create mode 100644 external/tools/build/v2/test/dependency-test/src1/b.h create mode 100644 external/tools/build/v2/test/dependency-test/src1/c.h create mode 100644 external/tools/build/v2/test/dependency-test/src1/z.h create mode 100644 external/tools/build/v2/test/dependency-test/src2/b.h create mode 100644 external/tools/build/v2/test/dependency-test/x.foo create mode 100644 external/tools/build/v2/test/dependency-test/y.foo create mode 100644 external/tools/build/v2/test/dependency_property.py create mode 100644 external/tools/build/v2/test/dependency_test.py create mode 100644 external/tools/build/v2/test/direct-request-test/a.cpp create mode 100644 external/tools/build/v2/test/direct-request-test/b.cpp create mode 100644 external/tools/build/v2/test/direct-request-test/b_inverse.cpp create mode 100644 external/tools/build/v2/test/direct-request-test/jamfile.jam create mode 100644 external/tools/build/v2/test/direct-request-test/jamfile2.jam create mode 100644 external/tools/build/v2/test/direct-request-test/jamroot.jam create mode 100644 external/tools/build/v2/test/direct_request_test.py create mode 100644 external/tools/build/v2/test/disambiguation.py create mode 100644 external/tools/build/v2/test/dll_path.py create mode 100644 external/tools/build/v2/test/double_loading.py create mode 100644 external/tools/build/v2/test/duplicate.py create mode 100644 external/tools/build/v2/test/echo_args.jam create mode 100644 external/tools/build/v2/test/empty.jam create mode 100644 external/tools/build/v2/test/engine/README.txt create mode 100644 external/tools/build/v2/test/engine/action_status.jam create mode 100644 external/tools/build/v2/test/engine/actions_quietly.jam create mode 100644 external/tools/build/v2/test/engine/builtin_normalize_path.jam create mode 100644 external/tools/build/v2/test/engine/builtin_shell.jam create mode 100644 external/tools/build/v2/test/engine/builtin_w32_getregnames.jam create mode 100644 external/tools/build/v2/test/engine/option_d2.jam create mode 100644 external/tools/build/v2/test/engine/option_l.jam create mode 100644 external/tools/build/v2/test/engine/option_n.jam create mode 100644 external/tools/build/v2/test/engine/parallel_actions.jam create mode 100644 external/tools/build/v2/test/engine/parallel_multifile_actions_1.jam create mode 100644 external/tools/build/v2/test/engine/parallel_multifile_actions_2.jam create mode 100644 external/tools/build/v2/test/engine/rule_param.jam create mode 100644 external/tools/build/v2/test/engine/stress_var_expand.jam create mode 100644 external/tools/build/v2/test/engine/target_var.jam create mode 100644 external/tools/build/v2/test/engine/test.bat create mode 100644 external/tools/build/v2/test/engine/test.jam create mode 100755 external/tools/build/v2/test/engine/test.sh create mode 100644 external/tools/build/v2/test/engine/var_expand.jam create mode 100644 external/tools/build/v2/test/example_customization.py create mode 100644 external/tools/build/v2/test/example_gettext.py create mode 100644 external/tools/build/v2/test/example_libraries.py create mode 100644 external/tools/build/v2/test/example_make.py create mode 100644 external/tools/build/v2/test/example_qt4.py create mode 100755 external/tools/build/v2/test/exit_status.py create mode 100644 external/tools/build/v2/test/expansion.py create mode 100644 external/tools/build/v2/test/explicit.py create mode 100755 external/tools/build/v2/test/file_name_handling.py create mode 100644 external/tools/build/v2/test/free_features_request.py create mode 100644 external/tools/build/v2/test/gcc_runtime.py create mode 100755 external/tools/build/v2/test/generator_selection.py create mode 100644 external/tools/build/v2/test/generators-test/a.cpp create mode 100644 external/tools/build/v2/test/generators-test/b.cxx create mode 100644 external/tools/build/v2/test/generators-test/c.tui create mode 100644 external/tools/build/v2/test/generators-test/d.wd create mode 100644 external/tools/build/v2/test/generators-test/e.cpp create mode 100644 external/tools/build/v2/test/generators-test/extra.jam create mode 100644 external/tools/build/v2/test/generators-test/jamfile.jam create mode 100644 external/tools/build/v2/test/generators-test/jamroot.jam create mode 100644 external/tools/build/v2/test/generators-test/lex.jam create mode 100644 external/tools/build/v2/test/generators-test/lib/c.cpp create mode 100644 external/tools/build/v2/test/generators-test/lib/jamfile.jam create mode 100644 external/tools/build/v2/test/generators-test/nm.jam create mode 100644 external/tools/build/v2/test/generators-test/qt.jam create mode 100644 external/tools/build/v2/test/generators-test/x.l create mode 100644 external/tools/build/v2/test/generators-test/y.x_pro create mode 100644 external/tools/build/v2/test/generators-test/z.cpp create mode 100644 external/tools/build/v2/test/generators_test.py create mode 100644 external/tools/build/v2/test/implicit_dependency.py create mode 100644 external/tools/build/v2/test/indirect_conditional.py create mode 100644 external/tools/build/v2/test/inherit_toolset.py create mode 100755 external/tools/build/v2/test/inherited_dependency.py create mode 100644 external/tools/build/v2/test/inline.py create mode 100644 external/tools/build/v2/test/jamfile.jam create mode 100644 external/tools/build/v2/test/lib_source_property.py create mode 100644 external/tools/build/v2/test/library_chain.py create mode 100644 external/tools/build/v2/test/library_order.py create mode 100644 external/tools/build/v2/test/library_property.py create mode 100644 external/tools/build/v2/test/load_dir.py create mode 100644 external/tools/build/v2/test/load_order.py create mode 100644 external/tools/build/v2/test/loop.py create mode 100644 external/tools/build/v2/test/m1-01.py create mode 100644 external/tools/build/v2/test/m1-02.py create mode 100644 external/tools/build/v2/test/m1-03.py create mode 100644 external/tools/build/v2/test/make_rule.py create mode 100644 external/tools/build/v2/test/module-actions/boost-build.jam create mode 100644 external/tools/build/v2/test/module-actions/bootstrap.jam create mode 100644 external/tools/build/v2/test/module_actions.py create mode 100644 external/tools/build/v2/test/ndebug.py create mode 100644 external/tools/build/v2/test/no_type.py create mode 100644 external/tools/build/v2/test/notfile.py create mode 100644 external/tools/build/v2/test/ordered_include.py create mode 100644 external/tools/build/v2/test/ordered_properties.py create mode 100644 external/tools/build/v2/test/out_of_tree.py create mode 100644 external/tools/build/v2/test/path_features.py create mode 100644 external/tools/build/v2/test/pch.py create mode 100644 external/tools/build/v2/test/prebuilt.py create mode 100644 external/tools/build/v2/test/prebuilt/ext/a.cpp create mode 100644 external/tools/build/v2/test/prebuilt/ext/debug/a.h create mode 100644 external/tools/build/v2/test/prebuilt/ext/jamfile.jam create mode 100644 external/tools/build/v2/test/prebuilt/ext/jamfile2.jam create mode 100644 external/tools/build/v2/test/prebuilt/ext/jamfile3.jam create mode 100644 external/tools/build/v2/test/prebuilt/ext/jamroot.jam create mode 100644 external/tools/build/v2/test/prebuilt/ext/release/a.h create mode 100644 external/tools/build/v2/test/prebuilt/hello.cpp create mode 100644 external/tools/build/v2/test/prebuilt/jamfile.jam create mode 100644 external/tools/build/v2/test/prebuilt/jamroot.jam create mode 100755 external/tools/build/v2/test/preprocessor.py create mode 100644 external/tools/build/v2/test/print.py create mode 100644 external/tools/build/v2/test/project-test1.jam create mode 100644 external/tools/build/v2/test/project-test1/dir/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test1/dir2/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test1/dir2/jamroot.jam create mode 100644 external/tools/build/v2/test/project-test1/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test1/jamroot.jam create mode 100644 external/tools/build/v2/test/project-test1/project-test1.jam create mode 100644 external/tools/build/v2/test/project-test1/readme.txt create mode 100644 external/tools/build/v2/test/project-test1/standalone-project.jam create mode 100644 external/tools/build/v2/test/project-test3/a.cpp create mode 100644 external/tools/build/v2/test/project-test3/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test3/jamroot.jam create mode 100644 external/tools/build/v2/test/project-test3/lib/b.cpp create mode 100644 external/tools/build/v2/test/project-test3/lib/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test3/lib2/c.cpp create mode 100644 external/tools/build/v2/test/project-test3/lib2/d.cpp create mode 100644 external/tools/build/v2/test/project-test3/lib2/helper/e.cpp create mode 100644 external/tools/build/v2/test/project-test3/lib2/helper/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test3/lib2/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test3/lib3/f.cpp create mode 100644 external/tools/build/v2/test/project-test3/lib3/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test3/lib3/jamroot.jam create mode 100644 external/tools/build/v2/test/project-test3/readme.txt create mode 100644 external/tools/build/v2/test/project-test4/a.cpp create mode 100644 external/tools/build/v2/test/project-test4/a_gcc.cpp create mode 100644 external/tools/build/v2/test/project-test4/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test4/jamfile3.jam create mode 100644 external/tools/build/v2/test/project-test4/jamfile4.jam create mode 100644 external/tools/build/v2/test/project-test4/jamfile5.jam create mode 100644 external/tools/build/v2/test/project-test4/jamroot.jam create mode 100644 external/tools/build/v2/test/project-test4/lib/b.cpp create mode 100644 external/tools/build/v2/test/project-test4/lib/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test4/lib/jamfile1.jam create mode 100644 external/tools/build/v2/test/project-test4/lib/jamfile2.jam create mode 100644 external/tools/build/v2/test/project-test4/lib/jamfile3.jam create mode 100644 external/tools/build/v2/test/project-test4/lib2/jamfile.jam create mode 100644 external/tools/build/v2/test/project-test4/lib2/jamfile2.jam create mode 100644 external/tools/build/v2/test/project-test4/readme.txt create mode 100644 external/tools/build/v2/test/project_dependencies.py create mode 100644 external/tools/build/v2/test/project_glob.py create mode 100644 external/tools/build/v2/test/project_root_constants.py create mode 100644 external/tools/build/v2/test/project_root_rule.py create mode 100644 external/tools/build/v2/test/project_test1.py create mode 100644 external/tools/build/v2/test/project_test3.py create mode 100644 external/tools/build/v2/test/project_test4.py create mode 100644 external/tools/build/v2/test/property_expansion.py create mode 100755 external/tools/build/v2/test/qt4.py create mode 100644 external/tools/build/v2/test/qt4/jamroot.jam create mode 100644 external/tools/build/v2/test/qt4/mock.cpp create mode 100644 external/tools/build/v2/test/qt4/mock.h create mode 100644 external/tools/build/v2/test/qt4/phonon.cpp create mode 100644 external/tools/build/v2/test/qt4/qt3support.cpp create mode 100644 external/tools/build/v2/test/qt4/qtassistant.cpp create mode 100644 external/tools/build/v2/test/qt4/qtcore.cpp create mode 100644 external/tools/build/v2/test/qt4/qtcorefail.cpp create mode 100644 external/tools/build/v2/test/qt4/qtdeclarative.cpp create mode 100644 external/tools/build/v2/test/qt4/qtgui.cpp create mode 100644 external/tools/build/v2/test/qt4/qthelp.cpp create mode 100644 external/tools/build/v2/test/qt4/qtmultimedia.cpp create mode 100644 external/tools/build/v2/test/qt4/qtnetwork.cpp create mode 100644 external/tools/build/v2/test/qt4/qtscript.cpp create mode 100644 external/tools/build/v2/test/qt4/qtscripttools.cpp create mode 100644 external/tools/build/v2/test/qt4/qtsql.cpp create mode 100644 external/tools/build/v2/test/qt4/qtsvg.cpp create mode 100644 external/tools/build/v2/test/qt4/qttest.cpp create mode 100644 external/tools/build/v2/test/qt4/qtwebkit.cpp create mode 100644 external/tools/build/v2/test/qt4/qtxml.cpp create mode 100644 external/tools/build/v2/test/qt4/qtxmlpatterns.cpp create mode 100644 external/tools/build/v2/test/railsys.py create mode 100644 external/tools/build/v2/test/railsys/libx/include/test_libx.h create mode 100644 external/tools/build/v2/test/railsys/libx/jamroot.jam create mode 100644 external/tools/build/v2/test/railsys/libx/src/jamfile.jam create mode 100644 external/tools/build/v2/test/railsys/libx/src/test_libx.cpp create mode 100644 external/tools/build/v2/test/railsys/program/include/test_a.h create mode 100644 external/tools/build/v2/test/railsys/program/jamfile.jam create mode 100644 external/tools/build/v2/test/railsys/program/jamroot.jam create mode 100644 external/tools/build/v2/test/railsys/program/liba/jamfile.jam create mode 100644 external/tools/build/v2/test/railsys/program/liba/test_a.cpp create mode 100644 external/tools/build/v2/test/railsys/program/main/jamfile.jam create mode 100644 external/tools/build/v2/test/railsys/program/main/main.cpp create mode 100644 external/tools/build/v2/test/readme.txt create mode 100644 external/tools/build/v2/test/rebuilds.py create mode 100644 external/tools/build/v2/test/recursive.jam create mode 100644 external/tools/build/v2/test/regression.py create mode 100644 external/tools/build/v2/test/relative_sources.py create mode 100644 external/tools/build/v2/test/remove_requirement.py create mode 100644 external/tools/build/v2/test/resolution.py create mode 100644 external/tools/build/v2/test/searched_lib.py create mode 100644 external/tools/build/v2/test/skipping.py create mode 100755 external/tools/build/v2/test/sort_rule.py create mode 100644 external/tools/build/v2/test/source_locations.py create mode 100644 external/tools/build/v2/test/stage.py create mode 100644 external/tools/build/v2/test/standalone.py create mode 100644 external/tools/build/v2/test/startup/boost-root/boost-build.jam create mode 100644 external/tools/build/v2/test/startup/boost-root/build/boost-build.jam create mode 100644 external/tools/build/v2/test/startup/boost-root/build/bootstrap.jam create mode 100644 external/tools/build/v2/test/startup/bootstrap-env/boost-build.jam create mode 100644 external/tools/build/v2/test/startup/bootstrap-explicit/boost-build.jam create mode 100644 external/tools/build/v2/test/startup/bootstrap-implicit/readme.txt create mode 100644 external/tools/build/v2/test/startup/no-bootstrap1/boost-build.jam create mode 100644 external/tools/build/v2/test/startup/no-bootstrap1/subdir/readme.txt create mode 100644 external/tools/build/v2/test/startup/no-bootstrap2/boost-build.jam create mode 100644 external/tools/build/v2/test/startup/no-bootstrap3/boost-build.jam create mode 100644 external/tools/build/v2/test/startup_v1.py create mode 100644 external/tools/build/v2/test/startup_v2.py create mode 100644 external/tools/build/v2/test/subdir1/file-to-bind create mode 100644 external/tools/build/v2/test/suffix.py create mode 100644 external/tools/build/v2/test/svn_tree.py create mode 100644 external/tools/build/v2/test/symlink.py create mode 100644 external/tools/build/v2/test/tag.py create mode 100644 external/tools/build/v2/test/template.py create mode 100644 external/tools/build/v2/test/test-config-example.jam create mode 100644 external/tools/build/v2/test/test.jam create mode 100644 external/tools/build/v2/test/test1.py create mode 100644 external/tools/build/v2/test/test2.py create mode 100644 external/tools/build/v2/test/test2/Jamrules create mode 100644 external/tools/build/v2/test/test2/foo.cpp create mode 100644 external/tools/build/v2/test/test2/jamfile.jam create mode 100644 external/tools/build/v2/test/test_all.py create mode 100644 external/tools/build/v2/test/test_nt_line_length.jam create mode 100755 external/tools/build/v2/test/test_result_dumping.py create mode 100644 external/tools/build/v2/test/test_system.html create mode 100644 external/tools/build/v2/test/testing-primitives/boost-build.jam create mode 100644 external/tools/build/v2/test/testing-primitives/bootstrap.jam create mode 100644 external/tools/build/v2/test/testing_primitives.py create mode 100755 external/tools/build/v2/test/testing_support.py create mode 100644 external/tools/build/v2/test/timedata.py create mode 100644 external/tools/build/v2/test/tree.py create mode 100644 external/tools/build/v2/test/unit-tests.jam create mode 100644 external/tools/build/v2/test/unit_test.py create mode 100644 external/tools/build/v2/test/unit_tests.py create mode 100644 external/tools/build/v2/test/unused.py create mode 100644 external/tools/build/v2/test/unused/a.cpp create mode 100644 external/tools/build/v2/test/unused/b.cpp create mode 100644 external/tools/build/v2/test/unused/b.x create mode 100644 external/tools/build/v2/test/unused/jamfile.jam create mode 100644 external/tools/build/v2/test/unused/jamroot.jam create mode 100644 external/tools/build/v2/test/use_requirements.py create mode 100644 external/tools/build/v2/test/using.py create mode 100644 external/tools/build/v2/test/v1-testing/a.cpp create mode 100644 external/tools/build/v2/test/v1-testing/b.cpp create mode 100644 external/tools/build/v2/test/v1-testing/boost-build.jam create mode 100644 external/tools/build/v2/test/v1-testing/c.cpp create mode 100644 external/tools/build/v2/test/v1-testing/jamfile.jam create mode 100644 external/tools/build/v2/test/v1_testing.py create mode 100644 external/tools/build/v2/test/v1_testing/Jamrules create mode 100644 external/tools/build/v2/test/v1_testing/boost-build.jam create mode 100644 external/tools/build/v2/test/v1_testing/foo.cpp create mode 100644 external/tools/build/v2/test/v1_testing/jamfile.jam create mode 100644 external/tools/build/v2/test/v1_testing/jamroot.jam create mode 100644 external/tools/build/v2/test/v1_testing/lib-err.cpp create mode 100644 external/tools/build/v2/test/v1_testing/lib.cpp create mode 100644 external/tools/build/v2/test/wrapper.py create mode 100644 external/tools/build/v2/test/wrong_project.py create mode 100755 external/tools/build/v2/to_merge.sh create mode 100644 external/tools/build/v2/tools/__init__.py create mode 100644 external/tools/build/v2/tools/acc.jam create mode 100644 external/tools/build/v2/tools/auto-index.jam create mode 100644 external/tools/build/v2/tools/bison.jam create mode 100644 external/tools/build/v2/tools/boostbook-config.jam create mode 100644 external/tools/build/v2/tools/boostbook.jam create mode 100644 external/tools/build/v2/tools/borland.jam create mode 100644 external/tools/build/v2/tools/builtin.jam create mode 100644 external/tools/build/v2/tools/builtin.py create mode 100644 external/tools/build/v2/tools/cast.jam create mode 100644 external/tools/build/v2/tools/cast.py create mode 100644 external/tools/build/v2/tools/clang-darwin.jam create mode 100644 external/tools/build/v2/tools/clang-linux.jam create mode 100644 external/tools/build/v2/tools/clang.jam create mode 100644 external/tools/build/v2/tools/common.jam create mode 100644 external/tools/build/v2/tools/common.py create mode 100644 external/tools/build/v2/tools/como-linux.jam create mode 100644 external/tools/build/v2/tools/como-win.jam create mode 100644 external/tools/build/v2/tools/como.jam create mode 100644 external/tools/build/v2/tools/convert.jam create mode 100644 external/tools/build/v2/tools/cw-config.jam create mode 100644 external/tools/build/v2/tools/cw.jam create mode 100644 external/tools/build/v2/tools/darwin.jam create mode 100644 external/tools/build/v2/tools/darwin.py create mode 100644 external/tools/build/v2/tools/dmc.jam create mode 100644 external/tools/build/v2/tools/docutils.jam create mode 100644 external/tools/build/v2/tools/doxproc.py create mode 100644 external/tools/build/v2/tools/doxygen-config.jam create mode 100644 external/tools/build/v2/tools/doxygen.jam create mode 100644 external/tools/build/v2/tools/doxygen/windows-paths-check.doxyfile create mode 100644 external/tools/build/v2/tools/doxygen/windows-paths-check.hpp create mode 100644 external/tools/build/v2/tools/fop.jam create mode 100644 external/tools/build/v2/tools/fortran.jam create mode 100644 external/tools/build/v2/tools/gcc.jam create mode 100644 external/tools/build/v2/tools/gcc.py create mode 100644 external/tools/build/v2/tools/generate.jam create mode 100644 external/tools/build/v2/tools/gettext.jam create mode 100644 external/tools/build/v2/tools/gfortran.jam create mode 100644 external/tools/build/v2/tools/hp_cxx.jam create mode 100644 external/tools/build/v2/tools/hpfortran.jam create mode 100644 external/tools/build/v2/tools/ifort.jam create mode 100644 external/tools/build/v2/tools/intel-darwin.jam create mode 100644 external/tools/build/v2/tools/intel-linux.jam create mode 100644 external/tools/build/v2/tools/intel-win.jam create mode 100644 external/tools/build/v2/tools/intel.jam create mode 100644 external/tools/build/v2/tools/lex.jam create mode 100644 external/tools/build/v2/tools/make.jam create mode 100644 external/tools/build/v2/tools/make.py create mode 100644 external/tools/build/v2/tools/mc.jam create mode 100644 external/tools/build/v2/tools/message.jam create mode 100644 external/tools/build/v2/tools/message.py create mode 100644 external/tools/build/v2/tools/midl.jam create mode 100644 external/tools/build/v2/tools/mipspro.jam create mode 100644 external/tools/build/v2/tools/mpi.jam create mode 100644 external/tools/build/v2/tools/msvc-config.jam create mode 100644 external/tools/build/v2/tools/msvc.jam create mode 100644 external/tools/build/v2/tools/notfile.jam create mode 100644 external/tools/build/v2/tools/notfile.py create mode 100644 external/tools/build/v2/tools/package.jam create mode 100644 external/tools/build/v2/tools/package.py create mode 100644 external/tools/build/v2/tools/pathscale.jam create mode 100644 external/tools/build/v2/tools/pch.jam create mode 100644 external/tools/build/v2/tools/pch.py create mode 100644 external/tools/build/v2/tools/pgi.jam create mode 100644 external/tools/build/v2/tools/python-config.jam create mode 100644 external/tools/build/v2/tools/python.jam create mode 100644 external/tools/build/v2/tools/qcc.jam create mode 100644 external/tools/build/v2/tools/qt.jam create mode 100644 external/tools/build/v2/tools/qt3.jam create mode 100644 external/tools/build/v2/tools/qt4.jam create mode 100644 external/tools/build/v2/tools/quickbook-config.jam create mode 100644 external/tools/build/v2/tools/quickbook.jam create mode 100644 external/tools/build/v2/tools/rc.jam create mode 100644 external/tools/build/v2/tools/rc.py create mode 100644 external/tools/build/v2/tools/stage.jam create mode 100644 external/tools/build/v2/tools/stage.py create mode 100644 external/tools/build/v2/tools/stlport.jam create mode 100644 external/tools/build/v2/tools/sun.jam create mode 100644 external/tools/build/v2/tools/symlink.jam create mode 100644 external/tools/build/v2/tools/symlink.py create mode 100644 external/tools/build/v2/tools/testing-aux.jam create mode 100644 external/tools/build/v2/tools/testing.jam create mode 100644 external/tools/build/v2/tools/testing.py create mode 100644 external/tools/build/v2/tools/types/__init__.py create mode 100644 external/tools/build/v2/tools/types/asm.jam create mode 100644 external/tools/build/v2/tools/types/asm.py create mode 100644 external/tools/build/v2/tools/types/cpp.jam create mode 100644 external/tools/build/v2/tools/types/cpp.py create mode 100644 external/tools/build/v2/tools/types/exe.jam create mode 100644 external/tools/build/v2/tools/types/exe.py create mode 100644 external/tools/build/v2/tools/types/html.jam create mode 100644 external/tools/build/v2/tools/types/html.py create mode 100644 external/tools/build/v2/tools/types/lib.jam create mode 100644 external/tools/build/v2/tools/types/lib.py create mode 100644 external/tools/build/v2/tools/types/obj.jam create mode 100644 external/tools/build/v2/tools/types/obj.py create mode 100644 external/tools/build/v2/tools/types/objc.jam create mode 100644 external/tools/build/v2/tools/types/preprocessed.jam create mode 100644 external/tools/build/v2/tools/types/qt.jam create mode 100644 external/tools/build/v2/tools/types/register.jam create mode 100644 external/tools/build/v2/tools/types/rsp.jam create mode 100644 external/tools/build/v2/tools/types/rsp.py create mode 100644 external/tools/build/v2/tools/unix.jam create mode 100644 external/tools/build/v2/tools/unix.py create mode 100644 external/tools/build/v2/tools/vacpp.jam create mode 100644 external/tools/build/v2/tools/whale.jam create mode 100644 external/tools/build/v2/tools/xlf.jam create mode 100644 external/tools/build/v2/tools/xsltproc-config.jam create mode 100644 external/tools/build/v2/tools/xsltproc.jam create mode 100644 external/tools/build/v2/tools/xsltproc/included.xsl create mode 100644 external/tools/build/v2/tools/xsltproc/test.xml create mode 100644 external/tools/build/v2/tools/xsltproc/test.xsl create mode 100644 external/tools/build/v2/tools/zlib.jam create mode 100644 external/tools/build/v2/user-config.jam create mode 100644 external/tools/build/v2/util/__init__.py create mode 100644 external/tools/build/v2/util/assert.jam create mode 100644 external/tools/build/v2/util/container.jam create mode 100644 external/tools/build/v2/util/doc.jam create mode 100644 external/tools/build/v2/util/indirect.jam create mode 100644 external/tools/build/v2/util/indirect.py create mode 100644 external/tools/build/v2/util/logger.py create mode 100644 external/tools/build/v2/util/numbers.jam create mode 100644 external/tools/build/v2/util/option.jam create mode 100644 external/tools/build/v2/util/option.py create mode 100644 external/tools/build/v2/util/order.jam create mode 100644 external/tools/build/v2/util/order.py create mode 100644 external/tools/build/v2/util/os.jam create mode 100644 external/tools/build/v2/util/os_j.py create mode 100644 external/tools/build/v2/util/path.jam create mode 100644 external/tools/build/v2/util/path.py create mode 100644 external/tools/build/v2/util/print.jam create mode 100644 external/tools/build/v2/util/regex.jam create mode 100644 external/tools/build/v2/util/regex.py create mode 100644 external/tools/build/v2/util/sequence.jam create mode 100644 external/tools/build/v2/util/sequence.py create mode 100644 external/tools/build/v2/util/set.jam create mode 100644 external/tools/build/v2/util/set.py create mode 100644 external/tools/build/v2/util/string.jam create mode 100644 external/tools/build/v2/util/utility.jam create mode 100644 external/tools/build/v2/util/utility.py create mode 100644 extra/lcs.c create mode 100644 extra/sdbf_test.cc create mode 100644 extra/sdhash-pcap.c create mode 100644 libsdbf.a create mode 100644 lz4/lz4.cc create mode 100644 lz4/lz4.h create mode 100644 lz4/lz4.o create mode 100644 man/sdhash-cli.1 create mode 100644 man/sdhash-cli.pod create mode 100644 man/sdhash-srv.1 create mode 100644 man/sdhash-srv.pod create mode 100644 man/sdhash.1 create mode 100644 man/sdhash.pod create mode 100644 sdbf/base64.cc create mode 100644 sdbf/base64.o create mode 100644 sdbf/bf_utils.cc create mode 100644 sdbf/bf_utils.o create mode 100644 sdbf/bloom_filter.cc create mode 100644 sdbf/bloom_filter.h create mode 100644 sdbf/bloom_filter.o create mode 100644 sdbf/entr64.cc create mode 100644 sdbf/entr64.o create mode 100644 sdbf/error.cc create mode 100644 sdbf/error.o create mode 100644 sdbf/index_info.h create mode 100644 sdbf/map_file.cc create mode 100644 sdbf/map_file.o create mode 100644 sdbf/sdbf_class.cc create mode 100644 sdbf/sdbf_class.h create mode 100644 sdbf/sdbf_class.o create mode 100644 sdbf/sdbf_conf.cc create mode 100644 sdbf/sdbf_conf.h create mode 100644 sdbf/sdbf_conf.o create mode 100644 sdbf/sdbf_core.cc create mode 100644 sdbf/sdbf_core.o create mode 100644 sdbf/sdbf_defines.h create mode 100644 sdbf/sdbf_set.cc create mode 100644 sdbf/sdbf_set.h create mode 100644 sdbf/sdbf_set.o create mode 100644 sdbf/util.h create mode 100644 sdhash-gpu/Makefile create mode 100644 sdhash-gpu/matrixCompare.cpp create mode 100644 sdhash-gpu/matrixCompare.cu create mode 100644 sdhash-gpu/matrixCompare.h create mode 100644 sdhash-gpu/matrixCompare_vs2010.sln create mode 100644 sdhash-gpu/matrixCompare_vs2010.vcxproj create mode 100644 sdhash-gpu/readme.txt create mode 100644 sdhash-server/Makefile create mode 100644 sdhash-server/gen-cpp/sdhashsrv.cpp create mode 100644 sdhash-server/gen-cpp/sdhashsrv.h create mode 100644 sdhash-server/gen-cpp/sdhashsrv_constants.cpp create mode 100644 sdhash-server/gen-cpp/sdhashsrv_constants.h create mode 100644 sdhash-server/gen-cpp/sdhashsrv_server.skeleton.cpp create mode 100644 sdhash-server/gen-cpp/sdhashsrv_types.cpp create mode 100644 sdhash-server/gen-cpp/sdhashsrv_types.h create mode 100644 sdhash-server/gen-py/__init__.py create mode 100644 sdhash-server/gen-py/sdhashsrv/__init__.py create mode 100644 sdhash-server/gen-py/sdhashsrv/constants.py create mode 100755 sdhash-server/gen-py/sdhashsrv/sdhashsrv-remote create mode 100644 sdhash-server/gen-py/sdhashsrv/sdhashsrv.py create mode 100644 sdhash-server/gen-py/sdhashsrv/ttypes.py create mode 100644 sdhash-server/sdhash-srv.cfg.example create mode 100644 sdhash-server/sdhashsrv.thrift create mode 100644 sdhash-server/src/sdhash-cli.cc create mode 100644 sdhash-server/src/sdhash-cli.h create mode 100644 sdhash-server/src/sdhash-mgr.cc create mode 100644 sdhash-server/src/sdhash-srv-main.cc create mode 100644 sdhash-server/src/sdhash-srv-opts.cc create mode 100644 sdhash-server/src/sdhash-srv.h create mode 100644 sdhash-server/src/sdhashsrv_server.skeleton.cpp create mode 100644 sdhash-server/src/set_list.cc create mode 100644 sdhash-server/src/set_list.h create mode 100644 sdhash-src/sdhash.cc create mode 100644 sdhash-src/sdhash.h create mode 100644 sdhash-src/sdhash.o create mode 100644 sdhash-src/sdhash_threads.cc create mode 100644 sdhash-src/sdhash_threads.h create mode 100644 sdhash-src/sdhash_threads.o create mode 100644 sdhash-ui/cherrypy.conf create mode 100644 sdhash-ui/cherrypy/LICENSE.txt create mode 100644 sdhash-ui/cherrypy/__init__.py create mode 100644 sdhash-ui/cherrypy/_cpchecker.py create mode 100644 sdhash-ui/cherrypy/_cpcompat.py create mode 100644 sdhash-ui/cherrypy/_cpconfig.py create mode 100644 sdhash-ui/cherrypy/_cpdispatch.py create mode 100644 sdhash-ui/cherrypy/_cperror.py create mode 100644 sdhash-ui/cherrypy/_cplogging.py create mode 100644 sdhash-ui/cherrypy/_cpmodpy.py create mode 100644 sdhash-ui/cherrypy/_cpnative_server.py create mode 100644 sdhash-ui/cherrypy/_cpreqbody.py create mode 100644 sdhash-ui/cherrypy/_cprequest.py create mode 100644 sdhash-ui/cherrypy/_cpserver.py create mode 100644 sdhash-ui/cherrypy/_cpthreadinglocal.py create mode 100644 sdhash-ui/cherrypy/_cptools.py create mode 100644 sdhash-ui/cherrypy/_cptree.py create mode 100644 sdhash-ui/cherrypy/_cpwsgi.py create mode 100644 sdhash-ui/cherrypy/_cpwsgi_server.py create mode 100755 sdhash-ui/cherrypy/cherryd create mode 100644 sdhash-ui/cherrypy/favicon.ico create mode 100644 sdhash-ui/cherrypy/lib/__init__.py create mode 100644 sdhash-ui/cherrypy/lib/auth.py create mode 100644 sdhash-ui/cherrypy/lib/auth_basic.py create mode 100644 sdhash-ui/cherrypy/lib/auth_digest.py create mode 100644 sdhash-ui/cherrypy/lib/caching.py create mode 100644 sdhash-ui/cherrypy/lib/covercp.py create mode 100644 sdhash-ui/cherrypy/lib/cpstats.py create mode 100644 sdhash-ui/cherrypy/lib/cptools.py create mode 100644 sdhash-ui/cherrypy/lib/encoding.py create mode 100644 sdhash-ui/cherrypy/lib/gctools.py create mode 100644 sdhash-ui/cherrypy/lib/http.py create mode 100644 sdhash-ui/cherrypy/lib/httpauth.py create mode 100644 sdhash-ui/cherrypy/lib/httputil.py create mode 100644 sdhash-ui/cherrypy/lib/jsontools.py create mode 100644 sdhash-ui/cherrypy/lib/profiler.py create mode 100644 sdhash-ui/cherrypy/lib/reprconf.py create mode 100644 sdhash-ui/cherrypy/lib/sessions.py create mode 100644 sdhash-ui/cherrypy/lib/static.py create mode 100644 sdhash-ui/cherrypy/lib/xmlrpcutil.py create mode 100644 sdhash-ui/cherrypy/process/__init__.py create mode 100644 sdhash-ui/cherrypy/process/plugins.py create mode 100644 sdhash-ui/cherrypy/process/servers.py create mode 100644 sdhash-ui/cherrypy/process/win32.py create mode 100644 sdhash-ui/cherrypy/process/wspbus.py create mode 100644 sdhash-ui/cherrypy/scaffold/__init__.py create mode 100644 sdhash-ui/cherrypy/scaffold/apache-fcgi.conf create mode 100644 sdhash-ui/cherrypy/scaffold/example.conf create mode 100644 sdhash-ui/cherrypy/scaffold/site.conf create mode 100644 sdhash-ui/cherrypy/scaffold/static/made_with_cherrypy_small.png create mode 100644 sdhash-ui/cherrypy/test/__init__.py create mode 100644 sdhash-ui/cherrypy/test/_test_decorators.py create mode 100644 sdhash-ui/cherrypy/test/_test_states_demo.py create mode 100644 sdhash-ui/cherrypy/test/benchmark.py create mode 100644 sdhash-ui/cherrypy/test/checkerdemo.py create mode 100644 sdhash-ui/cherrypy/test/helper.py create mode 100644 sdhash-ui/cherrypy/test/logtest.py create mode 100644 sdhash-ui/cherrypy/test/modfastcgi.py create mode 100644 sdhash-ui/cherrypy/test/modfcgid.py create mode 100644 sdhash-ui/cherrypy/test/modpy.py create mode 100644 sdhash-ui/cherrypy/test/modwsgi.py create mode 100755 sdhash-ui/cherrypy/test/sessiondemo.py create mode 100644 sdhash-ui/cherrypy/test/static/dirback.jpg create mode 100644 sdhash-ui/cherrypy/test/static/has space.html create mode 100644 sdhash-ui/cherrypy/test/static/index.html create mode 100644 sdhash-ui/cherrypy/test/style.css create mode 100644 sdhash-ui/cherrypy/test/test.pem create mode 100644 sdhash-ui/cherrypy/test/test_auth_basic.py create mode 100644 sdhash-ui/cherrypy/test/test_auth_digest.py create mode 100644 sdhash-ui/cherrypy/test/test_bus.py create mode 100644 sdhash-ui/cherrypy/test/test_caching.py create mode 100644 sdhash-ui/cherrypy/test/test_config.py create mode 100644 sdhash-ui/cherrypy/test/test_config_server.py create mode 100644 sdhash-ui/cherrypy/test/test_conn.py create mode 100644 sdhash-ui/cherrypy/test/test_core.py create mode 100644 sdhash-ui/cherrypy/test/test_dynamicobjectmapping.py create mode 100644 sdhash-ui/cherrypy/test/test_encoding.py create mode 100644 sdhash-ui/cherrypy/test/test_etags.py create mode 100644 sdhash-ui/cherrypy/test/test_http.py create mode 100644 sdhash-ui/cherrypy/test/test_httpauth.py create mode 100644 sdhash-ui/cherrypy/test/test_httplib.py create mode 100644 sdhash-ui/cherrypy/test/test_json.py create mode 100644 sdhash-ui/cherrypy/test/test_logging.py create mode 100644 sdhash-ui/cherrypy/test/test_mime.py create mode 100644 sdhash-ui/cherrypy/test/test_misc_tools.py create mode 100644 sdhash-ui/cherrypy/test/test_objectmapping.py create mode 100644 sdhash-ui/cherrypy/test/test_proxy.py create mode 100644 sdhash-ui/cherrypy/test/test_refleaks.py create mode 100644 sdhash-ui/cherrypy/test/test_request_obj.py create mode 100644 sdhash-ui/cherrypy/test/test_routes.py create mode 100755 sdhash-ui/cherrypy/test/test_session.py create mode 100644 sdhash-ui/cherrypy/test/test_sessionauthenticate.py create mode 100644 sdhash-ui/cherrypy/test/test_states.py create mode 100644 sdhash-ui/cherrypy/test/test_static.py create mode 100644 sdhash-ui/cherrypy/test/test_tools.py create mode 100644 sdhash-ui/cherrypy/test/test_tutorials.py create mode 100644 sdhash-ui/cherrypy/test/test_virtualhost.py create mode 100644 sdhash-ui/cherrypy/test/test_wsgi_ns.py create mode 100644 sdhash-ui/cherrypy/test/test_wsgi_vhost.py create mode 100644 sdhash-ui/cherrypy/test/test_wsgiapps.py create mode 100644 sdhash-ui/cherrypy/test/test_xmlrpc.py create mode 100644 sdhash-ui/cherrypy/test/webtest.py create mode 100644 sdhash-ui/cherrypy/tutorial/README.txt create mode 100644 sdhash-ui/cherrypy/tutorial/__init__.py create mode 100644 sdhash-ui/cherrypy/tutorial/bonus-sqlobject.py create mode 100644 sdhash-ui/cherrypy/tutorial/custom_error.html create mode 100644 sdhash-ui/cherrypy/tutorial/pdf_file.pdf create mode 100644 sdhash-ui/cherrypy/tutorial/tut01_helloworld.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut02_expose_methods.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut03_get_and_post.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut04_complex_site.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut05_derived_objects.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut06_default_method.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut07_sessions.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut08_generators_and_yield.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut09_files.py create mode 100644 sdhash-ui/cherrypy/tutorial/tut10_http_errors.py create mode 100644 sdhash-ui/cherrypy/tutorial/tutorial.conf create mode 100644 sdhash-ui/cherrypy/wsgiserver/__init__.py create mode 100644 sdhash-ui/cherrypy/wsgiserver/ssl_builtin.py create mode 100644 sdhash-ui/cherrypy/wsgiserver/ssl_pyopenssl.py create mode 100644 sdhash-ui/cherrypy/wsgiserver/wsgiserver2.py create mode 100644 sdhash-ui/cherrypy/wsgiserver/wsgiserver3.py create mode 100644 sdhash-ui/jinja2/LICENSE create mode 100644 sdhash-ui/jinja2/__init__.py create mode 100644 sdhash-ui/jinja2/_debugsupport.c create mode 100644 sdhash-ui/jinja2/_markupsafe/__init__.py create mode 100644 sdhash-ui/jinja2/_markupsafe/_bundle.py create mode 100644 sdhash-ui/jinja2/_markupsafe/_constants.py create mode 100644 sdhash-ui/jinja2/_markupsafe/_native.py create mode 100644 sdhash-ui/jinja2/_markupsafe/tests.py create mode 100644 sdhash-ui/jinja2/_stringdefs.py create mode 100644 sdhash-ui/jinja2/bccache.py create mode 100644 sdhash-ui/jinja2/compiler.py create mode 100644 sdhash-ui/jinja2/constants.py create mode 100644 sdhash-ui/jinja2/debug.py create mode 100644 sdhash-ui/jinja2/defaults.py create mode 100644 sdhash-ui/jinja2/environment.py create mode 100644 sdhash-ui/jinja2/exceptions.py create mode 100644 sdhash-ui/jinja2/ext.py create mode 100644 sdhash-ui/jinja2/filters.py create mode 100644 sdhash-ui/jinja2/lexer.py create mode 100644 sdhash-ui/jinja2/loaders.py create mode 100644 sdhash-ui/jinja2/meta.py create mode 100644 sdhash-ui/jinja2/nodes.py create mode 100644 sdhash-ui/jinja2/optimizer.py create mode 100644 sdhash-ui/jinja2/parser.py create mode 100644 sdhash-ui/jinja2/runtime.py create mode 100644 sdhash-ui/jinja2/sandbox.py create mode 100644 sdhash-ui/jinja2/tests.py create mode 100644 sdhash-ui/jinja2/testsuite/__init__.py create mode 100644 sdhash-ui/jinja2/testsuite/api.py create mode 100644 sdhash-ui/jinja2/testsuite/core_tags.py create mode 100644 sdhash-ui/jinja2/testsuite/debug.py create mode 100644 sdhash-ui/jinja2/testsuite/doctests.py create mode 100644 sdhash-ui/jinja2/testsuite/ext.py create mode 100644 sdhash-ui/jinja2/testsuite/filters.py create mode 100644 sdhash-ui/jinja2/testsuite/imports.py create mode 100644 sdhash-ui/jinja2/testsuite/inheritance.py create mode 100644 sdhash-ui/jinja2/testsuite/lexnparse.py create mode 100644 sdhash-ui/jinja2/testsuite/loader.py create mode 100644 sdhash-ui/jinja2/testsuite/regression.py create mode 100644 sdhash-ui/jinja2/testsuite/res/__init__.py create mode 100644 sdhash-ui/jinja2/testsuite/res/templates/broken.html create mode 100644 sdhash-ui/jinja2/testsuite/res/templates/foo/test.html create mode 100644 sdhash-ui/jinja2/testsuite/res/templates/syntaxerror.html create mode 100644 sdhash-ui/jinja2/testsuite/res/templates/test.html create mode 100644 sdhash-ui/jinja2/testsuite/security.py create mode 100644 sdhash-ui/jinja2/testsuite/tests.py create mode 100644 sdhash-ui/jinja2/testsuite/utils.py create mode 100644 sdhash-ui/jinja2/utils.py create mode 100644 sdhash-ui/jinja2/visitor.py create mode 100644 sdhash-ui/sdhashuiserver.py create mode 100644 sdhash-ui/serverui/__init__.py create mode 100644 sdhash-ui/serverui/serverconf.py create mode 100644 sdhash-ui/serverui/view.py create mode 100644 sdhash-ui/setup.py create mode 100644 sdhash-ui/thrift/TSCons.py create mode 100644 sdhash-ui/thrift/TSerialization.py create mode 100644 sdhash-ui/thrift/Thrift.py create mode 100644 sdhash-ui/thrift/__init__.py create mode 100644 sdhash.cfg.example create mode 100644 sdhash.py diff --git a/BUILD.windows b/BUILD.windows new file mode 100644 index 0000000..1e56bba --- /dev/null +++ b/BUILD.windows @@ -0,0 +1,69 @@ +Note: These are building instructions for sdhash on windows, +please use the executables we provide instead, as this is +very annoying to do by hand. + +To build/link sdhash on visual studio (very, very alpha.) + +I have tried this on: windows 7/x64, visual studio 2010 pro. + +boost: +I used 1.49. Build two stage directories of static libraries, one +for 32-bit linkage, and one for 64-bit linkage. + +Boost's instructions for 32-bit builds are fine. + +If you have all day, build everything once in 32-bit mode, +suggest to change the stage dir to something with --stagedir=.\stage32 +and then build it all in 64-bit. + +The currently required libraries are: thread, regex, program_options, +filesystem, date_time + +To build 64-bit: + +bjam --stagedir=.\stage64 --with-thread --with-regex --with-program_options +--with-filesystem --with-date_time --toolset=msvc-10.0 address-model=64 +--build-type=complete link=static + +openssl: +I used version 1.0.1c. Same thing here, build one set of 32-bit +static libs, and one set of 64-bit static libs. Make sure to note that +the libraries are compiled \MD -multithreaded DLL to adjust build settings +accordingly, or change that. In order to keep sdhash all static, +build the openssl libraries to \MT -multithreaded, and build the program +the same way. + +openssl has completely adequate install instructions in their windows +readme. Do everything from the appropriate 32 or 64-bit visual +studio command prompt, as they have all the environments set up. + +Then.... + +Create a new msvc++ console project in visual studio. +Drop sdbf, sdhash-src, and base64 directories into the project's folder in Explorer. + +Add all of these files to the project (right click project (not solution) +add->existing items. ) + +Set the active configuration to Release/Win32 + +Change the project properties (right click project->properties) +Edit c++ options to add include directories for boost and openssl and +turn off precompiled headers. Edit linker options to add extra +library directories (stage/lib from boost, and openssl's lib directory). +Edit linker options under Input to add ssleay32.lib and libeay32.lib. +Also add setargv.obj to this to support *.foo globbing. +Edit c++ options for Code Generation to change Runtime Library to /MD if +it is not already. To build completely static use /MT instead. + +Then the active configuration to Release/x64, do all of those options +again, and change the directories to 64-bit ones for the library includes +where applicable. + +Do ctrl-shift-b to build. "Cannot find libraryX" is either it's not +present where you said it was, it's spelled wrong, or it's 32 bit when +you are trying to compile 64. Other errors probably my fault. + +Find the built executable in the project directory from a command prompt +and run! + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..d29e7d0 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,148 @@ +New in version 3.4 + +New constructor for sdbf class to accept strings. + +Major GPU program speedup via reduction changes. + +Bugfix for current boost version and c++ 11 + +Bugfix for underflow in hash generation + +Updated/tested python swig interface + +x86-32 bit linux compilation fix for cpuid + +Updated test program. + +Thanks to Tom Sires, Alex Nelson, Jesse Kornblum, Simon Spero, and Andrei Costin for +patches and requests. + +-------- +New in version 3.3 + +Major bugfix involving self-to-self block-based comparison scoring, +we are now evenly discounting unfilled filters. + +Added --separator change option. + +Clarified indexing options/formats. + +Enabled support for multiple lists-of-files to hash. + +Now passing -Wall on gcc on Linux in main program. + +-------- +New in version 3.2.5 + +Significant speedup of CPU comparisons via openMP threads. Now +requiring openMP. + +Program will automatically use the maximum number of cores/threads +as given by openMP, on generation and comparison. +-------- +New in version 3.2 + +CUDA-accelerated GPU comparison program available - sdhash-gpu. + +Changes to indexing to auto-generate indexes of larger, more +usable size (640MB) to search much more information. + +Small change to bloom filter fullness threshold for comparison, +we now require 16 elements instead of 6. +-------- +New in version 3.1 + +New comparison code using the POPCNT instruction. Marked speed improvements +on intel, cache performance improvements on AMD. + +Refined the searching/index components, including auto-generation of reference +set from large quantity of small files, search shortcuts, etc. Indexes are +now stored compressed on disk using lz4. + +More additions to --verbose as progress indicators. + +Overhaul of sdhash-cli options, matching sdhash as closely as possible and much +more flexible. Also removing last traces of posix from sdhash-cli for inclusion +into windows port. +-------- +New in version 3.0 + +sdbf_set indexing method, to be generated with --index while hashing +and searched with --search-index while hashing. + +temp-bugfix: some speedup for very small reference data +bugfix: segmenting was seeing too-large final segment on windows +-------- +New in version 2.3 + +Web interface using python/jquery -- talks to thrift +--validate option +tons of --verbose debugging output +New thrift-server sources directory +bugfix: for invalid sdbf file reading no longer crashes +bugfix: windows recursive search filesystem permissions crash fixed + +-------- +New in version 2.2 + +Very beta native win32/win64 port +Threads updated to use boost::thread instead of pthreads directly +Program options updated to support all command line options in sdhash.cfg +Filesystem access now primarily c++/boost not posix +Thrift client/server now supports asynchronous mode comparisions +output file option -o --output + +-------- + +New in version 2.1 + +recursive directory hashing with --deep -r option +sdhash supports input from stdin +argument --segment-size -z to customize read-in segment size +argument --name -n to rename stdin hashes +new client/server programs using Thrift +api updates to use const and clearer naming conventions +api updated with formal 'set' class +sdhash auto-switching to block mode when files are >16MB +new base64 encoding library + +-------- + + +New in version 2.0 + +gnu-style long-options for standalone and client programs +configuration file capability for standalone sdhash sdhash.cfg +fixed: sdhash buffers large files instead of memory mapping the entire thing +sdhash server program sdhashd, and sdhash-cli client program. +Client and server should be considered beta software. +sdhash-dd program removed and changed to -b option for block size +sdbf version upgraded to add 'original size' into the header information +"view" option to create subsets of sets matching an expression +added: Boost libraries for regular expressions +fixed: import as file list now can use DD mode +fixed: sampling now non-destructive +swig-python bindings now exist with a sample program +Now large block hashes are "streamed" in chunks instead of as one giant hash. + +--------- + +New in version 1.8 + +-i file.txt option to generate hashes from a file list. +conversion to C++ +beta libsdbf API +fixed: off-by-one error on last line of query file + +--------- + +New in version 1.7 + +-c query.sdbf target.sdbf option +-s sample option +Support for cygwin +manpage for sdhash +make install supported +fixed: spaces in filenames now readable on input sdbf + +--------- diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e30376d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:latest + +RUN apt-get update && apt-get install -y \ + software-properties-common \ + apt-transport-https \ + wget \ + git \ + && rm -rf /var/lib/apt/lists/* + +RUN apt-get update && \ + apt-get install -y openjdk-11-jdk + +ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 +ENV PATH $JAVA_HOME/bin:$PATH + +RUN apt-get update && \ + apt-get install -y maven + +RUN java -version +RUN mvn -version + +WORKDIR /usr/src/app + +RUN apt-get install -y vim +RUN apt-get install -y python3 +RUN apt-get update +RUN apt install -y python3-pip +RUN apt install -y python3.12-venv +RUN apt install -y libfuzzy-dev +ENV VIRTUAL_ENV=/opt/venv +RUN python3 -m venv $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" +# COPY requirements.txt /usr/src/app/requirements.txt +# RUN pip3 install -r requirements.txt + +# wget releases + +# Copy the current directory contents into the container +# COPY *.py /usr/src/app/ +# COPY utils utils +# COPY augmented_predictor augmented_predictor + +# Run the application +CMD ["bash"] diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..e4c63ba --- /dev/null +++ b/Doxyfile @@ -0,0 +1,1630 @@ +# Doxyfile 1.7.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = sdbf + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 3.1 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = NO + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = sdbf + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = extra/ + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvances is that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans.ttf + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..5be5f60 --- /dev/null +++ b/INSTALL @@ -0,0 +1,55 @@ + +INSTALL for sdhash + +recent versions of sdhash has been tested on the following platforms: + +Fedora Core 17 64 bit +Ubuntu 12.04LTS 64 bit +Mac OS X 10.7 Lion +Mac OS X 10.6 Snow Leopard + +As of sdhash 3.1 we are moving to 64-bit capable -sse4.2 processors +only -- in order to take advantage of dramatically faster comparison rates. + +Windows 7 32 and 64-bit + +32-bit windows will be supported for a short amount of time via creative +ifdefs. + +64-bit gpu program requires nvidia drivers but no toolkit. + +See INSTALL.macosx and BUILD.windows for non-linux build +and installation notes. + +SHORT VERSION on Linux: + +Check for openssl-devel (fedora) or libssl-dev (ubuntu) package. + +make +make install (as root) + +For the server: + +Install apache thrift 0.8.0 - we have a .deb package for ubuntu. + +make server +make install-server + +For the GPU version: + +the CUDA toolkit is required to build, and nvidia drivers are necessary to run. + +cd sdhash-gpu ; make + +REQUIREMENTS + +openssl development libraries. +pthreads development library +openmp library -- generally installed +g++ - will work all the way down to 4.2 -- but try to use later versions +g++ - which includes -sse4.2 compatibilty. + +ETC + +See manpage for usage of sdhash. By default we install into /usr/local/bin +and this can be changed in the Makefile or with make DESTDIR=dir diff --git a/INSTALL.macosx b/INSTALL.macosx new file mode 100644 index 0000000..a42e6e8 --- /dev/null +++ b/INSTALL.macosx @@ -0,0 +1,23 @@ + +To build on OS X Lion/Snow Leopard: + +We have changed the program to no longer require g++4.4 or +higher. Xcode is necessary to build. We have tested the +most current versions of Xcode's gcc only as of May 2012. + +To build/install the server version on OSX, the best way I +have found for thrift is to install thrift from MacPorts, +0.6.0 is the latest version, so the header stuff needs to +be regenerated. + +After thrift is installed, in the sdhash-server directory + +thrift --gen cpp sdhashsrv.thrift +thrift --gen py sdhashsrv.thrift + +edit the sdhash-server Makefile to use /opt/local directories for thrift, +and build server/client/mgr programs with 'make' + +We have not tested the GPU version on OS X as we have +no hardware with which to try it. If CUDA works, it +should as well. diff --git a/INSTALL.server b/INSTALL.server new file mode 100644 index 0000000..afa91f3 --- /dev/null +++ b/INSTALL.server @@ -0,0 +1,18 @@ +Building and installing sdhash-srv. + +sdhash-srv is built using Apache/Facebook Thrift, version 0.8.0, which is +available at http://thrift.apache.org. It requires a recent install of boost +to be present, among other dependencies. Installation instructions for +thrift are here: http://thrift.apache.org/docs/install/ . We found +while installing that we needed to have all listed dependencies in place +before running the bootstrap/configure process for thrift. + +To build and link our server code we only needed to build thrift with C++ +support. Python support is recommended for using the generated python +code. We use boost 1.49 in the main sdhash tree, and if possible it +is probably best to keep that requirement. + +The Makefile in the sdhash-server directory searches for the thrift +includes in /usr/local/include/thrift, and builds sdhash-srv, sdhash-cli +and sdhash-mgr executables. + diff --git a/LICENSE copy b/LICENSE copy new file mode 100644 index 0000000..4a67574 --- /dev/null +++ b/LICENSE copy @@ -0,0 +1,203 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c2f4555 --- /dev/null +++ b/Makefile @@ -0,0 +1,109 @@ +# Makefile for sdhash. Change options at top if necessary + +DESTDIR= +PREFIX=$(DESTDIR)/usr/local +INSTDIR=$(PREFIX)/bin +MANDIR=$(PREFIX)/share/man/man1 + + +SDBF_SRC = sdbf/sdbf_class.cc sdbf/sdbf_core.cc sdbf/map_file.cc sdbf/entr64.cc sdbf/base64.cc sdbf/bf_utils.cc sdbf/error.cc sdbf/sdbf_conf.cc sdbf/sdbf_set.cc base64/modp_b64.cc sdbf/bloom_filter.cc lz4/lz4.cc + +SDHASH_SRC = sdhash-src/sdhash.cc sdhash-src/sdhash_threads.cc + +CC = g++ +LD = $(CC) + +# BAD, BAD OPTIMIZATION! -fstrict-aliasing +ifneq ($(MAKECMDGOALS),debug) +CFLAGS = -fPIC -fopenmp -msse4.2 -O3 -fno-strict-aliasing -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE_API -D_BSD_SOURCE -I./external +else +CFLAGS = -fPIC -fopenmp -msse4.2 -O0 -g -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE_API -D_BSD_SOURCE -I./external -Wall +endif + +LDFLAGS = -fopenmp -L . -L./external/stage/lib -lboost_system -lboost_filesystem -lboost_program_options -lc -lm -lcrypto -lboost_thread -lpthread + +SDHASH_OBJ = $(SDHASH_SRC:.cc=.o) +SDBF_OBJ = $(SDBF_SRC:.cc=.o) + +LIBSDBF=libsdbf.a + +all: boost stream + +debug: boost stream + +cygwin: boost stream + +install: boost man + mkdir -p $(INSTDIR) + mkdir -p $(MANDIR) +#cp sdhash sdhash-srv sdhash-cli $(INSTDIR) + cp sdhash $(INSTDIR) + cp man/sdhash.1 $(MANDIR) + cp man/sdhash-cli.1 $(MANDIR) + cp man/sdhash-srv.1 $(MANDIR) + +install-server: install server + cp sdhash-server/sdhash-srv $(INSTDIR) + cp sdhash-server/sdhash-mgr $(INSTDIR) + cp sdhash-server/sdhash-cli $(INSTDIR) + +man: man/sdhash.1 man/sdhash-cli.1 man/sdhash-srv.1 + +docs: + doxygen + +man/sdhash.1: + pod2man -c "" -r "" man/sdhash.pod > man/sdhash.1 + +man/sdhash-srv.1: + pod2man -c "" -r "" man/sdhash-srv.pod > man/sdhash-srv.1 + +man/sdhash-cli.1: + pod2man -c "" -r "" man/sdhash-cli.pod > man/sdhash-cli.1 + +swig-py: boost swig/python/sdbf_wrap.o swig/python/_sdbf_class.so +swig-win-py: boost swig/python/sdbf_wrap.o swig/python/_sdbf_class.dll + +swig/python/sdbf_wrap.o: sdbf.i $(LIBSDBF) + swig -c++ -python swig/python/sdbf.i + g++ -std=c++0x -fPIC -c swig/python/sdbf_wrap.cxx -o swig/python/sdbf_wrap.o -I/usr/include/python2.7 + +swig/python/_sdbf_class.so: swig/python/sdbf_wrap.o $(LIBSDBF) + g++ -shared swig/python/sdbf_wrap.o -fopenmp -L./external/stage/lib -Wl,--whole-archive -lboost_system -lboost_filesystem -lboost_thread -Wl,--no-whole-archive -lpython2.7 libsdbf.a -o swig/python/_sdbf_class.so -lcrypto -lpthread + +sdbf.i: + +$(LIBSDBF): $(SDBF_OBJ) + ar r $(LIBSDBF) $(SDBF_OBJ) + +stream: $(SDHASH_OBJ) $(LIBSDBF) + $(LD) $(SDHASH_OBJ) $(SDHASH_CLIENT_OBJ) $(LIBSDBF) -o JC-sdhash $(LDFLAGS) + +boost: + cd external ; ./bootstrap.sh --with-python=python2 ; ./b2 link=static cxxflags='-fPIC -std=c++0x' ; cd - + +server: + make -C ./sdhash-server -f Makefile + +gpu: + make -C ./sdhash-gpu -f Makefile + +# Longest common substring +#lcs: lcs.c map_file.c error.c +# gcc -std=c99 -O3 -o lcs lcs.c map_file.c error.c + +#pcap: sdhash-pcap.c +# gcc -I/usr/include/pcap -o sdhash-pcap sdhash-pcap.c -lpcap + +clean: + -@rm *.o sdhash sdhash-cli sdhash-srv 2> /dev/null || true + -@rm sdhash-src/*.o sdbf/*.o 2> /dev/null || true + -@rm base64/*.o 2> /dev/null || true + -@rm lz4/*.o 2> /dev/null || true + -@rm libsdbf.a 2> /dev/null || true + +veryclean: clean + cd external; ./b2 --clean ; cd - + +.cc.o: + $(CC) $(CFLAGS) $(INCLUDES) -c $*.cc -o $*.o diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..725e048 --- /dev/null +++ b/NOTICE @@ -0,0 +1,43 @@ + +Written by Vassil Roussev and Candice Quates + +This work is made available under the Apache License, Version 2.0. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Several Boost Libraries are included in this distribution as a +convenience. See the file external/LICENSE_1_0.txt for details on +licensing of boost components + +I have applied the patch referenced here to this boost distribution: +https://svn.boost.org/trac/boost/ticket/6821 + +The base64/ code is from the stringencoders project, +http://code.google.com/p/stringencoders/ +and is available under the 'new' BSD license. + +The lz4/ code is from the lz4 project, +http://code.google.com/p/lz4 +and is made available under the 'new' BSD license. + +We are using the apache thrift project, thrift.apache.org, which is +available under the apache 2.0 license. Thrift is not included +in this distribution directly. + +The web interface uses the CherryPy web server -- whose BSD license +is included in its' source, and the Jinja2 templating engine - +also BSD licensed and included in the source. + +The sdhash-gpu code uses some freely-licensed Nvidia example +code in its inspiration, details are available in the top +of sdhash-gpu/matrixCompare.cu + + diff --git a/README copy.md b/README copy.md new file mode 100644 index 0000000..2f1ee60 --- /dev/null +++ b/README copy.md @@ -0,0 +1,57 @@ +sdhash +====== +sdhash is tool that allows two arbitrary blobs of data to be compared for +similarity based on common strings of binary data. It is designed to provide +quick results during triage and initial investigation phases. It has been in +active development since 2010 with the explicit goal of becoming fast, scalable, +and reliable. + +There two general classes of problems where sdhash can provide significant +benefits–fragment identification and version correlation. + +In fragment identification, we search for a smaller piece of data inside a +bigger piece of data (“needle-in-a-haystackâ€). For example: + +Block vs. file correlation: given a chunk of data (disk block/network packet +/RAM page/etc), we can search a reference collection of files to identify +whether the chunk came from any of them. + +File vs. RAM/disk image: given a file and a target image, we can efficiently +determine if any pieces of the file can be found on the image (that includes +deallocated storage). + +In version correlation, we are interested in correlating data objects (files) +that are comparable in size and, thus, similar ones can be viewed as versions. +These are two basic scenarios in which this is useful–identifying related +documents and identifying code versions. + +In all cases, the use of the tool is the same, however the interpretation may +differ based on the circumstances. + +Current version info: +
+sdhash 3.4 by Vassil Roussev, Candice Quates [sdhash.org] 10/2013
+Usage: sdhash  
+  -r [ --deep ]                   generate SDBFs from directories and files
+  -f [ --target-list ]            generate SDBFs from list(s) of filenames
+  -c [ --compare ]                compare SDBFs in file, or two SDBF files
+  -g [ --gen-compare ]            compare all pairs in source data
+  -t [ --threshold ] arg (=1)     only show results >=threshold
+  -b [ --block-size ] arg         hashes input files in nKB blocks
+  -p [ --threads ] arg            restrict compute threads to N threads
+  -s [ --sample-size ] arg (=0)   sample N filters for comparisons
+  -z [ --segment-size ] arg       set file segment size, 128MB default
+  -o [ --output ] arg             send output to files
+  --separator arg (=pipe)         for comparison results: pipe csv tab
+  --hash-name arg                 set name of hash on stdin
+  --validate                      parse SDBF file to check if it is valid
+  --index                         generate indexes while hashing
+  --index-search arg              search directory of reference indexes
+  --config-file arg (=sdhash.cfg) use config file
+  --verbose                       warnings, debug and progress output
+  --version                       show version info
+  -h [ --help ]                   produce help message
+
+Tutorial: http://roussev.net/sdhash/tutorial/sdhash-tutorial.html + +Papers/Version history/etc: http://sdhash.org/ diff --git a/README.beta-ui b/README.beta-ui new file mode 100644 index 0000000..5b8a0e4 --- /dev/null +++ b/README.beta-ui @@ -0,0 +1,28 @@ +Steps for sdhash-server on recent ubuntu variants: + +Download packages/thrift_0.8.0_amd64.deb and install: + sudo dpkg -i thrift_0.8.0_amd64.deb + sudo ldconfig + +Get latest sdhash, unzip, build it: + make + make server + run server to test + + +Run server: + + sdhash-server/sdhash-srv --hashdir /home/sdbfs --sourcedir /home/sources + +Run user-interface: + + python sdhash-ui/sdhashuiserver.py + + +User interface will default to 0.0.0.0:8080 -- this can be easily +changed in sdhash-ui/cherrypy.conf. Localhost-only works fine. + +The user interface code will connect to a sdhash-srv process +at localhost:9090, to change that, edit sdhash-ui/serverui/config.py. + +Firewall at will, please! diff --git a/README.files b/README.files new file mode 100644 index 0000000..185de00 --- /dev/null +++ b/README.files @@ -0,0 +1,21 @@ +sdbf/ - Main sdbf library program files +libsdbf.a - sdbf library + +sdhash-src/ - sdhash standalone program +sdhash-server/ - sdhash-srv program and supporting files +sdhash-ui/ - user interface to server +sdhash-gpu/ - CUDA program directory + +man/ - man pages +extra/ - example files and lcs and pcap + +external/ - inclusion of boost library stuff +lz4/ - lz4 lossless compression library +base64/ - stringencoders' base64 encoding + +Doxyfile - builds doc/ directory + +swig/ +swig/python - holds interface file and test.py program + +sdhash.cfg.example - example sdhash.cfg file for sdhash diff --git a/README.swig-python b/README.swig-python new file mode 100644 index 0000000..ee8faf7 --- /dev/null +++ b/README.swig-python @@ -0,0 +1,16 @@ +Swig python bindings currently work on Linux. + +There is a makefile hook for "make swig-py" +which should be run after sdhash has been built and libsdbf.a is present. +Boost should build itself in the regular make process. + +Once make swig-py has been run, cd into the swig/python directory in +the root sdhash dir, and try out test.py. The _sdbf_class.so file +can probably be put in wherever python modules are supposed to go, +for global usage. + +I have heavily commented the test.py script to serve as an example. + +I have not exposed the C++ set operations to python as I feel +it would be more appropriate to use native language containers for +our objects. diff --git a/base64/modp_b64.cc b/base64/modp_b64.cc new file mode 100644 index 0000000..0601959 --- /dev/null +++ b/base64/modp_b64.cc @@ -0,0 +1,269 @@ +/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */ +/* vi: set expandtab shiftwidth=4 tabstop=4: */ +/** + * \file modp_b64.c + *
+ * MODP_B64 - High performance base64 encoder/decoder
+ * http://code.google.com/p/stringencoders/
+ *
+ * Copyright © 2005, 2006, 2007  Nick Galbreath -- nickg [at] modp [dot] com
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *   Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ *   Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ *   Neither the name of the modp.com nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This is the standard "new" BSD license:
+ * http://www.opensource.org/licenses/bsd-license.php
+ * 
+ */ + +/* public header */ +#include "modp_b64.h" + +/* + * If you are ripping this out of the library, comment out the next + * line and uncomment the next lines as approrpiate + */ +//jj#include "config.h" + +/* if on motoral, sun, ibm; uncomment this */ +/* #define WORDS_BIGENDIAN 1 */ +/* else for Intel, Amd; uncomment this */ +#undef WORDS_BIGENDIAN + +#include "modp_b64_data.h" + +#define BADCHAR 0x01FFFFFF + +/** + * you can control if we use padding by commenting out this + * next line. However, I highly recommend you use padding and not + * using it should only be for compatability with a 3rd party. + * Also, 'no padding' is not tested! + */ +#define DOPAD 1 + +/* + * if we aren't doing padding + * set the pad character to NULL + */ +#ifndef DOPAD +#undef CHARPAD +#define CHARPAD '\0' +#endif + +int modp_b64_encode(char* dest, const char* str, int len) +{ + int i; + const uint8_t* s = (const uint8_t*) str; + uint8_t* p = (uint8_t*) dest; + + /* unsigned here is important! */ + /* uint8_t is fastest on G4, amd */ + /* uint32_t is fastest on Intel */ + uint32_t t1, t2, t3; + + for (i = 0; i < len - 2; i += 3) { + t1 = s[i]; t2 = s[i+1]; t3 = s[i+2]; + *p++ = e0[t1]; + *p++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)]; + *p++ = e1[((t2 & 0x0F) << 2) | ((t3 >> 6) & 0x03)]; + *p++ = e2[t3]; + } + + switch (len - i) { + case 0: + break; + case 1: + t1 = s[i]; + *p++ = e0[t1]; + *p++ = e1[(t1 & 0x03) << 4]; + *p++ = CHARPAD; + *p++ = CHARPAD; + break; + default: /* case 2 */ + t1 = s[i]; t2 = s[i+1]; + *p++ = e0[t1]; + *p++ = e1[((t1 & 0x03) << 4) | ((t2 >> 4) & 0x0F)]; + *p++ = e2[(t2 & 0x0F) << 2]; + *p++ = CHARPAD; + } + + *p = '\0'; + return (int)(p - (uint8_t*)dest); +} + +#ifdef WORDS_BIGENDIAN /* BIG ENDIAN -- SUN / IBM / MOTOROLA */ +int modp_b64_decode(char* dest, const char* src, int len) +{ + int i; + if (len == 0) return 0; + +#ifdef DOPAD + /* if padding is used, then the message must be at least + 4 chars and be a multiple of 4. + there can be at most 2 pad chars at the end */ + if (len < 4 || (len % 4 != 0)) return -1; + if (src[len-1] == CHARPAD) { + len--; + if (src[len -1] == CHARPAD) { + len--; + } + } +#endif /* DOPAD */ + + int leftover = len % 4; + int chunks = (leftover == 0) ? len / 4 - 1 : len /4; + + uint8_t* p = (uint8_t*) dest; + uint32_t x = 0; + uint32_t* destInt = (uint32_t*) p; + uint32_t* srcInt = (uint32_t*) src; + uint32_t y = *srcInt++; + for (i = 0; i < chunks; ++i) { + x = d0[y >> 24 & 0xff] | d1[y >> 16 & 0xff] | + d2[y >> 8 & 0xff] | d3[y & 0xff]; + + if (x >= BADCHAR) return -1; + *destInt = x << 8; + p += 3; + destInt = (uint32_t*)p; + y = *srcInt++; + } + + switch (leftover) { + case 0: + x = d0[y >> 24 & 0xff] | d1[y >> 16 & 0xff] | + d2[y >> 8 & 0xff] | d3[y & 0xff]; + if (x >= BADCHAR) return -1; + *p++ = ((uint8_t*)&x)[1]; + *p++ = ((uint8_t*)&x)[2]; + *p = ((uint8_t*)&x)[3]; + return (chunks+1)*3; +#ifndef DOPAD + case 1: /* with padding this is an impossible case */ + x = d3[y >> 24]; + *p = (uint8_t)x; + break; +#endif + case 2: + x = d3[y >> 24] *64 + d3[(y >> 16) & 0xff]; + *p = (uint8_t)(x >> 4); + break; + default: /* case 3 */ + x = (d3[y >> 24] *64 + d3[(y >> 16) & 0xff])*64 + + d3[(y >> 8) & 0xff]; + *p++ = (uint8_t) (x >> 10); + *p = (uint8_t) (x >> 2); + break; + } + + if (x >= BADCHAR) return -1; + return 3*chunks + (6*leftover)/8; +} + +#else /* LITTLE ENDIAN -- INTEL AND FRIENDS */ + +int modp_b64_decode(char* dest, const char* src, int len) +{ + int i; + if (len == 0) return 0; + +#ifdef DOPAD + /* + * if padding is used, then the message must be at least + * 4 chars and be a multiple of 4 + */ + if (len < 4 || (len % 4 != 0)) return -1; /* error */ + /* there can be at most 2 pad chars at the end */ + if (src[len-1] == CHARPAD) { + len--; + if (src[len -1] == CHARPAD) { + len--; + } + } +#endif + + int leftover = len % 4; + int chunks = (leftover == 0) ? len / 4 - 1 : len /4; + + uint8_t* p = (uint8_t*) dest; + uint32_t x = 0; + uint32_t* destInt = (uint32_t*) p; + uint32_t* srcInt = (uint32_t*) src; + uint32_t y = *srcInt++; + for (i = 0; i < chunks; ++i) { + x = d0[y & 0xff] | + d1[(y >> 8) & 0xff] | + d2[(y >> 16) & 0xff] | + d3[(y >> 24) & 0xff]; + + if (x >= BADCHAR) return -1; + *destInt = x ; + p += 3; + destInt = (uint32_t*)p; + y = *srcInt++;} + + + switch (leftover) { + case 0: + x = d0[y & 0xff] | + d1[(y >> 8) & 0xff] | + d2[(y >> 16) & 0xff] | + d3[(y >> 24) & 0xff]; + + if (x >= BADCHAR) return -1; + *p++ = ((uint8_t*)(&x))[0]; + *p++ = ((uint8_t*)(&x))[1]; + *p = ((uint8_t*)(&x))[2]; + return (chunks+1)*3; + break; +#ifndef DOPAD + case 1: /* with padding this is an impossible case */ + x = d0[y & 0xff]; + *p = *((uint8_t*)(&x)); // i.e. first char/byte in int + break; +#endif + case 2: // * case 2, 1 output byte */ + x = d0[y & 0xff] | d1[y >> 8 & 0xff]; + *p = *((uint8_t*)(&x)); // i.e. first char + break; + default: /* case 3, 2 output bytes */ + x = d0[y & 0xff] | + d1[y >> 8 & 0xff ] | + d2[y >> 16 & 0xff]; /* 0x3c */ + *p++ = ((uint8_t*)(&x))[0]; + *p = ((uint8_t*)(&x))[1]; + break; + } + + if (x >= BADCHAR) return -1; + + return 3*chunks + (6*leftover)/8; +} + +#endif /* if bigendian / else / endif */ diff --git a/base64/modp_b64.h b/base64/modp_b64.h new file mode 100644 index 0000000..3256af7 --- /dev/null +++ b/base64/modp_b64.h @@ -0,0 +1,234 @@ +/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */ +/* vi: set expandtab shiftwidth=4 tabstop=4: */ + +/** + * \file + *
+ * High performance base64 encoder / decoder
+ *
+ * Copyright © 2005, 2006, 2007 Nick Galbreath -- nickg [at] modp [dot] com
+ * All rights reserved.
+ *
+ * http://code.google.com/p/stringencoders/
+ *
+ * Released under bsd license.  See modp_b64.c for details.
+ * 
+ * + * This uses the standard base 64 alphabet. If you are planning + * to embed a base 64 encoding inside a URL use modp_b64w instead. + * + */ + +#ifndef COM_MODP_STRINGENCODERS_B64 +#define COM_MODP_STRINGENCODERS_B64 + +#ifdef __cplusplus +#define BEGIN_C extern "C" { +#define END_C } +#else +#define BEGIN_C +#define END_C +#endif + +BEGIN_C + +/** + * Encode a raw binary string into base 64. + * \param[out] dest should be allocated by the caller to contain + * at least modp_b64_encode_len(len) bytes (see below) + * This will contain the null-terminated b64 encoded result + * \param[in] src contains the bytes + * \param[in] len contains the number of bytes in the src + * \return length of the destination string plus the ending null byte + * i.e. the result will be equal to strlen(dest) + 1 + * + * Example + * + * \code + * char* src = ...; + * int srclen = ...; //the length of number of bytes in src + * char* dest = (char*) malloc(modp_b64_encode_len); + * int len = modp_b64_encode(dest, src, sourcelen); + * if (len == -1) { + * printf("Error\n"); + * } else { + * printf("b64 = %s\n", dest); + * } + * \endcode + * + */ +int modp_b64_encode(char* dest, const char* str, int len); + +/** + * Decode a base64 encoded string + * + * \param[out] dest should be allocated by the caller to contain at least + * len * 3 / 4 bytes. The destination cannot be the same as the source + * They must be different buffers. + * \param[in] src should contain exactly len bytes of b64 characters. + * if src contains -any- non-base characters (such as white + * space, -1 is returned. + * \param[in] len is the length of src + * + * \return the length (strlen) of the output, or -1 if unable to + * decode + * + * \code + * char* src = ...; + * int srclen = ...; // or if you don't know use strlen(src) + * char* dest = (char*) malloc(modp_b64_decode_len(srclen)); + * int len = modp_b64_decode(dest, src, sourcelen); + * if (len == -1) { error } + * \endcode + */ +int modp_b64_decode(char* dest, const char* src, int len); + +/** + * Given a source string of length len, this returns the amount of + * memory the destination string should have. + * + * remember, this is integer math + * 3 bytes turn into 4 chars + * ceiling[len / 3] * 4 + 1 + * + * +1 is for any extra null. + */ +#define modp_b64_encode_len(A) ((A+2)/3 * 4 + 1) + +/** + * Given a base64 string of length len, + * this returns the amount of memory required for output string + * It maybe be more than the actual number of bytes written. + * NOTE: remember this is integer math + * this allocates a bit more memory than traditional versions of b64 + * decode 4 chars turn into 3 bytes + * floor[len * 3/4] + 2 + */ +#define modp_b64_decode_len(A) (A / 4 * 3 + 2) + +/** + * Will return the strlen of the output from encoding. + * This may be less than the required number of bytes allocated. + * + * This allows you to 'deserialized' a struct + * \code + * char* b64encoded = "..."; + * int len = strlen(b64encoded); + * + * struct datastuff foo; + * if (modp_b64_encode_strlen(sizeof(struct datastuff)) != len) { + * // wrong size + * return false; + * } else { + * // safe to do; + * if (modp_b64_decode((char*) &foo, b64encoded, len) == -1) { + * // bad characters + * return false; + * } + * } + * // foo is filled out now + * \endcode + */ +#define modp_b64_encode_strlen(A) ((A + 2)/ 3 * 4) + +END_C + +#ifdef __cplusplus +#include +#include + +namespace modp { + /** \brief b64 encode a cstr with len + * + * \param[in] s the input string to encode + * \param[in] len the length of the input string + * \return a newly allocated b64 string. Empty if failed. + */ + inline std::string b64_encode(const char* s, size_t len) + { + std::string x(modp_b64_encode_len(len), '\0'); + int d = modp_b64_encode(const_cast(x.data()), s, + static_cast(len)); + x.erase(d, std::string::npos); + return x; + } + + /** \brief b64 encode a cstr + * + * \param[in] s the input string to encode + * \return a newly allocated b64 string. Empty if failed. + */ + inline std::string b64_encode(const char* s) + { + return b64_encode(s, static_cast(strlen(s))); + } + + /** \brief b64 encode a const std::string + * + * \param[in] s the input string to encode + * \return a newly allocated b64 string. Empty if failed. + */ + inline std::string b64_encode(const std::string& s) + { + return b64_encode(s.data(), s.size()); + } + + /** + * base 64 encode a string (self-modifing) + * + * This function is for C++ only (duh) + * + * \param[in,out] s the string to be decoded + * \return a reference to the input string + */ + inline std::string& b64_encode(std::string& s) + { + std::string x(b64_encode(s.data(), s.size())); + s.swap(x); + return s; + } + + inline std::string b64_decode(const char* src, size_t len) + { + std::string x(modp_b64_decode_len(len)+1, '\0'); + int d = modp_b64_decode(const_cast(x.data()), src, + static_cast(len)); + if (d < 0) { + x.clear(); + } else { + x.erase(d, std::string::npos); + } + return x; + } + + inline std::string b64_decode(const char* src) + { + return b64_decode(src, strlen(src)); + } + + /** + * base 64 decode a string (self-modifing) + * On failure, the string is empty. + * + * This function is for C++ only (duh) + * + * \param[in,out] s the string to be decoded + * \return a reference to the input string + */ + inline std::string& b64_decode(std::string& s) + { + std::string x(b64_decode(s.data(), s.size())); + s.swap(x); + return s; + } + + inline std::string b64_decode(const std::string& s) + { + return b64_decode(s.data(), s.size()); + } + +} + +#endif /* __cplusplus */ + +#endif /* MODP_B64 */ diff --git a/base64/modp_b64.o b/base64/modp_b64.o new file mode 100644 index 0000000000000000000000000000000000000000..82361fc5ac72d2a72ebd3a0c6da69ff155f97c09 GIT binary patch literal 8064 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 literal 0 HcmV?d00001 diff --git a/base64/modp_b64_data.h b/base64/modp_b64_data.h new file mode 100644 index 0000000..4fb321c --- /dev/null +++ b/base64/modp_b64_data.h @@ -0,0 +1,480 @@ +#include +#define CHAR62 '+' +#define CHAR63 '/' +#define CHARPAD '=' +static const unsigned char e0[256] = { + 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', + 'C', 'C', 'D', 'D', 'D', 'D', 'E', 'E', 'E', 'E', + 'F', 'F', 'F', 'F', 'G', 'G', 'G', 'G', 'H', 'H', + 'H', 'H', 'I', 'I', 'I', 'I', 'J', 'J', 'J', 'J', + 'K', 'K', 'K', 'K', 'L', 'L', 'L', 'L', 'M', 'M', + 'M', 'M', 'N', 'N', 'N', 'N', 'O', 'O', 'O', 'O', + 'P', 'P', 'P', 'P', 'Q', 'Q', 'Q', 'Q', 'R', 'R', + 'R', 'R', 'S', 'S', 'S', 'S', 'T', 'T', 'T', 'T', + 'U', 'U', 'U', 'U', 'V', 'V', 'V', 'V', 'W', 'W', + 'W', 'W', 'X', 'X', 'X', 'X', 'Y', 'Y', 'Y', 'Y', + 'Z', 'Z', 'Z', 'Z', 'a', 'a', 'a', 'a', 'b', 'b', + 'b', 'b', 'c', 'c', 'c', 'c', 'd', 'd', 'd', 'd', + 'e', 'e', 'e', 'e', 'f', 'f', 'f', 'f', 'g', 'g', + 'g', 'g', 'h', 'h', 'h', 'h', 'i', 'i', 'i', 'i', + 'j', 'j', 'j', 'j', 'k', 'k', 'k', 'k', 'l', 'l', + 'l', 'l', 'm', 'm', 'm', 'm', 'n', 'n', 'n', 'n', + 'o', 'o', 'o', 'o', 'p', 'p', 'p', 'p', 'q', 'q', + 'q', 'q', 'r', 'r', 'r', 'r', 's', 's', 's', 's', + 't', 't', 't', 't', 'u', 'u', 'u', 'u', 'v', 'v', + 'v', 'v', 'w', 'w', 'w', 'w', 'x', 'x', 'x', 'x', + 'y', 'y', 'y', 'y', 'z', 'z', 'z', 'z', '0', '0', + '0', '0', '1', '1', '1', '1', '2', '2', '2', '2', + '3', '3', '3', '3', '4', '4', '4', '4', '5', '5', + '5', '5', '6', '6', '6', '6', '7', '7', '7', '7', + '8', '8', '8', '8', '9', '9', '9', '9', '+', '+', + '+', '+', '/', '/', '/', '/' +}; + +static const unsigned char e1[256] = { + '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', 'Z', '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', 'z', '0', '1', '2', '3', '4', '5', '6', '7', + '8', '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', 'Z', + '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', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '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', 'Z', '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', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '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', 'Z', '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', 'z', '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '+', '/' +}; + +static const unsigned char e2[256] = { + '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', 'Z', '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', 'z', '0', '1', '2', '3', '4', '5', '6', '7', + '8', '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', 'Z', + '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', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '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', 'Z', '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', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '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', 'Z', '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', 'z', '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '+', '/' +}; + + + +#ifdef WORDS_BIGENDIAN + + +/* SPECIAL DECODE TABLES FOR BIG ENDIAN (IBM/MOTOROLA/SUN) CPUS */ + +static const uint32_t d0[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00f80000, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00fc0000, +0x00d00000, 0x00d40000, 0x00d80000, 0x00dc0000, 0x00e00000, 0x00e40000, +0x00e80000, 0x00ec0000, 0x00f00000, 0x00f40000, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00040000, 0x00080000, 0x000c0000, 0x00100000, 0x00140000, 0x00180000, +0x001c0000, 0x00200000, 0x00240000, 0x00280000, 0x002c0000, 0x00300000, +0x00340000, 0x00380000, 0x003c0000, 0x00400000, 0x00440000, 0x00480000, +0x004c0000, 0x00500000, 0x00540000, 0x00580000, 0x005c0000, 0x00600000, +0x00640000, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00680000, 0x006c0000, 0x00700000, 0x00740000, 0x00780000, +0x007c0000, 0x00800000, 0x00840000, 0x00880000, 0x008c0000, 0x00900000, +0x00940000, 0x00980000, 0x009c0000, 0x00a00000, 0x00a40000, 0x00a80000, +0x00ac0000, 0x00b00000, 0x00b40000, 0x00b80000, 0x00bc0000, 0x00c00000, +0x00c40000, 0x00c80000, 0x00cc0000, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +static const uint32_t d1[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x0003e000, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x0003f000, +0x00034000, 0x00035000, 0x00036000, 0x00037000, 0x00038000, 0x00039000, +0x0003a000, 0x0003b000, 0x0003c000, 0x0003d000, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00001000, 0x00002000, 0x00003000, 0x00004000, 0x00005000, 0x00006000, +0x00007000, 0x00008000, 0x00009000, 0x0000a000, 0x0000b000, 0x0000c000, +0x0000d000, 0x0000e000, 0x0000f000, 0x00010000, 0x00011000, 0x00012000, +0x00013000, 0x00014000, 0x00015000, 0x00016000, 0x00017000, 0x00018000, +0x00019000, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x0001a000, 0x0001b000, 0x0001c000, 0x0001d000, 0x0001e000, +0x0001f000, 0x00020000, 0x00021000, 0x00022000, 0x00023000, 0x00024000, +0x00025000, 0x00026000, 0x00027000, 0x00028000, 0x00029000, 0x0002a000, +0x0002b000, 0x0002c000, 0x0002d000, 0x0002e000, 0x0002f000, 0x00030000, +0x00031000, 0x00032000, 0x00033000, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +static const uint32_t d2[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00000f80, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000fc0, +0x00000d00, 0x00000d40, 0x00000d80, 0x00000dc0, 0x00000e00, 0x00000e40, +0x00000e80, 0x00000ec0, 0x00000f00, 0x00000f40, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00000040, 0x00000080, 0x000000c0, 0x00000100, 0x00000140, 0x00000180, +0x000001c0, 0x00000200, 0x00000240, 0x00000280, 0x000002c0, 0x00000300, +0x00000340, 0x00000380, 0x000003c0, 0x00000400, 0x00000440, 0x00000480, +0x000004c0, 0x00000500, 0x00000540, 0x00000580, 0x000005c0, 0x00000600, +0x00000640, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00000680, 0x000006c0, 0x00000700, 0x00000740, 0x00000780, +0x000007c0, 0x00000800, 0x00000840, 0x00000880, 0x000008c0, 0x00000900, +0x00000940, 0x00000980, 0x000009c0, 0x00000a00, 0x00000a40, 0x00000a80, +0x00000ac0, 0x00000b00, 0x00000b40, 0x00000b80, 0x00000bc0, 0x00000c00, +0x00000c40, 0x00000c80, 0x00000cc0, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +static const uint32_t d3[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x0000003e, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x0000003f, +0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00000039, +0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, +0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, +0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, +0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, +0x00000019, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, +0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, +0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, +0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, +0x00000031, 0x00000032, 0x00000033, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +#else + + +/* SPECIAL DECODE TABLES FOR LITTLE ENDIAN (INTEL) CPUS */ + +static const uint32_t d0[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x000000f8, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x000000fc, +0x000000d0, 0x000000d4, 0x000000d8, 0x000000dc, 0x000000e0, 0x000000e4, +0x000000e8, 0x000000ec, 0x000000f0, 0x000000f4, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00000004, 0x00000008, 0x0000000c, 0x00000010, 0x00000014, 0x00000018, +0x0000001c, 0x00000020, 0x00000024, 0x00000028, 0x0000002c, 0x00000030, +0x00000034, 0x00000038, 0x0000003c, 0x00000040, 0x00000044, 0x00000048, +0x0000004c, 0x00000050, 0x00000054, 0x00000058, 0x0000005c, 0x00000060, +0x00000064, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00000068, 0x0000006c, 0x00000070, 0x00000074, 0x00000078, +0x0000007c, 0x00000080, 0x00000084, 0x00000088, 0x0000008c, 0x00000090, +0x00000094, 0x00000098, 0x0000009c, 0x000000a0, 0x000000a4, 0x000000a8, +0x000000ac, 0x000000b0, 0x000000b4, 0x000000b8, 0x000000bc, 0x000000c0, +0x000000c4, 0x000000c8, 0x000000cc, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +static const uint32_t d1[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x0000e003, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x0000f003, +0x00004003, 0x00005003, 0x00006003, 0x00007003, 0x00008003, 0x00009003, +0x0000a003, 0x0000b003, 0x0000c003, 0x0000d003, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00001000, 0x00002000, 0x00003000, 0x00004000, 0x00005000, 0x00006000, +0x00007000, 0x00008000, 0x00009000, 0x0000a000, 0x0000b000, 0x0000c000, +0x0000d000, 0x0000e000, 0x0000f000, 0x00000001, 0x00001001, 0x00002001, +0x00003001, 0x00004001, 0x00005001, 0x00006001, 0x00007001, 0x00008001, +0x00009001, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x0000a001, 0x0000b001, 0x0000c001, 0x0000d001, 0x0000e001, +0x0000f001, 0x00000002, 0x00001002, 0x00002002, 0x00003002, 0x00004002, +0x00005002, 0x00006002, 0x00007002, 0x00008002, 0x00009002, 0x0000a002, +0x0000b002, 0x0000c002, 0x0000d002, 0x0000e002, 0x0000f002, 0x00000003, +0x00001003, 0x00002003, 0x00003003, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +static const uint32_t d2[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00800f00, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00c00f00, +0x00000d00, 0x00400d00, 0x00800d00, 0x00c00d00, 0x00000e00, 0x00400e00, +0x00800e00, 0x00c00e00, 0x00000f00, 0x00400f00, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00400000, 0x00800000, 0x00c00000, 0x00000100, 0x00400100, 0x00800100, +0x00c00100, 0x00000200, 0x00400200, 0x00800200, 0x00c00200, 0x00000300, +0x00400300, 0x00800300, 0x00c00300, 0x00000400, 0x00400400, 0x00800400, +0x00c00400, 0x00000500, 0x00400500, 0x00800500, 0x00c00500, 0x00000600, +0x00400600, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x00800600, 0x00c00600, 0x00000700, 0x00400700, 0x00800700, +0x00c00700, 0x00000800, 0x00400800, 0x00800800, 0x00c00800, 0x00000900, +0x00400900, 0x00800900, 0x00c00900, 0x00000a00, 0x00400a00, 0x00800a00, +0x00c00a00, 0x00000b00, 0x00400b00, 0x00800b00, 0x00c00b00, 0x00000c00, +0x00400c00, 0x00800c00, 0x00c00c00, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +static const uint32_t d3[256] = { +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x003e0000, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x003f0000, +0x00340000, 0x00350000, 0x00360000, 0x00370000, 0x00380000, 0x00390000, +0x003a0000, 0x003b0000, 0x003c0000, 0x003d0000, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x00000000, +0x00010000, 0x00020000, 0x00030000, 0x00040000, 0x00050000, 0x00060000, +0x00070000, 0x00080000, 0x00090000, 0x000a0000, 0x000b0000, 0x000c0000, +0x000d0000, 0x000e0000, 0x000f0000, 0x00100000, 0x00110000, 0x00120000, +0x00130000, 0x00140000, 0x00150000, 0x00160000, 0x00170000, 0x00180000, +0x00190000, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x001a0000, 0x001b0000, 0x001c0000, 0x001d0000, 0x001e0000, +0x001f0000, 0x00200000, 0x00210000, 0x00220000, 0x00230000, 0x00240000, +0x00250000, 0x00260000, 0x00270000, 0x00280000, 0x00290000, 0x002a0000, +0x002b0000, 0x002c0000, 0x002d0000, 0x002e0000, 0x002f0000, 0x00300000, +0x00310000, 0x00320000, 0x00330000, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff, +0x01ffffff, 0x01ffffff, 0x01ffffff, 0x01ffffff +}; + + +#endif diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3bc9634 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3' + +services: + autopyara: + stdin_open: true + tty: true + build: . + command: bash + cpuset: "64" # Limits to 10 cores + container_name: sdhash + volumes: + - /home/mabon/research/Autoyara/Jc_sdhash/:/usr/src/app/ diff --git a/external/INSTALL b/external/INSTALL new file mode 100644 index 0000000..0f669e6 --- /dev/null +++ b/external/INSTALL @@ -0,0 +1,8 @@ +See ./index.html for information about this release. The "Getting Started" +section is a useful starting place. + +--------------------------- +Copyright Beman Dawes, 2008 + +Distributed under the Boost Software License, Version 1.0. +See ./LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt \ No newline at end of file diff --git a/external/Jamroot b/external/Jamroot new file mode 100644 index 0000000..302edc3 --- /dev/null +++ b/external/Jamroot @@ -0,0 +1,263 @@ +# Copyright Vladimir Prus 2002-2006. +# Copyright Dave Abrahams 2005-2006. +# Copyright Rene Rivera 2005-2007. +# Copyright Douglas Gregor 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) + +# Usage: +# +# bjam [options] [properties] [install|stage] +# +# Builds and installs Boost. +# +# Targets and Related Options: +# +# install Install headers and compiled library files to the +# ======= configured locations (below). +# +# --prefix= Install architecture independent files here. +# Default; C:\Boost on Win32 +# Default; /usr/local on Unix. Linux, etc. +# +# --exec-prefix= Install architecture dependent files here. +# Default; +# +# --libdir= Install library files here. +# Default; /lib +# +# --includedir= Install header files here. +# Default; /include +# +# stage Build and install only compiled library files +# ===== to the stage directory. +# +# --stagedir= Install library files here +# Default; ./stage +# +# Other Options: +# +# --build-type= Build the specified pre-defined set of variations +# of the libraries. Note, that which variants get +# built depends on what each library supports. +# +# minimal (default) - Builds a minimal set of +# variants. On Windows, these are static +# multithreaded libraries in debug and release +# modes, using shared runtime. On Linux, these +# are static and shared multithreaded libraries +# in release mode. +# +# complete - Build all possible variations. +# +# --build-dir=DIR Build in this location instead of building +# within the distribution tree. Recommended! +# +# --show-libraries Displays the list of Boost libraries that require +# build and installation steps, then exit. +# +# --layout= Determines whether to choose library names +# and header locations such that multiple +# versions of Boost or multiple compilers can +# be used on the same system. +# +# versioned - Names of boost binaries +# include the Boost version number, name and +# version of the compiler and encoded build +# properties. Boost headers are installed in a +# subdirectory of whose name contains +# the Boost version number. +# +# tagged -- Names of boost binaries include the +# encoded build properties such as variant and +# threading, but do not including compiler name +# and version, or Boost version. This option is +# useful if you build several variants of Boost, +# using the same compiler. +# +# system - Binaries names do not include the +# Boost version number or the name and version +# number of the compiler. Boost headers are +# installed directly into . This option +# is intended for system integrators who are +# building distribution packages. +# +# The default value is 'versioned' on Windows, and +# 'system' on Unix. +# +# --buildid=ID Adds the specified ID to the name of built +# libraries. The default is to not add anything. +# +# --python-buildid=ID Adds the specified ID to the name of built +# libraries that depend on Python. The default +# is to not add anything. This ID is added in +# addition to --buildid. +# +# +# --help This message. +# +# --with- Build and install the specified +# If this option is used, only libraries +# specified using this option will be built. +# +# --without- Do not build, stage, or install the specified +# . By default, all libraries are built. +# +# Properties: +# +# toolset=toolset Indicates the toolset to build with. +# +# variant=debug|release Select the build variant +# +# link=static|shared Whether to build static or shared libraries +# +# threading=single|multi Whether to build single or multithreaded binaries +# +# runtime-link=static|shared +# Whether to link to static or shared C and C++ runtime. +# + +# TODO: +# - handle boost version +# - handle python options such as pydebug + +import boostcpp ; +import package ; + +import sequence ; +import xsltproc ; +import set ; +import path ; + +path-constant BOOST_ROOT : . ; +constant BOOST_VERSION : 1.49.0 ; +constant BOOST_JAMROOT_MODULE : $(__name__) ; + +boostcpp.set-version $(BOOST_VERSION) ; + +project boost + : requirements . + # Disable auto-linking for all targets here, primarily because it caused + # troubles with V2. + BOOST_ALL_NO_LIB=1 + # Used to encode variant in target name. See the 'tag' rule below. + @$(__name__).tag + @handle-static-runtime + # The standard library Sun compilers use by default has no chance + # of working with Boost. Override it. + sun:sun-stlport + # Comeau does not support shared lib + como:static + como-linux:_GNU_SOURCE=1 + # When building docs within Boost, we want the standard Boost style + boost.defaults=Boost + : usage-requirements . + : build-dir bin.v2 + ; + +# This rule is called by Boost.Build to determine the name of target. We use it +# to encode the build variant, compiler name and boost version in the target +# name. +# +rule tag ( name : type ? : property-set ) +{ + return [ boostcpp.tag $(name) : $(type) : $(property-set) ] ; +} + +rule handle-static-runtime ( properties * ) +{ + # Using static runtime with shared libraries is impossible on Linux, + # and dangerous on Windows. Therefore, we disallow it. This might + # be drastic, but it was disabled for a while with nobody complaining. + + # For CW, static runtime is needed so that std::locale works. + if shared in $(properties) && static in $(properties) && + ! ( cw in $(properties) ) + { + ECHO "error: link=shared together with runtime-link=static is not allowed" ; + ECHO "error: such property combination is either impossible " ; + ECHO "error: or too dangerious to be of any use" ; + EXIT ; + } +} + +all-libraries = [ MATCH .*libs/(.*)/build/.* : [ glob libs/*/build/Jamfile.v2 ] + [ glob libs/*/build/Jamfile ] ] + ; + +all-libraries = [ sequence.unique $(all-libraries) ] ; +# The function_types library has a Jamfile, but it's used for maintenance +# purposes, there's no library to build and install. +all-libraries = [ set.difference $(all-libraries) : function_types ] ; + +# Setup convenient aliases for all libraries. + +local rule explicit-alias ( id : targets + ) +{ + alias $(id) : $(targets) ; + explicit $(id) ; +} + +# First, the complicated libraries: where the target name in Jamfile is +# different from its directory name. +explicit-alias prg_exec_monitor : libs/test/build//_prg_exec_monitor ; +explicit-alias test_exec_monitor : libs/test/build//_test_exec_monitor ; +explicit-alias unit_test_framework : libs/test/build//_unit_test_framework ; +explicit-alias bgl-vis : libs/graps/build//bgl-vis ; +explicit-alias serialization : libs/serialization/build//_serialization ; +explicit-alias wserialization : libs/serialization/build//_wserialization ; +for local l in $(all-libraries) +{ + if ! $(l) in test graph serialization + { + explicit-alias $(l) : libs/$(l)/build//_$(l) ; + } +} + +alias headers : : : : . ; +explicit headers ; + +# Make project ids of all libraries known. +for local l in $(all-libraries) +{ + use-project /boost/$(l) : libs/$(l)/build ; +} + +# This rule should be called from libraries' Jamfiles and will create two +# targets, "install" and "stage", that will install or stage that library. The +# --prefix option is respected, but --with and --without options, naturally, are +# ignored. +# +# - libraries -- list of library targets to install. +# +rule boost-install ( libraries * ) +{ + package.install install + : /boost//install-proper-headers $(install-requirements) + : # No binaries + : $(libraries) + : # No headers, it is handled by the dependency. + ; + + install stage : $(libraries) : $(BOOST_STAGE_LOCATE) ; + + module [ CALLER_MODULE ] + { + explicit stage ; + explicit install ; + } +} + +headers = + # The .SUNWCCh files are present in tr1 include directory and have to be installed, + # see http://lists.boost.org/Archives/boost/2007/05/121430.php + [ path.glob-tree $(BOOST_ROOT)/boost : *.hpp *.ipp *.h *.inc *.SUNWCCh : CVS .svn ] + [ path.glob-tree $(BOOST_ROOT)/boost/compatibility/cpp_c_headers : c* : CVS .svn ] + [ path.glob boost/tr1/tr1 : * : bcc32 sun CVS .svn ] + ; + +# Declare special top-level targets that build and install the desired variants +# of the libraries. +boostcpp.declare-targets $(all-libraries) : $(headers) ; diff --git a/external/LICENSE_1_0.txt b/external/LICENSE_1_0.txt new file mode 100644 index 0000000..36b7cd9 --- /dev/null +++ b/external/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/external/b2 b/external/b2 new file mode 100755 index 0000000000000000000000000000000000000000..90e712acd863cd0a350e4c054adb5c9c5cbfc48a GIT binary patch literal 266680 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%0D)X(w( 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 ed}Dv6#TQ+ + | ^~~~~~~~~~~~~~~~~~~~ +compilation terminated. + + "g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -pedantic -g -fPIC -fPIC -std=c++0x -DBOOST_ALL_NO_LIB=1 -DBOOST_HAS_ICU=1 -I"." -c -o "bin.v2/libs/regex/build/gcc-13/debug/has_icu_test.o" "libs/regex/build/has_icu_test.cpp" + +...failed gcc.compile.c++ bin.v2/libs/regex/build/gcc-13/debug/has_icu_test.o... +...skipped has_icu for lack of has_icu_test.o... +...failed updating 1 target... +...skipped 1 target... diff --git a/external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/date_generators.o b/external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/date_generators.o new file mode 100644 index 0000000000000000000000000000000000000000..48cacf654b25091a70112c39323b8f00e0b88ae4 GIT binary patch literal 1936 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 I$>8Mwe{*QcaR2}S literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/greg_weekday.o b/external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/gregorian/greg_weekday.o new file mode 100644 index 0000000000000000000000000000000000000000..4d46f190940333ec023ca92ff85b84030aff0597 GIT binary patch literal 4032 zcmeHKO>7%g5Pq%$4ZjH~Dv^p{PspWoWxH;bR8TEylLlxDG>KXvBzv7~?6mQ&wLeW# zA=*O^kx+#X9Lg<1NN@y!#D#+;IB@KdBS(%PBve&MWxm}R`{iZ%DTo^*jc2~^&CL7R z_uj6r&77ItQz$5rf;ypwNLZzuM>Icm9W|kzP``{lb9d~kr{-=x0CMiVk=x(&R#xn> zXK$oIz5k$H%~R=w)F)jgbxAi#A!kVg(!91=;zQC^QZrAlNzFUz056cDPY;0P0x5jd zfuOxjiWrFA7clB$oG}22UN0hSjz_PLxuCDSIK5xYEiZ=X9sOgBh&B5}-2alTzZ=E~Z41y@0MpF>3y8fBUbkq*QSmNrw+wr2A z{Lrbjz#mlnv&d>?z5ch$R?F-4KPdc~IowKBpH$_j8*x8T9IpDUnJXChUuD%OEA8-p zl8z0!TECw(j4+$rAnRd%PIUg#UGX*J=MDZH#;+Rui;OQB{BQR%VLIJe`feQM2AnhS za;9;XA>btjcoIJ(!dod)O04j6%$L}LM}0X*a!*Knm*X6^5|8%}MCu8TcMIf=%nas5 zmtZOv4gLn>hQZ^UL)w`c)cKgPj7$3clKJaeygWNlTLv#{-81;d8Q(Ja{fxH_-eUZz z!5?J&nZcJC_YHoU@plG~`w?OE;DZViQNr@t{29e zT+(aTS3qr^~nw$Ui_jLh6v}QsRx>U~-Hs`WakiZ}K}x(!|nyxUZ9?B zn)x3QpSS)czVsWMhxLDqRPts0^ZG_gi8n}_CyaB4zrbcbz7X@4s)rADl3T`t8Ib-# R=jU(n_&-mp41di0-vK#Fgo6M8 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/libboost_date_time.a b/external/bin.v2/libs/date_time/build/gcc-13/release/link-static/threading-multi/libboost_date_time.a new file mode 100644 index 0000000000000000000000000000000000000000..eaf11044d71cc48f8ab6ec3a8675c646bea8afe4 GIT binary patch literal 144112 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/date_generators.o b/external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/date_generators.o new file mode 100644 index 0000000000000000000000000000000000000000..9ad60fc9b8207d3ceb0cce96b25198af0e8f5c16 GIT binary patch literal 2048 zcmbVMO>fgc5FOWn7HDbtk}Ar+$<;DRi%-FNevRDXpB75e&neom(Z~T6H@A;JDfHnu7!31d*eQgpq z@~{C5FbBJzt`OR7k9R-TetwBF<;7hu38Nzk-F}iPNM$>YI-q*}qyybJOH>atUA$k) zcDA;jddml`EK-@bF4ly58!nhEoG1Mjzu{g&EwLM59=GLlKC;v^OA(FmG{`|GVZPSs|f zRsEsd3xZ~(dd)CxrYhO4DhYg}pwAO%C8rS2;Pq=<7^m}zCMp#*l%w}X{2T$ag~FBm z9mb0mf1j~u@ft5%{3FIXPjk{$nn+KFDr|wkZ5O_$qeKouq2!4IfjWgCT4@S7A+l)D zKbC`25J^lq>JCJJka}_kBTR}x+ztmI+VOBGBYaX6D=BvN4^~nYwvV|%_L|)!9LjR4 zO9viylD75Kgo{IvOx-*0&4CvF+&;o*g5?1#)Ed!j*SDxAr5<=(sGx;F}4I*slG6IpY5Kk0JifJ@#CB zeon&~237li!-DE_M*F9)qwd%IE#z$Nk%AGEp9vUd&tEk=l`nGP2K#yBX7RGur!RBW O`Y&0KL(H3Ium2m&Hk3jD literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/greg_month.o b/external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/greg_month.o new file mode 100644 index 0000000000000000000000000000000000000000..441249655972cb5dd9a03f64503d641f2fbd6d9d GIT binary patch literal 136704 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/greg_weekday.o b/external/bin.v2/libs/date_time/build/gcc-5.4.0/release/link-static/threading-multi/gregorian/greg_weekday.o new file mode 100644 index 0000000000000000000000000000000000000000..0ef864b6a17f5454b02e6bb18de96e274e25c0de GIT binary patch literal 4080 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 z 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 I|Juv{e~w-Bz5oCK literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v2/src/v2_path.o b/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v2/src/v2_path.o new file mode 100644 index 0000000000000000000000000000000000000000..5664d7b337bb78f812a831a6232b9b40b44a83f5 GIT binary patch literal 46280 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 Z+n|c)cc*>qrkni>E2R8+$2dCe{~t;Q^7#M& literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/codecvt_error_category.o b/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/codecvt_error_category.o new file mode 100644 index 0000000000000000000000000000000000000000..32b06e3285ff1a72214dea635f801830a330d782 GIT binary patch literal 9696 zcmcIqU2Ggz6~61q&l0z`o0bp~XxE8J(?XY>jpM{kC~LE5FjDZ64ZzAW6rsA&hFj2 zJN5?BBhB1ivZ5CdB8&BT}{t_-?pR zuLrLCsQ&=8AE*9SYClQsc4|LGZ7;Pup;gJcv>w^(-4C6U@Ga;i#9Wm5zaVgTOrjD}I>&CwpweeQ?QJ2Sp~yTjYHeA}pGtV{Re;LuMuz}J~Q+*xDqu145LY4?(+G!D}6PYj+Qdr4~>9Hc7*=Wj#YhE^K}+R>T(-N zu0hDUaA2%@!y5dXw_f5C)j!F$KL4{{Kr6!Qt|#s+0@futU@iYOEH%zw^ZH4IhpIBu zzQ0TO+(2nB>7M`3$_kB0DQo#g__`dc-mbncd&t4mu2~1pguU>s>vMA6gIl_>buh#mbo#2sVEJbFh z6Zg;vZO$_GR98=j1%a(XD85d7u+mDz5Sv=T!Vvca;BvEU8Z!i*0L^5`Q=t`(*>5I8 zo*b?4&CMVnhPb~8$7k4~%!`vVMmT%sbx;bx@yVi{2((DNMzC+xRw;6IGURDj=dpJK zF0>OP7}o`pAwI#~TKf;^g~Yvrc(3w%=W}Qq974Uy@15s33^?~yAE%^zeIJO>;6;h^ z2`p-!UJtPIJ1JlP{qnx_?*MtxRF=pBDw--5g?(aje9bDRKkww+DLWExSI}%% zFy;%c9p}EBTP{2EZZZR*jvhO~1*kcf$+~_OxhEcPosHx|GQOv2$c7TS?18nrX=~=# z+G$LJ&zZ3{<)+(_i%uMh3%Hpvybt1SpX5!v@5hHb?icI<1$TT;+MRPMS&z%xLOz}G zGKIWM_ZrG(%zeI+S#Yv$-b)@CpPY`_0O5NIq&O{~7**0w9zHysoUvzyh9{CXM3v4? z$(6Tya1Hh|?1dO6VA|Vf+o{Dx(=_9= zPC1jZ%U&sypC3z2d#0H><&@V9Tx0rQOZZemf8c*efeKh|< zCZD#CxaCUDMZ5GO)ZRK27=mNZSDaGXc2bbG5*SgilACp%GGgg+!9L~W(^(dPccaA& zuGg7qcDmZzmt13QyrqF0tl5~%jWe5BfL9&pXPt7{_LhpSoypG?lB(B$B_w6W)_SjN z@)ifr(KgFpRP11l!}#|C%?-oFH3Qd8h$rCE z3GpOct>h0W!aR=hLkiB_)$Dwlg`idKj3{`7`e;Y_gei6_IIb1ek7;;>c>GNvp&gWG zN>GP!*5`T$am**v6m<|EU=Z5l3cg3d)jS8yYgCa}=cVEtmmZHgFEyS-Ks@XU?L5v5 zv=QoKZn&05s9(W(E(mdcP+rX^enUZGyvJunky^$h#Gg}emPP0%3cio}*xXQXw8eS( zm4d5pg?%_tAok03y@-~Va-K5_tyl8fQ{02I&xyhz=ZR?A@f;DIEtiD^qLq9$bK1== zMgOl##m27kdt7nEG|(C(he z`Bchw7gKK0vtflm{S&2`wOji5LCIu5c%TijLBZWdG1S6SV7arZm-e-IcFYlRaO7J2mqVuIfg*OfVC;UI%uR;M) z{~A#@k)SSrDdlr>9pT&t=})xK$9F8m|GXz-{E0iz=kFS- z{?HxhdmxLX>SJBNadR6K|JS8*uO=T(pAT7dpx-4O+#!pg%8JyYFC=cCBYl0ISM)%AHKD`!K7qD2Xanu)|0Y2HD%s=j zs^q>_M>BsD^jodpF#VyA*D0=F{94QFhw+`@2jkbm7w-~)|97Ag%Br-N^>qWZp!-x| z=tngEInp;Y{oSOmKW~no&A6b~YW@+Le~bii{`fZs*5~>Ei2QeG{uAUsLi*h3{7ur= zX?D_s{(HfcUS{pC&Go zAjaPdmmdGI0RL0upXJ$~&Oa64KSmoD=L!AqY~dfD6Q-EgDf>B2{?&Iz9HYlkYrjeQ ztjF!kq|ZFJtk3)_q_01}%cQ?wQ_$!C9neS71RJE*qWQm1JkB4#N3lNV1&>)U(M0>{ xPq(jWgIYK;4|?oq?3e3(lhBP literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/operations.o b/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/operations.o new file mode 100644 index 0000000000000000000000000000000000000000..c34b02a2d900be8d168451b5138febe1c75783e8 GIT binary patch literal 109488 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 z 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 G?f+l6hus+f literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/path_traits.o b/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/path_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..06798b09e36df64892251e9354edc6e7dab77705 GIT binary patch literal 15568 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 TeQahg`y=AaN7SLJS0mG literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/utf8_codecvt_facet.o b/external/bin.v2/libs/filesystem/build/gcc-5.4.0/release/link-static/threading-multi/v3/src/utf8_codecvt_facet.o new file mode 100644 index 0000000000000000000000000000000000000000..210e662072a82ba3538cd845f22a7c9100beed7c GIT binary patch literal 9232 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 MmW|G3o)WYF7T&lwEdT%j literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/cmdline.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/cmdline.o new file mode 100644 index 0000000000000000000000000000000000000000..f779feb175b1005c09ce1097d6de0d0c153d760b GIT binary patch literal 209896 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 F{|BLY@2vm; literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/config_file.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/config_file.o new file mode 100644 index 0000000000000000000000000000000000000000..1d8a05982c4f45e9e8b37ece239384e848e578e5 GIT binary patch literal 99912 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%0AfBYyLUue;gdv*JM@9`U8O_(LA?^*1}5X58_c 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/convert.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/convert.o new file mode 100644 index 0000000000000000000000000000000000000000..f48a4917964ea2d77a3a8fecddf2a1ce143a5a09 GIT binary patch literal 36408 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 V-G8UR&8*lBuzFlPJ9@8|PG=aQKX8I7Y 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

@LnETr+pAIh9Ws|%1voT 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 Xy!Z7CvDD?eu22W3jtWHZ`v3m{Tnk{M literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/options_description.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/options_description.o new file mode 100644 index 0000000000000000000000000000000000000000..77fc8f41559d378b7ee2e45bdb2a2613456f3d27 GIT binary patch literal 154872 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 JtOjWF|34IMzd!&0 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/parsers.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/parsers.o new file mode 100644 index 0000000000000000000000000000000000000000..66a2f0d6488f823c0900a76d3a08519a66693215 GIT binary patch literal 204216 zcmeEv37izg^?%RK4vau{7SD~EIN)FwHM)yOSTSZ-cA-aSaTQP!4;DEB30H7NQ9)OC z#?ZfEm8ek@QAzY~Fd>l`MZA|o7IGN8B8eCAWHP9DAyIVy-|wsHo}Qx-4d(aD@5g+$ zx4K_fy?XUt)vH&pj=r=hHmuC&^Bel-Gfpsk_Jb>2{_8U5sb22tjZWVqKE}NW7sHEn zI7f$b5nhJta{YV>!ggFq{d}no+jN*hcm=K>;+m&n7Q+9+mBuw+!#WUNiR&s{cj8)# z>$kYp;`%)<(y{>8k8oX$>n>cs!*w^VE?j@W#W>gCx)#@uab1Utu(ls{s!$o?Qu7_}~!nFq1lenJ3^)#*xxSqwuxX^9-DX^G;CfR(zmIS$t`Bg12@xuA zg>W(MHeCP2^&u`ke}rqhzVAjzAS)){mEoUX-H($BpS_R;s1 z2>asNQ$O#8aBp1u;My10ez>Y|;m`Oo{_T(J0R4O*!mr@^s(wBQVHj6G{oEhn!MGy& zc>uygaD5F|HLiiU4#kB(<1qX?9M{+N^AQM-#8so8YY`5@bri0naUFx}SX}rszJY&( zanW?Ms@Knr2%Gf%FoeVPy@@cY?@vN_vc8WYY}WUuAZ*e1ry@K} z-;YE%O5cx0c)GqnLx*D!ep}yvM~7!3JWJo7t;2J4I2K{6z8|NtjAPt)OagfsO0Odb9J;VgZBo(|&(6Z-yq9bSNNw!XhmhZiBd zSl`dl;ar55==)1`*oN>jeSf(Q+Yu)9eM*N{ApD`epQl3$;eYA-v<~MZ?9lgD>hLOr z3-tYuba*wwYxMoK2!E{auS0mfzP|zCPxSpy5#Ffp7b3h#-`|Yz7Ja`6;m`E_&k^3L z?{7o+|MdOs2!EmP7bCnw-~STfuk`&AgumAJzd?AXzF&&)xBC7rgum1G%Mjj+tKp1> z(;G%Nj2b=CY~NgMT5}>*W~w`sd>Y-EnQp{Wy1vS^8Y4k7)fq}&s=+}UTq)pz8eADm z&#Y=rZ4D(i0CzNf4v;+?N|I@2`ulizBa~zh5KB))v{yn&HpAxh)CivNii$g$9*uZU zB=*SGhYqSYV%CRd`XW%UcVtsbcXzj$-a7(7*z7o|CYHXa(yaS)C`si{g^Em$kH}4P zsynednw}euc8soRPR~WWXX4}KRm^(JjuIc&Y<-;VFdfJ%p%gn1Gkq~K7+M3Gk+3V2 zT;XJ3y{IxGx$GxQE1T&Dx6s4gxf0y_!i2 z@*M4{M!bloF9B)8Y9J>eY=2GI2MSN>+4w$D>xIlQNE@>pU?Lk!$0L=6i4QDFyq{^E z6{*a;@^OCh43h_UGI=m_WpQ%U(P;WokUkuwj}_AG+%*e8y5wG!87#>ia3W*2udY7x z?1r-%&TcrTVeG1RLtp){;fzV4w>q76aM@;7UN(h#vtxdQJ-%s;ii9Va>GA>9@|29M zMU>i3GaaDN&932<5?U9ay&!fh(qdZkBWw8%DA*x~`t~$C9*lJ2c1=d_mUg(uZ&p_Du`qqv$IbAya!@I8>N2Ihs|^wvz^S8z}6K?W?50XeoIMC0t91U@dueW-6TGEav$=x{MYP07N@0z8;Q7DnV{ zviBY+9T>=ZV|H9zX<9>KkQHOctO=3X(e~|-$kT|0J6|aI0Pd)YQyXzZ_SeU(@xc?< zlz$DpP6~1eWO6VzWO8LF`D~Dp6yu^Db1S3PT*)mb0^#~H;-bKlG2W5uzsF6~Iy*>S ztSLXpNUM@ISWRIQ_fm+%R7s;eZcZ{o(>qPys!5@#oycu4Vha{CJzugQXUI%8(W+S8-%QAB?uI4x8<(!fVQpG-7oVB2}T}C3qi2_l0UGoNi7Z z9Wkw`toI*>&VPV4U~ugdrrl{+eo#z0k=am4<{vR@t119+%r?_Qve%pKok3KFPLO~G zshWD*gVI1zt}?j1oNqEL4>O3FWsQq$c_%wM25LGjk*~WwpNSvauz#Mu!G1bpGAnR%7E$vv92=Px1oJ? zu;R3DLlrucchFv`(}K83k7CNCR%>%2)enCY2-cLB8MRL+G-MV)wz6<^A*=l+Gc;_I zQ@=t#oFTceqCQW31DhoE92Bf5wLld^!KG1 zX0oqHhqkdx%-5k)l@5K>^kuaUZ4nd>e%;=wEvwAB4WVQibyA0;K)*go(S^<>J_{X7 zVsy-!7^L1b+aC?9ex>d#D$f-tax6U_x)bKP^dm<(J=FP+IJ#4}S*wYpvgx6fHKCV( z$yT1R^aLu;xkmQKlNJa+n<}&aW%CW}f_)N?%(fdC1iOd~b&%P%%im1vP1Xfe4q7f? zDC1?${=h9SjVi}AyB*l1DbbnM-(uEl`PkTAGFJeb=uJ_1&xcak4`Jn(gB6NzWD-d0qNZor!wP+$EpASI=*-E@pZupfY^-MXEXl*uT9(7>VRzq0hrbc=y$bX zXzbXgO=g6&u(jw9BOjkZ@gw09j3jFyR)7ERY%?j0(`7=ar zxBo%~R4RTON@&Ly`8LdJs?6NEmGZ!IlR*X2fJcrCRaJNT&U}+YT8*mYy44KH1c@gn z50xIn*gOVAUCj^o;8A}4#!%bHdCTF# zF%r5k*bEcA{q=38<+IjD)1!LgZj=xI)|vyiMF)2JwzO~D*1jz`YhQ%5Pgsw)uf(A7 zX!M>(hw4_&ddp1TtvfC~RJnz62N^=^LW(-&9t(Gw!{eM}J|9o6qH zCUULR4x7mJg+$&D-46N1tnSPsE_w6WhcT=ze?I@rUEicT7!JtRmF1xnU2>@>LdiE_ zrl4xuL(8reZrGRx z0_KT{Wz6h{7*J-qJ)}A>yqFwa3(8z(rHMz?v=HI^5)t~_5gY<4ow@~dOq;17%{F~` zuZ56n@wxt7yr1$fTBt(vf^k`R# zlI%DJ8A#uQ{Pd%4w5H3zUDw|GAnrmLm&ZD8la5ji@)e9o7cnA`Vz9m>(#8iU z_f~{xjkoEyXJPatS&etHx-6H~Qi;3K_GHA+>8J)ykA`+)Afrx1V@89S(IQE+L<1fC zw*spwiVHuH#VnZq3&k9db=R-yh;cUCNZ~k}e)OZLN}%v7Gn_^d zJ6n7!RY)7NHfH8XN5TALFqqs3{ghdbr(BDa_-`OJ4UwtTpSkfx>Td$yl6lXKhrSzu zZ_2|DJ7El68@30=uH9ke{WoggSvD_PW|T4_9btnb(>Kmp;xffCNy zYpf0FA(=gdY~8=u>2q{!1b%JZ3mvT7RHB7+FkWU4n+~v5?BiC~IH65aN{L!oq6PAt zhpCk%V!X_Cv_ls-<;l^bYGsZuYz(F7VZ6*=rEhofC5LAba&ebysXXUVBm8B&%nv|~ zR8>qIWd91QAv+&F{LFh`9c;VI1cb$X!=oPhey92pNn5Dz+c%po-44wMH)zLHxOm|t z!_*OM3{I|_*2kFnh+6MO_54Q+Qbo%aH;Z^wE`TAq&6oJL*fj9P$E<(wbrpsfaKzAm z60_dXO%v@SR+nqr$kb_OiScm%o2IqN)w=Y!E7h6!F0f`7t7kBaq6|8Rex#EM?}Gxj!VNbJ!idZUbcCy za0`vX#Z@@o0Oe%Fuqw<%u)4!(Jba^R4d2EtwptT3v?`W97{>eH*pTtTQ1Udo1Uecc zE$HmfrvbwgWP7Xdl`m$C0BrrxQGOa#PZda87ek-jVy@U2Si^oY>RXM>fn^M_Kq9!E z2|kDidoe(vzOl&cP~Z8HdGatnasxskssRcw%!x6$+NVY^n{!sA8qA#uF#{dkAWR;u zdoeL4a}(2Yd~;zXiK{oQI%PtO^5N zd}Pi(<#^C`3(k+UAs2IqqBL=h()z4wj|sVa2Bpj$s{Aem!$6)CE@LrFmY`nBLSuva zg73bgsc$65OVR(;ouHpgqZ@_vpXx=wL<0Sb5E=9f>GsrNKJ|C!QNKKzP6VSv5^(W9 zLG{#eI(WD*`=gdv-4@K#l0d5m0j;Jr42qfVWNTOu;Y?JCC!|VP!@_(q+o=qQQEjFb z@1?E)P(#2x&==}Eigj$*U;>nC9ahhK79!O5T8V`Bur_QPZCDHa%!~1Uk~M5hw7rSm z<%N+p08DYA!!~zymuzL`Xz8HvP%@s#TjKpu$Fu!MA3?)s_EAGI);kanZE4qZ%oa%w zOBCbDHmwJ9e2X8I$Fo;yqluU}_niWIyWwPJ$cD6u5bVQHsB9k{yn6@eeDws;x9NQy?1bgwRfoQ z_p{#2j9`}O6RdSW*N~o5u^qW=m-%5SrduC>)_bth{xPYwWtII1|1$<->7L!KK?UM- zZD;=b+!OuPU;Xg2K1{R(SNuGRheO+3iZvnKap<3(-7RQJ}NmTKG z56fAK@O4~_O2zUI-J&pdccba%|4QQTnTP&=D!u<_<<)S8*)hDb;q<8W7ib2x*ojqr zbCsDsVhxsVpvJ>+k``*F6EI;uFw@PV(Ka@Bxe+{-0Z*_t@hO@ISgc_g_zOjO+OON6*+ge zRJO0}-V$0dv`_ci1X}N2X8Ob`bBGX_=!G)iIe2FGM%>~5nXBy9)G--tafx!Ap-)^3 z&bqqQrCbfioJDwf16-LRWS!jTl6V?Hy`P-Fc`&Uh2W_G7)1fa#TQM zTd(g5=t}f+WP(T-QL3dE5;=Q=1oBVm5m4`x&{D*csQhG^bI^;M$e#%%F(20251HwB zt-vs9OwO{O%gJeU!~)H}p3aZDHKQ| zAlc}=3c2Eb33*#t9S z08owr_d#1@9m0&T=!S`4|q zhV#gjM=|~R(#REHYXG-v@vHgGqWZp*)v##1xxfS8=Nn&2MgF&x_w&*BpEF+nZ`Vf@S~|6=<$S9V_d_Ft>Mkg{!0< zFw;%&XdNEmq)bo&>NjCsLSPGDaD%9%E0lu9A5>?1RfK2*oCVli}7KMOOzV{y4jV zWv_pZV+s1E_<7vLvC>QtJ*fcOqp_}sWK{fzN3bH-fk-J}nT75C+0!1zJAg#siG`xUH_SYfiC$|d_lPEFR# zLzPl*vm0~sYhb>^hWH_xb8cWF3l0lh^s==oyVCX)KB1sEhTYGu2o{$&IInu>k+de`O=Q27xqxn#v&5#ByGERFr1$6$G;tVc;wKi^(uTJ zSn}$K`q`YQXDCtU7Q?uU6H1L%qHf7~L$URS>(Wsy;MExY_p?%A-mFG@{o-kdJyxR+FJ?OOw==lXh5JUes%G z9+29?nKD_IUAG~An658wbXbLk3PTF47qh?3jlo%O_LF*ZFqRhU@=DDB>DK66#gQ`R z*Bz`_e=g@kax>Pm@+gj$tUOci@c+2n_*uED^62`b^`UYT&_G7tiTeAbyGq~GrqMNe zqEj1BT}k7ZssuWwcj3$88D4m3y|Y`Qb#rDq6NrE5hl~*&v8G|*)4f{iIBV= zz`;!3U*zrVM~XM*rG1Uj^3uWqgh|>aC>nbi*O|~BaNWqT(V73`4E=M7Ut}Lq^;wY; zN{vJX%S^>T5b64fDAoA#f4zL>q1<^q{%rC&J}<3@d}R9ht@vPiKuXEw&TLn{T+XCi z;`pcZk9baYBp*y_+#)NwWT4rTHDter2a&$J(b~vKj-YJ&;#mZ`-I?i!q@_uMrX9Ap z2G1t4pDKK=HN^LkCgN@%Z%TXk_qDfwqdaGRUU_0B4J^VG)RxB3it&9KxaT!BUgk6S z!c4bdCTbrFJkhtiC73Z~DMP)i)L7O1L}oCa-3Dz@d)-|hFsZ;!A(Z^TS|98w<##!y zoM(#%YdhONEKk5*R!&OGU)wp!f-MVsH|Us(q13mO8CAtv-f%YUWtbIl**fz8s%HC# zW$|O%KlCT=HPcuFail$mo1TpfFohes7JHt%L_=U2_XyKEEPIpPAEl4rGN=7r`(*7k z$o9-;m!H)?Ga2=K(t=p}YqC09sT;1$<}CBz=Jer_X6&;I(zfIl@(YG>`*>n77V$J0 z*p9?aerj`{by(&rK;`6*Dc~MvS5L{KoOy`;rOoh%>{nnfyyjj-4E4x;dF9wet@rrZ zyOm(la*N;f=yDZpc`S@q2+%f+uqakd3Zm&&ZlJ$kYMZqS4;3?Y4#5nhcn+mQnkODE5BWR3z%l7#VvT^I(*~s z2#<=&`~YN>=vzX`E|kF4zjS5yR2@xM_AvVD*#&vy zYvBt7dN!KIv++G$C={-6fe7kQ11n{4r}P7sn+&T=4+FyCmDX^?mKC9i#aUP%Alb3a z;wQOy{b+U%#otG>pyJv1Q+BrD>^htF&1#Km_7ywkv-ZvHw&?<+WdFf_Z1g+Hzr|-< z?0?;d*c6Eo4xVZ~ozZY=#>(@c-8r|;qrXMb(Ze=$c19S(BWR>e-yU9_xL)L`aUXIwjE4PN-@-qh3692XYZ8u zEFw5}+<8;Rk3BCwYs&QR9(UY%iF0wQ3q9bxxxcY+0Q^rpYPdP6<;G)F9 z@Co7gd`jI4r|=CLjqN7Su1trc`dAg9~p%I92FKvn{XpO zGp$!=l);B?l6P`s3(q@qeCR?mSF1MHy&AeaRgT<+=7FzDL4@9B-|LEG9+s#`=Dtju z)ufP5u!~` zcG`3(wG`ZhLYQ6LAFb)>%dQhY3RDs5M3rj;SXlZVsS%h0kRHT7;DSI%A)I*!yA0U> zNS}(`Ghjxh5&eqY9^CL3*?aP6pi@P-?_}T{60zJLL3ZY?OoiETXTfn`4e6fK|>3h-Z+!~dF%|D3ohreZ>PmzHZD$`J?PX+Mm?5(z)%1Y94VK9pA-S%-9NFCT# z`Z$cxN1J)g3RX>+B6Am)4WhLpL14TS`T|h9UT`RqvJl>O43r3&=#WUX_y6j zBOcSUJUlQ|&nQs8YLc$X{z8pY)N?2`1W7Za@K3kzc8zi`fU>``JDgQEi-bS!^G7i) zOEVfwIVWgxwmZ*w!TxFUu&>(Zjp9tvQ1W~1%a(5hdi*ZswCLsZ=-IWModw3Ev_R0H z!jqz*>5sqDfPj-x^ak}hb!>S8TbR5of_d6u>Xgh45ypvE@e}|C-tbfkM zmO9ZfnjV28btgen_rX$xzlV}ngQYaC(D%To%Cbs}oIdu&zXv%cPANXaF%pT7%|E^o zoj!Ul6coodu4Zq54d6LWVrU^fFtUI>mFs}Hn-tY>NOmF5W5QUvGJCZi--0W0J{ve; zf)n+H=d!WWDdNN`LO+cYE!Zs}N3($wCOA>=aN>r1PGFj}9s&a&W_k1ByStVTjy|#Z zVV}o_9iG^@Yn^RI+t;*4(KvWmwaFtZU*jYIWFsLykvaZ`Pk{My~uC{kkiZyo|q;GHSatH>`2GC zR{bSuQktx@>?E_8yM1wZ(NTqj&O=0{PVn~7{I`ke>P=qR65lQb)YH-VF^`m(PV}&u z#vFBbDAgjyOCH0LJepo&Qpcc>*@(JXl|7~4rYn1@9cQA(&EpwxOry-{z{bh#CdxT0wn}1WN0MZcjaTGlfOSTBVY*WE5CiDxlt3r|JpxSMyn(=uhc-%(S}###B~3K_8$L->R!tWE zE8S%I9U;|ZQyXy`wQeFBX|$nbS8Tz3!@Lv&_A=Ejm(V_F>o6~5;gJ3|fY?ng`@&?8 zZ$D>7!zv(uyJ%8`wVO!U5Mob+agXYfXHUQ&o?DsuEzV}L{Xx>6PN!}|&85AnkO8gm zGiph}nG5IzN-0$_R^dyg0(kPvmB->3{wE*c{C(gN3JSvQvxzq55uu2<6UvVt4ZzS!RNRxGU=z4f_MAn1zFj zE8_=v;>*5Jz`)cag&CXzT-`U0_QihVL-%j2DGR*W+qcdi_^`LJu{`i(AKyO%fi1m^ z|LPg|C;smNv*2%g1iJbdKclr^EbGOHchOo{*(dN^ALG_91r~qFZ8@+YvXB9zNb4h^ zdROk3Z0|&;v=_Svn&IAiR@E8}Omytg;Gb^H;|dH?mfL6Bq8OUDvC~;kp%2M?v1kV~ zoRDc*tOW{`fR*4%9fT14O5k+k)B`;-&fg)si*x>J;0)t5owHh1BGa=R*Vh*g=j{dI zSamMb4{ENEUyH!WW-ltU1a(y^EQau4B)$@X(F*I4@JB?lH^!}~(2A)l5;Y0dtKz!^ zh5Nwi%GK=4_AOvw_89ka_T2a@@lBia`uqrO%;@A!BHPBvv*B&Epa)%Cl=FkY%Rb{K zUjW}Zdcjx6La86|srm~iacJ4&PA%3&r)?n%ltO*mw;>5TOJ}RJT{n1c#INLS`d6}6 z(`vzRQdgXIfwZqg9CVj&#P@Qq-fZIPO-v{1Vn`)ddYO~r)?0cZ;Y3+TnApI*6&$>{ zRuNWUbxHOSr~mJMB72wOQCDvAFeGxy{WH@K2vJa=d#a-{h6md>`Sg(rHZjOZl4zD^ zS9jkyz_wKHWjL z$X#%rLrww1SlNj)9CC{IME?(rA5jtS*2Hq~#%@h4`}#dKvC0-S$KYLuR)< zA$`;T7<=OUiR0rlW*v9j*ygdbCXSmrb;kIyQ>LFcaaO#bOO*PJ^&&VM%)FmA6@Gqa zgXQ2D*9E1I%rn~HN#a@712@Uxk9F%q$%o;>h+6MsR?W2DjShSxR`+oz`E$BDI*x~Z zz*C;EKK}BJ$QxsnQ0hdwJYd8HNeqV!!Km+1Y}{*3pYP1Mh~+0MQKIdi;Oy&bfDU(9 z7IGo(_>ILBr(c?_1lL`E0~7JtP*VIvg3o&1>=<1MT7Wq_z~wKpYRvQ?)0zqM#|+9y zsC^|C3~h=h)H&QIVd5Fyvsqirx_1(fo9!!ja$~5S`&n>$V<^>xOjGOPm5rfgWsUQC z^6J{G!MeJeG-pH)k%|}7wCju zei#$H-3+`t}%3PEcnT!Mk`kFN%sGN4w2{vFpDN3@>BgLzXSvM!?JG1 zv{2CWZHQV2Mxs(OKyyRtQ0ku2{)1Q=OXe#YtaT&Oqk`K;SfeVo#X3%^idrk9IH)o< z@G;-p(Sh&S=T}yNK|H^5YlHP}`>7(~Q#X9=Sb&uiv%Iz3Ra(#YT%<9=-tsRk$ zl>uL@C-Bt+-{Vm%3WyEt^8GV9@Sirm?;;KHbvIZaws!&FfqhT04y>&EGw_`(_`p?P z=<;E>&sBde(FqM-$pe06Q~~cp=2*m_KP0qFO{XMfPNd%USJ;k!*L({79~iD-V#hw3 znd4@9K#a^Vq;5=?K@L{W#&lz^?TuDrXnSV4fP(~AG^S%gfMXTgGiAtIMAq1gB5MqN zB433xm$R|r=SOwGm$AC?2u=Z)s3fx;D`AYpi8hJ(L-hEuDpH;_6M4rqD|@>u`&&9E zltGuhUs9absOroK5|sh zWPTt4eEbH#K^Zjfw-2MGS~2tV(iqGQr{UQ~{3^<=#vHgspHI8eynnR%;Y>j&tUqEq z23sKTVk>oY;QMCXW1-|(J=g?~hQ`8Y>v*p6f!b$Gw#AOdRQQUeVCzhUF6HB*N^P%2r?zp*bdnmb*CBb}g3wc$Y zJwodn_>Du!>-Y|H#;0KgT$tWtPWN+_c5~h9YECTQd3>}?8>8HqHhzc&tS&WejGXke zaqg>sEp)5@#8os90~bqf)mJ#v!G>!43*ph0?}d#=y%+za$iSXt?ouE90u!*pv9(^N zhrvc+;Y?0JV619g|f zCjGrH*L=IK1ZXmxWTyTOhwiNxKl>QItBUbdNt~-$8A?uO?e3sAWUpwtX$v~RP?FzW z7rtV}yA1BpBc+?rzYGmFq?`C9&vnh#v@NKt^e-37Xya_Y-6MRppDuT0Kr&Wb(;)s0`m$}T8nCeQqp)pP+Tie(ASP@v76jeojb zf%oXCp>0S@jNjqgC~Wy#HmdlIe%^#APO40sVJs%Z`tbJ7R@1sDh=(y7@UL|fy8c${ zq|VU2=C)AZ)7FOierH3d@41^MStnry!P@wlv=nF%bksw!&4wl%6sud2xGmN(+}D6l zNrl=UL6!|$J7LDWib6JFh2hn(3;H(B+ZWKXc&f?jJQ0?G?~_R63RO1)qDA|H-2<+LL50WrEwg9l-PVPtXLn{TaY zVFH|seTIQ*oR;mHlsJfnRr~76t~C#_bl;e@Z-)?{@AO*gBDMiQCg0Lvwfkkmr`tZIdTZiw}Shr@@8=0%|7P5m8xyiK3thLc} zoa+wbWvC42VK($NSh?@y9k9IxQy?@bI<1vhS{qFt4~ZSWZ{6BiZ)Kj=vm^E3F~7cc z5x%;`E<>I(cVf;%*&3C+b9YB#Yjl*?+ub+XMptG#Qafum*5RvbbZ54dT)5GqCSCF- zS};!tGvh}{*O=}LsWw{so|umLwo|OzGe3oGfYxl_EbubyF8I=RRO0PYiT7q93WV@e zl*cg=+|s$sd9gg#yRLyHvc@bd&eu^K!2!DJ^X4h41?(6nc83O|C2WL}oV=2C&7}y) z?Mulgxs>^`DtnD>#~fha9I5S>>}58jU1!6^yI2-@7=4>)&;oU>+K`uD%YT_qLMX+V zlu|^ePPSjzWzGz+A)21d6R4LqZF^67I>r5|0jRol}g_{t^j?nJn%%NKh-1fY^Cqkion)N-}NCvmWCuEkE#4q-@wOx z{jc>6T)n4%Ti<}Sr*SX4O{kB#kc}}OW6N-SMtI`1nehw5=gydMUi`S@CMBkik58E~ z9q+quO!%hV=L@9!<7keuuKvdTfxxZ(jn1BdC;J(%2Lspl_a*lXJkZ~`b+5pk{e7GF z3VhJdxPR|Jwx99dKD>W$-_bAjGq&#c+cG5E{#7Qs=^!Tf;2_>#6XyNLVJ5hzUjR`- zndJKw-#$kMUhx?#=<~bRA2^x^%e+x$zwh=Pd2@N-ncl|ZfxyeXjhA``ZtQLRG8p(p zZ{r`q!0&n+ckh98AMO!&q_?rMSKtr5u|C*WJ`ym5z2*e&C^Me$ohDD^2LLL0_Vexg z813B4%LA_keE-!Wa8(cE#vTADq9o2-Ut%aAa7F&8*7%Dr@J5aCv$DY7Ym97JAXRJJ z?+-j(V_4;ZTWX9A<$-_J7_avTTwY^r?HRbP#`j(@@W&eClRW}A)%rH}n)J^jjoT09 z+dmvi`0H|i-x0k3Q4KQrs5Y>0ka7K>z~VuSr}3Avz_UG!d;I&n-_y9JJaAdixT~CyH_8LA^zdELBY-%+ z>=D4*zxMo+EfxqgGAeLKZyXwawJ+7%xWON|skgDLJb?SZlm~uuBJNKyI1 z&HL;@mA%^&9{i^{TUQ-RUx1O#e(2<|D+pcddOe_8VcwTh`LJcq23w-m2mFN5z-MB0 z@8GNDG`BnYz%PT3mHXI_l2s7_H2X1iJpY!B~e0-$yXY zFRt`O`j~}L8u!7&p0N@}IuYjd7fhjP)%ce{M>(6;(OkH5VC5#pm|aalmTL_*kxsH^ zjtTXhjNKSB2Z#F3HaVh_;%xK+Hq2zkB$ymol!2Abp27;S{<3SwD)ogu??=YEG zZ}f;;=z+qA(qS3D3&dRS@Nc$@Vd3HnK?$*oV|DMxtCc;5?}9`-M!=H)v+5+3?r&cM zXVUwLmzV%9vN#I$f!!URvMf?4)f)*j5&X05X^MgqhJ`JiU2s>yotr1aE-ww-KEt%B8jj#$mj12;7JR>E`E(EbvvW`3oX z_6MJuYGF7&+5k&8mOlQ-X6yLFn(Efi+MKzI(zNYnpS2~LopHSTv*veVRbkKj8-G5G#FjB0RvbYCvb;EtP5@vG2B1EQ}@~V0aSWjiTty10Qelt!*Cohum1=LK^OHPXwE+E^wv+ z#cZ-xkUJ-*%X^<}mG^3@+cpdPUlAn}BSGndnye?9tf~{!bN1U#$#2hGV4L1sEgwwp zV_*q8dS!SnDm7!_uRAY$w&*GX^tuefiXMncFMCqqX2sRCshNcnOxcel#N; ztxlDWVb@qR2l?^>T1=h?t=i-_iMeGEMUa(QXH#+GL_Ij>8y*7MHq$DPWDm%-Pwc|1 zQ^@FW0y1UbBF*`ZYsR=sSj}b zNIm{J3abhwmE#4{-@}mmVz}Her+_o!(1(QS1-sxMaYO zRC|H`G^ozpD53H`VPt!KwJ+0xa@hW@N^{5$V7YRA~XsSfc1w)TyE@i7XdywoVAb7O`k3p-zt;zl<=vX*GTEtLvXl3F*qjlzva=n_bEvT2n^?Dp6OV(`+4 zSKw|F@ED;~wbUV~>{xnoFg9c|T)X#(-d-5lgt%A?3TH5;Cerw5u^>JRIAy87d^b{- z`Y%KR+u!7#oPa0{_q&WQXX~`7c&#k zF-J#AO-z8pMH3T~IWciF*89H^zajf_P9N&21~Q{sGb5~+(PA^BK9n55W>mzC`zv>X z8EAQGih;~v7GwsqATtilup`m)46?qTvmvGUFlm?a!6`rau^{`b^UUv24rci=+rY*A zGRY7$+v|g^^xLU+AoHC_(um^2BML5vhxBdQd#>j<*==An0GW2#N8o1f)9JYHf}fJl zVwQz?M3lA*%{A>hxr8@#vUo!WAoT)UPox({)`M)SAEzbau#kNoLJ!t$ZOR>FIUFAx zGt*xu$^4l0A|~RdS-bf{*)1i^ITTes$Vmv$?TYg(7e-n%wxK*BNfZmaYqMi0%#QI~ zS`pt*L3PiUJCD}xT6w1lyT}n=joyT9% z9~xDaMsE|-$mm8c`O zyxQ0eLS7Od$QSV0g?wS8m5^N~FM3FcZCA;QYZ)jn17Rt7we8{JFV85FcE#9v{H46M zh_!?M8zE7Zl$Yto=d@EM$-_r^brJ}cu4m|CDe?vYG>b)}<<+SvDkZNgQ0HuUEf8Y@ z?TYb%d{IH;T^N~3$S#vty~ehy8*TrA%~_RWS7ay(AajB zyf(<#1RXcRQu1np5FGwG?TfMV_)B?pYE(R8%2QruNqllD6?o+IgOt|-;$stF=wd0v z2LS4r475aE9C>*ND=J!5bzb$vgyH2(qHQTai{6+Jp!wEkunG1mJ~12i(87rFtL!>G zxYpJw2usO{da_tfolNECE9JCQqgt#{<=Gb-pv)XR$Vll^M$N-R`Lq!TMlN7jN$E4v&f_oTv{9qlpi!0Vuf~+b$0T|9D6gdiLSCH=OUaA0+4i6~V?5;5%O$T?rh&X9 zK9J8WK)x_iPe@65@w`zIvY%pz?PJ1dXdisdHT!4VD8~4RmbU6wG`3=Sd1J#=TQRmq zP=&$!ChAkP*NvjLpD(fpD*<=p#WRbqW{40omz&7H?zXJGpc%n0N z@UH-VBjI-!!=J?pnaq3mR}jB9od1~!{uRJS!quOdihl+0G~u`9!FiBL>Pd`#Gn?@* z7hmALG3d@jIP%76Ezna%5_=3HRkZ*UE!LatcZwrnHH3~-{H`PSPMu9!iP81<`_Mn0 z`uP?P`LUt)Mb|g6L#d~cOZREPOuM|cQ@Oria3L5~BHcWl?mP0jM7ooCa+4QdA<}c6A`9aDX)sE1kdD`D$%_@a|@y%*aQwB_z@Z!f{P$G1W$sU2nM3n zAlT;}3GRF|w-k&kmGtIV+m(~^8u3oKWqCJP)j`~u&YkU?o)fV>-uQO7^R`~!6_6iS zU)!cg7MRTyFO{2E5ejyxOxkB-r^Ma-XuW#?2A45tsp-!Ym{!9K z1ePygEbW-F@LA%Jvl)11k>9jm#ya%C+qyQwf!zI5C&B?|b>qxAJN6{21xGM*xi0rB zq_0)^0{I5S=MlQP@Pazl(TX{13|?plLZ;-St7|?5OVSY>u;7sW!zDD29r44+p(qWh(;Ob1>WW?0) z7J<{D4pU2~ZA0Fi8UY{caSO80j?J!QWHBP}w+6NYZvo=i47IEqx6G11#;kPRSL=I# znY$gO-gQ4l-^Z*akyhLj#bgabW-KN%y#bk_YGCd$G!P=-eAZfk7}ES&}C;YW*TZvn-pnbHqwGZ>4cHXGoz|a^^rNX<|KIEX`SCR7Q;0fFsI7s!)q08ClGV?-~t2vV;Jk$z%C-mUF|{`Ulte zMCj>f9D`l8aJt41#JU6;><%RHrh7fZl1Pn43cG!$k>dMrg-CU~TM`KZpE!va*1Z}( z4C4bV9gjpiMzJq>CX{^5_Pj+f`Sfkuk^4f;RNfvKmSW;e-Y|ks@#f>N;FUBw6FJ@ddvJDzp zNqHUN#^=bNNeb{`WDFqX)yXhVUhC29?S?MhmxsK*?2?zbY#}eZyIV>ed06RG+r{!~ z(I|J7ysCkZ@(MF7DKD)0RSGFjUW{MB-zDM}@eBC7B+{voE!W6O z$_t+=%i(k6&m;x-;CTm-@>;|&$64B2aFx-{Vtb)+M#o<9{JvNa=($=E)3!Inlyf!_ z5>GwxAbow2yWQKBw|B8C59`N)tWqO`dqI1!!f!v`3r|XiAv+MJG$g%V^45#?57nDJ* zqs*;uV7)9#U*cOY>TGoE6v)MYv=y~6lsX4SkUI1lEf);b!$<74Z6z5eeg?trTU<*N zy+z}@(`n{hwt5rP3szj_IZo^03+GY|`1$q%X_>?EFX!hI_yZWkXSfXChU;_LuOYm~ ziLVuID0Kk+h{rm9Lm^vfqxK zRE19UJ$c7Q%1h*Z$xQ!P zvXqH$G1*diS29@>gixGgBE)3cD>w_O;T$|b`3P4lkKwPCH}MU)NAd1#@j_y(DUH?{ z4Cz*9yFBt8hdDQ3P&IXoRa^C4LCcD(lg71&D|?H5bF+QZZr@yM-~7V9(Z>g_%HCqT z4ndCXqfyyuGBb1`>ST0%)zC}eI1a>Rkl~(j8*`Vwkv%W0QtC&jvz~wVdS$hi0X<8L zUU+M}grybIskM8(GWwmHXc9ss=_4hnK~E1MgOfd5M>E ztCQe8aqR=xyL|95ryVoo4Xs4NXe--8w$}a4$w$T9! zIdKZSl$;jWvj%iZI_-(Ei`vshjf#tpiK^uK*D)pWF-ac2-RqSLS3fsWPP^ADqhf_p zyVom+g%7*eE0=Kh&(rSy-RqTKbWNV@Uat)2fwQo4_j+Z_ru|FnmGjQVJ8s;}nG>f^ zfT<_H;`x-zHqYk#JQk>8J?!1GVuMSLTX`G|mfwDW<;(}>EobJc(%MdC$g6WcYP)N< za-rrV>p``00FEH8k2D3bUIn6}63qE|9wCm?d@8w2buga!!x2cEc%FDGR?C*RnpitK zS%EL!6!Y0r&N9&v>zELk$bl-$fj9cM-AnI+DnB~{gX3J`NGm;{Si6PzP) zMsfB-NXDa!0U`2CNQH>w%qi7E1Ah!8SH~ z{WMoWAIL)~Ao@3n+n!ETeBUw4b5g)ERxD}PbmIsYFibOD@R%JBMi!Ha;xTk$=H&l@ zssg$UPEF7bMn}9wg-RsIUv9QyrOsP3kVJllk-i|@{#d!tlGzta0g5pkm3Q=*efERH z^g=Es=K-tWQxlkvW}j3y&iB7oWe3T7mFXME)Tx3vhdDiR6OR32t;duMO1(G2IJN|+ zqNDQKUez5Gy3MI0noOIN>v)sBQ9ovmz|0Ttv9mzc7;GGPRceQ#ZC|_>F6I6)dczs~ zs_6ZkH^R@)&lBU5ZTfJv8ED2wn%1V6>-#8|fcH`B9ef`pYQ2qPGMfkfBU<-HDET5Q z96va~Zw>V41HUzJ6x9JlT*X`;2;*N9clG)Y`7mCCU^A^DX1bO{Bws~b zV#0S%!lreUtnRQzLJJMu60KX8Sf`emWa8hl+eZ{1W&kR#oQkH;K+Z!1&-1_&O#{~6 zRfq>4he@n!=DL~OmLC+h**Y2@7CDQbM!*R%IKI&RB~sV=><4lu486!B5W_M2L*v96 zbrD*O$4T;_b#Q{`P~%K79yku9Rnd-f!kOQpzHy$SeWg!Qsv_c0Hc73HXJcw`0ms;o z3qv=>>Tq=F@3~NhA0Y{;eTpl6QaB7XB_&ErHf@U5y%kFF5X?*!D#rrUR(@Xux6Xl% z_*};poZ7cWo%g*ea}-`eD5^b@E*7hr#G!0lAVO76EY%8S-3FA?V@7gO(W|IY0t@qI!2cb=8~AduAm zo&7uKxcA#Q>(xL1{+&bI_?-3X8(_#4tyllo_wV#|$!ihUaiN8+$1sAc;QyEI-+95k z-^P*G=ik3`yBnV)uP!Z<#h?P~$$1bKBrHBesvOZV@bW6x|xcg_BtL)`cr z`F}zCcaBG9w!B(6D1*G(VB%0-9CW&u3}CY;A^++7clZHMHHv|}9R70OLxKL<$^AQ5 zxbZpd>kHYxGlnh6*}tRgjRlZN?jvBFGW?I;zte(#M2-J2*u-WFeXfsGyux#R2t;{h zQ%>Rjop3&$&$oX^9Sz~yy2EWdzeY__eg$m2*}ZQE3dH4B%-grKEzbv6zw7ty9L#+? zCpi0av;q#L&LsSN2QF?8?iad-`*W5!`*R%lD#D+0;0_)?_G@ImihoMp4txmVrx(N9 zxj*OT;{7=f5dN29xS#uTzFNFLX9(e^7sK1RKj&urE1>5A!vB)D7bb7tPA`yJyfr1a zZ|5JS_wD>>$NP3>dGFh~Lum2dw`1ke%6&Tt?AyTyk5jjQ%D$Z|y!Y)qRkD<7-_CM* zS90G@^A7gy)T*627a=wF<{Ye^{s_U~=^nLj=Y6$rXX2;q+flBL|1tY^;A6i{3^S!` z^$7l7+_$6rYuZID`*n7~{1WGuYPUKwN_uulrjcN)h>c>;6u4)T)C?1xHtY@ggVUyw zxBtx(Ou^=`bADOeN!?}9wPlc@c;CArfDAYOz!!mgXoAZoOVlm z!ShS+Bh&w&`6X$Wu74wrk#8#29y29Aan`u_j9FtRjT=91!o=u^kz;F*nK^65cV~^8 zHg?8Les1x+V<$|EkDD@e&^N}mWd3SqW-u#!sCwed1WidEyRm+UdV> z?zjnK?eBJu9gnYi?jVti5}jVxyxL>Vn~7SNm>!=v;nQ-?r{6<jceC-qEoVwBh>P-_48nt zerC%XJ99#`W#p6{7!w6O=njhQ$~AYpQ~Aehk5X!O3cgx9aon`%1ta6Nwc{s`n?*}x zO8mSiRN)s#V~*P0cU~Oefxi5Cz5l%MPs6)bW&3Z>cXxRd2mZU{^LhFIY3XPiy6r>Q z$lnc9xrS#={6S*MtcerC7zFVH+88;7CrueYZn}Iko7OxYr#kqD4;^}3xO()tuyqsR z+M|v*>WG@JADfWJL6;0V`iPpN2Wqe+!7PQrEC}uBVqWJdQW=Dd;Z+?+_nRHY+jYZ7XzNV1)E{K ziBRYnR#ACX*|3VLEB(VO!X4!&R#eXqG*r}F(W9YaaC^_;6)hL_su#+a6j&)9FljGc{f&s%Vzhgs6uMQZ|E&`bcv4tTRT3= zJ)g8*;g42?+sn(&S1C|5q)_#G<7Z4my7t!e^Jw}KbX{0Tm-syq_bxkrAzc>~)5Rs! z{OxQS*0Uu#%}Cq}T~hDMP+Zln|M)5IH|zJM>J{<#(F$Zl9{#ybJwNVxGDLebs;+uHT<)znA*jq}xi_aJ#WE zE~k?D+nKn@os3HvE!_c)e9t3C`72chzTfgG?<=*^E+s>jt46;ck9$Ft&jZuVgR?$E z+<7|g&hYE*os7%!Zq#v0m51*Q%&+oS>OITLbwT{?OnGBE?x&UEc;K6@l~&?_+gd;enkqcz>P>_~RQE9&P$a^Sd2a;i^?>-2sv z`sd{Hs>a2uolQeK;W?cT*A7Y@D!CRkZjAA?Fg7g4vt$I$RrNN4v^BzpRn{ zukanH%5Ll>1y+I^-dp6nKpU1%1Ba388zoKIm5y{`y>ntVS`c-i&hKEQ`#IZhFV^*+_9shIae)cHDH z73(ZRg?ki}ojkNpN@cm!*m*hty z$s&D+_rX8>{#E)|-`KACySrFkC~rr3Q@&l=STWOIS6-65rrxac3pKtD+}q{V_MWOc zV;#ney%$Ej^*YToJ5A1}gsh;?0e?@&neGuM0(h0?%YJ!vJ!fk|8H!C>uj3tF9PcEt zNiT6|9L8)}uJ~t6b2!p0)@iQ8z3@WHg*qs9df7QD7iBAl5od#rzau_u*Ku~lhwztx z48Kp~1HZVzUk9$8mDL=bW}2O*gsc|nI6InfVgpYOXQ?)>$94=jUztVqI8S@R|)8zcUm8V-gZGqtxTgv>A z(z?aT_biQb9`H(8kjR}cWzweO9Anc49k~M?FUHK(C~om+c6jeF@U7SQ1~_@P`P_L@ z=Y_#r{+>WtjTW!`v<_|cKUBJy4ZTT!eI+pgC+w%3ygd0vowrZvKDJTn)B=s~=r4a7 zKB4cViluw{C+<~J{-SRv+gCKsNqf0*V%&12AGTSMoj1Hb?_@wRVg`eT$$vH5Va$mVeF zO~>z^yf%_+o6-FK?WBsfGXDdmE05SCVc=@hI7i@KwUM^GHbP$CrsJHGCqE3euJlX4 zTIBD6{91M(zfr)sP2>D5ynenkuSItOrRNV#8)bXDq~G0doL@4X-?+#Fez6C9jt6|M z2mBHb_@y53HV^n^9`JS#c*+C*Ll3y+0Z)6tJ3Qc5dB7KVz_0dzU*iG)u?PHm5BN_! z;QTIS@y~B8ECvGNH*WHP-{JxPSrMFOL79<*yQlU2#;ry13Gf^L&jWtD2Yj&y{0K+4?xCTvgp=Qm!mZ}URGGh>zq2K}$)1N4($?Gh?_=QlD%FarEW)&suT z1OBE5{4Edo+aBOw+H-79`KL{ywU@{rw4p55BNSF z@O?et;^A_$Qtti6mp$Si-~m6-1J3UU7ytamK_2ja9&n!BQ~dKA5fAtP5BS$S;ME@R zLp|V!dBDH!0YAb6UgH6;^?)Dc0jKx5_~$qHk)-0E-}r_Hyv_qY!~@Qa7R5imae@cD z-UEJO5&R}VXn)#vC;c@19Sc1~_`X^n%~N3GK@GoI!v|iGrcwFH36u~dj@Jc&F9kywBxB$)_&xSFg2#=Z{7cW6x z3Vstfx7sH6s#V~@96;Zt1inWR{4Rm(Ne0*3@&F%tyCCZJ9D(;Kf?q0dj;iv1e-ilK z`9M7Ji<*Y9PZ9hYf$v)cH)Q?}4zhyZP=W7X05yzx0zaS#{wINdr3k*auH$9({?`6R+KF%DX%Tpb z13y{c{T%RqWy>7;rF!Gt!-N|@ci^UuAKH`f8yt98!|yG0T zI&FUT6ZrKG+@^m9;QfqWI{Di4Kj;y^7gS__Kg9!nh6nsc z5BM(u@9*-z4bk-M561R0&UVUmq=q*GUW%SkfcH0Uamr=m*(C5=9r*qF?mJbb@w9rt zF9N)uah*etE#KP(zSx1!)A;v9*V5m(-O2a2`ffJhrRcvF@P3B9IuZSij{lzExuXcr zIq0JL8MhVXyAtsJ@Hckq6c6a|xC0bDHvBFPzg^&WIPq=xz6Ub?ojR6U+r)>-0=Hx3 z;41}wj}zanp9iCB>~9pqlLBAv#2=yW-V(S?H7pnnKliJ|^RN?tq`q4!@a3}BgP>*& zKLA}X^KH@3HvDpdKj6S^I^XhupA{ya<;Eh7$Bw_k1Aa(9m9HJ&roThr4>)*idVm~% zcNwjQ`kkx8R)ODH1Ya)jhl}8S4kn%sr(8Dv2?AeG1Ya%i>xt z>mB%befNsMpDco(F@Sj18#DDAyId;;{wJfg06q|=Nq^%>C%!G;>jb{u*r?;%@Q(!k zC*+`hHa+KlP2sWOcD_#w{5c)lFt}!pzfow&mFhO{f2RlhQdEFa@ehItRSG`d10MH) z&j-A}@uEWu*XHrp8>Uz({1dz|#)=7!}=E2DlwZgCzJ6@czbI4v1^(`1=+*tp3J3>H+_4 zcoOhZc&_z;-|hjwTkvml@Y^1Zj|Bda1AkiI9acknis5GpyxWP-b#nY&26!nt=Xt=p zJmCKTyuZueXw$QQZE5&P0xx&?KT(lm+~5I!P2f5Ir0t0>8=eOiKIR2Ia zUaGu*^MJqWfoI53%s1!fwCTCj1HMY&IsYfuz46!UXyPe`pDOU2|Fc6yH-6y(|5)HT z|K~Ive+nvgsq$V9ct2yV!~elL{%aob-|>L=JeKt5{HW74o(lz@^OthH6@UM~y)S`} zt18RtvJE6|ihINt-5Rk+gK6X-g?hfC|WDnoOHOHj-)6B4Swu1gRCFB1+ZD zB3os%EJ8q*vRYaEs)AI6&w}hbf}j8Qz2`kM&zw2$%)QB^@O}TD-!Hi{&%DcX-m~0u z&pG$r-voGeUUXl% ze1E_E`vIPvcfG`9E7ouT%je@a1$cJe)t1Yi2eRKY^ZYI*d_*ie?`q?@#X*c`=T~h! zX9Re59@W;9WeWa&fM@4XEuRy<#(d7p<8wFRBVxAKiN!3ReGg_lJ6~$~%ntDEyeRLV z#L7&mY+`JZcbGq@r6UOGUgZae;>j}!2D{ke~f;*CBU=ut7VeE z!LL;CClx$a=l45N!51p{0}B48f{&Q&_j{0npQzy9 zRPgU9_-_^bpM;NyW#{38y>L`srzzv%a|q{lvFJ-du?G9y_|rp*{5Dhl^7Vv|fcbph zzsBj+0ME|n+xqj3!~JnPQ^9Xk@OKrwY?|NxGzDL*;7=&{M+&~r5q`fj75qC2ek^5@J7Lx1o*czIH?EetpHz`!L6Oi$FQ9< zGPtd`w*~mw8JxQ1AZ<94<e@j;<5>4~xS5(+XxzVFj=y79pP41&pn&S0I zepFSwzA90l9+#+VPIaVP(+le8d%Qk9rY+UeV?HN?L%b$&c!HiaN8YECty}eBacb)9T2ME2RyjQhWzIT2E7Vt9f`E|CShM zpQBdMzj7L%h{s1Yb+$EUD@xv@{`x~KdX*_Pi|JFEikYk|H;)1e;@)hZY)B6PI;1j) zd_{sQv#~O2>LKG|^sk)%RRsSk`G4@QCip%k_+J(L4`eH9vQaJkRHRZrm1tsBd|p`J zQJ%<@Yd5c^n8&*n5z2iem?ND3>@4-!UhZS8?6c)cXEB#)JnmS|e^!?x5Fs=9w({KN zTMPeKHlO*DI?xJZP@TBtljqE3C5^D)lOCNi)Jzn5SYxkSQ~G11DXft~PhdTyiaN6T z%0#v=$ZNCqoSu0+Ymopr^4YxBr^n8-PkxNv{nNmK&-a;3gEj4ZnfqK>dTblp7(Eah z)Z1GdCUR9l zcBJAn`g4VlPt^as$WYZF!t)v@R$|6&kk*m!itxT8jmjeADU#g?d`n$U)y=IvU7dVc z8n&iH$ys#krOw~P@*ro;ZPN!OgJRx3GS?k|$Ur@)H-}93qv%n)qY{ZZ^XDh%F}ppT9mzJDCrQlX*_UkOOW==-DPs^H{hpZ^ zswjb%iMc@?fW_SSOS~Wp17Yjh4yv$>E=x%{HyHV6a;dMGVyVa%v8`)#H$C*Tm7d4! zYhU?lPC0l4`dy*(Z4In&eD?ZTAU;#Mk&yFzjh!u{*H6stXyO-HBsyoENYAXF*LhN^ zo9EEfH(huikKLb<4-b;Z8jn15q8DUTWys8$J9{=gb(=)Eccn32)S1^Yvs*iw<23ix z-fsHms0PN->}UJjbTXZax3{yMSh};Vvp3b5X@ z@Hi~WnZ2TdhNYR8aPalPI36Vj?I8}qgU!x&UrtWFRd>;YH-YQS!6~S`JHbm=?A?^DI(?TXW|$g z9uMXA*uKaNB)5JFCCi~(7wnvBPA&(h+_J7XHw`TvRbvzDzJ8a`ufM3EEtSw$sB*JC zUw-|IJO|}mUJSsZ(=Eh{S`Obc_zS?fSjeY7U zZGQOFy5uVkDQ(I?1-15d6sr=s^5rK)e8N{Rw^4fvBWL2rb7@pkXT?gs|IVOB4_=PI zNvT_C!KyHLmD^JxGC3<)$<;PmtjdLKuc7VRG8w2{UjYo%rW=b4*TIhQ0PTBYVQiM7 zhxM7KZqLjs4BnZ@Mt>c+@-(YV?g}=ml5~Kjc2%&vN>L%)cA|!FFq{oywI~?4b=s-t z&e^%~mWhkXLW{k<@d2;a(Oi@)`1xL$M$47+zc%SrT- zTzXYg;#j)$ADc*|Te>@YY13abz1OrS4NE(Dc?nZ&O(iWhb-Si#vAuuAhKtg)oAYq9 zDorKUn#Og!yjX-US2Yhoxyl8E)- zM0~8#l+CO8>k2cdALbQ@(dEI4L)I1TedSkv^Lhx+mUC7c>g@Si373}wD;Aw%_r7Q} zSWWKFYDE*hFOOC$W|$R^B3(d{>NfB*EtPU$gf`44X)8CM2hvR~G2TF*Ow3BnX{A@C z1Ja!e&KPjc%bQWDEa%@{X#-36;=cW_%+V}2c$DCARc6*wZrcMc; zUD~BsxNCK?OY)Lk*!!oB8uXJA?}-a`HH!BVSX9P)9@HW{J zZ1&7A=5Rp;F1F$+igwsoXe?u5T5#8IC^JD+a?Ip)PSM|_Zph^f^Gjhh;A*UvVyVyV zKC{=EbiY(k{dhndbm~DBq%%;qZ>D;hJ$vS7t`yS*bcPO`%h@CNJe%&;$|W&)i)j9M z*ya3+D$_zUrzh{mij0kUGo~~YI(OO1TIl3W+nMR6olj{ybMeNQ9{3jPac0Ld9fBRp znc-|^L|B6Nt!Fl5@*zhqC!SZs_$0ckZ&ZC#yW`gM89*{l(*W@*1RbRKC;T zYI5*SMfnbMa%pQts8dp&E%($Ep>Fx+k4=3tcW}r6Z=e=~Iwbdms3yY?Iee@KrQY}* zmAJ0>orJF+Uj0m+fJ=@6TpQ8_&EW}}!w7CMZ|$Hv_tSNggUb=R*L>czakNXkV=fKw z=JSiuG2*yx!5mjz4kj!P1**Z+u%Y3;El$8q%=aLbw zOf;f=%UuYfqj{1)OEl9iKP$Jv$7DvsgsDF>QOTa3);S$~DQPZ5`23f%f18@Wl!F%h zemny}TLRH%B`Ak>q(0E+2aHX`$C+#=(w*K>er9;uMYlY(&QEkCX*YX&vWq4hx!N=& z;uWKN(w*I@=ES^oa#mZ4<6olim|#;eP$M!|Byh7ze_KRv_9jtpiwJH(?MHi9SI^v_ zWvatzNrwBG#N3Y7ljo-Dq_?3bbaW+KyXz=mv|eW(|B>x#xb@D8b1&1LYBzhLsk0fE z6*MN3H0Rl!nw4xzb~L4CDNn?phg!@C_6w7%>;p5JQ#6;$&%IEzsAh1JqAOpX5N+?A zmr5kfQ#zFTVlP?>4ePmsqds#MFXu^AT4{kXNmY^pk-epv_UY%|a4bDz4flR=TD+un z&iaXo`a=p`$=XM0G<9~&Zk>~u-P*?YZ_-mn$`i`ND5!n-2GUf?C=?Ya&WLF!dv?ojt*WXDGfrH`;JC-31{Rt(`r-$Myunt_CWd zF(Njb=I~R=c1@Pbtcbxe!J;oW{BNNNfi8>0}5d^f;vxkUX@hs9-?o^U))=5`X2FhfB@0&5Y{Te^eNm1_J zvEh-qhC+EZ{=(#!_nzB3Y6I3>N$B29>4s$HnQM!$(DI{gJddRr_+(qk&RawE%dRnm zD(0+(Fqz3pXZvVvD5P%d2$n;5RO&yI^DiOJZw~n z=jQ8871`Xb#wS#uH|;IdoBC{-R_it~pQPTK`lKWDrapDOHw`)@rz7-P2%jrcX z0rTz|(kGhjo5F-yq+#EL9e~o_vZf?G39rD+ZNX<5#e)`{KW-&^bO&r_cW<)0nTL<_ z=oWOERY)i2&{%V9qAh6g*(I#1&jz2Pr_nAvo(M_KYMoa>J$9n0jjla|9V;|+pWPX> zyUgyB$`tJvu*~}(!r%_wypg{Xp>^OZH}^cr)6-fw0PYZ9*4wC=K+!t0FDOI90358d zUM9G%ZD-=Npbw9%wF?_s(1Zh9Y5j&58rP(P+K}1Alt0ZXbD|m1j8)I1ACgh-)^Fg; z=G^HXjF?=C<~@!lhh;&b3_myaqE)yj$jL#!EjX31B9WNa9Y?jUj=JL8# z=2Cnk#lgwZV7TVJoH^rxF}*FxU|WB%`KW7dcPc>-E>6!)^4$=Dbne;E%Eum&hgkD# zAy(4gC;u_&DFuIB!QWSK`vxG_zI~I5i`zFzyLf{#rILb B`EX0Pt2Qml0cK`S9B^Y&re~aJ2s(;AsEL@^TAqM=1X_z)}8N+hqO5 z!S7EM{6oO`?M;^FcH3s{Abzso+}&J8e^&l9knaRL=K{Vf;8%m4AA_A=1AaN+w}G95 zz|Nh3qy0Vwe?Y+>QSjd@__uc;a+KWu?ODKA((g7tuPb=$i-DQI4$5yLIQQEpLwh+EAmAwf9N<{57VnfTFYKQm2b|wtW6S+nz%l+`miJ1z`K<*U`7{8Id`=Ra z+v88@&-(2Gd43Cy#a{yaFu+fd7yK|EJdba(OE$k3gZy5Ae;@FJ0LT131UTCH2jFPu zW5ChQEA+l(PRtYWjdly*JbXI^zX)(1yW05tM#0|#oZlW~<##Rf`>j>*jfQ9Cu^i8o zeum4Di(-rsi~YsH&k+0{4*oB}-*IrR>zp>(&K#}%E6vx~whlf?@;rb)P}<7Dw-NkH4qhSnR~-B+f{%9axZnpn_%4D^ zaqv#TPltBL<#n0hTMrND#`r7aD+S+0!S{0TK9R3-@c#%t-oc+0T!!I!^lEt z%VYFs>$6m!z|P}$&)W5T~2O0)$FWGzt0dan_ubXgE;&V@MduiQ9X4)Wu`jy+Gh@;8G##Nxh=A&Pzb22l#`#^tw%qL-4PANr=4My^ z3b2FmzaDU`4|d$acCbF&5Ax%I&r^V-{Wk$03-a#)j&a^{1J13J>&iS}`x6YHBD2eBRG|8vF89e|^qdjLl}cHG4FcY!!R z3GxR6ZpT3^kL~3}kmovV>zf@Uh&=OI33hG+9OLj5;Fzx$0LOf> zE+;o%|1of0zILaw;KcHnFZ%{x#xY;^`h)pnzId*QlbbL5##Y8LUt0&#MjrFE8{qHK zXB+1|1!q2ZJ~{|+EU#IBzek^~ou3HKe6U~rCE!>t*8`6H{{T4hUjsPu=P>{$m;e75 zIImp34CR9SPk=Zh|Ji^ef1X3&)Svicy~6loeFzi(56HhS{#btoBmT%Agu_-_)Fim4BH{Sx&$=uol4<%@jmc#P{C+CLNgVtZK%IL2qW;I9260LS`vw}NAS z@p@-4@{9IA3;E@~+SdOt`NjUNRM$IKNx5)+Kt6W>j`d+R;K=7N!QK8-yKZ_#k;nRg z^>Ziii+pMT$NGu!K|3dcJlgpV;AjWqgLZBQd9?FifTNwsg1hYnZvKDfXXeKTLmu?FIW!v_Fvk z6Z!ma$?uC$PmupRfMY$}8pb~u&*3nh8Av?83U=`PwH@%me&EZ1BhT@GV?S`D;BLJ= z3*^!M4**B|w*GLxjrRLQ-nDQ06P8E&ABjBUX#a~4XSBa3#0UGU1o*|cJ)z)X;*9-C zsp8xV`9=HZ0giFF3UG|WZICaF1J-A>uhr+FN}S6g#`zxLgYh2)b`b9d`JG6{jzbm! zj`H^c{w0t{o+yvkgSbw5De%GTcie}D*Y7z0vm5w*2JGPVS3B_JKEdYeyMQB4jN1s1 ze^TVRUGUh|+Oh40+ZSJpSscgzX#YmwiE(%l@U>_kaE!y&8;}qs_KR^C0XW71&x3ma z&;0@``PbtU1ZQ*nXY(~vk#AIRdwyh|7>DnRyldaKFIWCX#s2*Y{+5Do4)H`j`zbiD zxpQ*)d|km)3cf!6Ww>%e$qyCz_5F$I zHwL?(FI9PQxpLxmjqUx{0h*7aU+f2d0rdgFb`R4&g`L_Vab?43agiMKfV!yFB z;8mn+`=v_2u|6LLIIbg41sv@(0FHKA0Y^I>fFu8TfTR7>1m^?)S^k%TJlbCYINE<2 zaO^+-PBuBYapQA`#Zg|n?l{bd2X-(HcpZoMcNF=bDEMT+xlglk!0X%t0iOu`(eDQe zzA?lH<*|IRex3~SSU;Zv9Od5x9Obv)&}7U#Z&m`1@(*s5m0wFAZ5;jrIM)9U1!wm^ z2KmozZ0s=3dvdIujRj{u2SGe{1N^g4AGCTn#bhh59*$S=;}rZ`3Xb#GSWm7|!zt;#jwu{ApV}E-c;Ml%y1|03*3pmz?M*trW`Fav?wEt(o zk9MNV;s%_9OH1gf?oqT_9x?m+F5ae#+Y!z$VY^6DS##pz!FKTo;AkhQw8w7(j&>droX2H2AM!83`M`aP?a#j}?Jf_8 z`h)zh1RVYT1#p!A1aOoe0p*MBv|7Or1RU#g6X4i>&jcLn;r9W@`txJJv0dB@IM%~^ z1n0Q%pN;3E3jPe(!FKw2IBz1)Z2(7}UjiKajr{;e{)YgL?Yb3kjOVuiM?1>^M>|_l z-Z^nGze#^K4m&VNiR&S*r`Yo{=MFHX#p^JwjVQE;}yYt|O$wKGnPM~xfK6AmP9#{r-J?Qz>Wh^C1r zw%=ibb3Ng*v+*AVIQH|lpJ91iH~%KcHm36#PY=c|83xp{eL6K z*8$Is0AH8=Kk~=^ANgbdkNhVq{B5~#d%=EeUH1Q2AG(Dn^TGUL|Bv|%)Bp3@ge`aM z|NjCw_WxME*#BcZ!}R}Xzf}D{j=OlR(B^9g`pk*j*K_n|ajXy69&Np4`4>R`bo$JR z>xx_dg(S`MdQt$s{Q;j_29d01eN7 zH;_mE*zS-&#u@ozyF>o#vfW`l!EqOsJGMK_FSa|(Zvf8p)Zt}Ki1D30Z03lfMflv6Wpzz(?A~U=R&~I?PHdqMlxNxs(^EEXm*M6HKf2tyXry~ET zB9H6-$lso?T|QrjazS~!Uhm4|c^vEK2T)#E-?rw!P~rpDx4D3$o&Nxic6NmJg?5sF z@;OD3KSRMU zR`8n?`zsasRSN!sg6|0DN6c5Xf+rRH+Y0_81z#$-8~^te`7MS}a4ETQ9wE3}E_*BZ zfeL=CV!um~pReHOEBL(%{=9;3t(+gfs^E1BK3#A(&Q~h(cM0ys`AJ3o&kFvkf^W8& zzZ}a1cgu04g72^3CoA|x3VyGGKd;~)DR^vildrw$faj^B1$Xn+Cb%2tGZgvr75s7q zzeBOVN|9f!;IAn7@GVS!-FzLa;3q5iMGAh6f-e``jq}D^`uXfExEtq6MSgz;pQ_*| zD)tvD^5-h}WeWZW1%E@qhkwBzhl3UT>k4k4XY0lppIf_x^RtTm7Zv<{ z1>a^XlP}l)NWtBDSgzm`6nue#U#j5uD){pX{*i*mWWv#n^U;F4`Dzo~jl&s={P_xg zxq{!J*k7f{uU7C^6nwZWz_|H3Siw(L@QW1u8Uu1;0$e|DfP+DERPg{c$*0!N0EHUy%h}E?=DInX2F|fFBCu?L~rfdEG;Q zwx3z4;4xV+aOGH^{eIsf8H@9?6FG7He~kVt{sY0;Zv)6* z3-UNl#(m>_@2a)46U;y0JjQVf{v!o{Ucv490`pt|evf2;66Xu&0eS`J1J<7l1$WOE zzfk0_Rq)>`_zQ~t4;A?s%!eS)Z4`Wpg10I-?lVODw=42bDfnK>yu`tRyYW0qk^hE* zcPjW|#s1Zb{Bi}qPr*M{aBaS2iZbufs^DiT_@5N~4Z+=bZZw2zx#=IU9Jf^P-4uL+ z;I93dihQGjcPsd{3jVNyf2`m;D)SPf75qE}zd~>~zqcy#zg6(xEBM=r{UMwA%WJ5D zk5KUA6nue#U#s8`EBN0Pe4H|$aD?D)JX4B%yMljP!GEsUU!lnNDfp8LzPU1Av6q4$ zr{D_|{09pDyn??cxEs&Sm3f106?_i`pCGtvf2JbesNmfSevN`Zq~LEU_*Tk%!k!8~ z8gRb%!Hz=~0KSr%pv8Zn;I}LIQwsjFf)7#V4Zb9}8~+MLew>0&QSfcydKs_3>Jd6g)yXEpA$m8|S zmT(>YGSsVG0Dm0tJpf+|_(b~5iHCzYPM#8=W*m$Affozz%H#Se%Kw)lkL#x>A7=d& z<-@F>qI{V3Q!%p!_3Ni5 z&V#Xjig8}Qern=880)7P=k@ESCeDMgeu{BkzkVwHhH~98ko8lH^ZNBu={Mv$i^utR z-8zu2$zP1)SdzX6Nzl1UqK}ejmu61vua1$%*YF{?7n4 z^Dt+F{QH2T{f$Y66Zg;OfIQBhd@H4>91%NLRocUh}_;QfP`t}IOe-GsGyNGdK8o`I=Q?J2UMslU?(PA3jKiM+$NA3}6nq#5 zo)RB$UX-6@!HIFKhd%-Q4f@UU{0rcVf&cbUUWhMH@H+(O1KyvA@1eu;Y9={O%=4Sz z_ksX5IPTy0zqH>2$Bnq(<9LX}y4>$^8u(qm-@}|w*YEc*aah0K!^C0zeh(9e_4_?c z9MW4wZ&s^GUN_*)7-Quamg^#bnqm<{_SaNYy=fgq0iKoG}$Ac*7r6o@ZY z{9X=t9n_O61$WEkZji_8tc_rv5U+Q(2OO_!a32U>-%W<=1#RAA3Gh5c>t z3(oQXIsI8XoJUS9kMkb)0FLt>zXu%WJ^m;-#|`H_?E4_tK3;FW2l8*xZ%elh+>DR>LuSAZRS-u_a+&lGv)kMkbqgPos&{8Es|c@O&>e&&hw z4d1Jd*ZVl{f#o|G^BzA3{(~{^@e8nz^Bx$7!JhY^um_2##IB@&a@$>O2;lY^BLZdQ zuTkW$Vq=o5J%)Y>xc!|W&Caht9_?HQco;j^gFM=?_mWr}d}L8A4mW}wt5Zn+*NVKB z-?8U;HY&hx+r?W_U3Og^*AC%`Y-$9@d$e+A^x{_cRI{XX%<2ef||$fN!J07v_y0WTAq z43z(*4z>()BfFsWx051dk$a5s%cCD5n&`z&;Z8UaT; zEr9<^KJ%dq@OrR6A8>ok#n3{)w+4BPC!Q}bp8ULDn=qcASdflo@|jIzJTY!)AItp< zz^4}MYz8>;Yy=#6ZUi{;+#c{Uu#Y@P0{*&u<^%FifSp>AVF>w50(?`DpAPsiz#9Qa zJ1u~JD4+Sz1$Ywd%m+LM_(H(90UYCr=UI%Wy~bw~7|+jvoiebG{Vm1~?bm?3z4m9Q z7Vs^=KJuImIP&D@>)M1ohk|^W2rz^^M*{wieC7l4Pl26Ukzok=OagpEke?3tc7Qhm zj&@oA|42Ubp$qUiU62;d7r-o8_SA&lq4Adm69Uv&9^@q8HYGWpCV9t0fY$@6$N zVLV^4ARUp@1KdE`v+gT3ZrTpkG%;C4*QxIEe< zz+VLWwhr?TuK_NP1_|WHumMVZ*eUpA{@LfaGX5pN&jNXVpNLJ@0lupR>3A#Py8-?z z;AMcn1o&{khf3wXa zkkYRK-_t5r77jUj`jq;m)j~n~lUobx00`gp5jSN!yE#LBA_;4!V%*V=~4fte`zZ&o^$&jLON@RtB@0lZuWqwKd8 z@KXUl5%9ACKMC;10B-~Q8Nk~Ck8Nqbu-^{AHwC;C@ZABoeFOizAK)j0{3O7;0Y4J( z9>BW*PXoRH@VS651AHFf*8|=Q_-erC1O7L_7XUs)2K^kLQvlx@@NWXXFW{#FUIqBK z0G|%{X@J}3*|Ohn13n+*7Xp4d;HLwA9pGmGekx!4*HILj}gKTa0_&h~c*NX2451f1m`WnoIo0cX+aa`ALK;4J?X3v=4q z94!Bziv3LiXZgPwvDof_FA|IoU4VZd@CAUgomb_zKEM}){KJ5=yq&|^jt6IynBEV9 zPv+k)fV2Ff&l$W0@QXqIWWZT|waDKE_zyw;0l-;)ro?CHwnm7*UIOyR1J1uKl8e+7 z;B04^*jWxZm+$?8-wrs-KPLFofZIAkKgXT}oaLVu`H@n;`0I~YP*MfpEWfkV^Vq1K z1?}nNEIOvU&9TLP>Q1#KN2OEq)3H&_$#gO{YF1BAEC5C&j-588K3&z6UeJ}QYl_!2 zcP4sUn^PU}rmR5Ktj^A!^w{Q9I@#J*QPtCxXzHBXkxn%yW+i)4)y*mL)43o%&()}? z>gw*C)17Qjbatg%J3D&BL}hhTXM1~R2bt-Z-8v^RyR|KqXicZOlj+Xx>N%-&TWd!u zK4V&ax;l|)nm@myqN0*KwKgTlQESJXx~BScMMYCfvOAIPPPV3dh9@i1xvaH zNVm3kwI#Zm>!y>H(Z+5o8BQhJ>v~R9lMJ$Kw+#^Mg>B zLF=GeFLnN^n_GLjI(t%snM?GMskdBBb8F!`D$sJyYGfLbN>y`_SLv!!-QAttrjB_i zY4V}%S5#6PXr}fRG|2FN96iEDT|CTjn6z7}D! zZX4K~rly3km7tEUEtRbu6(#fG3-ADp=f-GoGvfE<%TV>KWOHKn+>R#hofA#Twl=-g zJ+h@J>3p-L4UTT#6AzItgXS%$hrUHkl=n*eJa*{BO*SUMLm*9zRM~TTww{ zi_F=2290~h@vtZ8fBMnOm-_4)mfqZsw$_tUZ3`UAQ_Km{(*>3{wRLt-Hfh{LRku7* z5xU=XyOMakDzL?8MPJ2R*Bo-HODUZDx{Gy@>0*9Mo>6ybZqKmmBD4MU-O$oeH8wG= z6vgZ^h*-}{$fQ`odsW`LO5?KB+0!eznnh`1YHbgn(E`pZlxs^*&F{ZIw+0m$T@PNS zJtQJzUTyZidRxlY7|A|GuY%4_>!8Ybnq=vm`|?b6CMYhC(W)Yh~X}F{w#fS^Yv+NQ8?NZyh%1Ql(_j= zvz}Y!1!(bWLK$EZTyU zO3|`f^u0>;RS8;wOw`eCt8{C6K^=XM*Qdv{rFweI=VWk*S0@gqol;#3>ZZ;rr={cx ziHeHE__nsrrbI_)bBZ=S1sjjvQhb8!z49Vb^V9VBwhVsOy)}HR_ zc~f6@6HH}!s$*VjcV|aCRjkauy3w@u9iPXW11m;V(9&^ar5b0w*<`zrvqIr2tk;id zP*0M7o~}=ioo9Cy^`n7G11xM~aRB?k?1Y_RKBh49lKRPJ#O@yn_Wr6_ z>i;#N&0{=X-JMFeba(cy%k3h5@7~PPa_n z=FOPWP`CzH^~YY8VP@BFzlN+$ac*Vxt-R4|bWbYXzd@QEkkNKL?s4f5r#<$blFYE?%OlKM91d*555}kN7yIIEB6HtUE>zkZ6 z&2)6(vt`MAWHV6ers>Pux@nHZJ$rLq!fIcf!QeK#;{Lr6DA?4zHv8GU3fam|H^2pH zf9A~OlDvW^#prgWU>dBoqbJp!uA3ZO2Ge}lylLYSi8&o}gL?<*7Q&9s?)GF`W+sGg z{G*w-YQ7ThI-((wof5HkN%Do!XO51^Cq=26B}9?^BhWuG9I1a z2~|_ZMT7V0l9Se9=jPmQBr{tV2)OfbPzA!}0;Zz8Ar2;~A_v$h_ROqv|E{`1PL0#< zg~RFg9d7=KxgD)1&rQ`yCqNezUCGw&I+_5l&P@f z?Va;diKLlwSHfy%s0v@$(Ug8=`K)BqNtS1p1WZoS?Ok$G=l?>dq*@?1_E<# zwhrnCFRAgJL~>_0-Bs1o)ZH4~-N_ejSQ|vvPU<^c6RqByPNqT4D(XmJv78hC+AQn zGB(l1PhtrAfM98gJ`qbARyEXpwixC|t}@j*J3CVBci4jc26<5{8kNEKo}XiP;cBeh zoS*w_3x73p&N?zPT&(C-t>WaIOZJGK^0o6k!jf-c;6C@INFEBQ<@v}v*@|}IzNtw5l!{%{W_Wf*Mt=R|SKMl8 z81@$Jj(IO2nifld%=kRgzW}+Y2D22!ToGHC# zMUCglFhzQ_h^F$m*pu+UpPf>qvns8li22BywD4S>(xsq!1>`=)Z9sWlM`Vu9Tu7;- zX`aq@F27VQr=RmzORJqb^eyDZ(@+bWF6BVb(p7C18phCMSwEQ;vZ@ZbGF%66cFdgP zixAIu5xyUEJEV-yqT$N-s-8q#Cr;(;hpYZ)Fwb{CysH`YG>?9m51%=&zhWLs+qDb&47ht#Ugd9kS{&1*oJFBN0m22b|}B-=(!JccG2W{;w!(E0NdbU#Z^XGgM)ZZt^D zqh0^}1XkJ}9vjusnNE#5Y}!%#^`vQ$LcY`D=_op{kW$({W-Qf`m`#szP0>RrO&*6I<9D&%O_;nsBXiXBCwcVmiJ(8-qu&=nf2QcmW19p1 z%OdF8XTziZFC*yN=T&3;9*Cg7kYqWb{)6;AZ2Zp+v|}-OOmUF^DJLHi6wGs5o<+<2ce_o8BUn}}sNIp1zuSC$F z>d}8Kg8od=$N0S-LBGwT|4sz`g&zI)Bk0@raqUYwoH%~h(J^fM=@b8`e|-e~S3UYS zM9?25&mYJ7!|z)S%YURtzbt}&jp$?f-xz`aRMF>WvUB42bDt2Fe~U-|*AevX`^+$Y z{64<0{xA0UzbS(M<)V-Nt0VaD6Mby|H%IVqpLdV`_mAM;zQ+yy-x9(9S`YtQBj~^D z(Z4N%zJ2cm=KnVl^zD1;F#jte=-c-Jp#R$==Ne&^jjn7TcTM1PKuyER5FU~kKf4|Hvc<&^yfy)g8od8{`Vv3H+%FiiJ;%*(Z4i;{;8sm*H6nL=%3~B|H}yai#-0XilD#5zb%6PFpvM=M9|;e z<9|g2{e3OdW{(l!i|8h_M`JLrq|2(G{HvaZK&e;EcHG=-D9{(#N=)dd9|HBdV z?R%xM{y!2yf5^u9=buL-=x^uIe~e6qjlX@*HOBv~2>Sba{Qoh6evL=}xd{3bJ^Fh@ zh~IRN{=O0PkN4>B6+yqnqyJ2V{HHzoA4Je!=+Xak1bzEna;!gZN6=s5@&7^u{be5g z_af*o_vjxJq5SUh=pPqBf2BwN5AG((jESCRWNZ%L#7*Cc^ z!u<1l#a;i$D*nsG|L%d6>_0dEM=Acx#Xshs-&5}TU#$3V6#qZTx(+_M{x4Mg&lmrF zqR-`jA$@lJzasuOaN5tm#XtR=lT1{zP(5`}-tybq$Q0v0jr7?^t>eFjC#xv+1^>&kL1ZZN?8B+z36WIPF4I5-6v3w6)V49#ebLh?=xnC_4i9X{#S|ryz&$O#mcXW zPVm0?^@%?38NuYnublLK zWYEiB^bg322A^F150Ji(|JA}D>mQe;%Rj!U-+ydBJXWd1vJVjqdVJN{iG`rVF#TYugq zeP8)4Yv{Yn ze+FIPvZNdT7sjx5@%TTX=)W6Mf995c{~K3@^Z!Rhe^^NUZ_xD}=iiNgx#-_#Xk`Ao z^=BsO`{KWlC;KVADVkh=c>k6g|69es8~?Y(KikG+tY(p2se|?LkBv1l#rW??`ab?$ zOqde#=lxeM|I@_3%l|&{UyT173jbB2U+nz#io(B<7dt4GNx(Qew|e*=O$Ev#F8{l$ zS=+?Md@}#VTn2hV^xgWiO7#Dkku)DjJSRO&fG_?Fd9j5O@?SyU-T05&+Ry*anm|3U zZ9bX*F8@14-{s#Y`mdofeRlcZM*2SfOZ)Qq^Zp~3|0wFqQ5w#{><(D{x1os{|80?vXJ^m@8I|U(~$Zr75$%w)UTuqEMNViML)0oivDQR45bz3_dkCoeP8=s&Wp8_c+VXt?*AXBquYKD z-O-=_cVysSto`0C`Y!+2fq~mtG5)uczK{PfUhJiW{8!O;m;YWn`T37NC{PbzDleyT2Bw7v=v8MSosM{W991 z%1qt!&nY4Gf28Q27E*uME`I-Kgw(%C(LX1o{*Yb${?8AozgYC$`m;#%|5T*@TuA!9 z`m>fd3s71e{5S3QS^DhOpD*s_=igdu6lr*vlN>s+>qXz?zp&P*?YTjYdfxcwYSQ=d z@8iu1l!k~y?th-=?*W><{;n+Z^S^R}5iG`krRcl-`$T`SlVP|0{*Ls0{8z3tiVK1N z3q;A~zr%3D-}T=((eVFa5&v70zR&+8-fTb#`;QmtyX(JM@gF-hP>+3n19P2n4F5F}Fz$cfBSS9#nmzseSI;nBWf+&C;O1x8SN!#-tlp@M5&zbJ%YR$a z_wgV3j8QBXMdtq@eRlb$#J^jA8XAluonCX2Lnrn-h5tg)e^8ZNuS2})wGD#}xi8 z|79YC<+lMrF8?j|^4I@W#~X*KBK|iaeP8_6h<~jApZEArDgJA}VH^*$1+C@5Ubgwn|t^#SNt!PigQbm_IIt~f6}wYzuj2H z@!Qhl|KH-@ZGR1I0sYuabIAO6<9FOX{`$XM^e@b4nh$RKJDT);@tgF#;g9hf>f!$z z@$d3KsNMM6((!MsX2IR}_4A)B`f|u9IH%*-Zlv$yzgqbBi6+N?TMz#$#J|h`H{y7U zjA!$~HGMv7XE#r$^7^5@c&T!yZp!Z7{y}k_sr4$_#ZC%9U124 zgPZ@;NZ-eQ$$uNkKGA3XBR%}L7~_xsogw-EMD*SGKP39a`ky7F@8ds{H`Y?Z{%0Q# z|F;$Xe@&Z=Z)Xmf|Hf+OYwUHGK(eI=hiUrW3F|C!?7<$roe{zGc~{4W&!V)cJR()aOSCH%4eS9|y$ zDgIsl%X&@xi`D<1h(2{=IcbIH)ACGCGEp^o<{u8Fb#lhs`nN{(lbkt7Zu=Qe`o8?v z$OD-0{C$8Y|9=zzZvH2pYMd53|6RDhpMRI=&)gKq(?^&8xuoyo-}Rb_R3lt}ea*vv z*8_}ym;cJMjo+EM?gL*4-6{HR`IVhxq_p`P!!8zk#QI00^to2_?Q>x4&rWg1o>lx` zeV);9dD-@7{l6*tdG$y1pDc3y`%lvM#edbC#siK&CVJw37ERExr0c)$BE!E-%FpKC zE&p$mzR&;sw~YVk<`B&PAL{XcAgz=7{I6MTJdUCDT}-b3YSQ=lU-`Ci{GllD`Dc>H z|LcnXvg?f3+1sM`{QCd0;=fNOjwi_pfc;PQ_+R`rfBqNUWBeA&|AnOQ%m0v}W~7Jt zpX%{{@WIBvTTky_ZTxSaoBg1y7$Q?ax?l9&`m;v#hch`yZu#9q`ab@#;fDVZ(dYOb z;o)Cf>yO{i=Zw?eIRjqT{{f`$^FL${qloS2NRR)&D*o3zZ~UK7r2hO#@xNUBWBsZ3 z_&;O3KmWDw82`oM|1Hw@<^RKq{P-W`@&A$dcl+;!9~l1^m_z1&S>}`ZaLEM2KX0Ao zL-V^^Ubg?VX1-7QKK`+>hJU#Ta{Za<;XnEi(yWm;bqn%lQ_I@j5e^&Aa|wBl@nq`~CZ(@8&=D zk#STk{}+({=SkF^|D5m1f5Mah`xO3V;(w%}k@;Vi`D8wPtni-{lK=Y(|2_}@Sswml z;{NzIihrm3$Qysn6n!`T^F_Z{`>7{=U;Kwu=eM7fhySSx|E1!emZx%3S=uRp z%8>kTRQT6;`17@dZGX02zN+wFBmQ@G_`31j@laEKZv12aGK$uZHDmqT@7s~SFa9mU zAKU*)9{z`l|GfT7{13N|pRe$rB>HZCUH&}^|K*0v-67avs!~YS5f35hJX;|wn zR+jl>KFm16Uw>AF|`o8=RJ21cf^Ye2pf1Ce$#edo7NSIPt@IU*{>RV)*;(xyQpCp2u z|0N#(rz-wy#s5g_NRF=mUd4Z(C;yju{NJGXZwcxD8pVIvLHY5&+~a?PBmL#SD5U>? zEB+UH{QuPBf2QJpMM(ekr0=VLYdrp!di>v@_+KObZT+#;z%Bo46#unfGx5I~>fg^j z{|2Zt`Ca`M=5I z{{`{CjddW$RpQ?*Z~NUI-%#||h`#l2&0GHVxWUo>{14rTqmp0WtzT>J-%9@HOaAS7 zp39$~e{JG=lj27IierPXnSTb&d=1{c=hZ*Pu)}1z)q;2|<4$yW=Mjwu3GnrtUreSCR1Fi8{2HTLzXJbqK z{olTKTA!s%W2PP6jCSAt_W$+%U+>-8PlU~TJi4x_p=&F(nJ0y6+TJBI^A<5}(XQ7P z3tBIpKY_n1@JGD!@pl#eYUJ}m+!x`G#s|iy&vhCnhgg1f!`SKujg7CaC7kiqb(s5T zZY-!CHEtN7si0@MCw$sJO=D!QWcF$=yQP{97pp+i;=H%7A(&6H+;|=1r*O?=D<+y z+_W)p2UcU|d+L2=-m0%Pc~5;U8=N!-o&?VL8UFGyGLbmE5kAgxMZIcEZczFEcv}?n5R&!u+R%t@?0_@q6PexZl|IJ_#C} zw(h32nE7Qj?ZIDIO(y@qxFLi$_MI%hs+I-Eje#SebS%k@`Xa%fXWue;*4ruRcEIxB zNvq1Cu(7%hc8jxCWAJ%l?LNl%vETSg>jSM{Y5mRCC>*Pq{0zgQy@A7}HP$k$5&T|S z2o`kC1mUn zocQa`JtjX5v5cQ|2=6Y*bCzZdRsbn1#-*fsWVszq<)rzK{xmI8BJ9^cCM<4N2jeE40JylLO(6mPqaVwo! zu_D?Y?M(LcM3brhM8@>1$b!~)CMfiU+{xb6)a|-;R zk^5I7_!p!FjSAEL0y5h47sY%32n)Vy?5aSILe;YTq6*VLO<_m*ykhL)9^gMb;;=q} z*Pue?v*3u4>!o+(8^+E0I_XkkM7E>VydL5Em@Yjz{B~7)@T4)otI;+1dy)KVw2Ze* z|CFg8orz!mv0Bq^DKfr-+3XYx4x@fa3BQ8bNTv}KR@*Vg?>)tM%PA3t@s?M}S7R+l zG#32#>QKgIHEU|=6~TuF-MP0R8=<5B7<0*w1YgU(U8ZA5Qq=Qp?WlsBU9 zYv-M?B2>Snl%>Yt<79GfU$-kwjT?5->X@BG;e_g$Y3ryticXVAK)N(DwB81)Bjc$L zi5Nv_4BlTU`m44ZT(U3q)VGXPHfRw$g@7UcaAXL<61%{tk^2HT7{UavG5@P9c-$B` zk1S>Rwpy0oaXq|Qm{>0Bjt7_x3%-gNMi7_b8Na#w#e!#zfotIwGvA7^vZBd#cphOL z%f1lFe^t*-d5zqb3QcR79IG@2_d(m>r1du;<2i45w-=zt7`zD}@lN~!#ZT;Wl*0%e zGgf0Kdkgk%s`nPG3)9nks1r3)XKtW|g2k1J7Ot+9&Ju09fgYG>En_lq$%!CqE*wU~ zmFvvkr{~VW$O;tD%5(1}BWcCt+G)AK51| zEclu+I7-mZadGrS@=VX2_4cou9EOgk5s1M9)*|>p3+=9+9EOsA14fmB{1K2#x|Q!=YnxheEjO!+X1=X1!iOWdBSq6cuAhzg&*t7NLV0E{ z?t$r6el9oeU1u*|u#PXT4Zf6lZ{n$$`m~X3LH;w-4mHD+P_T%04sk;)_fC=d&+0Em z{QGln70GA2j=_zX2M)CI1G!;{T;yHL7a74rnfD4m#yi9_V&8*QJjC=@u&1%yag=Hy z!U@|i(sKAn74wg?!2?gQ0!4`h4_c2i9!5d56>&a5NWFTqN@?m^jJ26=@BE>y76;yLBg(9|Gj4&JvWlj{bcrEQ7M2Gzj^oZ_Xcvhrahzgx-;;&OQ{bM);IVOvUj)=DWAqpwNk5OB0 z_aBSs2PYb-uATnQ??pf#n=`-7;E2`E@)@;p9e+x9D)ku!n2}8 zS5oy1JcYpX1IF_^yi=WgN6i!onD|EL9&%r8M8C(Y{Kd=s{9oAF>R-3;F` zzLLLW+9s8Nxe^||w~pLt`hTLIj`-h~<#aWb(GQoSBLD7_k4(ljPuls3Tb43-OLa3puMB^Jm0b4eBlGA4B7a# z5$4{IZ8n`JYd{Ta4v|37hxL&Nzt3A(K~^7t)ggq1q{3=Qy%tjWVFas|g0*0(@Mn+- zH3#@gdxsZlYR(HM9s;}V;gejqLrc%|PyjI1b*5POOW4dOA$Tc7gaU}Sd|~5-+7rl@ zneEqlNNxjeaJD1!_{1mV*?Hnw!J;bjVtLuW7cXZM`iJURsN}pl{Y*gr?DutSBtO!t zo?fW$n}_Ms^WXJ+bD_o;V*bLysy7yDuhJCRT^d_s{mFQ=-^wIYT`PR?bPCgK+)AcX zzRpa#*O$un^!SqfzEs-sJre6lc3?YDzdYPOb+YKV&e>boJ3Xz}{=lDJq`;&JJ3FJ0Eyw9GGI!G}#uqaU;+ zXZ7068oK2WVQ7qEsNcc*V;eMmTdjWG{A%wWESPu}OPU6GC#*@%)jPtF?qb|3@9LfY z*m_e)t$v2yT&HB4c&L}OTcC^V(eA0K{ko^ErtayAwi;i)vaP1!YgMf^O;65it!d6x zhiV@5ym&=TbEu}NwWa|SplqwDZL9INUa74IyF9*Y$8f0rU&-66SNx|AiO^9dkzEOS zWaEDP(Kz$VY=lKm&I>sj=%< zgIFuI)6=t2R5;Quc~zl#FTn_?5MM?veN`d8l+1?Hmy=6Jg~*cG@K0U>)&cRj=*b5( zV&ZCutNYR^9w-tQkB9O2N!NN+ZvNFAIQ`lt`trPOhC>Ob+@Yazmva9`m)|HqX`IG= ziHE)%IYW8&DnyNHpnQCB4t&cTc=sIm_Bn8S4*aD#@Ym+Ri&)oe_MZU#jjnv4x}uRq zfl_xa<_#oZ6%5=TI=S=?%<*KQ;%h^`-lh)UIPa(R3e8`WxeY zeOmO(YnN|Lr~9qI^1e*ED--KguWxI*lqK4c=#OWTg8#NyM@M-5ns~A?p6=<;8qHM! zx-@+Rk*k)5ANeTk0f&9fWv(c&yf?NjYNajsD4xbf^AW|}k&5*uqMhkXRC%&(d3@Wp zKp^}OR=Lp%G)JQy>1Z~UOeHPnlT0eIe(gr35R<(E{}#cMK|6N-P9D_ux3*rs)fGPm`QXtMx$NZwnh6AnSKg=(%K$UmX1cgPY%_OYuO!`qRx;gb|5+-a&^k;h$ltCM<+nujnk;~9U zUL}Wy1IsS{R2E(vgg;YR5gi06mCp1cSCUpD6T_Fa$a-)g28hRoHJHMX)T6z)cJ!Nz|`y zu82}5(bp4;C&InGFo~9rw1wZK#py1bBTEKrFUfv~wxun>A5P6;+%NYZ!moGXkI#YA zhe;YlPrI;^bI^s;E~fAkE_{g#*U|rJkenOwr|3WD!mo4TYh3uRx$vzLryKoyjFQvk zqW_Ew?|0GT<6Mb;7v?m|*Yzz27Pxy|6E2+2xJs`&%#$3qo%3COxY|YUbK%#x@Kr9H z&NfQ^CKrCK3;$cpX^>tzA1iu%C=r8j+TRrZ4=y?GxR1|)hp}(cDECj73wQg+m^VZJ zX-t*gCKvA3JL1CKc0Ni$!XUkFIrq!+0^x4IrChk%|AP{z@YAVJ+4H+D`WsyMpSy5( zyuRnc-S+>`g}dW5>cZW5@*ghT9Y6Zv{f1QIr*c9z%G3~usuyMd zPD$sNc}uuDJJYK^7cNstaBO$sL{G61qp^Q`uNB*>HKIQ|_ii=IBzj_vR$`l_HFm_T znAW(pzhA@dFVV*T^Rq@{R~$WkTRhQcMPXY{;{QQqCQWOFqL0U3Phkl(;soq=`^UpH zZMN`yTuhT;6y9rgdoP>nNj{wD*?y_@l1hXh-frwk$74N>zwEq=Unsr3i4^JspQjRy z_#SktIHk&Goah?y;|GUi3+hAw6W!5H{1!?;dnTRjQ$=|B_ibo8?tY{swa5wWEi|Yn z(p>c-b)So0^*uK~olg{>y3fV`AZTgO{}rJ@`pHhkr|v#r)SBEq506?OT`(SXH*GvC zd&Emzlua!PkoO{ON*Jntl77;udZm1=-3*NMyL&etwRg(&5=KL|QRe~I&*P6|UM~Ob z;1%mH(|1ZftM4Ts6Qg|n0id+5mNNc2xd{#lF3105XZia71Q_Y}l<_keAhi!mF{Sva z=UOlm|563Wdxzwwvx<8VEe&=5zT}@*rhlj8SKmn-u1n+pUGUGg{#WGs_e(|eNV!

RlpXY;r zw)h>Bij|#YKb^M~zryd9`kRyjdG|^ERG;pl>{s`DB)^-6=H{iJPz8zNQ}p+NpUzoj z%h%RRexD+gcV)kVQ&N99f1l*1@2Boj&YuMTZ1ERAZo%l2{Nz9Knc`Requ1rS0hKnD t2O*yZ_1W3#hmQ4&^Cbt&%gvzgGy^{h#>)LNYXF??8Taz z8Ra-eX=_{CTAQ!hO0BKjUPNlG4Tzxatrxw1*7~UUEXVi&pQuQ_|9?Mb_MFTh(8tej z|Cl*@|IgZMt-bczYd_AJa79gIc5Y6NrBjaeIV)AtsAc(kQu#`etpw%Sf_4nbN8&RU zpHJb#`bXjOS(P7;>jafQ2G?Wp399l$TqogkoGKrW>k0UrsLI8-mZ8 z4*ARbBTgt}_k1vF<>&0g=OfN@;hudtU2_rz&ah4Sf@-dRd;TzTv=gYX$UaF{?>fis z*;;hb#Z_OvKX7a{*}Yu;=q^b&Dr7r(wzJ)K<`&h)UyP24IM3V8>#4hm8Fp`eFNp_k z7HG@bstd!;U#cz$I}cZ#U+X+jH9zd^JD<8ooIly$e05i@Wf`i+LQeoF@3(tnp|$9S z2pY4>cJf06`T($X#kM2whI{q~0#`p7uq@F-BXlF`&D@q> zYzZb%t~Sx`C!-|<)(hZFmV;#6hjPSe4Xq0Id<5>-7Lxl%If2+U;9eVlEf608U$MbF zNapKE-g|GT8&@GDk~l5Wdq-$3%68%+KWTW+cD{_3^n3`GKNyW-&xc^y4wiQOsX+W( zu#7mnZ0DxX8W3;GA19P8gE8!c#Hio`DqIOLlGvcQqVK4+piGHa0j;HoeIt~J7vbg9 z8ss;Hrh$hL0_JQ1`7Wd|2q_}-K7!y|C%~lYH^bJF@7tPhOz|xu-vtI=nw@;R72k2> z%T6WVj�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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/value_semantic.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/value_semantic.o new file mode 100644 index 0000000000000000000000000000000000000000..913154d14c36299c1d4b957484b165e55008729c GIT binary patch literal 182416 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 z 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 Av;Y7A literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/variables_map.o b/external/bin.v2/libs/program_options/build/gcc-13/release/link-static/threading-multi/variables_map.o new file mode 100644 index 0000000000000000000000000000000000000000..ef8b7900a199a24b8935275755c15b452d96376d GIT binary patch literal 72968 zcmeHw3w#vS+5RM(KopvdiW(JVu}clDV!}leFEt?vnU#&^GoUD95<(!+kfg~5f^rEa zp=_5Zt=i(JwRovgOIx(oI~qg*ZL8EzTdS?o)=!DiidHLHZT`=DF0=2>&Lmkb+J67e zFSB#znfG?ybIyCtoH;XDQ5>9>oRnnfEy?)05k1qWVeEJ-n$8!=eB)_jhoC(Z=frcC zI-aeLUsuO-)G;5&0_;<<7h)%#Y1m7!o7e-`2|E}2bnHRwW!V1<`vur%VxNtjXiBl4 zhy8r)<=AInzYzOH*k@tC82csIiS| z*z2%gj{OSkL|2b}A@&A!-iTup_HSTs#@>QGgq>(xu`g2T#W=QMU!u;h#PKTZOV#-@ z9G7EXq0T#S>{RJ499OCIH*s98(qVP{7LE~>UZalPI9{XD*Q(=M9KWs7-%-cwaJ*in zZ&1hY;`lw4UZ;*X;`rYxeUm!gjN|uJ`WAKk0gmfc`c`$k4aeJ6`VMvcA&z&d^j+$> z0mmPy^xZiASfw}O_!E`>DULr==}kD^qtf@{_;Z!M5654q^!+$KpwbWF_^?Vpg5#qq zy&1>HRQhood$8;6Z{8C=DY&TM!h)FvGiI9M56jK)Kg^D|Grjkx5=m!|xAPE`buiN6 z3r1=Tvs=Ky$g(uE`-)66T<=dS?fSd7^Fa_7kfQd!FL}r08>Nv&nYa)N1|pYb1@c}q z!!HNC(|%`mJs-*lM3(!4;Wu`Zg07y{V}j%V5zOmbcBJ`We}Df9?EPlm*5#YSFLm{_ zJrE3k2w54B)q0=OZstL2C}2kB*d?2hR!DwROFphNyf-lZrNGL)BzVQwkRS_}4lfG# zboDGbPRr|fGIREvf=dhL6kJwNvDG`K2<;V^*isywrRQ)d5SaBWL+VqO_~O^~peFnJ>^iGrKgh40OK>Rjd5Jt4TstrQy%|y3Mdg zUiWrA3t495Dkvz-hRtBy?(N)SDG0wN6_L4A-_3Ae?^xL79YfKD3QEiBZ@tYs2H9Ea zhY>}7Sh3Vk(n6D!8M4~I($K`x@Ta{WQn7}Ar)~3gB|&U&u8>WBu*h3~1Gy&hhWY{@ z)JPLg2cb00vH<>_2s9Y}-`-zuG$m zyuq*qw)O=hA-`x;oOyH{^U-GbQh!G8>z~E4_Y!-WUAGH+TJJUS?5LxG$O@QV0@Evm z>6%@+0HzD=nZ3D!-GWW=D#}x#KexA~8KIL=y+G3+`Z5Kj zM^F%SJ#-{pZ1s|DTjx*E^~ntH7KlC<_P~&>Yv+r&LFc4d7Fl;;=Jvu&k%@32S~FE) zmA68lmACDMxst?#N^XK`7WPV{+qM^);>z|y8YdX$_QF~^ZZB+;rycEd#Ab#&R?7o* zg68&)b%bJ@y>))nc+}H>2m4qIT>16}WWtO*Aal3WpEb{nq>RfVFx=^7Di>^<^VjKQ`J7_Xfv*9L(#D?aH<+e>l7YUDx(|h#=WQdA=!R~qfN;AAoN6ld56q&81{`^39F`9RgzcQHjQ7BbeHQ67Gi2l=r z+Y#2#ku4Wip;>hL+eLPY{7p3e$Td4Y^LlCgh%#O3Z$g&CuSPRRqCt1PznuueZw15u zG{f7)^dS-pyHKoYk}~m zk5@t!#(*!Xp$B>e*4WT?a(aY#6IqHBqmo^b9qexLnUUJGVE79726dwz4x{4u<_p57 zpCx&_Xe3_Xy?^-X!t7vpw;8@7ON^4J(+P&(-OM6|$|-T|01thCW??LIO7R zE^}pdlkZ&i|s3{2VqJl~5F^oc!DfIQG z3GuRjGV`ACc77c|Fmgp!Fw&e=n)e~xfU&X2>+xc!gHbHC{WK*9sji;z_SO?h$A6g9 zA6SX{*T2Gh?OxPXoFEVFOGgxi-`(==nBLcc33v6rjFjL<8|CG@+nB z(<*lq05Ampv8CZXf$=*66!?EbeVcWw6v*pYj?%~dj5qv%==GNR%ZhV)a-QaakOqk1 zr-G45!AKzj)_Fd&dm8$}r@fsXD5rs8W+41zFuXO0ChQA@e@#Bl?K^aBX=EWeE>wm= zJB(fifBb`bEAO=bQT^ZFg|)Ep_|ovlf$_f&p#O_;4Enz!(E*h$LZu#d<;IHIKswLxn0tat1| z?`WPa+sCiJgq%@mZ1=A5QKjg<&o4$tsAZXO*Xj`f3)+|ZO(Qgo?hEn*sC)TfKy>I2 z4MUvnFH55fvnXN}Y(oV@Bs;7K6&=@)pd#qsb|<3u8&kKXoK8K~XI3eqPs^`G*m+GN z)c@fI5~DY7ryr8UaFL20b0X!aoU%orBc)3FwAs~D;JpDo%5S~b_Y|Z(P)E=jL zCd5&@i?n2!-TAnKTI$aZAXcF>y$XV4eTB&w-xQ*(Xh7nlW-Z4r0m_o-ePkBt9DVHj z7~%-YRIjMQi+kSQBOze^TFk>lhpgVNQn<5s0)AkHbZhtZf=Apd-7Jzc4ul)qGIl@r zks$2d{;AbpQqNw1(3{=+3v@V;Pch|uDx~l;y(i&ll`q1QavzN?QTlminzwTfg)9^i zO(^QfpYuG;UbRz+nRG3K%9HX&C%bToPRiu{mbvB6DdZN@jHDbUs{lHbG;q+iO)`UF zJMmyButsQ7?rB1St?};xAzj#oqZq`92*Z5;&5vNDtT;3cBPvc2g-z4~QA#8ZwI*92 z+0DP;sy<75gSMK{uMMTe~7=pLM51T zLnU42E6w}Vd-Z%=M-;|fg|}-C(xv0y#2i~}*xgS3(O&A00^xT|gk2K-P!Mxxx!%rh zViFO(7&-WJY2KUOtLvyJXpAnW7G$rpt91O{K;BEsPKfDoyw?OFK=wMT3y`Fek+D_8 zW6_`x3T1(-z$XKU&k7)iLEnI(Z#`T_&fF!ARM#z!k^}QaxS$|GwJDO1ctXlWz(^6n z;x!tnLqHD%?7r=7I+5cQHcCAH5GYysB#n63FdNSA1QU7r&$>aQ%jo(EDtYfU_|eyk zF(8W!gU>Ln@Gyl_ilrBh?DzyxCJPxX?!@FB%>{`fr<#gUQd^U7Oz#-rx_xK|f+CCV z+1g0Es<%#l%(ncv3#Jd~$6q7fP{{+&82 z1>x<~(mEf8kyh6tJH@U$f%SIcXDx2-)iC-4IgEaRf-WKfhR}$i!dTQ~U+MS{0xO}N z2F~rD(7^dqXv4^0#Bi#}ySD5eQxJZtw+5HU1ldc{kP>Y+lx^vkU0dszKqSSF+ZGf$ zyEIaCpm)LBVo>4j?B6TP9isqKc6bOay@!1)oFMC$8Gf$!8DvCOBHT}-gBA0~-mb5q z`@{gG_aUmq7(ukzeG@-ec*CPh8l6a`sCym=r{T&7QRd=~wUX*0eq{Keu?^znI=CY# zh{i%LqaH2SJHFGu9w$_=qHTiMx&bGu?Sw=5r7(9w_ijoZWp%-4NnMy5uG#~}#rzaXu*1DC~PsNL!@l=s^8Xwd3Wly^-7 zPSBC|&c#vOf77xN_{azI;e$`%gCB|uaX#3f_*QYg zhpEm*d&#ab&b*f?UIUkNdV1RtyRE*6`uX0e?^AFcP7@M7n$t)1@k!alBEEFV1 z$K>TJO74H*np0liLA|29=80leJv%S&XQ}ieae1X_F5>%{xa`0;4mpV9YrP0OF%7== zP(e35817e2UJNJWrlsp~QFKS+0?SaVpOoH#Oa0IHUW@U0|IXeFbUQfQN8rxh6JQVy zD<#RR=zMT?EOL*-?eB?0sRUocS;1!b$LO5{ujBg3Kq#!p$1dUcDMdcLs3w@q@XolI zM+dSY&~SB61;Q`Hv8d-6X2*8l!@_JbHFhJ-IXzn~a46?dYL#(J1XQL;5h5q*8BT|I zE+wprk*}Wd$VcgdM)(l-kFy0aru)$zNa

Z{!tB;P>jM!HT<)Oii+{Sf+e`^AtP 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 T{rkwcv!~_{qqsAfldJy*v1K{& literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/cmdline.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/cmdline.o new file mode 100644 index 0000000000000000000000000000000000000000..73ecbcc4f7517cc02ae8337f06516ee8f2a7ffb0 GIT binary patch literal 213928 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/config_file.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/config_file.o new file mode 100644 index 0000000000000000000000000000000000000000..61ff0b06b2e58159f0db33e456b91cb46e323332 GIT binary patch literal 103176 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/convert.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/convert.o new file mode 100644 index 0000000000000000000000000000000000000000..77b68f0c1ae60cf8b3218abcf32e95f616acf20b GIT binary patch literal 35680 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 aZtxth3gw`imk_u=|(QhkS zqjakTw9bAa7+R-NIU8CFBwD{EFVI9SPDrt$^#~Oy0j-Ij1VigmDrZA$2(XA+NgG-h z(QhkS=P_E&ePTP6L!SL%{vouSJB8{Qd{&#lKFGgj@3SL8-HebpOv8`=^?nb*`Ma~Kj1d!|BQvQ_X}`wIY>%9xCIechszub$ProUppdv)F>3HHy0m`^xSpMN2JH+g|f%7+OV z+1>R5HmT2k6MHq}YA?(!uK~7?bsalIo(9Uco-4~fJaHm+LaM(^xB&_UUB*yoK~?so zyt-|i<#T}smyvvZ>@qI=3VGjzp9Q0pAl!8ei3#x3FeihNA4V~a1doZB(R|U2LcD0| zx%%199iyeB{O4@Hs(~q1mHMx%*JohZ7j|`X$JrCVGTs-&D4+jTqyPHEc&aZxo*qjL zZ+!22MCY)%ZO`X#?c6Jv>?WI8!E-jL|Oa$-E)kRE9m z9~c=+b1V`sHzdZA{90mgaAZqTzG!_f(U%K8C$vWXuXxqE};o&jgp=F~j3mij=psj9z%>_AB)PnRb>%S;7hE;!EyNmvyxdSdSKTuya>zC%)kNWGE zqU{kni`(Faf6@0#q(|8Gndu9|_d516Z2GwZ`nH?ti)C$k_IJHs=>)Z8vnjl;26UNj z_W#*C6Zj~KwEy>HGJpa}IOGu2fKfpKGa(7V^$5p60s$gHMFl29GLUF4lL-c|ML8q{ z5U*YD#baIXWnYi=7DU8z7q4B{6K^oOx~})d|9Psbrhn<4noN=z-1q%&e?H0deCO$> zo_gx+s_JT5=rKra>R8ZxHqBGe1D}?SE2%x5lqTB`x=Z9Y?NROA;u}GqBU*f!&66mT znDV^!Q**z9b;SjgIV$M)Jjxw;1@!J{9@wNeV{Mb6yiI|qRFI$Y=6d;OdAp}l?}D;O zN-xqn!@bUB-0l+kDGv0IUh_{PHU-N+=@B7D$`p!`nL!g2A?i!?ICVZpNrf10QX@u8 zt=r=Gjg#?9p;*my)3VQd{=bQzbXMovOXXa%4%kqzSNbc~^Ewn>Uh7rS>o2n`#MnQI z7@xfzUZUd@NBt4|s|obi-VX0SB0qHApIz=RIOE@Le*w!|m&13aH-+EEA9Ht~Y1ZG| z0co#3>vH?<^hcZay}j_e>EYKPb<)BeaPvJVq5WujppkyJW;ytN!rTulBO~=fUTJOah4mDj z(R3cYQ8IPq^>j{?1cPYqCtYP`>J8F1z%Px_|lfJ)gRNG+#4`K8l+s z6-)c5-`A%5M=ODN0H&85fSELxI)XGgFllb%0_r^tGUvL(`#teuqz}~|NZdo^Nv~vj zed(n1HgBKG$S7!`cT000(cFK=N7EYAC;fJJHX-VdweBljxUKb2Wm)vTnHo24{gC?; zb9bLaV_MW??LVAqmc^c(Nyfu2_s2=b^+|lb!7b_=@*5vkdREZ4y_uf;zFspuchZ?k z&j;u{oSw3GPknSs(tJur)yJnaboTM{AdyAla_W-%i(7nin z-pyNajKVRP(pYnPP3@UA>B0K?+Il0{6sixThsQXK#+v$IS?%H)8iOcLud1vG8uh_5 z8Y}DRTUdxkEUGIT8fd`BpdlP{D5lM?!RoruQlst2P@t|ZSW|AKSJtE-W*laW9!+7H zmhcj^+M0BujE87wFi2dTzOc5oA#~JHiyCXn_-A9ZORdA#Wb;0mo}-N`|uvM{aewX)A+klH9wJjk}WE?q+T=lRU2`8CzWLcaw}OllXj@`v7NfOFh5oZfr^N&?|Od zcDwKBZak3e-qyo-Hrf46cjFR|`&fJ*UVOf)H%qQd;a^`*Vfo*tdLBx1zm)3PoaVkF&9g1d_#ll` zsvNiH>S3+{ClmOM>+Ph?$*wgX&lMhHGiE8WW4>!nvFGD7V{6hap5Lb!-}La@*2j2f zAJ4tLUFY}o{Fr9^yQk;9-mW#hm^{;q&mZQ&gB>ZmTqOTR8q0r^#*%;R<9VQuaZex5 z-}=a+Mf$14t#{Qn8O9fsKm&~5C(*U{Cb^$-8xL_Q-Rk!IF`3IMY2;${na8tifN@_p z&&mN*wjN5laX;gs-uz`%${pS4%TxV5TlX{m(SIVHU$>v<)%}b|_oK_!4e&fTz_@t; zo!<^X33!$3QxLZ{VQ!2N{1K1$k`^or}r zRAa+F?1=B^e~N2uPftr9V`VST6{+lhBCm<_2YN3d$xGSKe@XMu>CQCIOMTe!zwK+> z-N!@P{?f#@o8aEH*Yi}Rud2pa{??Bcmqf7C<%;jov{Uho3uD=a5e)jw|>4JgA^}Rip4>6ik zJU0(;U6bnBI>fj<&GYgA*KKJ`J{ITC^!3mMul4hh{A>MZ(D@7O-H!))2;4A;e_S(o z2%Wz_*weDV@$+CNtM>P7-QW0n|AXlKsv#W6Jwup3FoXknbcpBKA<8d%Tz!AzT0>^O zo8;M%Y+UVrNtnFn>Rm3^TQ2g|jtt}9NuI44#;5LMZy9aeM@4p&aZ$I*hYvRX*2DAM zXihUazrUB~(^2fg9m8FZrFi~1+IS?@v-)7yi>XX5N#pZt`>G%a35uZAY-^Ge@xIFGjJ2kB{cCz8=jM z%EX~+jM8VcYghpV^o=X&A8yz6?xfev`q9=lyP9co;j>Y*>2Qa#%i7!Rj;KAdk{*~fGLA+9_6dj2%exV)d| z^Fv&>^<(m}IDfbQnRL~QgFRo4G(I1k^vyhD zdB*zDXOYaMW853^ji<-3{6EIH@0nn%_wxCrS)RuVj4!f0-(v23G{zW0jv8% z0jqevU;&x(-gM73CmL@QdH!dH>z_p)BCpTzd_BwfcBbe46ODh(^1NH@x~rIfZ8_d^ z=^SIn942c|IGH4GI+3s4d?HKkIEftj&y%w5oNKH+IqQj&jcZQHdi@mR?o+eAIMsM% z9((MydF-p_=6lEwD;9XjCo-kXww(XV@$I6P#RUZ|etK+?o=Y{?uR5P9q?IG$*;IN| zv+Z-KLFymRr$@iupe2Nn-XE^6qh-ao+Jv{-S-y>)@cS$z#<#_UupH+VYjZm}g7#z>|8we!J4w8#rG~6Hu(0`?qL#zxo{{&UYJQv-Hxj0K+%4aGibn1< zAG@Qik{%*g3&Ux5@{zP5RrrCt3!6!qSdK`0P0d(0Dmiuim(;IQdMR`f|j@;}LQ? zgl~jtWt3R7XKor()cmvQTJfL{ts!f@#k>z5Xf8-=z0#aVqv@$~8BlA;!G=;HlGVQ4~zLj%BTIe+4*H1$y(8?29bWujpK9{o3uZo(#EpqJ) z_2*cpVyrn`<%`7A&pg+>DZQI=iMlCW#o5n%k$5_#;Z_lOdf2-0%0kMNg)Ik)HGJ)s zi!q!SWQcqf$I6NfVNC_Fj5on{tB6T`E7&_yCPBS_VuwQH}Wg@K`?Kg7ZJw zNFPO1eWVqwtI8;b`q$iKO1-FyE5>gMo6QwqaxjI~4fEQm@MeB=l1bWVJvBW=%qR4j zPuY;xfYH#Ja2yp>uDaB#Dya=6ajq@R+0GE{he(CESO#DYNnk5}$V9Z3O)S1EC&IWMDv z_64={m0Nz|7`{G@RU zJ;*%%tl^MqN&o-1zWHx`!xfaOul9C*V{U}4%A{s?O7;mN z%tg@@RgCjdykCUbRoqNxs;hXVh{hdc!Aq zAoXOZ@u$1H0@tfNfBCg@{!-mfrKMgtMce@XKo76o%xCm;_R44Ygi@9?&ml$Y?#Woj z#&Hkf8`ho257jH*Q(tN>{VFZ{ES_v7vn z55RG_{E(TgOEe7`$mu^MIW)fycQRncojAi^qbnI4${XU4-F=vgkd$)s63B5|6 z9qiuK@e{rG({*Gcs}ViCQqjXR?P$}+XZ;Hjr*7yNOo>pGZo0SJ&01-0p7lBi9iF_+K$;PH*MsO43_b zGN696y%%a`#c&K{O<}bXvJ*+WQfzBIAbj~ZW+!$<#xgQaM5py-eMi*XRIT-YSjR5D zsoa;(J~Ay5{ah+lrmh0j)ipDs>8T}LhNu&JM=Rg`i$mQl$v$2J+mjn8JhMIFT&LQT zTj@OU^WkPAljm$?=0hW6j&F3deL0SNYHMFcv70GjVs2mT^WN$vmwaQkFBNpw`Szt$ zO!>#$zLd6UUugVN<&mEr6Ly^c$+w(n(OVd*;lnLVk-5U2Zg8lYo=?S;Ml-1pJ6f2? z`)ixyb=1CyCrw5DOshO({mc(5i%KC%`@+jBs0Aq{qea`okq{?!d_uqQt5NolLB*;i zf}44&wp24?zTz#0W@ZRCGxQqjV_3f^dAQ!lj1RRp?{X_6;&XtC&lo-t^_6OGS`J_( zT&l02Pi}VTXEK!bXOi_Pt>qwhs{M&&>6hIZu}FwU7gm_Hc-sMnQfQ4Ts5PRMB6Z}( zCNa`*F6lH|AAa>Omsr`_@b*K?=qrsq(!I3VlF&IdTn}gLB+ieD(kMnugAE+j3M*V{ zmo~Fzdw|joYmkEKu!3fD*Qu_xOnKZgQSmVSBa%wp?#uBf`#1!TBgNb@1v=R>eMi@Y zTc)A5mgx;vO0|nGC+;fM(14dEVvl zYn}{TQIO1yM}OLKYDem-Kl1K7)C7;%%zdWtPGlT=>MKlU-Mnik)zdVm+YFjHb-kLp;v>uYWMsTYp)kbu~9rIyd+ zrYrS)E;pquT>eBlPmA$;Ggh9(_EUzZ=*}ZPamdRvSoDgxg0zBW zazR$Xx@k1^{+HC1eJE**TBgxVys zbGWO(niw6nizYzxX(z;;^uDL6Zq#v+IiskBW<@_pU2z*lg{J=|(|rYLDd4$aG2))S zK|kKklKE}+oMu8hkJ1Z3d9V;2pW*2?RZ$$p5 zULBPYxrZ%9k25X3R(23=sOl5>hCW3Wqfe2=idxRgENWRaqGbwAeEd)}^1TVoJPh=z zSa-n1mli78cUv9HCWVK{}qLwDoR62q!$fVsLXN>=m%IXL*fXi$q-M*T;GV$Ct zWi`4VFz3Zz57luU$gfQzN4RISsCUtXj^GifL$NH2s-u(=UsN5tH`B%^s(i`vU66X= zKBAw^n=1WUjO&=2D*cwvBbINOQtYZsa*HSy^eKuDeTrg3k)v($O7l%0p?|Joy>0io z+9rZBCw@7iR5)o!LaAu$AKIce{JI{wB`x`fik{`4)D=}?@7YK`N?pPG(uzHm_7_5M z4DO~AP-i=zccGPIMa|n)Wlvu6kq&r4 z4;Oe|D=<*@mZ>rpMJI2!he*-7iqhRHd7}(!YeatEy^;rb!rxBf%ecI^E-~wo-G3k- z?EaDdncvy4^`>JUkZ-9=Dxf!MU3e_-=(F<0#-SoF3eS<&G(Oo~M8BEWtV_N?yx@(J zkxKRU-2=kE(5pF@lPp0~lHM0U`Gf8<+kamG6`|d0@mkufxxH)EI|D>uwAhEY3sDPw zc)b+uuay_xE#=j)Rm*9!F(Y&|7c+BaTU@V{`CXmVC(*6Zg$GLFO`U2Ma zZypttYY%wo)5u+gR7-BzL*-#l>WW#E<)*Lee_SEuzg7Gey29<-&EjCjo0b63>aJ=k z4o{jF7r8zUjU|Vxw~$iy$`J3ArCxVmy1t;Lgz^<{Bga)ZEqQ4v8AP9h#IlDzBv91+ z@79r`9cNdG*Ew-T&5w%tNRr<)yN$B%R_?Zi#?v?sW#8@8ePGq(SL#8&bqj44 zV@7i${KdRP1EJ_l2OJ*>YQNIoy zDHbQm_pHeGtw?$sF>Q_GHy?*;$Po`{`J!J;zv`~{ zW>?mTeRuo~OKU=bruH>O4oa_IKEEXmj<^1?V`*n|KksbLo8|D%<+NS7a*jVn=S1;O z);Q&#vf642rrghuyLH@II{#$lM%K^U5=HZs)HgoZR2CEu#zhl`_~nK#@RtWefyydx zW*I#Q81&O)c+mn>_K#Z_DEF(U?fhl*EM7YS%j}}AcZNS+B$B_fW>GEuJ1tlis;w`a zS>ktO^{B4$MKOc!#KH%jGfWaaP^)}6?UVkgtgfpfvoihOcp0oU8EwRKVXwIR3`Zw? z5(odrQk1kd3){lhkYC|k{3iWu!{M)b`#bOd*dnBl62<|~MSN`OptnEf?BdO~Rh2r+ z&=x!wc8R;Tuv^0?diy%>-v|clOcr*at#~f%o*Onb;)&k=nEe~QDvx40+KT7GZkZ4C z_I2LB?HQ~y8EwRKVQ*}W9W(4bC>v3h(<=p@9%`VCEQ)?6&=l7R2HF>>Co4LVaVOdGY>*Z|>{q)>^WvGGF zlXeP21X4hOa4?zvoT|!(P?l)ca;O*B7%VIrWX)j;=$LF`HlO`RNKH`Lh zjWwah^qeu-V=_nQHi~cF^SrrZGPB2cGe?>~q-SM%b2D=@$5W*G%ZRzonr*n6(p*D& zb??FN<>qFV-i|DezVefq>Ncu&ju{Q}i$k$=`lh;R;&Vbu+VZ5SDd|at`=+E#Na-=5 zr_g_nd705qeh#9~4e~slKMVM}l9V2F%HiC>j1H9FEQn#G^QTSz4fz|&e=b=%e}cS< ztLv=dBH@Yd{Hj}Hi1G*jp238Usq~l3C*u0E!uA!B-}s<8cyaJG$`870mf5ahA6zEc zuULx+qeg_mzwukI`LO@S{&`ORhVk7gSvp^2i|?1r=+N0VR3@m3PbSG`O7<7NaAHc@ z+N237gI2jGr=%}Wo|=-G6x=r@od~7)#FQR|W;&P4YtG?o=wQF_);N3|!v946n740A zk10JVcNiScE9CE!_;+FV65#{B_6`}R#dL0^L((ZMzgcYn2`BzY2NHCJvYW>^@AoU|;1uDkWxoZjyTTVR<@6(cdPi zhxfk{ddP>XI4zdDi>RRe+SFo|wOtW(@MG+J#HwSI2*@y$9qfZVsdpBgLt0Sco3@wA zYm^W8nkspXF5g{dyN1)0cA^jm>ba+#uxT%xHrKG8&uxtD`LP{6yblK-7)B;vtmn&i;xJT3SjC(5WZD?(Ia=!0`J&u* z4eM#LG1jv}>Zzr3VVWrSNefk8x+B6h_seT^WpJnM8V>tQ$uJ+Q#MOm8qB~tkhrCqO zVcGJF?wWbFYdGvW$uR75q#j)yZi=Ai{s?-WXvdyUBIq%=aiv4qb2Odzl5)SJdRC+Z z)${9;CZ-Hp>zJ-behD^S#PMG5 zo|uxpE_q_gh_#-{DVeLfO-RXG-n}SgnaiC)=H^XE$t0hU49S|Fpq5Y8f6}qCsEPI| zB$>>*qP<%!*H0jK3qsVi1L7D@SN zer)Q^hPCzM3VB_ue&o9PetFGG@S~%yo5(-FaZEqh7bl{j3z~TxZgC z{iUw8bgtrv_d7|8%o0SIQ}or-Nv=R%6V1j@Dhbko{#+)nTNGm%;`ZtudCh4(Ec>F? zXB%Da)$WKjny|l!boP+8Z38=^=$x8T?7lB@H8i;=+c;P1`?u3Zt6sC()M+UjliXSD z*m#H3`90-bl`c`zb85;mchYoCwAscVrM_HhA7awCBgy?(J2n=lkzzVtq5IgjZ)vol$T@Dw;?&IzR#t;8fQ9N>0*_MsVN&>oZTaIb*2jY^81MB8v757 z(Y}qzNz_(H&^MvyC{ndS>YGL9BED0wuW^>uub|)AKbxieucO7s%4gIIbeBfXw-ZIa zO_PIO^N)1ICsJQwYRcyx_u0cW5hDBg(_fVwm>EOo#`Ki51){gWUz~?m)RF($)$ny1evyW6&~V&fEsyAv+JZ@u(9L zaT}X8e2a!})$k`Ye4BQh%9U+@b{l_f3*lV00dCL)^7GesCLaIv4|b_kf1Kt>HU0{9O%yPs88W@DDWn zLk-`h;kz~bV-0WB@J}`TpBny|hJUW%UugKhHT+8r|4PHZ*6?pN{5uW*Uc-OT@ELK}o~GgaXo&N0 z8~jX(^KcveG<-h|AE4m_HGGhU@2}xQG<>LrAE4m}YIwSa57Y4B8h)^bXK47L8h)6D zkI?Xu8h*HjkJ9kb8a_tDkJNC!8+9ITBTK`_YIwGW=V*AYhUaPccn#-g3!R7CI9kJx z(eUFmJYT~nYWO4#_i6YP4KL8}LJgm$;YAugL&Nz&IOpLuiZy(;hL>pg2^xN)hM%P2 zCu_Kv9dty%ZOqfi&)0CjhL>u1K*P&4oHw+09&TfihA-A|-UZ)zxQ){^{B#Yk*6LmJ+w;b&?%KeOpP+{RfNezu06tKsKq_^&m5nTB8B;M_tb85S2~h!hpB zsa!@wI8u0_+u*0Corl|4rQsK9c(aDD(eSkzzD~n0((nx$eu;)(s^OPw_-{1)3Jt$f z!>`uxYc%{i4gZ~nU$5aeX!uPU{(BAogNEOt;kRk{?HYckhTo;(n>74S8h*Ei-=pF8 zY51Qt`~eMrP{SYA@JBTKF%93W;g4(h6B_=chCij@&uI8_8vYjz-=X0zYWT|<{x=PO zRl{G?@HaI4Ee+qP;qPkr`x^eChVRnwRt^8e!OfnVa~#<0aorYPudP~vxk5vZ>vRR= z=K{%R*m$|*N7%U8bI5Ut^|bJt+2T9<^Gk%D+l&g3<Z0T}b_7VNnQrD6&S!0vm#P3$%W{rBAV@BdussAQRRGgVLRgTL(qHNYAIj%q0?4cYB)5+&nkA0X(PrmM;=9MDoz`;*-p#?s(!8i)ba(JZ!FxFPn}YA-;6*f;V;K87 z_}PN@bnx2*@8#gn3f|kn2PZR1b?`>P(;WOyg3HNY_;r8bn*D&7r)LX3z`?&3e4vAy z>r@9h_(#IUgB`p~xY(YX4dYV54|K@CBY3)l&k#v+u!CPLc!q-~i=;Zt!OI0d+`(TE ze6)iza2p@na+@he<8>N&ky#wSxq0L-!r?Y&^c}yr4QGC4A$NGCOxsJ`5%RMs@6698 zcjjl4JM**2o%z}1&irh0XMQ$$3V%2bcZ7V-LT<5|(;-gWna@r6zD{AGr=N!R*KlWf zVL`XyEH5T^mKT#d%ZtgK<;CRt^M~Vb8$%q7fjj(UQrn;1hO^w6^3HN+@`Ktckl)-! zx`q$a@ZlQnEWa%14nIlM_A^>jEICuex!yw>jxHe8}?S; zyxc9GKyj*a(_6J89d1M2t+xHuZ5-Ja$Zu{(uf_bqZFn{ESsFf8!?QI!N5gY9e4K{o zY4~^zKT5;xy(?3U#w|7S$7uMm8h)IH=WF-`4WFptlQev?hWj*piiS_s@B$4l)bME< zK3&6k#hLSP8#A1ch})Q{;j=WnSi_Ik@Yxz(qTzEi`~(d@QNvHt@VOd(vWB0c;iqc& zJPn_(;R`g}ui>Q{9?tcyi&tY)9}+Zyh_8XHM~Z{YaRSx z>WU3F8pB-mY-S05W|*rU=RXBs>fk3+*KN3Qc9^Rixq-TF&btW1xLL#hOnkU;URaOn zQN2NYm|=~>gj-zd0!Gq5ka#3LM+<&_Sbw@a3uyFI2>BIZd1cRy8vd5x7l!4P{=w8G z9d4`%bEW504Zl|Kbzym>=WW3^gt@Abr_wFluq11Iqlc6zV{TaEKdPpFMsRB!N$HKHPB1yD395 zx9e{b{Hm~i)pGxV_%Op7ms9!V6^(o{CB$%8uc-8lB|gls#_^P%fJT0U;2XpC&{uK% zN$9c0<&>Tmh?9#P$Hy8yJ?R!=xN&1xK3$%T68z>cSNY*A;=>GU+)Vj-yGDM${aF9a z4nJ2Ck7Va64Sz<%Ul9854BL5*JUf_fX@(irxT^}Q2i?*PGpupicclEM#D~K=M%CjP zO1C=0VZEZNshfxoGpzAR<%gFv@<-CG5$maw;i>$5vEcWI?N|Bac@5uZ2A#6M>)Ff~)1mYq zPPeARjaN)a|7XdwCdrHCca^W66a2NXyehw=4`w}1zFu;>p06Y?wdtQnLs!F%onigT zo<}6N>&ZC8l(*~Q_tp$IK6L2$x8!y`fkRoo)giw_a=X0mFqZ#3EU)~qS;K!t8Gz;O zdLEYCZvQbOS^jH>{>LEuZ`-Sx@duDlAzMspk=TX52IpjxYvHT#1{0)-Z!yP!5$`?x7L-Z7PKyp^;q+aR7}KiyWl&+;VS)yj%WQxx>U=o^xr9Xc39pm^}J5J zFSVLG>|sb`~&Zz4Y2I4bP_Yo(r@ z8lHBXsb`ba^N5uH1MxI@jvo(b_;wBdyVPGN9j5eOl+SkZY8mr5L4LlOADJI9fq8yd zp7#vk<6PpA?A)s1Zx9#hE-N-_Zp1NXqRC4oSAKh1!;hV0%Bv|4-Y0;MGc^1r;=>JV zo#ExCxREwFGCxP~DdG55Nco?MM~d%2AD3TiJqZG1lKizA{y)Tr8&e$h=TTFb zPYc__&&2bwo;dq6jqdyT*disKl6+@RlT$M%j_-w@8DTwdNPg^8*6-vO2wohPSAP3S z!z&6{Pf1u_`R!lChZ)v-80DY(LQ}p@+R;sZx~4I=)-kI1&J$eKUWTz!hV-z851r0> z<~!`Ug!nMST0f)g;fH5g-fqu1f(OES_&I+*o)Fwz6~N!Gl@i_=tjEc(6Wm&tsQfc* zCfj4Jw^8<7LwvZg*kR8hvzVVAwuhhP=i@BFYr=f3iH+wp{J>(?W34|__N*d4%&^wy zD0@DX@^=5sIiB@c>ks+4eLmI;-W0ZnpUvmv-x@x5HtVt08S-=Yd~Db7+!C4pdzo_l zTsGQv+x-7Y$?s=kerBGJZF3^aA4?TuBt5rk`1=~3K|{uo^c+WAl;7c|9sJBa zAJ0l&EDJ6_H_ykclOpT6Lc<>-F6vwAcksc_%kz;xH?p2z6KDB!s)zXC=i&KCIoaeJ zsND0x&$aV$8SzN*dRxPXoxkVstk+SWk`H}7XQNyQ`UUjXh+5BIo;b$|KHlzG%jr`@rhrznjba~MOf?MlO z2TA^>Mo%|?WIOjKKFqMzsU9x%6bQa1>}REaiQsF)T*==g__{Dx@-GT*ty4Wl>hD*| z;cjrq&k@{Orz*3fagpGcI^>@b+*+qf-EVOu2U!1a9P-Bsenpt~lkz7BZmm;QX<9{G zol8;iafy(()~_BWe|$vnYg|fJUAs&0>%x4f6zH*#?NoOOhS(p8e;PqtU8{8Q=dnWm z`mmld`Qz^eH&DemyrZ89GdKa;tyThD<6UUW;-xKCak83f@-xua*O8IjH zx7MRlcS0Ob3;tkOUg;S?4csu};V`G_LL5toNAl;z8h(?88~#%|vAwuA%Rj?kR$D{c zkT;fv3X5sS@g;Now1;^~C@XVOZT*>n`f`6|C|Dn$mwfm`fyHAg8|njN^0MO-+;kaU zUOVB98_(gHZ`6@Ht9x@A>d121Wj9zZ-i0!*K3EmxccLsAQx~WYjq#2hBO*rc->IW7 zV-5e*qFECs6#4xPjSKySez`OIn6kP$QeF}&%JcgxYb$FiL&lh*Nm-fvKX1JFpC|s0 z6aRC>|6K8ZEdL*GN@k05lbGjOOuSwp>h+4Ny^mZS6(Gq1%2z)K_72K9(H{#$lw>0kOa9Ba(mP8h|5e z(Oxt~FL-FziLuAc9&}74C7~8XdQ(jTBOEoi^4m0QVcQ+1-sTa0H;9tQSBiA*-5>md z5v5JOQqGx;wXb}!8ydZ?os{F7J-sB`&y5OLu6dK4BhunsC1c}iZ%jE6&F;F3oLMiv z`rFBCT?;HyEoEvPD^j(cE>wAtI)b%Jv0E`-y*rLxZPSVO<788Im|f!S{JU=^kpf>% zd1H0;(s4DlH8qX&0z2sSv@tKcE>Ov@qU%IS8|UY&Pyh8n$&P29a!8g}o%w4Qo<^_2 zTT**^u-;4I`@8y9p*)Io+qVi$ptlO;MtG}GPUk&4ojpszjJ4h>M5pSlLO#<3+gpW7 zCiqKc`hDCqQDl9yXHwF7bHaXD*tlp>u--=^;okPFDN{;(bNq8AOf2#d^*4k9WvBbg zDo*z=qL&#)>AuQ7Zk9;xIVY<3b=hk)^*&8eWqG|-wTmmu%-2XxHZP5S;bbr7CS6B6 zQwWt;6+_N*$VRJM+p#6;rO_>ndZ}r*&I2)2uI<cy^isgF^)$j&Ssjenq&Y8ZKj=+IiAO0>w|$1b*QSVjp|@^S=~~r z^04JpQY1_MKZvAiSe@;HtuF3#eb=7muGN0+Ywu)T*uG+` zX3WluM=#GgU}9^9>?TDW0cq!sBl@+`?=|fGi^*;CM#s!-du<0As}2Pd-%J+Oc{CPa zwK-k7#~4SW19a0=PSbPMRC$;C`3=bahNU&3KodnM+*Qqq&rL>5!Ofhm9T|*$oIFyW zfCi_^s%q&C&pb3xb7nRB(9v(3l*OYFlx}eJegxj~MgJ|&! zCTcSpr(pCsrpp1C3Eo~NieE5^bys`YH%>FPT`hVYsxf`GjEPEn!*p38chK||s zOXi7qw~C!jk+2=VaEi3ouEyR!uzRAteshei(cUm1L1_@92lT}u=H@@bP+>TOC2TM< zaaqS1orKor5rYd?-BJD5`P>;j(7b3P$O#EF4!N+MVNk2UM=ftLXZqNJ)5j~$Zj7zK zB`VOpnPC!F@Y_k!gw_J>haIjGqUPVur*H=>7$0qjKk*hMqENLT`)~>S#rz+(;1~11 zEPL^oc(8ZaBDF{`xM>XwJI5(HpW`A0Do5nGO8W)knUFBs&D;?kZBL=-S`s$^AAKe; zJcYuAA`uA|J=$$2FJ#T+Slg3Z5oquStLtdRX(&*?I2iJsMgCItnBCF#8Ex;_V0}HW zfC)A<(8{2RIb}^vUN5cj_WE;A=ZV3P&!83lRl%ALC>0ZEomke?HrP(Dj0)7%1#8NE zw7N>otvY7+I%6C;fS+*(v}R3Z1M zEZJTnXLCxLtJY(^BsWB>^=lebeu%n?Jz62^LRQH1+cRr8N9yx;)DqPN$9KvYSyso% z2Zz0RfvPH60oYhmA6#77K+i}A+esC>f}F|*dK_YDRnQ+O3so)&Qh_1E^4hMN;NQoY zQdD^LuCgi58ru*I(F!}(?1j@@*Oz7$H26~8vp1+CL z!$lLs!$tI;63}1P6!0&k98=>j3xvulB&iRI^`!C}Re0)GZQXB+hBq(R6six%45f)f z?vh{`J;+awC{YfuyG=a4mrF*@rbhrf_Y_s2u!Nr*GFKAe<6<4J9ZN`;c=k~~#S#Z=j)}a&Zl75l>yx(v@+lMOqjr_j3(X7Ol3nWddrNDnqOd zp497{>&J`C8f)e=*VydsK)K=l1!7uRJUx03!Imi0PB|`d-kQWdoD}uBa5E*$M|ia> z-r^OONB}b|)e~_>tn>F=?Tt&*jvu1Z23ZDnykd?3UR|hu2$H z5u_(VMHk0c8KqxfyD$f?fLcJ;YmeC4iHFsl4NS*%wC!;?3qi~!E~XjE_!jcmf=qB( zkI4w14~u+)N_LEv$iW{T;!`=@ne3gfUt+YPjX%O2-dKupYypHzbJyDv=LlMSvvCCd z3C^?55cf(3jTEfRjeBz_vh!IlLImQN&!UbQ_m_tF|W*QKQIzrp9=*Qjx+)NG6LMP@LP`$brP3T_Ro| z&J$hflhX6WGk6xDDo_@r%?+u09B6DRoJP01+++1EnOrx^>}1D3kiw{ebbORUj4JU! zjy_KOYvee^Jvfe?EjUeQ-*&g*%@spxej4VjuB_qRFlm@9ZUY`Pj6vf*VzNdJ%h5DV zWzFKkGJcw=tRg_0Z`KDYLk)#x>`>Y^a~us5lSx6I7>WI+$vbut4G}d|$iY(Hz$em3 zU>u^x`!DCtWD5VIFVpCgA|HGyUv8x(V+4gg7ge!sIttQ@#%Q{vK!6})QK@& z4m#4Ki5<#8S=klzNGH!(I7ZClkZU?N?5GN5d2K^DL&vXBcHGt8Oscl)gQD8@RacW= zdCHQe8MD=(Zfzq?$}IBN2Wl1v{fnwYBob|Y*Io&YGb2maVW2BSln3IK%4g_C^oT~1_~6Z`i{$)D*bXyg(ME1$s2y{(84(Bl%q*yRH6{F8 z!HzTi-8daKD4`vtAoFdI( ziD}4^P+M+p=HM@HsP&uO0yPs83O3P3>aZD&qi|XqH(E0^_5uttC(fkSmAlA+g_TRZ zyl|(X(qC3ZX)AX3q3t&p)r$K=+NQM4^Z!weu&+rmHG~IJY47;O^?_>H);2_xR=e#u zBIp?AVoTHpM6pS0b;mM#8#TCC6=*GpJ~k3H?Dj9!hZ=42GkT!yU8%xsyXRs!!ECr~ zcH~+6NO@7|j4+NPrv|u$was+eS%k1?SZjm2GD9 zSrG_vZ&57CscWnc`j=GJhZ+N7vu~DeyQis=m+wQ8ubnfJ=sUmV_s2cvktu)Y*A4R9 z>lJSX{vPlffxi#@8Q>2A|50)d_j>wM`qi6>nGXi};dIUi+jA8CsN{2jqdjwgqdn>k zWUPOG(0`+pXFdeDdUF-?p}-%P@^*V(2R#RX{7=9S1m2Go)4?AH0Y5-;){lP60Qq!~ zUkLK!>0J5e0+1gD@)v>p(ICH3!yf`YoEA#|QyTe~fFDEWO8zy;`Mq=e)=9;`1ouk12Y+CEQ-P!Y{=hLm43XR(ZaTn_|Q((!9Z z_YplTj`dXmaLk7bfnz>gE;*UfCZDecd90sr1dj1~9ysQ=T^gP(-%n~!m*at>o<+bh zy-o*S0{%P~IO=&DIQsu1;OPG^fTR46z_Gj}?`x$C=AQ|Yv!62{9j^s>Os|)Kx2fMG zKb-WqAik|29{_%YeBUdFdkBPE4E#{wizMfCL3@@1$NckK$=M#PZ*Kv4tlu62j_I-$ zIQsu7;OOU{fOFfV>b;ZXdw4m%he5mol5@P4gZv!%9$V(ifZrlH>%sc}PLRiPF)M`x z>0mt=uWAjyPQxG8@Rv0FfK(BzBit_}x7+^>$fNzM9=PXotxVK;D0$8Uh6{6P7FSbMr31H6zT zt@5W2co6su;F$jdz%hTG4IJZpIdF{cX5c9Q8gP`K+}}!<^T5s}z_C0o2afgdY7M^< zIM%Cw0*?OQ3>@qKZ5sYOaIA-S0!RHH14sFvfTR2}`QC3%cOUrYA`QPz!|w&Y67=i< zz6$v3z-I&hH}DIA=MJ#a5&3h#CxQISz|RE!t>lD^G4!YMvoX-pkNI}Ak{CYZ|~ReziD{yA(npBbC`zD(D20?zEs1n*6`&EjouG*0=CFl6!cv1IZ1n6Ln z_dzL=+wVIvK_2ZK2l9V+S?yOH$e#h}xDGh#xfb}VpyvVLc)zm+IOc~Zfnz`FE6MHc z=Aj1*HwZsqyT4R&_CL0F=Yc%7FP8(y^71c@p07b3_1uwR*@NxQKY*j(Jcn5F$Pd== z85(}NhOg4_>oxoV4Zr?S%TBz1@f>DyyPx-!obxC8=UU*Xr_YGUdIm^t*K-7LtZ#k5 zvA#VWILfaCj`Gg{NBQ@Gqx`Q%TK+-#6M>`rdBE|$={n$;AMOB-^3MTB`L}`Neb)ED zQNAx1EIQcF$cF;Q`aAq$a3e~G-Tsl1 z+x5%^j`jIf8a=-Qd91IpkBl7dc**VIegYip|G{!%kLA%nJ`FF^@O2t~yM{lh;qPep zPa1xa*YpG1kM;IflH1eedyq$euFHz7$2HdEc0JuBxBGbraI9~0fMb1oDsYr<1dj5a zY|BoR9|0WYPX~_jtAL~Y?Z8p~N#H2|GjOc`56rRb#C$ahILa3RNBIT7v7TQ99P9b> zfuo)cz_H!A9XQHw1&)4r3po1W=v*tl*uKmLj^#ZB9NUYtCFlHh1k`UA03QW>J?L3S z7pZ#hUf|fSZ2^w$(JR2w5AOoU`uua?DE|#`Y%hKUj`nmLXZa1~Q-EW*LxE$sN90+0 zcrIJ{VWs5u^1BA)u^xCHIM$PI1IKU=8E=Mb*MGR=_WGe3IO_j3aMXX~QC7UL-B~WV zJ>1nGkMX)1IOfCGG^jTx2~{B)9816*$&cjli+Kx*9mj-wPb& zm*hvb=WNOC_B;k0)BP3T=>MJ*O#Q3}?Ku=U+A|$E$}a+r@-4to{x0As{}OPN{~9>T zpEA+1AKSIFfMa}D14sE=fTR3Fz_I=M8*r5Wmxg~29NW{RNtXTCo(=(ye#ixmekcKs z@=JiD{6oO8-FyK!)>mnhEjzK@+z&XmFGm8$@w9QkaXjrf;MnfW0FHh>5jeJ|rvXR# zrIPb)7>*yV19==jyi)QclE?nQM&Q^V_yg#{{=i)zk9zI}j(WCe^gIh3+v^uW59%i9o-*2krA1tRw1IKb&3>?edNs@DX zG2Isc$8@g(J(%tn0LS>Q0gm<3`30u^94`8KmE?9m@6pI77g~P6bU6<==99~SV|x7= zIL_N{oM!3A{@XW_+wD)DZpouP9|6Av(s6o`C6DdweBkKMGcAnLv>M5KRS#~8va)e|5U@f&xsuFU=2S`!)qkx{=j`Mt3B#_f~nu0&kvH^o{l-d zvA?udqvuMH$9iVYiB`NY-OmS(e!f$~pVjcMG`!zQR=BADSm0PL0>H6c^qgzy!SdcL zx!s@ZK_30^K5*=xC!K8RM?2GiWB+6*aMW`YaMV)(9QB+49Q*%uz)??&hF=Oi2=)Bc zz_FdZ5jfhv1vrNLSKw&>p{H1W!*rYs9MiEBIL5czsg@p0-}5E6r|&9|$Mjtf9OHEd zaE#Z3z%gFW0>^mm0*>+OKF_irEQ>9Q)5xfn)!<1oUJ7c`k75pI-e@nxUU1ZwB@x^)PDU!3_n!#@~ zBxgV4ymJ8Lao+h;;8;KV7F*%s{n|9iIb8Jfo4`@ego?;|rbuqrb1HDG51W8veRwr+ zl)oQ1%J-`@?cs1y-U}S%R|3cS_DA4Y?gpM_=|`TY;UyZrNW)iZ_<5&C_VaSd?SB4P z^26z}7RWz`R$2CA`5h}c%VYWVRGae5H-MfAl5@DIXC}y_p7a_^4~~1xliaSS668_O zq*_bQ#bD2`CAaHY3-YMvyE;=3%VT>w?F^HX>NfSyEXi3O%S9D%?6<4|j``#Y;Mi}u z2{`I`960LP0UY&w2OQ-G)|>HS`;ixG_-PuxM#FE?@Ow4l*%*hW8IewttLUup1vP}Jl2!h=UDo$ zgnIip;5cr!7Wh>l|2S~8^SE;@{kYC~isamW;q#RhAdmj91$o{RK=pfd z9T{|L+AyntlaJ=7qRl|Pa??La^nv#aCrNIv_m%-iJFnC5Cp7$B4R@`u z(hK!p1{~|{9xEf;-&=CK{RaWZa(6UvEO(25V?BQ!aI|wRaIEJ?uCn5V_FpTx-Tya$ zJl40j0muAvKXA0?Sq*<1IQroy;OK_|7h3kCAI1R3aE}I#e)tqPj(hLF+R~4D@-=*c zhOf}@8#Meu4c`tN{rn1WwDT?CSWaEdR=m*92LVSv9|IiwffoZuJ$C^|J+A=A`r%(1 zzI2UcC&uf1;5c6W9B>?`Dr>RyApc&&FJ2p2em8LR=Xb!-&Ti{0Js97f8r}~$rtdJ| zsQ+Bx7_WOZ{59aH{}bS-KY6`n|Lf4c&oQwWXT$c+EjjlGu>X?^^4Naq1Mt=#!7t2c-$m{Z3qVscC^moP2zf`zibTEC<&UmG7Z%B9SCl3Ms4cIvx z@(-4~@xZZut_1!q=(z^;V>!JEIF^e$fMdT1>m{`R0FeI?!p)GJ+Yua>I0`u0e;V+g zLC$Z0*e}7_WPQ$17gAA6G2#N}`(~H9nK*cwzn4m3n?6_zm;Vbl~Xc zc!fI&^kca3(%+SMb)~?izh@mp8y+?)RV-=4k)L;l46l@~bnuks}4{uSPj zC_f|-$8qlp(1YWy8zr~j@4pH>i*^)vaIs%^ zKFDJ^Z3d3@$;H62Uw0+&ztOp}zbk&m`+~0cIS2gt2s@JwyZ=8mvEaENe-y+E{XYjd z`u{xO=>Ij6+x?GzL;qh7deHy30!RNp034r3lhHCbfAZfhkmKJJ@6RW6^e{idobxmv zz08j=zee&j8{Z^(e;a>7@uU`k;;)WhbYoj4vckMf>sUvNC+WZ)TK4~_#I0en8l zt8pieS6|@AOL?|u0q}Xi{lLqCqy1_;mi3_hlRzH*KTUGB2mQH5Bd`3%@|a$?gB~3J z`3rFL54QX0&wHVsd5X@J|2a+h;CMX`T-En%5BigB;Db5(pW7@x?0)9Df)AF*{PPva zWB&OGINIZ(G~$ExV|w)lj_GwcaE$MX8h(t>ZtBN!dXk2ptKq-Z@LM(fuNodpxn^If zbY%bX!Jn8s8)0UYberNHsN?|k4WA4@x41?3dWdlqmk@3p|OyblK+ukxM=>4@$4vA{8( z_#hoIpEO8LCbr2ZO`r$!$&;W5^Me6?#&B~bx9k5E$fN%AB)8Z9e*%vF$NL3Lue&)w zI=J50P1mY?rQScqycPK4Ql7)b^m-aNrtb@&ANynP0LOCiGjJ>y{h&XO^1Az!v!uMe zytIHGEH9S=$Nt9Ez_DE12pr4N?ZDA*4@hpe=XsDvdp-k>=`w;7gbsUp4KuOen6I$j z!||D})O$ESbEgc~o)6yyj^mvB%lygqV>)I7$8=u+9P7i=B)9t$>o@eLu70~1^y4_p zmB2CGW2q18DG#f1lmULo1&;M$BXFz_j{qL8`Y=n{!~VzmFdsPPpQ)0wpE3V5N=_!W zsSi~@ll5bL^|_R1J(wT5gP$?nVKfa%^7$~)GRy78GjkjL^e12~qiI^ZaOkK}A8 z_A9o5JeDJ@udtqc1>~{3>;{hI3&(BHZ+kTM;P?#Mlfwx@hdo_tG`y!NF641NNngp? z54fIWByh|>Cj-az1Ir}m;9rOQuo^h}Czkr8iSm-lZy8b#+xac%$NJ=KkjMI@JMehb zC$Wr^pr5CK{phzf;2)I7`zcJ9+d&Ve3yzbZfAD?^{fYNeZ-GDYerhN1C+M6H_CNZQ zZQz4B`k(VWADkbsT>ld|<`W+K<%8uh+@FDCx$7qD8J5R%8$_SUupP!4Ijk@(qWI+<&v{mc;9yw$YZ?l zy`1QuEgqp>%(I}LCnaZfsONRySU-OS9P8&H-Aw(g2j%fSn<#&wM*ariD4){Z(vRcz z6Mu>QF9MGBgBmB~e1-Y>5;MAv{EXwA zn4ecdy@dAvPQ$tH#D_gU?+f(<=1+bHjgrTFxD+_13%?sq$)i0jz%gC^2RO<<037|f z1vvV%&dyq%_c`hK5p1#0Q&;G#Co`Zm+{xQJO z58P*t6mA1>l;<{4$)n$7wJq`+=Lr?xUZ%M4=hbwr;{7D&cJ>q%bCqs!tYhGxi4}l)k z{~&PG-%yfz)`=>eqFu6&vU7xhdg0~^*PoLkAXbevl)0g=-CE#qJFGb zQU5ET2lamjJQn?!|55*|pa=Dbf@^lt|qi+;@is9)Wivz=(aTKmR4 zo&V9nLF)XE^)u?<3U;FYCxEB3ayp{v$8w7LpM?B?`jKNk!E%Ip-T-@0&zr#0g_WkA z+aX-kkL?KR=k*@yK>fWzPr4Ma`ymrJ>dyoI7to&%JO%WloxHw99cZWOOY?7N=TMMO zmlxXY906Q(a^-il|5VVE5AtYF0q}kxUkv;J;HAJ(PX%x{$kzcc1>OW)tvO}14ETW{ zkN(8=7ybDHqzn2p74)Qoek@<;H`I^m{vznl2R&(^AMNDz59&ZW2LMMq2Ln%+7e-6> zAHW{8zXJ5+gC4X8(|sVw7lXXIr(;wK9Q9zj?*V)2K>jq)kLf-L_%e_m0v!GM2ypag zD};;wRQH~&Ivw=u(jE0c@2d67=VToOeb>0FHK!0iG@|wA(oXcs9tR{UPA_AdmJG z03QYN#lVjQUJ4xbQ~)0b@^!$M0LOG64SX5MX97omVm}%Exf9X_{h17U(m_A=AJA{8 zAJhFE(4P-_JfI)#JR3OL*&R6Asm3H(bvo!rJ4XOlV|R?u{GB6wEvF^~$p)@; zGE)9w`F*7ff2eic%+;77^JV;x4(4jl4gP)^|D%Js$^-m;6aS-wxta^+?@#bQI+&|9 z_WXS(|D%KX0C8si`%<1WS9yui5E*yoPlF#afvYi0mLCsX?Sa6&7&yzT{80}4Ko*oo zHSmKJq|X(=SzhV60{C!{zXx~*a9$J32gmDBac2JGF?>Flj}T|_9|Jo0Lyf`mca`^; ztGR6E={9*~r>bN5XDPzshU!x>%M!%=r}8}WF~F~p7xRaj%jTcem>BbM4CJB4I+&}v zh<|z&^ssy#LpnYI{wouS|2^cuH~*~GqVo?Kz}2%<%=3XyU?7h|;1d<3&r;wluj~l{ z_ksMmz^4Ge1vtxZlD|C+T+My(Piox=$7`CD<&RHn@|)Ff$>s^m&rpm$_W?c=cqVX` z-z>SO3xiOUMjEI3|!5@@lQ_! zKUK=|$4=lZuk?RuMKXV*cv`ycGBd;4H879}T<=AA_qOXW591Fr%-I4@rf{8gL0(*KE#EB&f*Vt<|idiIfx7V~=G z>A+cD>Cd+DQh7}Q@Fk$>SO8+@FUMjEI0Q_vwb0zR|fNuiM@^$jJCxHJN z>Uz7F(U417IswVr|F#qvu3!ywOm8U69G1NbE-693hD2G(;a@Xu}XN`G<>Q;6kR z&oc9?F$lPt)90Ut0lz}Z^2c1@EWc5<>s7$72Kh$dYHua}`3~SLzggi(@ePu{ zZ{r&!{}%X7V1K6U?5g-~lJet$b9_h1YeK;J8dd+E3!LSPr2PHBZz;P--j065DBl>NY2Uio1I@cTi}mB3k# zx(|5*_=6z-JaCr3N`{*(Z{CuKJq+@_fwR22KN$g><&~XB1Ah$k_<*w>RWH>6-vaVW zfwR22Z`lNVE66_poaNP6-pjyQUfH<|_>-XLU%*+98Usp~3y715Jq7Y3fwO!Q3(zqK z_%kLF|K|f|`IS<>2{_9uJJ$k#9`sxeob_BR^=t+?H+vwSAsMAC6DaF)-O{nQ_UvwXUbr47T=*ZgG0^3O^6BH;YnhN-69 z3BXzYeJOtp@Rv+c@&EV0S$>DC&z}SS3dp|#oaJAZ@TtWan5!K%QRP_QXvj42O<0>+qy4Go3>V;XC!Do+nq zEgj=OWoFL8+S-OtZh0^isI2nlG}QUaY8z`p!E*n?Ktpg`d64wgF7+*umv;OLXJF$O zHP)1cDr;-Jg(acfCBd>#ZGGX)62CX6uD*70eW2Q3TgN{)c(cfc$};)2u*~Nx2^5xO z`+dIIC0;*W5*p|Cmo+tcy-Jddt*lvGSXL79ddn&T_5M(Opfc1zm(rDVy-+ZT6!>z= z8>_3Aj;pDyscEdLa>nmJ*~oTWnq3#DWQTUbJLCMm+0#qte}~+YzyO_5m02}UWuh#v zI`h{qJk4KOv!wR)V7-?!)L8$*%G`yOHRb+Lr*c{zWfW4A?XO-`IktKcW!DM*nI*Y? zX~MX&>hh|}njq!IoX+RQ>6{xWn6dtxs>+5?78y>bO9EAm!NTGapJ~F_K>gyvqDn7| z(m{5V%=G(m&B*#@&!pnu%?bNqVdJ7j!FnHw7-PcKfTOVg*MqTnkn7M0Ri>l1$_duj z*Va$Y;<_Y)*Q3gJFpSI&h9Tr*4I_)QRiLV}oLYkF>Hw7<&gA}v(9)`4?6GTKOI+-U z*%MLi>5zZMjt$k;`pGd%{dKhsmE2MVs#KHZ?_ef~Sy`;!ibY|}PK#NY&br)SQ&~_n z=6>137%v<|)%2oT`gfYX@sE~ZKA%1#COF8&Wo3RdQhw@iRRyhT)tlgu?LMAUQRB_^ z%MM%u1NVkIN6yB$E5XK)xe}Dl9SAuw$=v}15|-+**$_4H9sTue)p9f}tqBF1^o2CG zEA4StdEI$+W6kL`wP)7ITDT+OM!HfL?zn}4a(}p&RTikK(ubsz?SO7=H61~B)E2A* z6_ZnSoXVhHaeRuHUccSrovt?{1|bSaeJ$T&^G&#SOrGr~+xFFJFYGrmvIAdR&wY!) z;-I)E{y%#Q96<%g&2OchQ^Ow#_6jcBq$- zHBR*s+TLGwu*(pG8oLYhSyx#k`z;;Fx{K>xINcoFk8qQgSyoj`V>*@9byYOpnCbUwZ_6WfdT8`q zT<;i#+8Y5zO5VK@t|o1NiJ)i3BT##Jj_H0dp()>GixQPJx@=ei^G@7tOGxI5KA5*x zb5-o7?5*q+yG463A9da+)ywKY-y%{YGg;gJiHqV$iK}fcJJdRwhDS)M&W+aUePa(o z@A$4Z_xfQjXIjK3tPUkle1f#Qv%PVmE{7WNuBp8)V`4&0VAknCG468QL|A(_>xdxt zde+f}8ue}?KJK;0RiAaVwWht#61}a7OGD6^AUl+i;u=}IkK3z?5*m0M5;&%Ni-e?e z2SQFva(BRhgr#~HY|tlu?6pb9%3jBYjuLG}hcZQ?jp=9xNuWIm?z?n2%S5y%5t%op zvb4AIaEFZ9OIf)?HtoF}9jjRpGgACI<@Su-C9{6X{GE_)eP_Ls$bNs9Z2Hg3-wD2R zh^w~}k-wwgYf#0#S2A{NR_vu3J2qqXURLh3J#o7Gwddi^*`v?AG2g94m}&1o?(A|f z9m;-P4lP3dO4xdZh?Sr|!8+fMcBbIo>Kf`p?ohHOBI+GY={Vb<>*3`^TOG4EY|v-G zmM{d(`%1FWIm+ zYni>)%(YVm?5#F0Ml<$O){N1b2>CQ>_0;)%+P*=$rg40)uSX~!dN{=kpFAj!$ zXK8kG`G4$v3w#vS+4qDc5N}Dm$4hmgQG-=XkW1pNK?v;XqA4I!E8T<;NGc?0vVnMy zk_g)vrLAqLmlmt_(rU|VtuI<_;|cxdup(I~3Gk~|E;H5K@@E#6>UPH-vn6$2*3wriAgRje){&jU&)P=1T52pYNmx<7*#VE1((8jfk*a@(tXMw#?70?q976V<9I%=! z>zrP0o(L;mgLQJ+kTyVe9t{T{3NpG)o~)Xt*Y9{&DrX!Kd`kD^e>j{zBb`#KWQtY( zO?1+2HH=|m02b4=^A#;JlQ-C);Y*4wKZB?n-T~LJRm1*7d2%)!{_Ry@4_B~s3g}iq zZQ7ILTizMbRq<7I4EY>vJ+ZU2X*!5Xk!BD#Y&9ffxt=@^M|DY~%^t2hzO>QpgNpQ- z4fuzwR;9DRV5?Y${B_%^$l#;CnVyMrE7i%C4)~BU_h>&9HOG{nVXhwOMd~>n!mgQr z;mS#j11Tdrzuw#*6WtViLdo|asiZ7Ai>Bk2R@clsE4W{j7iy#DeykXH%INi(~2no>)f+u@gN$al$v=ydnJ*P>`53yUi%%A$CKrFa*1 zxKcW!j8_Lw9Qdn)XOIQSh;yTJA_#mUD|kaU-hTbRIS2eTlOD(C zMkmYR-6fe#cet+&AGoo_Tf@b~$xN8t;?{HMT3V-eL&pEkoV4H;Laen(&L-D4)W@RL z&CS&p18`r07rkKaoJ6$NUg++=B3Zq$O}sM?lM6Omq(kj#9NTlxMONU z4vhh4#kN}1Ru;}Y>Snggf+gA|rYeg3<$%gM8O&It%IwU47XyBgs-VqMf_m0kVRnWe7)PKk3 z|FLY(OFvGgPrqqnPb-ya#Osefqp`15ekR=qbNO3Y_8(aNGV8C`-9N9?;aq=4HH4M^ zSsO-k*2p*{1E_?ty#uJsW0_A)Y;m<8T{1R8CT=$X`2)8_W(o~JrHoBt=x_RV!hz@C zAbmJ9+kcE0faHPaJe?{7P{vy3hCnj__L=9^D9<8MeTXw%J zCHTZhBP|6@>0)5zf67N8>3o8xlQf6!&YUwRob2Y{P<3j&_YpZiVh zZS)ZX{eSwPpKqYw;DdgVf&M`s^vb*kNj{YS6MfKkNIFhG-Ut0!1N})p=}~ODm!v;Irl*L4TKl{&XMoFGzase&wf}Yl{X`%1A4_^( z|4Mz(=LFpHOQbYdheCU6fLH}u(|zdw zutEQr5Bbj+zQ90# zgAe*b1O0b=&=*Vk92UQR=!3r0K)=oheYt`DHXrmM1O4qj=qnBMKlVXC-#~wd5Be$t z{hdDO>kRbNCy{VsZ|lD`8R+l!LEmPe|A`O!b_4xSebBEq(BI>OevN_tULW*p4fH?r zLBGyGzupJ^T?YF9@Ik-cK!2YP`V9v9U-+Q!G0^|g2mNLP{R2Mew;1R*_@LivpkLsF zew%^*K_B$n4fGHBpx4fK!spbr`7ANN6DX`p|?2mO2l{iQzW zs|@sS`shE`8R*~eLEmJcf5ZoUn}PlXAN1`8`WJoBuQt$s;)8yTfqs&Y@>^@5&+rKK>r6H^y>}uPy3+XV4xr2BmX@HdYaRe%}Qc#>%VR`(0}TKev5(rEg$q- z4fGRyw-_`MV7CG$)*C`8lJ!?f+UI`sWzvpEAe~LJVLf z&J~LP`I3IW>k^PSQ1f{TJpu=mr*Z|z{nmSltK$@%uwB#Upy!TC(`t0cX;53FeP z{Er2_$$uSr14sEO`R}D*qWkY6)N_;k4Ho_N^0>u9-y`V{REo>Ju0OT2CjASf{>74x z^uNNOKeZDk{a?sX|187_6a6+xAC&UdPS^iqi~b?0e@GIN{#W5xxBm$i`ObHg#MHfR z|4Y-*r?dZZ(3|YP#$f*rgZ>X&UH9{t=7( z@(lI=Q5yPm_P@oVf6j;Gm5#&x{~HGV-?GS`o1y;Ya7dH?S7m7bQ$cUCf2q`;`+v7V z|J4@x?HTGnaxb&~ihdp$k!^bY-EGmoUFu&YX{r9M!7-AHO~ut_DWCereEYrBpKQZ7 zw^WnJ4vYSOu;gE-uix98e;d7~rnAFBzfH>-F}O4gNLw8>2>?vZJ{rh@=w(i(Eaar(3|X6{x4V4DoIcN zcO#B<`~Arx|1wMdb^XWeXU>0nhWZ}~dXxU^4Eo<<(0`sq{=*sS-({iik@V@}?==?v z9a?OIjmO`0IM?lepGE!)8S4M0g?^i)4?-s2bpLtHqJOc}KO~9Ce{RFEu77T>x%{2) zajD5;-G7?W(9cVfiX&bBi$HJkpEjv~m82*A@4&IH{}WQa9zW(u{nN#d!aQ^SFR@)gd`-6swDjqjX>$I;O{E=8vW+AE^w@d>-PV#qSr3GE$KCK5$ia%4;H_Y zE_(diDd{iciE*r#-zd)`8w+|0VU4qd3?7 z=b%Gf{q_3yT`50Z{kvY$>+$Ga z-z4du(iG6`cNyqS_FKQ()pV<*C;R;uj&=Lx9^uN@?N>&fb!_SEcc-M+{pV~+?{Z20 z*X=j$NOS%p7JA)&FIwm;C4D;kJr8=5{Z>1!ByPVg$cApe1)nq9?=YGe$Cl21??`&x zeqWIEE|=tg-F_WMneBIig{mrMOR=?y|8D#FI~?ow zJLPDz{jQPni8tT${NE_)b^Coo(sNom*6Ba-Nw3?lIcT>38YzFVrhsn0WuQ0NZ>zLl zm87To`v)BB_InBRlqbFZzMrA}B4f<@|0_fLJvK=C(y{*J>-N9bLht<0HC#IT-vxS; z{Y#}mx&LkhOWpnleco*U#ZrDc|6L{Nb^raEq<3?X{7+@gw@(I1-%@C{zfHbw|933( zO;Z1K@#8Jfla0!Grf|I8VE;FO>-Jx8jM@GhGqnGUl3us}(;3=-?y+Y3+30oqy=bA| zlA-;c2ffLDMFCe5_uoE){UXPi?RV@tB*sR(`KJ5dvyxu7-|_1>Rq|M;|5B0Jel~jD ze%mbc#Zvy_q-b%Z$KRJhZ?fMyX}>B-Pw{srj&=X59%r`Sch|Xu>FoEmq}T0tqojAa zB>(I7yW)7W{W7J`{enMw-Tt>*=+{a8)7k%rpf}my8R<%@l36GFzmH?x{wJJZw*RPG zUBYzs?~(Mn{r8siQhZ{k+yDF%&GyTb{%xQ1y8S!Go8{+A{nOe1O3<6^UnT9&_+5XEjwEsFuuiO8U4DCOq*qr}N>7VmSuiJkC7T}Oi==!&3X#e@3H`#xy!Tuv4 zNcaCgN%?yJ?+qzGo&R4n!L0vVl0M=1@&GENY#$AhzUyRv@^$-vWTD?F^L zvCw~Nkv~GS=P9LT`Qm0B(x&s@NuW2`f3-9S_um5z_P<-o*Zp_-ZLXr}{I{^otp6pF zUdyh>e}CkYUbo*dr8%dOd#JBI#2S<3y*QdxqJ5nbQB&LjMDceBJ)7Uo^{KC+XAKzX|kYqjD{y zbvdpi?*D}b`+p$i>-Hb_W0xWE=9_N6&T_NAyWrOf2W0hyhXll|C7!% z%P*GncWVmk?dS2JH`zabFIQ5Xq^JJJ@%ZWekGrLO-Tp7#;act}&48LZ&PmhE`hOtl zHFA&rH(2O*S?JwdCArR;ZkF%d>87DI|9sQ!7XrP>er;I;zI9z!gYuRx=86^EFGtBaLO8EgzzHYw;Nsn%P%JvUQzas@r>aX%~ zwWQa}b=%!8;gK3Wl@;GE2feBMcJ1SGRA!{|qxV1MNa6yy|As~W$5Q@fia@5<<=-sn z_4wa*AJ;N@?8&EvzFpGak|Y&Jy8U0aeM>LK7@c zb^Y5c^g&5~p2kMkzXkNB@+;WSl~m01Ki#1JGZy*FGt_@V$ejOnNq@Fh;JW@Ng5IQm zNb0{u8jS2;ZqWZ57WvQor)D^d{r3)=_1_}tzoW6y_0I;qN&kX;SMj@;{ptNVIr3cj z&t(?*i#KS3<*DvJ2b^Wrze&=k8^7!adXxS=QvV()m+U{op#O~)`EOYC2aA-g`- zlAv@Cbp2<5-lTukfv%)AlAiRRWzhdS7Wt<=tO=HC@GpLqTuSf2Y)+ z*Plw0{ucSa&rtsf=a}{1Ch61FpA$iE(tqtiuBCdI{pT3;f7Bv>-XmuFgGI^~J=d&% zru5HQ=&PjsboJ*c(3|o<|6n)&y#AbT$p1-|X8oW0O-eQsC%XULW})9A={q%p>GkIa zpf~AXdZ;Uje2zA%KNlGE-|I_e{pUUE(&_(o{l9IYuaflX{O>x@oAh5@;7aO|3XuK_ z4EpEIHtYX;i~eAdvfVgH`u8pL+ob$b${gGD^7}jJP5BQU=H`F9G&tqI8b7`Loj%8$ z|ALK7C_B{4?@0@NP}1L`8BEu|2lOWWi;r|A@$u&(gZ`y+&HDd(6H}TU>iYk;g}z79 zr}Mw3L2uH3?dM!cJyJH=pVs2*_MeXqE}2O0|4-h`lxByNmTx-;N&n?}X8Gk({uOEb zZ!YLf`JaE3w6q)mQvNS8&HDF9`fHP<;z;+ugF$c9e~c?> zjie|28w~n4TjWQc)db5^UH`W&^p%o6o&WV(^xrP^?_v6X-Jt)4^Ue0#Xwe@mQnr@{ zNq^jz&GNTM`HMA!>E$;T^rrH=YphGSSt?BB*J{ZB5{vxFTT-%_IMLK`wpr-QCH>b_ zg_j(3{a?1|-&E*I+R5rqn?e7xFEHEhCtDLLryS_|KWCv|FX^Au2z33Q0=>!pRYfi# z?>}5>(0|%j%=)*!oT7H(1T0dv+zZY0?UEkdvy@HOe~X2Fi$%U>4(GN7X8DT#N{v95 z{{zsQ?6-cLOIRv1O#a($u-~$;O8F_dbezgRxd4_|q-?tUI?$WsZ$I9ZzeZA%{HqP} z+d-d;H2OSWyOgiFf1>?UN?mG^-}VJpegTu;VUT|<=mC4ypRSYggG!Lx>*tS1db!*x zk-A6HEBWezo}Ue%H`#BE)ITH%$$qO0`oAsZ>+`?cqgHe9KmS!X zVLJT_L2uH3t3m&781!Ex32&>GZ!5^d|j-C%FE@?cZ(C{|{2W zuKzkI|8&jXy8Vl)%=X`wq5hu-y-EK%gZ^s_`Y)IAb^V=fj@YKSyTt!s;>bPtb(LBF z(rxbbboPG`^d|k+8}$FSLH|+J=K5PDGThQ-lYF7 zgZ|$&=zoJn|MgP-fvy^f|9br0V9|fGq}S8y@#hy7{mV~u{l8dBrug%H{1m;i%PUg8 z?mye4{Noauy9Yt-{Gf$q|H=8Yn=qaJd7wAhzsaEg%?AA=QogQ#P|812(^uE$VvGLe zl3v+Ku~GI@=P`@^>!kiX{`}CO{~Z?ntEBuIB}ndr+WFx~0Je_q|C=R!sg_>X|6tIY z?7v;=UnS|ue}06YqE~jgPRiHq@4V&`>f@K7(AKe*Vezw>%#`X2#$lm0m;dF}sGgZ@90@^$^orF;x;Q?_8rnd2O?#H|0?4E5h1 z^d|l54Eq1fp#K$8zOMf^DL`2)A`RoE&6XZ=>H!E{bO~m{dE1;N%@O3 zd+YY^mGpZ2$$29){a**Y$^J#fUjMn@p#N9v&H9&1`76@s|AwU3_1}=8{(lC&N&nRb z{r}UTe*+u@uxI?@yy+^A+oLI4Fy+i~HcNV4|4K=p&VL>Uy-EM=2K^s0=s)%%v;OO( zd~Zo+i>e*^R;{X->Q|9Qlq|Hl^n%ccB3Yx?T?zrEDWzpj5# zuS=-+H*z$7y`VSgf0xvs_uqO9`u}yAS$?UMU!=*?*rhcke$vVUYh7i~Q9Y%AaSEzt$jsqe1>n7WwNll>c3e{9Ok5G?%H$ zuRz-6ZHxS^8Oraq$e(|**Zxl%ilYp`~v#e8Mcs2Nd3p>4D#1of?8z4_l}kpH$t{(31tUHSJ~*o(yeKElTIPsoHmEE;czCM3SX=zjYgC)I- zCjUPt>63_ir05iWyrg%nrBKJ&BI(-?Ok#AT=l>YcoASR+=09|ROHcXVfuEvRcG(}7 z18$O(|3zPNH98gi`KIen=eq8czH)?{vgb^fdM8dFz)zRI7cQIR=U2G&kJh>L>c5Ms zGsmfEY*<{sB)YhMY3=yNlY+tGU~+Sh-T#v(P81hPicc^I5dr?7uo9zTQqv-thDJl}%-Z{_j-VE=+V{yp|D z;`b7Me~{QK*#A);zl!}fdHfpof04(%a{rdx?~r>6{glslP`{U$(9QL$LoqJw5{?9p~_$Q&2JMtHW zx<(#T1UM9*UYJwT6Y6}w_25wF^RfI;_vw^;JN?T$y4;D3do8r`UwNVU|AgWP6|N`^ zt^6n})OEQNTO8_qxwRtH1^PvylNGlGIU7eF?X+GHTKPo&R~AgY@bSE(spgTOcS7+u zN}d;tL-9?ac!dKc3bD@*#s3hAzu{i#Ia&3j;E;p)*Lg?uvY<85#E%(mfn#bwXwT70R3WQYij+XcEeLDR#JP zM`pssiTtnp2u3`zaK&P>U|t8+byzSIe=M(a9UaHXbce$xbA>?XHdf?=zQXByZ1MPnyma<{+ck)=>v>M^WiSAhH|%|$v-&)g z$z#2B0#oI;sc(}@;#y8RN+|wPB>q}SkGQlZDSztuQ|E=c&uw$d=@XO_iY3(b!*X)hE#T$}4||1F&tsEGNFbv*+TCi`Rg#fIN0n zq->-{cM&<%{ko_pk*+r6vbgW_c}Jt1DSz)PX_UW-;rJ^m zf8~_Fa2e{%Tj9JJFWT~Vc@E{P@7cv`;@kTkrt*t#?wtme*32sVF@^ZpF)B-;uFGKb zu22zbN>@`*2o81j|8`-SzeVD3@Tw8y6LSkg z8%M&Cp(k=5D-5+?Hf8tmc^%YhhE_hFA1Zq_mhGzDMGDI!$Ye-ZB~qBvcMS9lcU=*r zT;~XW(&NvJ#NV6MwLBjjVqcuq)j%#gtLzhagz)(PnicPzHSWW(bi(Ix00Hfn?K3^T z8D9Sw`2)xcK;HUjsBCFrL2SN|5$e7?Sn@nv*fnQoPiuMj)O!kr!$c9OT^PPXo|4RE z-?XHE@OAtDYbgS!I!NH~u#Azk5qZPwd{3=YRcqAzwO#Xgs?J zDTA`)!&Qi$bQr(CuwA5lJQCj(%Gw%(&+TqKkUNQN&(ZoJ99&o!%v;q9`EFylf@*K) z%aQobyw02G7!?7Ty;+19_|wLb1#XWd)b+3s6e;^aWskMvJ#Zu8S6shwuV;rWQEFJ%Db9AF%yoz8VOL|5Z}ul6%8`7`6&2N=HfRLuA{6XlSfb{ z58;_){wVWVl(*_jiG1EkM`-jBVsi32AEYy6@-DEW96~A8;!!?Hil`Z(vP~+pAgmKX z`xE#!X;#&K%2)C_V&H_rI-T^=EpXgk0Lv~!A;A&1A%!S6G^LTe8L`4TS34fTs=nQ`9Ch3Bogb?i8f%m>i)j27j;yT5!H#xU;NGLtSH?cB%<;trqU(ZRI>|EC{n``oeu_@UC>){j6F#2T zS%Nc)R3!V%jU$VZ+4~D=&?Oq054PX^5165=n}pBm>ZJUYJYRy2%?CnRRlwoy^I_*3 z+!F1|33XSZoPV3wampwv8ClX@A*8uh<~WoSUb#`6ZwAj$JfCVe$qj8P&jI3WEYEjX zM8nl>K*O@dQGFhYRNZq#>8zqJmXh{C;)0=B;6e&lzYTZK$PdS#A!EB&wuZ7c$0ovi zT2D&xGcu;@9ppCfki3o`sK&AP1{}ejAH$xD(5G8<7>XXJu;&~c&FXxe#N>4zi<40I z&4p`(1#d4b68raI*&uX!b^8VHQiyt3XhH@^<`CYBHbz*rqX(U<{MOv5?T_pvQ{;8D zA#368%hAZYL10!_ZE3jcyz+3_3$x;H#0tY*XOMgfifBmY$_|r=(vT92l)c;f%B)js zL$l(w=#Pe7jq^Hwii+d*Gtfm_3su8$3_iPV5bB5GzZI+^S?|V2>(JGU5=I|7>-wz=RJUYA}^K5%Y0;HKTdap^?%$jwytdT`9McPM4=0G>VBpOE#Z zGH(^Vdcw`u5*&$qmD52YU&zLMQUe|uOsLWf1H(6B4GA^+vogkFPZ|3M%D(gSR_#vc zLF+?=9`vFZO%JI9c^Y}5K2p%U{N?v$7qIuYIFdaBX$^!WIgYI;dA;{&3i4>Q3Z`xV zTc_kH>Rrh0WqfNmAmU(e@4t5Mekc#udw-833WAlaQ9=VX;~> z-hW7SOH(D3Qta4AY%2#rVH0|DqpDXC`n-U$c;(#Jk_Z7@Go!}HdkQy^U@ME8B4JQPif)ae5< z86hlqikjN{WpO1LjHxqQ_Ca39dtfhE_4eV2x`WD?U?Ovbp&Tu)h_HHO3C9Uki zsY`&E8KmPT5N{s?b(E|WAsEDA#OAi2v*J5?KZO$@AqvdR^4qRc2xVx@=kj*1J&$XP z`S@<$)bk?UjZJbM6>Vqw++VYvDq%<4eq1Q-byO}{;E2nGNhvdFe?&phr zd?pHC}SB(ZN4 z&7Z`#gt{sbt_9vnDumIY!`w+H@eOr%-i2MH`}cEAxs7(KZ`q0e;gwJ1 zfM5d-vFpJu6945Ex_};j{wBc!XGFi5_SkT^)jdMj=r6G&LtQPw#Mnkvx3X>U<5U;nNZSQdN$8$*JwhtrdbsS3Q5ekpETr2`3#*cPmmic^wn*A5js8;-i&DUlEDD*Hbu>gItMH*c}@c>KeVf zGN`V`Uv=39TsCOTJA~lS%6IbnezKd|Q1{&RFD4%hF(8{3#auq(D5B?_-;~3)((Gt&F=%{ToJG2hA@k!_ zP=V;LgyNT?Z44-{CmVI5nVps|>jQ2rP>TR>?y5j+npV_RQ5>I!Ot^WXL0TNsQI#PW zuMXEsVLi0vbKIL$n9P$>UWE|l1#+)ul-?=rok=lvcUJDc;5sXSNBn-8CHManYR8asct=9lS%#c#orho*nG;$cS`$i%-lZ)mY;#k8+3i}+IP>^2e15;`e2Gz zynKhJKBkn%{N5F=f4eoWe}5iyd3gO1<&mOKl^=ZuZ69O#r0BC}?c>#_U;D^=b@5Mr zQ$^7TH(T|dsAR~ataQ3a*D~}3a6huE7C|=Az~GiwBx_sj;8~r2YsGb%U3Nn?&6~RO zLxqKTt7tWgJ3X`+N05xzs% zV^}n6#%g2m8ufB<|h_ zk8~9lhPtNZix`i7F9ysN&T6zL@m;+WQ7!0x&)(96Pxc+FG)r`qRB_3@Y&2wl6L*Rb z&*%4^k6}GR?BQckx0YmY8{s^h6?kiebL$8?UK0>C4tAq0S)O$`+mq$_Bgk{hle)*M zJnzPFqCC;KqGc{;4Q%|<@)-JnHy!jRI5;`)J#{kRuu4o80HpS{28-lRC>@P*SmV`oGQOt(E5*thPFw}J_ zY$T>bks|3$U!<70hz>M^}_WN9%FaJw?%95(5@_ zKaa*)G!mko1Acp*9{4)mJ%OC!BM{+%VQyR;jOKop3Ba9nUY;KD*IcboLlIAg&eRU zuO~iFc7*f%G26LwBo03uNr&<5>~*7@TeGu2%62wn6Y@T>pfb2=Ox7V^#_@NvULDah zGV2@J*=w_%9=fWAfn>vrpUZkQXWQP+hkN6~WBX)x7dWr%ll@A8bJu>^_wMI>GdKIT z!<_qauOE5aq0Z(53z72rgJ$FS*9T|g`07I_(Y8affxLJqA+H{q{jWovzC#IlsDQ5S zF8Df*R~}xl>Immwhi7j%!nyj0?7NO|b)1zojqb!O%)UB1>#3}gZ)Im8{V7zQmEu!Oo$6B1)4tgCr7rO8ReN9xaigHpQNRLoz&CS(v-i>r35!<7gone%D2 zMJ4MlbQG?|B{egNJH@n`$DK1%J%%{$i@if@7K(^H9TckrRADR;onBau=!(fsjJ$-U zrqeB6%x$~cc70AH#}s&x2w%9jfMMBmEXR?JgXkuRbu(45+)&pjtSH)zX(&O^b)riQ zp(QV4?NO+k)~jLN1Wg2?P%!Hb2rbX_!Zsl2Sl~uEkUGrpwS$!AwpU{x8!s5Yxw{hg zg|Y4s3$-8tQ(>Z-vp>Q{PI^DCdb^;TU2cbJ6?iJuBQ5g4!k%{S83IiR{=&G4@QSQ<|5}eR2$qvOI z?;A&Eq%r|vWeQ<3sqB=9b&PJp5GfJ=V^Uh*Q`8_HME}Nyx>78la)gYyjQVb&8;jff z!0O39+#Gqb@2{k=yD4vbPfU2(dZVf*;O%>&OPXQ-lh%j1{goaZss76Mah&L{D5n}s z|I@ARXh1Qoo0w}v7bHS+l{=#-rj%w@& zB&2jBK2fG@kJvUJS4GsTQU`T(fGbUU)I-O2Zeh?ZCQ`WzE89Yt_C^(VqY-XDAToBy z#V^|_3kQTS(LkRSx>8w%S&=?2;kaW4pX6XC>BhTAQ42xu$z zKErJj-OJekI_OAjM8vHU5!cltCFtJlu3j|8U9?rExQj-O;;x&IFiN?YLNA=$wTUP) z73*ZHt4CjIJ?SOQ2AtYI#^^ z8evK`D?;x~nw2A{SxK{A746G^C)$_2Rep|;`7yRH@LgyaE3A@%Q)!DfriZeoy7C=v zh)(UzSFxt14owYaftt_;w~1~&-T!x+7PXpAHYFh}k7y^}-IpVJxXlEP(JHyCE@G%r z7&2tkvv-@bgj_T_J;Yfq-%ALTdL%~#C}>)VNr}zf{Y;ykQfhWk7hL;@;Htv#P&7NS z0X94P@@D5Gt=V~pm?E72U(oDO7eg35rP-n9mt=fdxdS&s(PhF|HLv3=stI_A4t>q8 za@>&bp@@-_*YOcmnk15+*KuDeg2zAVQ;}d^M-T{}3Zm8Wc^&i^Tvq*iSql5Q=Z@-A26|(J!)+$;Hl! z3`W`7`#nj9ux^tk=OGjs0?pRmb0k@golMT$D6$+P%a&y5Y}uq02?s;OaPw9~WDipn zTKPn&TB(9Z%isWNOSEm&ysC&Qx^P(U^Bd8v?(W=%)ZB>Tv9n0`z3T{vu+!Lhw5x@l zigfkBvuBttD2{a1urkA#66@DQ0ytgkbD^$V+QBE%y{w6NNx#E79G`qJ?Tqonf=Zfp zJ}x<5-rxLlWy<_BO=N>XDKR)UF~8LxeQ63kCjD^x3d;kM&rz(T^+@lymKU?x$@?w; z-`+!F@0Cx&-tS;O4W?#xPL_WHcfDRbFB;!PZjaEAgXsziy9g?n98fp`!nAd&&CDOGV4_BVicf1=PBk{K|fKrbm;CZ@nc*62j+~F%Ic^^?bb_Rwe z@c*J&cyhPvqTsBuf6mIAv4d`P;>oX_^z85H2w7KN`D}>#i0zl-IiP9zzec!5#p-E& zth@uQ`&$Ttd7bn`I6Xjmx>zUc)-VVd4|y|C&#`P6!L0~WMyHAUm3f`?wF<4`FJ2SD z(!6nhSI?7fN<2?W&$){R;m_1m&@+5_9rSEEMMbP9zZ^klKJM_~L0I)9YhDLEzaQ>u zMVu`a)tR31{3$T(S1$saijwz#Q;u^t7<40O(R$SgEQ+9jIc?ks#`CrHVEbVxt2eJ> z9ny-&f#}5qyc-O-T)@mFCV8F0Wn(p81H2SIh<|8+2b4Ps`M zy@970f8YBn#8A<$;rZ3aaU2=6YKRPV%?bA11m1_P#(n7cV|~~6jS&WR z)pQfmGQ_r^c(?-VoceyHmP5l#B7yi<@^bG}XciQO+`9>&A={|F;1OHiOrUdqK8oOr zY&s2D!xGf^|G=Cmi}0hLWD8&V9**L;ez@TMoX!I;Sw;yiG=98VEE z;ZjGk{t~O6)pZ6QC(VJEpt%gd1d*)wV~5Z~aQkzwaQi3Xd4h>pA8-n>7mrEQ;RszA zQ7j!ej>KE&L5T?{A1Mw`8gvt%= zcL-14#Lq$-AKHaIj>~uAi5eOM;z=bMb_7E!A43${7(1To=i8xfBqp-Z&QRIr)<=jQ zl}GT1Ur^BZ0FASeYoH6@A-h74Zp)t49UF<8t*^%LjBYz|w%j*;mF~A*PPK&Yx4H!w ziPz#Ya62OLR&Yc~Bxa3q0ng9;gt#S^E2!s{r#=z{-rJ(;gIK$ud_*je!y-7bdI9s} zv@~D%NTh3GVW{iC-k*TXwU6tK$nRsl-vNkx6b5@2BA9f1^hsb|+nOlMqME>k+EkD3I`@e;w8PYotRB?>hqb`*T8HsDQED^&V(= zUlPgs)U$scmv;SmH~F)uIy7JXUO4_c(F|aG1naR^Rust@Vl-8#eG3p*#M9+yZP2TX zpNU%(f2Q{_>`xsT;}dpx{PZXAGj|&GFLXqW3Esu$(!LI%8(Ak@`bK#$vQ znwpQYp?v}EBk}qi3=HB~vBQW0<&N@ji#{BmQ9#dkpi0ux8WA^WcA0wi4}o;?nv?*H zo>(pNfVIkPh>gpjzF2vK=S!{Qb$9*EB6^ONUM=I^0HGJNAj@I_&P_tYnj*0PM`%Ay zXib?3ZJH)>5)Xvq7&6e)`z<-KgG4UGjHR0k#5$1ydhY@>?+n31Xo8#?vxD5lH`F)J z>!g>zXe}B|2q5Q|+G1$R(i>z0&1I9CRH$Ds~@CFXmnY*&8?NgwMyNK`U+y>#CJ^ca3Q>iwp^ z4X&?FG=}H|h*sSldx+FhpRLKuD1GG)^5Wxtcvr~d?)|#`B<5CxloJ>e=5*IvQE$|} z=+0H8KAAzCE4TY9X!`qi&ZLEnjV-Z~N%gVX=IU5ub98ZaP4%MM@Hum$C6k((8<#X! zFN?bCOrP{Ic4% znp&~w#;m4McSc__Il&<68nL9fW@%$XZ4`E@?T4qz|A30Zq7_0}VjGc@I5ZyE0kBBnwCPX;%JF~g)J&`9r>}) zw=`8nyM7s~<0(puS}E_)^XOHas+T&m>o;)w85FjuEY#q-@?*LwmJ`-(2o!fMLH@jkoT<(_7 zi0@s)BzL&%l#cJZf#zrCv}vaVi_Tlv+7N3EP8vUPeDR5sTg6$)6(y6$7f&2tQasMR z5S&n4GP!tiaT%QNAnAZvm&|su+VZoG*mraeJ*Q92-I4NIK<)`s;rl>|(U=9dJH!^G z|DoLcl_TclQg=qtXI)Ym5!^@9pvO5v$)M|ngkYPA-$*(T^p^;FlDCd9Y} z^7vHRi}Vd5Jzd*kxkh@^TpexnMmy)s-27`tOwBF0CNMoWxN_vo+~N_nd*=p$OwG+d zGdCx^k3;r>jpl%415%C8=n(|QImC%@>MP|m9Nu)Dc(PXe~8QQ z$?g$n<`!HVn3@~BX5`e|qLtZ^-0~40?wwl%1a%H6;A%7X5&n6DfoDWw^op*2dG6MD zq8^i;+clo0z&@7PcgT;EIwBrO9nXV~zti|Z$B9T@nvH+hZlQnnIv3d|5l}E8g`@{b zx?i$B`a5b1O$Yw0Cal)ZAiN?abUDQYLIw z41S9wziV-@vfm*xH1sQ4Z8KcKsvngdy=(9($ROA zm8|PX_wE2RyOzrJnrvvga@4uGTaZ8Ug^`j$C(EzL7tVs6U)Ah<_C5|&ai&Z9{&ao9 zpzCE4D}|!zbX|x1kgn@9)%CBMu6SV|>AEumU7JQDAvT#*_)?L?qD)um6R@lF3D{No z#JRcavDg(n9+q^i6p!E){m@L$Z3g8JL@uTZGz? zsIN#$dQ6wJ^i5|g?YUW+(azatdTQ+#^<$#sH5Tznm7C00MZy*p30ojvBmQKpAJg^` z{5mARW4!!Kww(#b9dWmj;q-l|{=OjjJ;~~TN55oQ&CIO~Jb;`VDzMA1PzKHy_VeU7 zsb4Z4%*Q*$elvxBG0ATqZ+?^Zn~|{JS@4Uy&H7Epb*ZIcipJdEf@HqCf?=Nd&5?`%pisZg2dFxa9Eg;_5Z^FOq1%U*_+x)$k0?vhAP^4er!6{UXVC5+KJ|`R8c4)N}K00jJIj0ttvO8h9@S#8(bX_);$@ z_$;&F4Hlewblxo>zM5ddo4p{AfcWBr_fkN71;T_c_kx1Y3Jcz5!7sMpms;@4EcoRX zoW2g>-2&o^5hna9F9;;yTy4QuTJR1F-f6*CS@6{sJZ{0+gNH0dKzvz)0rD^)zP4e) zuk(UH0^*Ar-b(@Tl?@Y4&xm=qfcP4R3BSP$0ttw(b9gTW#1}hE_*yS0_kIQh2w3 z_#%o4zsCy#35YMJcrOLS*HldSdJnh_2(>#~lpJr?{i3;wtTf6{_)wBVa8_)`}AX$$_0 z1%K9p|F;EKUXpq_AikWFiqToXp$`anw}AM%jtT$07X%UzU*Pdx3W%@rm~i@1k9P|= zuXsTq0r52-@1=nAsuvXLw^{JlEcjn6_+LHvx#$RvaFVzfA0Sl&@GRDE$7x~LBNq8P}8mi#8;X$5T^krn-_N?LBJVp!E-D)edWo!1)O~>IDG}my9LBo zp-gzbB|UvL%DV*|`ihiy3y7~unQ;2bly?g_^wlZv7I5e*RNgJ%&{wIvTfjNmg40*4 zyj#GbuUL7vfOCumKhA=yuU@6{3OFZN(x2$TFBiy#sSI#-wZOgY{%VP5YZTW>KE)b- zgG_(8hTkah<1~Doz(;5(zRM=?fCoQRBo#9%Dc9)XcgNASbR03qmzXt7lKfVrADsl` z(TPIjULO2g0^i$%X9-p44pHjXB=Fo+5NGQIp69{e7x)1le4fbC!5;hpfgk3<2?#h} z5Z2Q#BF^ZLI7ghZ;9mPvLc||SdawQ6^lH{Nl?-ty6_95EM@|-MR|Af>TqsGv@s^8= zd&|Ye_oba@3pkieG;D}t29)G_%aIZW#GMl_Nx<3P3ySpKa;JoddzSPES#YnPxO@(= zq(9Vx7g%tczv;EzB}ZJf@Hx_gf6js*Wx$2c z>1QX>&y+{k10ORY+3!*<(@zO!{lkz<|FOW6{nenvzYE+X_dqZl%kERml<8|FUMbI! zO|d;9@bl%F<0uc?0elSW#}>&Hhoi|H%kERC^kIQt;NjB-d<^R+D?WEv(*F*)DPQke z@X2VZP3cd!;O77z%kEPskGx#q3lsV){2qbVCh#TlCl54=d)VioszrzEo?e@UE)ph ziptjv1g^2-E86abMtS{564%p@L>Fx=o6lE%(qh41leo_3e01rEPrH<-%He@CM3 z+BZ5m6wIRQi#gW0Gr@<}NYVBX@G)$Bt^B;`2sgbuzH|~JhaU<29+w#Z zX^0_?o)Q_gZ)7tgztE3j9Ht3hNc*QCZNe z&urjh*gRFKO#gr-{bLsVMc`xcrFY#A!(#}4L~_LwiE?PWO5i;Syi?lkO$$B~LxQp5 z3-Kn$FO-YrT-T`@21!Fxl`bq5^`x>6>aYb{Au?D|CK)H77`yX{&Rspn@F$p zIp!GBCpmAX^!YaMvG{Vmu20^vg#R|dht^KfcD}%0a8K~xoi{-|6!?n?T#*>T5_ z+=HbRu@+UPs0TjQ`9mVTSlfiNdo1`n0{>$oJ*{7&?Pf4E`SUXtJa?Qqeb9oBx8P?0 zr}|Ya?LzCHXzRA5zrljPV8MgOlYO=cp7f8_L(z7<1^*N{=~Fe@O-JjUXq$$ioyk5| zTkyv$_&z6?`FzQOueIPgCz|=p0zTIHi>oyL)A}mfb^)h+m7^V_jn+xgcI|jGpGSb3 z(tqhBbNYG-<`l!`l5-XXI3JP&5|iD7I^ahOR2=47Wl|S`YMT!pG16; z_gT)DcwFGg`z(sj>jF>SXZe~;KYKFqN#0LUeC`!^ZbGi&lQV_VC-0{yKFfid>>0P< zPV|Cv=ESB%qcv@9B_-SlWIxjxo{=b`6R(?iiE6ZjXe!j*uQ z&yCKR5}gy9P^=!7R!>&bv(n@1TbirKPb?c6ac4_;rRn5NBzfvdaq~mr$jZ#fxo1v| zM5E_KOQzt1Udy5@S}JDaad6*esc;g!@D+q;m_KMfzNV=O+RTYXN~6*G#`=c(m@_^y zZ3_LHI7$4UEdC2*viLuxxF7x9$8)Dos#wkvc^{|E_;E`0xUa@he}G$mNHlHo)Mp;G zB z^?J_4=+IOcuStiRe`?jKs4(!?t(eKHE;PdqgvFF4wXvo34Yd`s2Nou+QCUW{2^7_2 zTt0Wkj5!r^qjRU88L6P6n>)`I(q&De;-!{rY2y-nqfxx>V7g$KPHIU?EYtD>bOfPPCtJBy&E9xS0qyoFRWtNV3Ts z0x8p7o6fCkD485pgUYjOh?oDKO&Rs~nro|LsPW5|Im>F7)ihn~MDYRC>Y9t9HFX!^ z^*i-T`_(hGMV;m)JE6251G+*#z~`3EFFq)riT(3MjHKWIc)J-ec-*aMCh-WBwpeqTC#=}%iNfd z(qK-TKwYKO=5}~gL0O&Gu%f)D1+95e0qY&CM;pGezP%n z3HE~b!Q0c?B(xv4)+U|p2kuMWrY+Ix+l@8E;u4{zU;7Q0(9-_82*V8*mPa)!HCnt3k;iCfEg~Kd$NKIXP`5b zW5TfgwmX9{Y=1)cq{m9b4o7F*)P%5+OMfHw!C2N?PiQ=e=tKVc8RT=AWO^NF57^c# zRN9tYc6e;-70L2>&e{Ga!%C(srs3-1`sS8cw4pH;ZCqS|nKjIdVQy_8{3Z*2ORK%? za6fgTn#XHwB}vid>V_q?(Z$PR5P1nnwA|lR_i_`jverg-o*7Wj{TFQ}LMO=NRzu0e z>ZMB?SJW<2uQMLteN~!pT;|?CEh&x8UWgmgwY7L7HRdFj)i%HsnD9*E4ULQ37gP_h zKqgXoB#YGA;mEjauO?pHS(Tx>0hQodlDw@o992lksi>IJTr1|3Y2pYg2CAb}x;2;; zjwW6cPLVRKd~zr|hDj|DF@$iTiacIS{*a=?o|r@8_DEJlciKInO#d&}UOxNmxx;ru zQq1BFmA`qL<7va}d0vUBJ~&LSW)k}ubO8qLU4{${sh{ah>d?kD?`UlJ{Y=l%9`ZA< z*w3IlG#EegWFX;Zb7F}G84=L`TBQ|YFriXajp9K1QEB>anW&&{EbXas z!TtVO_`pOR#`x@2!J z1?HVSbeGGL99`Mf=&Co@F05W!-B44zkbETJm*~99jv~G@F`MpoiGIbx+9mb)NKAFC zrcNTV+au3v!BJivRH2p>S1(F*jOo@qmR&BbZ6H_iUtcCS*S6GOQd_Z1-r@J&%^Lty z;kI*Plb5Tngbbh>%W8`C2&kv{s7G}T_06$rpt`j!e3o>HisjRr+#-jT!zWI8AQNX9 zJ!Mj(PR1fAaSL@IgFbhRQ6ulY`dxrKv1LVd6FxxXcJ2IoOGz^gW7EYDa%QxoBs!G_Vj`Yle%{g$Vw5~1I%j5dcFKTbAkC56 z-;15xQX3msE>$~ThBh4m0=tTZFkeb=u5ZX-bZ>EzOscQjsT}%Dz!yvF8(YK|vL=SH z&KrWnT0tFmTjc1Xmd0ouTB)VAvVB1{Xv6Ao45a5I`V6Xh{0u*H#s~KQ4xe3vKJ(5& zAfrbYsu$KTFF|i2T7y}%mT2tardsiZE2`K@D-QR^*tmuEfUMNqPk<#_>iac7>MGB~ zG>rx)oX$FX<9_>%=Qe%P1lNJY8&QmjS)~DU&1Zw`#96TH2J?Rz3LHETn~upbQvem^K>-jM~9K`8Ap zFFpgt9ct)V4~u0C*>E$`kF<6MsG7zc%0!!GW<4%(_0Qz z`llIw6vJPUILZAPek#3sLXsYru4L)e8*udW$0H4Gl%Bqbt@zM;OKH>d)xy&Ae0|7p zp05Lm0XE{#^X0xD(8YPaX36xl`#F9}pScWQ&+ux-e>T%!eOHO(&SUuT@_A<+Uu(fX zVfgus&;G;!8|~&Zyp`dXFnlw^>1k4xuRyk7BlvK;1sTrmb^*ibS$@UmCk*HLJygCh zMb~pY!+E~S8P4-HN8)5|?&tGadhQPm4CnmY8P55Clkxu#$jEWc;;hwhmEVULpUapX z9+fyfXS^4~pJ(Z-8Q#lq@@>U`FZp~w*^T?>(G2J1cpSs&EuV_d6o%8&#R@-*;hfLQ z5-0sfvGng*(tlAJiu7z}>Dwf(m)GSiJuk1v7=9JwqrMYE{8RK~{CWI&i}B&{=Tl4i z1NH)AY{Z|(p9K=v^NebF0L4ecom`w}Z2<%SSKAix|%JS;KIy&+`oD_WT3GPh|dc z`hH2d^iEsl|93E)^Lf~UkIXgOVK0g6b~u*dod0SIPVd{Ijrg3$^!z2mS2Fx%hI9TC z@&p@Cc}(C^hxeVWn;U_XYm*L#s#xk7ecM`*CtfBHd-Ga+*xTBYg44)!y zbNkrROLz06$Lr(7rpG;N>!yd<{nKSZ2>m{DJEkvE*xx#C89vVd-teum1AH3#KY*fGKZTQL$$4Xq!ZyCdR{i={#@=*@gGdS_GEooXtBdZ47b^TPu8RVEqc~4 zyV?9|PnK^c`uuMx$31B`zy9`lR_@2MI9bAQ9?#W#@F<@1_C=M~2;lePr{Z=UV|o*V`kSOQB6~U#QQla2`*-$#CAj ze4pX;wpL|_!PuGiEBxB|C$9RQe(awZeh$-nj5E0w==gV zk2Bn!+|Jyd+|IW$eF|`_?0k$XR_M?9*!r0ZEa_KR@NNsP#;IfnUSH(&fX5EwBp==X zzszvnKWUe^?w_j}&h5j;O&2oz;5FA`BR*edc%j5eAKvf!0>c-u^r}Be=_fG!OENw2 z|0=^TWO$U}ix|%JpTuyk|1^ekJD(+S(udpa8W%+#s$Fvbn_w1D4J|S`4p8v&gZvX#be7K$8W;m~3?=zgs{gmOnTt-nK$3}Yc za``;NdA`oI;9~?Amk%$mB8gLec{`%UM|wLlpYh@C$Qs6nm)B;7^L_%^gf_|-Z$}Cl z&g0uT4CnFf0*RCU+<)p>dT#%(Go0J=Vuthfg11LJeJ1sKA$TgkDx}O}BR$V%IIq{W z4CnRwbcPRAy)G8oxc2AuTD|v}%7yz$g-oyeNsGjFKWSt9xu0xge7HZTPqgWBCnN8) z>HJTXIHl+OuaG$D$^Gy@7|!i~6{|12yney(V?e9Q@mCC|uO=w`F^Q90US3ZzoR_cr z9X{9oJZ}7%@#pp8Q-B;L$7fa9U%eNWM^#$g(^!u--3}CUO!)t|r@L_0X3rXn-7av=DeOECX_Oy6ZNcX=K0JLZ z!;fct?vXfE1Kyshemj*fZ|`1We5md#ebo1xC_Twi_*z!Kc>BWp`MkY&g{9|uzQ^$8 zjQ=ML=l(o`#q$*`eJ;a~V)!8pZ)5mT45vDx^2N)A>-jBNE~FN>=l3M8+p`lqY18Y` z4=woL8P4sgzGp;yxIMql?8EbWF~hk%uVFa1XBWe{J?~>UPyZmpxji3cIJYP7A98zs zRanQ{AFGkLZckn>RuV>mBIUcY!bu4CzWx%`;nyd3XkIOp@94Cj0vW;o}=%a@n?Gb}yl{}RJ_d-o@X zbN=r#ob&$|!?|DWW;jnj+ETA2Ec}7WUe)(~g*UkV(1kKp_<<6q{^Yd`KV0G@zMJ7= z7|!_gea(@VDE;;HPumE(!IJ)4EWP4Kkn(xXig26U z?=U`!roZ&xv!uTXxYC2?>-#KyffPW{w;9gm+VXodORwY*^aF-x!binwO3V4&;**c+ zGiS=jW}n-bTy7t(kD7;}q~B%fNj7Z++4%pMrRV%_XE^7-mf?bV8vb{%^ql{X7|!|o z)&DNWhx5Oa;heu;{qJUcIRAAF=luQZuf|YhOV0l%7XDoS99aOAl*{FQtNMgGe~xoL zH!``LkGj{a^HJaQBs@s}un~(w9 ze99SK%y4e!1q|nU(*0AlaXlw7JSY;Dyom$UR-pAf@OX6Y*#KAGWF z4Cj367(Sk*Z(?{A!`m1>k>TwOpTcl%PadzhJ&$AQxjogK53vq1{@kA2Zk#_a_aer> zobfr8;atyJhI2hnXE@h$I>T*x7BRVJvGiR3MGWV9a(zOK&lxOzCBrKiUd3?Er;gzf zmcEJMiy6+#{fi85XX$4!oZFMfd2Uad=TsZFXDP#jG66xha_9Vcxfe1%<%~}m!?~Vn zE{KwHJ!!sLZCuZp3=hf#1aUo!7(R=oFJ}1H7+%hBu1|>JXR`E_3=c89is7739mCIM z>6;k7l;OPGr!l;pr4KV)!lHdSfZ;)TfyNi|5l?|kWVk8|f>eGf{oXPS?Hc7V;dzXI z2gB9ahoEkT?EqpJljO zyG56GF`Uw`mo)p5Ky0)t5=ZX8gBh;YR?(Fc7*6Rc-Q-R=!%vVH?ZON{k>OPgr}T?kSt>qxHsSHXm7oYE`)_iK2&q}j}H6)Wh{Zy6qzX=%5e;gnwS|5(G@DKWPEk?x-C zJj*>4{|{sMISemmIHgzor)zk-q?ym~*^Ey$!_^uCy1bU*lzyG8Z}%{K9^>;%hM&*y z9So=Rs{T9jeFc^SHhSH@k zGn~@@k4zt9IHgx|S2Mg>rls9C8BTm&mDhS09+MdD_RVomNdM*Tq4*zSxaxb*g&P=t z2}^$q!%42{>%Y!$lA-G7-xyBmD`h>JxR=Y6(q85sivOoGoYHs5^c@T*nkt#kZiZ8O zHFxs@!>4@H zrn>t&b<|wDw0b<=p@$EwFRG4JJL4C&v^WA7-`cRW{-WBY7mpv@>v#wG`D0g?e*+aV zFo*m4EAjqee41DqwjcBH^i&3!m|W7(mt_3N5b13)yf1Oe_|;SDjbHXm4;k|%HTXbv zTTN|KED9%HTFVSOWHNLMrTcuKe>>6pEi7R`$LhFZIhjE~TEm#49tKnj4oi zS1*%a9%<3v#N|hB>ifbZWg`U_3O^;|OSSB4r>s=d<|*S!;IU)B)xj%Q%aaeeCQ4f= z48n``0+XK)G)9PF5Hmbg)0QdSe(An-mvJRE2<*4I4$6|L^>f$?%q(WO3d}6cP+yNFq*ER9X`p! zoLe7NeMs^s0?B-KfLxIH2CR`0I8I#`SHI_m~6P6fihozir)c7{Q>!o{WHdun9JV0UzC{ z!Pwp=d5<}uO#wsU@5u;gEc`tj0gXBg%PgR&6SxQGU;7tta>e183hiGDgFjL*`s@`M zCKbH(a*sMhf8zI?L-ePG!6B%7G&~N`pCZldK5&VT8^06q6}|czd3QQoQ{m%&w3$>d z7rQQlmC1I({4Z@whjn1$+c7LKgIUA0m_A0Q4 zojsibx)tE|d$Nt6BERz9?_#D*{ML}q!Bz!3OWkNgQYrNIZWt?tU6dzh!&51A1@?HQ z=wAWd3UUziS=d5XMY&o=t%6~qYw(rAV>-#wqbWYU9i6=}8f&ht9oPrUCq?JP%A(;# zwGFZQ*u~*Flknkk^$~MA#z)Mtt0={1*=w7tTWW3JVAmG7{u}A#v6*VBwRM!4d|KUI zreV4ZrLRNGoZFDV6SMHK^OoA?ShTgF{_Cx^;n`;kZ-j?7 zRo6F%@m<*|%KfA2OY*{D7gn4*H~Ja*u=(WWwKcKE=7H66S&K``s2VS8T3TIG z8(mmkb5XRqwJm&>v}(oj=}ji9?Lo7U}<~=i7QWBlIbZKKvw4rfP zEpA*^!p}}l_!)u1$12aBGb1`@W_0#v=4nHybxW)o-)nA?Ri?h7J{GNRZmzx z?|3IZe?3XnwdmsNnrfKCG+fFg!c?4n&YY5Hi9YVH0KW+(iyNC)R5vd|<5s=Awz;Kx zDIO(QQZakZs)(9@|gP@d_vlk+XBE~@Pd(eCne|9d&Fu8^F{oNRJ{n!p))sBTkgKtwdMRcF zqsxn(@imRhmSK|68Q;(ts~tb{obyh^kg?_>sef%P)2emUQG?H_L=tjFC)Zd+si*`M2#S!xj8O3r zJ2S#@7)|@p)?4kZy|vb=ZE3X@tzsa&v{n&c)E88%G6n@-h>GU>|Mz3&%*h!8+WX!6 z{l0I0IobQ{v)5j0uf6u#Yp=8SJ|6J*?E(DV3f@WopZ5TMy$3wc;L?24VKM%_ui%~a z=edd+PKU+d1IWuC&xqoW{O6e|8cv7B;Pn}ZPWT7*0KUxw|6le1ezAgg)}QAKYPxk; zjDCHNkQ1Kg)M+>!7K6W6;U5N?`6K@xM5y6(SPZ_~1OA~sfPYNER}wjX#Lx3HHC`PS z!~dcO{waF^zr_Q7Iq1-Mbyy7l`wHGk|HXTNzpO-5+i>!K`X0bndcZ%t2lOAH;GOjI zJVRY?9TuyBVh{MM_5fa= zyXEBH!aab$QsGy}B8mQU;~u~#J>a|c0DiFtJkNF4?WV)-u=n`A!~>q^s%tnM7K6XV z1D@x>Yd9SigTKuKp666+I2{&)zuNdHfnqhsEIad6Z81xor>NhpF=yo$$Zf z1Nadh@I2pI)2+i|^dH~>fBPQ5>+?08^z$5QjaP@o@E`4gpJ&EtI2{&)ALRkhGh;QJ z4vWE$_JHU205qHqi@`T~!1Fw24X49m@KF!=yY>M7EDv~|cdYU1uo(XHJmB}*1Ne(Q z;5+sJUZ0=pl%K(S03Y+f|J6N!ztRJK-#vg&dcari0sLYQ_@nm#eu)SC;d=moiwFGa zdjNl%2mB#>0Drd!{J-r1{JkFVJQrKby$*x0X^~uT_BL*fZUukZe!R>7v^}p=_D6(e zg>`}omvXX$U;A(wa{kqXsFr7a_VwXNBYuTWX2$;^EZF16yw2azxM7*a;NAJ%_dKJS zY5F_qh>Bk^{3SYr3OOhBg0EEcyXkWCFAQKW_z^|w@5cYVBJe>4ufOZ0$#&z90p6?q zsveUNH42dJ7e(CNejL;B*N=arc9Z^>iok~zd{E)nft&t~fcK)`QuJF2ko2E{xSRd} z80tlT+iuc7YXErX*~=uwP5%tQd(q#e=x-wsex#r0JG<#$qwtp?bpGyB^s{W|k9Bqa zj)Z`E)&GGa^>@SnU=QJ4WExKwf$vuMPj(WExSM}Z0N#s#+dcTl^RC_e8w_Bt`tK@I ze>eTnBJhSftbZW-n*r}df9v05#oJ^c+W%Y+`ma^^zoGK!Agu6D*9j`r_1Ep#rRjI& zyFuM&WuLyjr zf_I+5%_7|V|F{VKw<`L(6khUwD&lVbPr*6nN8|ROCoxdj(ynFn9v`GEk z@L`9+k{Clwoe5b-cO*fnh-SYPw z;Jx^_Q}M4&!BPJBt#mj4nlV3Oo!tC;eK+~HT*15h@0+{Hzq$%<{_QUOANLU6&HtlJ zZ~WVLlmCYU-i!YepOlPu%I`HE{Qt4S@8IWpKUcxaQu6=Z^1JX$ z!u#-{lRd%j=Kpt#z_%&-2O9rp0^W=N>lOd+P*tb=rx16`|5FOToBz)$`~&g70Sely z{?99Tg+3QBuk-iEJ%o4j?+{F|z3^`iN-P8M??AwN@o)YH3Gd|J^+KjS;{U6F_u_x}X<19B{6oW^;s1{!_}%>9Rs{Z51I2ATH-Gq~P81^SdLRx$<#WamEcr z;Fl`+#d%N>bJyPnyjT45O>%A%_8_mALT-67rV6u!6tbRg9bd zset#Qzy0qLuv@{C{`(Pk)Bj=-{Pz{1U(2m3);J&ioN4a%+g{b671)oy*bt!K8F9f_7{o7xV z5UmdSyOHE>zrPj1f8TK$V`1o~{~YKEFZ#O`{6O;eZNPicAAU*V?N;c?{~pBM^gmSu z|A{pU&=t7YXEBWW|8+&^cgx>g=qWGycNhMNBJf=b|KtJW?@_>e z)qkg|zf=C`5_8x8z@xqC-+q!}oGWm*-|_+A<1PSq|G6LVUi5E%O(J&cZ%%34^q+Z* zH~rJTaIO8RM z8h*h5^p6F+7yUc8Nc?pQp8bbIs+<2mD1!gI@b1z7ZHzNs^tUPaLrM$Far3_g@Lu%S zyeZ+h=A1v$&mqZ8zrV&C|M$lVuzvsC^0TN2e3yb>?E-Mqp8&iU{p)%qYNz~cMv|NU zPmAC`dt5)#MS_bQEZbK-J$pf9+QI-Sd~AEH3x|*yAPtN?i@xdYa7Q=9k8=3m6G_FaBAI{u-5$ z^s`H8cuoIb6@EAUZ3=(8Mx?@^>%I|o3ftdJ|2hS)@n|rOU*C@bychlR75$dVNct&~ z8eW(Ckize#f3w2Bw??EwH$VSTg#Mih-ko3L*TueAg#K&v> z2TzxPFs}=K!Gb%(_?Ciq^WReN1JPdxcrX5M_n`kh;C9m=FG7Et!tWji-Sn?2LjSD_ zzS>n^jbA4}T!jAMJ2Ho*GLrv05ZCaU|9ituqx`!0zggiADtH~Z?;91ooBv|5D}Xc} z4X^R*`!Rs`;(xmb{T~5H!|QV6Md%MkC59t4A{7Q*_e+b=->Tp>9u21P>-)Qk(7)7! z{#^jl@VeaIBJ_9eCjE!QLC5xU^MC1X(tj}Ez4*V=gZ@4b`ll%T{p3gCZ_$iWVbFE| za1r`z6kwezzviD#exL~b;df<@HkFa`UxG`+YyKYy1YYvrsqkxfRg4kT5f$E`;NAS+ zyqomffcN76tseCIJ?QT%LVxhzB!TC+=ncB=r`LPS&wK@s;tPJ7e>(9(zjFbB4??5dBSn_oBbegZ`l&^siR< z-Sl@V`~&g-n3KKf-?*FfR|DRQ{%#NYD?I4`k;3n$KiDeyHxU0TM|;!XrQiqR|4_ht z(I0$Y;%}3InE!D9n3lgPmEKhZ|2l;~sPgGR!|VHW5&WGBzojx#f9&mn|NbKQw|f+^_xDEBuQzA{Dyv9}IY}_TR4Xx3X~ji2ooD{I?XrKk?fV&XPgy zzZ?Hgir^3LlpuE~Na8=(1OMPL-u1s#;a`-)EF*6GWq|jp{}zScS^q;l@Y_Z3SC5zY ztO4*Ri{P*OSOPlhf0zgU9YyeWDEtG}|D7WEH!J+k`XAwe|MIXm|92|(oC0-mCtWs{j1KGAHYQ3@#0?>%SKsyL~@|=%%rV-`cPU za{t`)^WIH6GcUV9g0xo4uofA4ewQ0R$@9V=SSaCcgMIG&x$z%Y6D;^SZ)IHmKXKG3 zk+1f|+HZ`iW3+9^HBHfRCBA%#KI0Uj3!V5F-#j8;!?1W5Hj=(;1!NoUr{H2K7vj1I zR|l@|;$qsxxTfNoiz|kUY142`$8|ZbdAOL?j%$XB(`LF<#b+YCOvPs*oUP*DLwE(Q zD{)<=(yl?+iR=5g61aYW>pyYbhU-_jh$o3Fh0DfuJuap##+AW!Bd#u7f5deUu0P?r z4;SC<64UA54f23&$yQ1dH~m7a6O3YAzaIGb>murYb7q`U5D!tTz|#& z7_PtJdK}jixSqtd0oPNwnD=R1&)|Aa-Txio^D6!#!k2JuQuqHr_=<}E6X9zr{szJ= zD*h(IUKM`};oG>jtNV8lzN_NzBcy3S8a~9e6W7P;{u6||RQxl9eJV~t5kUh4iU2x))f&!8R1vjnPe(ILEGd275_Ryj@9@R zVL%A0e`V|ye{qhz?!myjQF`$VpZj&^Bd0VF%P0v zA);-T{d(;N_6gjqwd^JXM1&AlTK4l%`*ryweL#rC_ug(E)XA(3=6z+MMT0DzeuKz1 zt*hZIEA3~738>R2R(f`amFPxEgRInBvAr7}?8C3o-n`vh(G*DR^u?O3^a9JujGbuJ zuZ{T?t_9UdsVhhcSc#r0tA10gg5+n3!91uD=hMl`fM(EbZ|iHV+}>!em^!Q>vC9|# zrAoEZtyR{^`w%GZ?`sY8Uf;K&_qs0fkyNU>Zn&yeTZx{EdaHhEmw;l4fIe_~*%Wg*1nkOQ(dIbK4a~jTWm;fmNAs>)q z*KVcijAmwr!uDCAVT}|7hgc*-ci?etcO=tPnS6v|5;l`RDIo>d)Bt^B$RffujiFY< zOj4sX)$VAj{b%pcX@XzTbSz|9>9N(Pn#)HAMa}O=CZo|@-d(#PYVU~J+eB(4vC0>% zzo=&3->mdm07-2ylMf?fG;?vN%}QJq5XjmUvJNAXX$+yA8$)feu}!soz}g!y4>F?Z zD?{yU2I8yfkMFan{f5G~2KeFujSm7GURxGo`JGo*_8l3q*P6+bAX-*BiW2LeG?QHC z5=FkY&MQO13^Vm>7$t&?NPTxK5VhBef)k@dJ~K(Z*IO~IOOT%{HxzKtZ6>!NlSkEJ z-%=GC1o%C#Pc(CHs1wz&5(_H9v}9-zZunc140SP#WX6GW$xtWaW^x1S2z<3~^$r#M zdr;&@lLf%RYEKS+C{nG&YM)hqY301XTInSc=;X7={99DXx1xHH#G1-z{d=*1Wp9#D zs8Aak8>w%o4oDdZM-r!7b zt!!rGuuff576ccsgovBT<3H=`6O9>7#{+rclRbV7q$TRxVJ4piT~?~wOwq1zqSgHy z(2%IhP|NL>Z;JhRq2RwkADUOs*s-|^`en#WWLL;>4MoM)rLr%kNDht_Vq3kzN_ekP1 z@GTY!&YO=YXv%^*a97d9GamT39Zah+vUlw2>l6Lo%EUr-=;Ka}kDkWy0@?{$BWk|_ zEg(cAnnttmNjQ5YFba5d9a56L_tU;UmKCJZctc7OM-TKyLIfG>h}!Q)?ax$M$jc{f z*{K);2(?D58Z?mT#%AgikSQtvG^mb&j%=omM`E@W|1jp1FG8^*NA`M3WTX{G5DCtUm>&7+SyM&67?OF7lpma zMZ3p>DieAuTE9)(5?ag2r#VIUw7}8(w=T9@wS)N>>#B3?x0eV7ZKX$qAjhzd6lGum z>CCmjFtkALExLbDaInc1PtR;q8iApzKcVVY@~$*9c- zwHuZn3BqB8=7)yFP7txtGMiSzZVXI1zX$p$(_G!tmDleM`{mlLi%sTZI-&D0LYVHQlPaB&z`>DXzN!}<09E6x=&lSl@CKrtE>~DhC>4{a6 z-x#{uv)73}F0@x=p&_P+f7pQ_I6D~Cpi=mb?$cK01P6}V?ws_A)__K&O8vD+?Y&j@ zfA-gCX5K{3Iii`_brZ%%Gt)uMClUKY%YH_5e>vre+S3D=zf=+fr#(@7b~Wy61jYoX zJ9S8#XK`+)WGWRGvx)1HT`kXaG658)t4lx`@~wPAWaP_1@|*(S>#i+SQoL@Q-> zp>A^KBq}YFF^3$Io9S7q5W`B^k`O`YV|yoqvJo7h_CWQ}8fhM@t|b~R~)W`GP|lVe+s zWniC`!t6~>5+Tm0c{68-;3ljOGwBz7^NEQ4OvHXnv4n%~Y9agP!VGzb`Lmg%vyKLo z{jQm!g9)r`6?|V)Rsu#}ipCf#=AepOq8->5(Tz5#_E3!x6^-F)33RLKoFlqT<^{=@30 z7gR^<`*fS77X++&=y!du+K}@m`@`OJe*sxX0cj2-wm1cZz2tV;=s(w@)VBQKN zwXao)nyp0R(fs(wHgk@LR{HFA3x<@vA7UNC$~-3!E8E_8YT!NO>*8!bVt;@MKU_ZJ z(cQw)^fYMq^IU^w9i%8Twi1&dws>Xih-mt9PEs(5GLy8iFb-B z^6F*BU^GArPZPQlZUIhS=oUCcb;!(BuzlMg1Xp1WjX`XSnx4H?X!q&q8OFgCkS^Rp z=6;Qsplqj^qWKrKrv}vItOqI@4MI{e74vIKM_*L+QlgU>p~t0rR+jh>y^3H=GmUII4A7E7S% z(82Nzr#e&bX4#D#4oIiS2`!oL4^ltEm6h0viPP2X1*(xA&GaDn=wQ*DNb!bl3V_kZ znz8VV*rj41hpdcHva&J$b;wB-4bL1u(sA^!O;)46FFF?x(S2A5bj`rbTUf@qgt758Tqp_Vsz|ojJm1a+c^eMYU z_>-AwXZC2MZXt5CtdJwlz20z3lE~qb7+{L~DKb4dc#ruCaBw(>#RF-*cI(D+R5N`J z+eIs>#i4abti=d@C2V{6-$Cs+qqd|50oG51o4MLbhifbw6&|_XTCuYXBeR*j z2UePuSsV&OAzAPf1>u`fCPKqQ`=Op{W=or}h8a7U0mcI+5%-2_MDB^`^6kQEw3wq4 ziReto1C0jDogR!DYsKa=FuNp@S>B0KIdB9Nm#7NqZ@d-Ng1Y{YZpfP$#}CQBV6=7z zQ}0lzj4#!3+AFwUrtcB&)^WHex>>RG*e!Ilh)UXbmx&PhEP)!&OBZZ$5@V%@6FKK7 zARR+d&`L+DBjDqfsC`?gl|`av@Sj~-4yiB|tN^0I0?2ov>>@Q*Vr^?AJr2k@#j+Pm z%(8S6-KGgZyxkG+aKz{9c%}h9`(&t7-y^x8}>^hyV^~`&ZqzDr}9E zAu%s_KuBn2zOt#oT9^h)Le)Z`lo;loLekP8LC!wywIGSNK~?CI(0m0YWmDPX@IMG) zKKaT}b#A=N)x1Z!FMb-3pbh}JVoX|1!6k$1vwk}ziS+(Afyvx^O8 zrSA^0v8?))=5-qx0mM@HUxhy8RG6rE50)`Keu{Ij5>6uG0pWrm3btdC4zZFIR#pS_ z&&W4(@7b1wDq$g*3risS($)BT#!@essr?y&^e+QSx*08a=pY$a(tY=`;^BjmP&iav zSWyjh%5+Bny#Or~4vLjeVFGYebEvU?OM}_GI??R|gWI4_Q;)=t%)(!88=j^ZI?4Ybhm5}_2 zk&JZNp_PI2N>vTPIrIdjp5I^x`B$rF**cJ(CuRWYD(k@i3(7ikcZka=;Ht{GoHDnBT6L0q2NxAD1RP2m z-Yc!NmxQ=%fev#5>PvF9c-Pys9j@6roqXb%b+h08DR)C1)m zqKsQ|I(t6u`Gcf(GHTJAO4lruGwxyOz=fPs)%88*b+eHWP2VPTb`&LUM>f8r5VOam zxHVI6Bhjg)g`X_5I25EF&nyYmFvP0>$P85D5|JL;3mU(0s%nkgl5-;`LscYb;q9bS zycOa?ANIhYP>$5u;*Ak>cC|xiL#$moTM&`c*=EXuLdo(Ub7Hu;R}2bzdWPY(lC@Ez z52=--5#Qb9o8cCj3o4vrRCXm_5TLjqizDHV;&{vABpr$w;#H8dIFSp*F<15o*w5WI06w;C0BOd;k5BV=T@>Tij?iTTa#awt8M>5e)BdZakOs#}( zfvISrohS$MWb~jlWnY7DV72ZX4+;r#yzT-2=MyQq3z6qcb|*185zl$Y6Y~QQ-V^~c zw}rYy0ePvv3HSU_KQk&`KPs_jUNiZb(?X%x|3xH7Q-xw*151ozFRYZLxHVHZBe78I z8%a6(5*pE}PlgPrY%{fVgiM{UQUfCOry`XG52{v$B#8BV=U}WJttV8XyT;=YMNf1F zhXKU?fdUuFN3H_Jqp)Xz;*k(hm+7I5t?iDNdwMCNoOQ)bJjG^pI+G!ZYmS{r;41n#S(xfc|TRwdzMp|b+iAMf^| z=n~{F5xKIru`qC$5*)!)Uc4=M!%V&VJ}~j0HL_Rt(OUs%F65^KWgmTnGNAhC?E>X3 zp*o;MAH^%1etneE@9d)vr0H8i>|PlE+Vbm9tomN_`+PgKe29Y~&|+<=Zo4P;mE}Q4 za-!E42Uh*=ya(B?w9w_&i{2%ti!f|9;+8*j;?0awm!OA1EQiq8+KDtEG!i>YknBS; zb5=4;tjA&|tc{|%#sRN(2cGQ3Cx9D)kZ{z{5@S;h9#`=()3&2r)k>ut2SpyFi^)gn zSV+<>f;8rp*1R;|gQ7r`BAi25GV*H_ghA6x{RbjWt-&GVR$wa>2&S-z8s>&Tghl8c zghVc=Oy&}cN~r#pqCR5H5Tui=S;qR|hiY{*>QsNsYbJjrAk+kn>W>RC^-PWGuLI>f z)E{r-^#zr{>v<*4*~{ORg2}QY4#E5m(zE>M5X_~Z$6T1ee<_%27*m2N7SUkvm=A14 z1e1gm3Z_Pi>08@Tn9hNQyj;R)Nd6G-_WH|Tb^(&v5+tawC78mNATG85 z&lo7;^fU+*W@1FzP)hJ0EBlw#bm}AeaBl`-DLxd&tUc4VL-j*?V`Wk|co5U@n`FxA7y;1hD}) zy${PN;Pf4WANPnVkso3)gXZ)aCW94KBJ||6poEW*N)hvgi?ZArKR6;74OdX5cy>JVXsA)m} z2=$N}77wc^L7&&q+5-h5TB(vmC8%@(uLt}fD7K{NvM(JV;iUz`j&-tVWlU{=N_Q+#ec~1!iy_TIur$oLsy??Pi0X6iLP7OW z^E+hC9d-v(ScDKw^p2pw>y|2!3l(Rs?0(RcT5d&l%58~E6x`S>NK|Sf`x3g5~Sg5%%bA2A_P^@ zI|a9tcif>~7psR9bUbXwt(DQUL0ap$slhYyfc7_Dn9JqaY5@9Ccd|RS7v|u;mipJ=Iuz8#yRop7Wk>Da z)FWo<8O%;w>bJ(GvRF2=E;fm7f?`QF=-_nPQFO8k_bgc#s{{h`8{}`Xw?sy6wCum* zJym9YyI_CAazF^V5j~j=*SP3j!7(8`1v6WBXLk$@R10_n`7;8mS#!oMhIH^R0 zc#zvbSukUULq`h91`d(3!>E+6(}ARv%Xac&;Tcq&Lb+VCx2%#S#Er^jGM_;(=7Soo z&IQTaNgnMahDx1xjF*5BzAtCX3IqBHP(S(!^Gu5czoGovomb&F*{XzBuh)bx<dszDYg@I>PSH9ykbk0e*6l@>H)2PO zR{j6UXK0<9RO@KfPni<(g9c*DIaK~q+&WbLA8?yj`S+@aO64!ZtpzQ=loEzXXqY$M z;zlRZbcxNOeD+iMcw2mLh!W;d`Mjkz6vRPObP_{9m!il8s+cQ#bzbGm*N)laMB8xr z{VgF*fz5^EDp8E!QJOLED4dhvvzdaN%Rsl5;4m4~MciNznWrUqy{MeD$AlS13HDO= zqH=5?m%3*XD<}#_1#k7NpvZ*^GFSFwN`>stpi8}~)57D=sryfuO-TlqGMWp21s8*? z_1lc8T1%tgex{(-8&$2@fpPs4k6hn z$Gi_hLj;Kx@Ec(}7CL=08^BKG4QA@3UiPoXP&=Dfs6{ky7jv^kM0rA952L&W3zU*n zkzv_SABT$M`VT2$m4ewn1`f&Wt&CyvL_}ulPTsK#qIil|?FOV@c~oPlZTVpEj@`Y( zE>jx|#5!@TYBZB9E{c&$P=%1-k<6&Uk@|Pcvp(F^GICww4KrH5 zHexpKj3jpM9Wlr4#JW>68ACad%!v9H`_bC&rrH-8I!_whU@qy2Bv$&OzKxOk4e@NG zey5rIIT4K98L{7M$+T{djO>k!{3NpC%`%Y@TRB&}is&a5=5^faJI&nI9rZoYRQm{G zSSGV=2d=lKnX^q?&rNGIXRnDQR`{lwG2!K6!rwSyXsLg4n)!lEGcQJb_TQ(OZO>0L z+aE>zSzND9Gp9a<{8LvV&76UUv!9&SV9r>Fe^b`u(X_`{-YVQ)@{egv=7lQ| zd%BxxtEZVyZ$|ze=ITN6h26}x5y`8N{2D^UXRn-QPD9ZbBJGl=k%lEgvtL5E9wE?9 z15Fnq?UKJD4SAnlVSfK$bTd3%XZb+S+`k8yI?Xb#UTgVwM(W`NYXetm`@r0=xrB*U z<_avR|IAD_%LiBZ98XHb6YgyW$Q31yC#B*EcUJRBspARW8Kbn1AToSX=6K>4Pd2G1 ze#et?@np4nQto&%NIbbqJsIS9f>o=)^8@uH;CM0^Phty*eXt{S2vesrb%-N%C{xd1 z>QG1OFs9Zsb(kY{I8zU0>TpMD1yhH2UQsa^R<(KG2JZjis^S|jMYpliVs+7@!U1TF zd>4BX)?4+DV;;ob#x7;q?`=UHjC5J(0ftt6k7b_v6n7d_bEOIU6IW_{|F7URwLCjo zG&5>%>_9XV&!HG}(>6LCsphdbHNY3~SOSv_-N52-Q>E7Jr$=E6&US0$Mtep58XL4U zKN-y&y>~!CDeCNmo14KSTN-K?9}yxj9zu?27-D+gC=Xq1;YkeI7GG&msl1aMBkhM$iR?U3TW6xu-@xaSloIa*}k91E6Z&ejy35i@lOa_7uUuSp2ED8I_l zljUI&A}2Ue`!&vPCJ+~KY{Zc0oQQDW>dye6%~3P?5F2Ls&KCPM!7nb_`z?|_e=dU8 zKUv3IL=TSOJjX^K4dH!>83tGeO`)3y&v~0`8NAdmlRv{tQM;#q<7AU~!1v*34H2S? zVIMYZFVP_|H-^Nmc=GM~$1xZ^6E&N+WPe4&EYt8w@6-7Iaqr{!|55Kc%5!X`g>^3? zwoJz$huF#lkltT;Sk{uUnDb>9i)NRzJ-(kweosiXn%&7c<1bNL&C}S);Ag~sOY>7q z8;``(cJRiKJ(lbRH$;k_@@1D$^z66tIscbxJ&S-%=6zE!L%B`19_O}3?BE7-`K|&y zW+ZbN7VSuCQCPITHx|wb7j1@MG}9(0GG^+#s0q-C!p!6#DGJW=%;dWeB}J((`!2Xe zLuWs}lbipFY#*r)(bP0l9JV%Z^M(&hQL?R{tu1oV6vfl*@hBG>)xwIUYShoj{sESd z^7IOD(BGaNj$BdN8`--MgX9*e-{(%$j-af#rs$N@Tr2jUsJ)N5tmqf@y}HfJ0WbE1LqWG~&asd^mRVh#c^!@MIh=U` z%!j0!fA+POVDNV>*I@0?9q)+65aT7 zvz#TE^toBMjwB~;qD#h)%lDugP=K>bCcljY&Ef356lRVWXolJi$oD>&F1;cJLXr$P zp{@p$nx0`QqJ|nhJzM*pp4&f!m<8)Vx&_rT*xbH2F?YTfMh1Im9xH|^Cb5^Ur|eH-X%}mj-)0)9dk^nLKy(HM6oTg@yOVG6DGLt-A$a4fN#{^o9 z#hWCHo!&V}%z`)b8qiFAhC3l=Y`-ql8A>f`|3fTO;Lr-&RC!CYf6HYBZ&|df8!(Cd z4GX@)O)f%cUB^p8>EC=#)q~!c9jC_&_QuWNf}=O`meLYb(o*9oEg~0s zBXecTU(dh%6WK+hLXT&+zLx8Ctu*-XfUh%avcLXk?m>;?L1p%US4COaHLBM;t;|00 z9L7aVC)ZO^^&@K|fTs@#Fm*#&bVEfFtK{oj>OA7cS`st$ZIqqmKa`yP%d_k&Ygk`w z+n6s89ud1>IKOi&k;Y2v^f2tB%CD4<+V8;vQwz|f5{BNa5k6P7X(YeG%vP!-Js#7R z9>9$V1EhBiX()RFw4i-iMJ`@ZCL6jqQ&@SyPmYV^YrjWRklfJ3|I%B9IlLT2m`XbIJjpC9qAN zrOX?b+JGNe0su zM+y9&YRk#)w)}d(wu~=8J66kfRE_0qzbE>)-)OeqpNqC%JYB5qX3IwVo(!h^_qLs& zU!GsU{mnR=!qtf0T^4=vzo8wcyW0_4uQ4~=>2CW*8Y5wrC8g5kIk1NR7F2&6~v8?m3W(y>qgX9NLU5@=XMZQKa?uQ4 zZX|Y&F&F-t6N7qKU7MsYUY>(=vPHK>{zY`6Cx}e(*J&$@5^$oAUoe|vZ##F?w&DFp zETsCKC;Urf4tfjpX^&BVb`625Gk}2rW4F^brBMsp*QwNjm zYge&T=s_Enn36NyE)&r%sIF`mF1O+NV4__Z&$kO|AR7e{yuhi(r1CdlTS4Q{zM!-W z)Hp(p*f`l~C_>s1N-9;8pNxeSpvp|XCMbezzWFKU8J@CPEo5^Eo(tJbGoppwQ#KX< zaYm@lCsw={b}9_o5gVooScxsNO)xuST#Ej#q7z4^@o=5&^QeF-4-+69XV#$3Dp?^O zgi!#`t5x)TKAu*M2dCNO@!)I#;(;?!;Nfv_!AN=#Omhs{QtBIUB+xL5eQGc(&m1_W z#9>I8DIQ&pK|J3jvb~~2bYmo8?ZwIn}MTXkGoQlrrZZ>v1&*Etl{r z1YO+PlflkU5{JqLbYqI+K)@@dh4pqOt;dB;F6TY{`tet_wi3NKjw8X)WKvZqvlN{o zNumu^?d)i>V12d{BmomXnct|%6|d8Gh!kt^j{lqmQviv{u7 z1|XF7u6f@h6UO81Iy~jwuz6wbwmU{yj%eKy470R@h;brR(I}ycaDXYPNUUnt_9g~A zydd8PsgSu7M1Tz*c>P00{_dA-y7AEK$K%8lNn7S(h%*mcRrl#*1Q7X)y%2aW!u=2& zLW4PVd%T)sVLvzhChuCMD3acG=Hi4N1){rd83S~>T(C4BmFB*zl-)xdcqX7#nwmT) zA^-~-Vq3(+-hVjH?{S}p0rclKGv}NRK-hqTI+GlWR?(iuSN3WU-X9I&4|6Jj|)m&)=$ZGzpX+h_$i=ArO zE27vLi}^POZS>A>Saz+Io`aDCqt185jD8%NYGtKZnpOXC{J9AD5FLp(zpreEu~dnp zFi~210{j_Gt=3UZVG}3 z+AZs;&GwU#r(S7EO)%n*TOY2E9IAlge+6YYHWG00b>L_K@BIN9hX?Aa4#+|~x!A5* z)uAJFQShKs$UwgN&E!ioIv#*};7^LcPhrJ5L_n6A6M=SevV$Tp9|z_u5s>=rOUXfp z@QrZ0H;(s#lZE6;W~POLDfE^^?KYtSs?ml-!v}dV+MfkC z9FJIbd6_z_^aR+EO*Js+qZp@x4a>=d{Ao$?6SB0Ya{7B220C=hRX#M1H5g}TNN@!Z zsb6I#Rv-sAhT*IYu3t(6JGSWZynwT$qN=8`8^*CCc#R0VkNRZ%Z#jmtd(1t5jdBYK0hI`mTyJkA7ilY!nDsP@re~eXob@- zXIkijIgrPHEt3mOikCq){Q_xa|I8%EJin1}1rOnc`O9PUq=jmxegM8;Sg;B#(?<4C zFjY8lQC-zBphhsfL7N3BM^MG@7M#i*N#jWIuVH+|Tx?JS4mSk@q4~0dkfbKE^l#)o zt6--10t78#(ALQt2=UWt9Pms>EJ_#yOA0gHyJ*1R3_J{33)%%a*^g;s^&c$sxR3Kq zCjk^=bvgcX1PbfXnm5vUC_HvJ_%RS$CJOESgWhPR#~>Zb$IEmPS^yMh;J&$%Z10PW z&?beDgt(e`C~=XwDKi|Ykb7NW?)xQ{Kk8Dm=Ye!IFMiBDl!xB6;cEzJpZ9uXy8geX z_qE-H1-S36^fi^l3G)>=tuA-@?)+IzhzbX~*Zbwg=sL)q8}*egRq2MN#V|-QMSWeP z|MP+pn<0DGhz2PaCk0}#6~-spO?hPHM>=x)0cyCi_s%|^%q)Ih<%1)cv6x)uKQQ81 zrhvb2%G?ER*pE)x)Yj!Mn`IMP6E>`#sn|o4l z^5l-$bA#3M+GkuOUYZ|vMSNuNlwhoV#@u60nLFc(snsK0PYw9-F~hJwLB~>V)nR?> z;=`q@X%ZAzRo~`GJzZY>6fOMu^(kbzqErT6{E^%cElMBHHFXpq7yr`>U{bI>OLvQx z&i1Ln=T_Y9!_)V6;q*NzM!;E3v$8JVMiI>7t0GW(uufl!Rp-k~7n}DJ0-|3q?-wO1#Lj>;-teRH~(t8-RFHkXieV_Vr8MI+?(&K91*IbPf0)0M&et4P-{v9H#7}X`O^;-UX#Hjj z&EMKz^rO2A`oz-wWd#Q6F9Yf;-HK9gvHSt`m6JIGmhY(# z^ZrBNtLyz~zy9aY&rVsk2iCuy_4(rXzO=sSPmhnZXXnHn}*f5j)C}2x^YDXk}S$hNvzvjppVlOs5iTC9R_^gn8j+H(ile`yVZ*!t$ zt`INYvWYWW?%Romg|i=oSf9{C<`+%6c_)4_7?(mJ5CniXRoBcERwz|%)v>{ z2=Exkh+l@U2yBhDE6Rq8_Zf<=GrkmE@iQGX{fXrQAttJY^l&qPI;U=P=)akNW)EOMRdC{3}b1drH2uxYSrm>KB&z7niB5 zKzhV?ke2Wrv&3(_SCaPq(QiCJ#Mk@%Nck;m)9v32sVK9-S3d!fU->Fi<;HJH{MVNo zcBy~6-}i2*|6RXfmoffJKjXhDN5<#NnPtf!|80XbK9+G59^K^QqiahD@m>ibt`{Z! zqOA1Ba^q%E#v|qa#eGyv; z$XL$`Z}t=DhvfwN=^!Ma?)ARoQlQyyWWm)k-&3Hu%y<*@m-%ikWBf)xpLP@eV?@hy zjnQ}Ww|pl6_Duo1-cQ&Ke!?PtZCU9yzwt>KQ+`wKf3w{99sc``XUb8RTz&I3x_PSa z{AT~3hZz4};{WXsvVUj5_i3sB0RpWW?7suW3_-#lhp@yP&cWX*{jRZ)ma~hcBYS+M&y_;p zO8-%2{H~<*#WLg7lG5Lm89Pc!e^X{GD)qluYHTR26M&zUoPy&lJ}vRzKGV1#Vm;G% z$nSsjQsXhdfAyut3x0q1rN#&TiHS>%j|Ta1P~dM!+Fcd?PcAWDtMK>DFy5^6FPUL{ zTIuh)#OT_~zj%gm=U(IQ+1L2_-u~>q#PNPaKq-*klW*unlEA8NdOFthyNQ2*_R8jpntv?cUoA8wvM!vFgtjSbcN z;_GMM?ETmTG;lGWg{+CLP zEsQETxVhF>U5(p%|LPKBtba+V?;8Kc5(6TPk1I3ZZKeL-lp6QuLC{x#=NLR{@Z&xC z>HgbFeGsE9C6E#%{+v0H{r*y8RUQZ;Cdd@JjSA_)+<0z?AOANE<^SYx{$D)Y|K4z8!*CRFPX!bHQsG}+L71-{aXP*&z0c1|j2C@= zY&!g>&!6=fANmd#B?|tW?>lQG0MGS5JJjg)`TscFxU5v&Oukb zr{ZchxMb_s$L0D~cypB5+=bPPa=hx>3<|+gtPkTiBtCt(4R?6agC#qTb%6L>f--QO zvvf6u!3zWW8H3UER7}!y4hy*6qxkgX=Y6jugzqbGzo`7Y$vVU^=8D(&zd$@{U!=Y` zqMT9bt8g-tn))xm^nGlNWBLzw<=8N${}w_7tymqYr&zA(KNepEato4>dmXD|2xB)v`$A473{SOKdi;JF1{u;4QyA-HQk|=bP&5d6OFPTx8IHjXw>a2^6;G`fv zMiV^WIBAFx4C0gP1unL!bEeFlY78+hpL$Vj_MFid&YnH<6ybQAF>CJBIkCx8;`5F8 ztV?Ijo;NEvyCXJZ_AC^U|A~oR`kElvR+IN0S@066?Ijgb(zJaysnC5Y*VCr2X$O44 z*)0o-mpCjp<%2)hU7nEM^lZF=J&2C0!{O$VcI)T(t+3=2ZmWGJ!JV%CQn~pJg}_NN z--kx*KDmr?2Ybp>c;kgP%6$7=!=*jqRZcZdDRD045-*u8nvHx_jW>W?I0Xk4)_>!@ zk8Etbv#GY0Pr2;E8Pnsl<1!a>pG6ORjkSEP;=g5g1n?<1xVX+jIe1loa^Sn;j-Ut@ z7e~@3D&fI9XZco8OBp;mH8gNV=c(Tou?OW|IZH7V-X6HF@#)l~j*6_6A0I;~-b^73 zvf;V3XvI!H-ted;Rr*yL_S@ra>L{^vNeeDlA^TQG;Ml-b6|rYSJIux5#)n#VPfPvl zu{arl-cc4(^9!i1vmgwWbSDPjg=WDwPiS7OIn=?j4GZOiv^ z>_QX}KfeHxmR}3|e$n8$)wl3e!W${70DZt6lIpDw$VUt9oxKvBUh07f#-j1avQjJs zmgj1m7pk7u#QhB5gE}_zX3~rTxduV5zXpvpJk!-oJ^PgnL{&sUHEU=Zj7*(NBNX?gy;g?! zeq?}S809A|wSE5m0X_;40CV}Qeq;Q3i79i9-0RW%@1*QnRs=ui`h`!pZh@basT9ke z3kEj5f&mNr!BXr95rsz63#y{&i=gNQ;gPjGV}}b4#;G1LF39^R7Eq$=;8g91UCx(< zx_g}CeA6tu$Ni#vsPz}@{HzC-EY1g_HXve(4_#wd#2$w}a{=BNj;lhAVhfbYK&{!{ z=qKk{-u+~M_LF@J#5eyvb=6<0b$=1^ruxe{FeK#1jGX=Djrb2`f3YusgpEU=83(zV zh3f(+Jkeohu)|=x9TAIBlip)7c%duWrp74bwsoJW4DQLiUb`eYOSWbf|+X-EW4$*0tjJcfO3RiDa%W z=%?f-#srk(?x%2eoLwzG$RxY!+3c#>1IP%yU?95=FLZO`Rqr8`{_}G8)DL&bE`{_K zKAeR#nZl2>%1#C;^yp+&qLWqSJDC6j^?Fy8>dqfZ4ws9^`Lm$ayM9}q4c&_k9zC*v z^wls?`(h7^yWVBa^+vF7IYI-eXPQSq(@8uRR_0#eSagZ~pYqxI4Be5*RG2kTS_Fp}jdKoUnh`mZ8lM4i4 zCP61ns**+{3=B9OVJAUN@EjhTH;4Ju4zKUk$uF{3;ygHxG-9tLkIaF7G*gcavxa(+PScQ zAVgR+!~Kh$0D^V|{YkMfnkFQw@D&al!=1wh`m?0J%3R2$N0R>c7$f~KaRvQQSJ-Qf zLRsKV2xqA+fro1inTNbXe{+b3CyM!V`9xL_8Ici(i32!B}3gT z8;ok_uGLQ7WG29LNQTxSj`R+uvqYq~BY8ceNZN=n2CE22-st1k=nlZ#;)NKn(E~2f zV%=x{^}Z+y3+|TzP8EX_xVVBB=bDX_bmW!-aD>AVenjyVM}e|rOhWM~H|aAMwa7GK z-F8bmS~g;jz%*6XgDa3Q(BQ*KtPN`*nk>KeZ673|>L)PBmnY2St19!xrJSA!Q9_Af zvFlHM4LW->7Z_ofgRyXR0fcIM096tBtwfYJOS6Z<;KXoWjulYh?Aa(ppSgm3*>XIj zj=&bm)xE7KIoOMJtycwmQ%nG()ljrev^+?XqL{0J+KQkDCtcrOSbM8`56pp!k&MK3 z0;%8(j`86t*?f~}&V%7*utT82xD(ZiqHu}uaae1Yz`dt>STKMa`vIr3-P;q z?*TgTbIdQP%D7nBa_9|oQMn(eU<8)K?;x>E4I1O9iIv6YZh7PM4fd+Sx!Z8|uiV^5 z7^gIid_9;#!2X#GW3(A<*MpDY!d#t(qwZdh&F^QIev$c`r#-q2Ea`8Ly611SL*-lt zHtBzxJvwiK)K%A#W@U^1o^gmfO~o>0D(bl$wN}3cgke;7tq_ac_#*8^uX!CS4eeSm zuY94H`{do2pH2JH^E1_la-&*-yG3`>oO3Xz@Ad3Vu3%juhd*(!BsnF2 z(!QRL8;nd}(7uN8G#;%aEDeDK1E!|R!@lk)u&?v`Wnp0pI0*@P>tP|?D3~D;(t;#1jNE2Ye%}pWYJp8?+1Ow!{YqbC{H~dIne@Lp{YmoN zbWi^)7$moqf*wH^rV1UXH3l?%EJ_e6rU;WcML5?vMNs2Z5kD;I(a)`fdC1<`nCRqu zALHpysxudIzlt2gw=%~0hOmb?fOEbfslur$psrxPfx|dSaDK|c7jmq}P9)<)iTNpq z%Bg1^QqXw7$zma9Kyn95;ymOk(f$EZ(qeI{AuRYRaf{QjnJaS@EXoH362#jX58`>O zi3qV&KPV<3=fMq)8OT?)*@~$M9u?TLk_AUJSk6nB*=t_Hi56D# z^lbsnu!gW{z&SmM*!$_J6m@sRKBGf(E(f6Bj}%T#RDrOUhI4L!RzksW%fZ>0nJ>2~ zh-tqPC((*%6PD^Qnz9Gd7LuRw;UifXCb*T7Ttu=<;g0G(h*te+3eEhw-oJ2iTbca^ zCp&n8_chAq0U|68+DMLjxYR0xz4BBtT~eVTFWBSg`z{{j*r<0_qh$x{mJJH#3W(mv zNYfeo_bXWhV%S0>-1e(`|7M99I-3F(`> zA99?-_$H?M+KD8F9N`n#M(e*Cg$PehjgHhYf+u0LNP#CO$YD&2<$)qQx^T56PC<;( zB|>kH8q>7WgUiC@T&Z?AS85#26*^C3XT-Kb=~ltFoskkI-Zte>=>%RXhD8YX(4i8h z9JWKSS%&bY)Cg}15Er;o&ci{;o_-X5{YyxrQ&9;I9sMYvT5RK@69p}eic85=-T>9^ zZVw9jkDvW-B-x0v1QQDYb4YdH77hfN(bC=njji_)_Q(U43U4|rrJ7#wH87*mC85pEaHp7OYZ7bD4G_A z9{vw_8u&hcKfVRVm&I*;_LrHQ%;7LI3Wr;4H?QLdE3LJw@kKc(WLfhT0OD1il_|sf zPK+}cBH)Dt`(;7cm+Zrb21XK)8@92Ncdp*aYbL*fWKlqR%=W%OF_BS!+g0w7lKqpYll@sB@jqy5ZWC_Y#NxAa%7wPj)i&An4@s@;+0 zspi-vihi&<`yIq}dpFpROQnZ{*%DjpxD+{h@@%Lf9L>P~hA&0%yoGdgRWuXE;U}xG z1-l`!8GAuLE^o<1pMll6yw*~ z@W2=Z@l}yTHUJQ7nMme?W#Yj@V)L>tCH{ceMQi^Z2%3^R;z!}Bb!d4*V%HeUE{|0= zV0&$&J-rJ2uhZ|B#7QSu-(n5b`QjV72U@Mgh}yH+T+ZyWe$k_j1D~*dD}7D?3hDss z{%+Yo*I4$b&}o@691FAFs$Yj=b13$xl>NSFqyVZA!wEej(3{qq*9qs~vYisv6kR7j zyknskw)v07_WCs~BXPj2-Vko4!YI_KMEH6Vof&s{Z6EEi}*W82h-!L z$mD|+czi`9(SvQ_C?USQC4Fk3K_J10JpzLHwHtc>glAD3UoPX<3UCI@0a#J72+_!g z&$S%96Z>f^(=BkGjzGUCu`;8dw2tEG3$R~qV6FyHOz)w39sSUK6Q7{@_Qiho9$#W7 z_p^7S!LgtHe6c~i1v^!rdd2>G%pM8UMr~;x$tqRn>0J!)%E3pR4>Uw)x z2JaNEKkTTNZ)Aj)%>EWVC6bwgEMiR=da-54EA6H#XJ=-#x1W{V5LL+f(5TJ{l~w;Jm8v-ohZJ;kgLOGNDPAg|%xpk)QiFKBr^96j|}9A7W}Ie}aCFk?t5HQoq`~?lbCv zwW~Kn{PLsF1eA0Y)Wa$X9re8$o6?d#r6qkiW^v^irxxZk$yfswn!v|&6DzU3c@55;gf;NC zl|g13VAggh+W13+PfwI(*ymRDVn7ZBCZ}b>_lt zoI9tw<3~2tzJ>EBvVFK0I#17~xdLN z6LSEQFP<8kGGk_K%|$cum4V4vy*>4F%24npDxeeQcHjhs_^jB}iwA;~{LuK_?NeJP z8w%9Sy=cyiqE*rG{pqh4Ej)R~tZB3H?-H@xJo0bjC-)PDeofg_q`r7Lm-{*6Oe_(8 zj@;v1q&R(wzcViDmd34KDqrx`E$uNoHRP) zf?lhT%;NNY3I2K!{5d2$X>`T~y&Z-0y6=k9zuWv(s;oGHPMVx?K_BPapYtnD-xud^ zj^H9BJ85*rNoI*~BjyQK^lAO`O^5zr&zjs3Io-R@<4~9Q)X8(FUN&V`Y{o@RMM%jb zDiRwQzbASx?e>L8_=5QB)i79~UcV3lMfmc6Tk?9^4EX)4=^m)uJ0#kFIbLyK)qg>K z1}eAfzo#?WhwJLzYuAk5K%az+acI-*P>IoOZwu=W( zICj*rHOHJ77k9N+*PeK6&8TB*Yevck!Ee;mo>+5YO+A3|VR-TLUGZ(hH^0)i|FA)U zF3f~E>>Qw;eMN;#t5I>S_n8K_r1&}0wAtcJo2l|)&4Tz5wo^t8XW9~#=EQr4N4^JD znqP%1Z@ov_KRwdKbRFsVw!8RM;r}qyo4+9cSrwIulJOM*L^U6LSF}b2mj-cBgR#Hn z6`zNgf?qSPGDZaa6#|}g(FegF&r{%!_^woGCo@6hpC$6w;Pxi-+4E&Ad zKY{P^T>UhUrsGkb{*rTbs7iD4Z?vMP817Dwa+bKt zVOu6uIXr$@Ja)I`f8^zjv~2V!W1TAF_r=O^$-@CkvFQ4++!|LJX$vY`yGvWlRR+sl zHUOL)0q@o(i0S}Q0(s|m@ z2Be@X=29Aljz(FJsWSN$Y+dH!5-Zbl-YJU5VknX*$Wsuz=g*OfO^)FlSBRBZQ^-di%Hq7G@G z0eN!FJDv5f##J+jB^m~f$1#jED=M#}UQU#LyCQfFlu1uTWy2a#PqyiKDz73#(4={E zCuDIqXlkzL_LY9qo2GH3DT?b>RrjMD{8aTEm#b$}uAXOtvkN_I3C+v$wyW~?g${7h z=v7{GMMp`WXL+EIe7Kkbf}iFC)8_wg?!E-Rit74*;DMqdFRsO zfe2AhaZN%95DiI8UN9(XEToWzv{bQ0i#4ri(b9_5TC{5823WhG)fTN*TD6kmg8pht z>%#w>JLkUleRu9n-XjU^=RcoJX68F*yXT&J?wvdHW&~5ulhE-*TIY+uUI4uk@A>g~ zpUCk(kyQTYKvhc^;uNJ^M=y!&I@;%cQ0iz3b(>K?x+xZ?__lcxM5>%b&bA#cSPk>j zl1FQ{VCQmwkZ6a7T~o=mF9+=+UEFpmMaJ2*?@?o|qjtfa9qU{!=d_PF2d@!qIMb{4 zG@CfiRV|6nKPKnL$Ir*;{8V**Bw??~`3v|w*(_rS)jv0oBmDk(8qrHDC$b`1cZvV# zH7jQQQ+cJ`P(4VyDHzn&Csb*VQPr2T%!y*l+MrBZTbw+ou}`SNE>q~$AqQJJ*P6q%j*WX(V#q(%FLV|s<~Jwpve`=pbcK7G)xzRH)+2;T~l zq4{u3-FI%h-%~N0Np!nYurcpoBBVvzm_z$HV)xu&9y9vw>4W$ijhq{niyReiYK&Q} z`VsbjqsV(~bi#HibD~ZY?Q!y;m4iaJj<(jRDjVzDE&9~;pUN%gD}8+K@ImyCmWljN z*>a6KS4f8gg^#Z#v>yYuV0;yYD(&Gl>7Wvl*C@L9TlJiyI*~PrlKyAbQcXIj*oxD5 zA(OEgOORdn&g zA(7J)^~CkwFHHYvc@|>2 zle(Hbs3`QXz1}At#4$ZnSQ#ykQqs^eJ1P5g z?hE(tZ!NnT1NzeJ|H*99@u78oEaY8gWeRy$IPhWzUgE$@9r$bqUgp5(IPh`@KG%WI zbKu+y1(%Rl5d;Ydc~?5{s~mWx17G04s~mW>1Fv!5S37VuG7g*zd9eV-K*(F@z^`%O ziyZj14t%i#zutl0=)fBt_*WhH5(mE2fj2quWe$9K06&V5zR>P|D-=v=!*?q@A?F04 z=S|3KhNHx8$oqQY0QN%O3OGvahP>9q0qljmZ^BVxH{`8M9Kc@4`xYD}c0=CHi38XR zd8^cj!;g}mF~D6t#z_}zlRg{AUjQVF%7Ldch^+Z482hggoQNu|gH{e&L{h%z;1dz@Kp7?GF4& z2mX`;f7*dRk+!_(F)QzfyjOS=SVG>b0gQo=_nHHL-GRU1z_&Z_zc}!} zI`Fp~_}dQr9S6R{f&bls?{whrIq>%#_$~+jp#%TOf&asSf9$~j<-mCq5nMvve}W(( zA@36h{;321+=1_L;C&=&lTU}dz7D*f1Mly^_jlm@^XcFc@(ys|{PMuy5{lm`PCgg% z207@%4*U=Y&c8JaE+OwQ2Y!SDKhl8@cHl=j@M9eKu@3x84*WO=KE#0!b>LYJoPQP; zTteQL9eB0_KiPrv9hTq{@=kN$!yI^y1CKcH5e}SZI)Y2c8|}dPgV@0(A){=;QS)j;1cp?Iq*vy_@xf~atF?{X2B)ol{)Y;2VU;L=Q;2S2Y!_UU*N#` z&Ur<#knJkLa}4};!H+QTHo-?2_zwlATOmoyPXwQqgnHi31RrbQk10Ip&!+{?FzA0J za?UXD7X&wF__hgNWYE8%@V*A>c_S3WH$jq@uPMA=GDt^%Q1}4>{1b&A7{Jd}q7Mq- zixoaFfNxXy!2$dLWlA`J&r`VRHT}HFApv^-8}@kB;*+fJ&)Xvd^lvEq3jsVvbLjpZ zwB%DyDV%59l9zM#=i_6NK{~ok;l~E>e=GdB06uI0Lzw}5rNWO7;D1y2i2?k0RfVSp za0Wu&^(tD-lOfLv6TPZ@lbmo>nHD@4S46i==#DzpY6a;a^PmK>63-LQylcJym6X? zewYJ4-GS#g@Q4E+?!e7n+$RfpBOUak9Jtx*YdK>a^tle)91UnWX78@?GaYiya^Pn> z@UJ-Va~yb{10UzW$2;%|4t$~m&v)RH9Qb4h9(CXa4t$COpX$I19r(Ep+#DVHWFc?5 zgWepyY5MaV^yfS984i4=1HZt5U+BOua^SNZ_{9$V5(j>10KbU3@S$F59M?VH5`~w= zaXljWqXR#MhN?ro@&Nq}4*Ug$&kN8Gp`qTy#;Yx zm+N~9ua4td&VDr180uXe$JH>EjxHhGHhQRW;MXWQv4EUkDg2rMel!hbhI-e=aXrE~ zhwvd@;(A>7KxKs6?77w<=T3!RAD5pgd(SAmF^=n&e^_Um z2ul>6xZckciC-k#X6NmM5A_;_%Kx1WAG|BLZmDY6PxwRXR>J8ou)OEMBQ!L$(dRnw0>X#F{d%3L8x-Ce*Q+D@CBlbziFpt0&(kSThr)e) zP2VDTjY!h|c~9Xt$K`)h_P#`cGz8{nw11`%J{0cDZxH&8gxkvdgahBEu31OFlosfWUS{QHITI>Lu|iFqOI&utF+(R69b za!h+}SNIR&_Dq+(cLgt!W9|QmG-My@{V-0i+tIxad=L%gnckGMNbnLv{#y$Faa_K( zr+|k3L+QS}Dd!=xT`E%L3j4n}zde3<6a;){X zEBv`Q{r$2Rp-Y#cUJ(C*;2R7%M`il-?FRlWh5t@a&(rqwrAwWmbf4O!UnKZeL(Yc^ ze>pBk&tOiaOQS>SezB(ikx<+~_z*8KznUrd1_%9{f;aZ@2`P=J<;dgN&R6Bg^K`zg zR`~02{7&I}lkg#4VxCs#f%CFh&g-5(|L5tSXL!#O&h~5kQjz$%1CN~G)9Wb_{tXZ> z-zPl7-%a{|uLJ*w1OLQK#w-x2x^Lf_wK^G^PV8b?7;uefghPI_ESI4i@xJEoA4oCVtzZqAt(ECwhB(oUoC}#?-HDUd&JAlgxkvXM+g3~ zmQVc;FLnOL%R9x_TSWZ{Fa7+Dx7va461+s{YlQv;y3}X?nD`}vZxwp=`y}Fd)`91o z=F7>XeukH`{f$>Gc!}WJZ}$;C)cdPYdERi@d)@9cTe^B_&I6ePHiI*8U_WHWhfo~*ys27woD#G~tzEJwlzgObrM}!aY68DLg`>=Nm zIfUsq2;BjKuU7a+a^%HF9v?aI!VxUz<2Zej>3Dk2>&U$FQ9K;w}0Op-=9uB76wF_)-o%UEY4Q!}O;8OB9}X4upSS#LI6K zJ}@q4g%5kj(-hKBcn(D4ixi%C-b35-HsM3yey+Bs;0%@%4%qVxg(sf(;NKGQ@^6JF zp6k#vP@}2CwbgsA1HaROZyXZ5=)qR+~++kYzIY)_Hc^CP0=WksHk>#4K%MB?uV zxB1~y!iRW?``|kMr;YRF>?$Imv^*km?iPH*`9A)f;Cl!k>Ls2F(&fF5IvN}PFNL2V z-2U&ESmN9XOdrHwCY;OLIMdh5zfa<28abTt?U(w;`pKIo2p{Sto+CQcKke;QxE?)u z@fnBX@|iw}&mf%T(`VV$!oLmTrIqj@Ug9|c?YHd;KP_IaOhrxOi%CqMcg7BKUasUMo>QXXjaqI|cqFb@%YRbgiRYAP_@R~$6|TLNxKlf1GTWJWPU$eA&sBKh zIVElLbi(z%kg83+qE9@(^kq5OrtmZ3c52?|6@FG6A0qU-6n=Ib*Yrn3+0Jv~_%NZL ztnj=zuIU#kJn{U}MMD3Q!Y9P(bv>S5U@zCjgb#t|nywT%n-!jTe(7Stv!*b8K|uaZ z3ZELsD~0|;g(sdpIVEl9Eeby`E~iB3|E2K6^GI~4mPv&yC-FRzj+0vz zo_HQf(u((v!V}LUY5K8b*bwiMxZdd^e}%#m&m(F2Hwf2tA*5>a9|wLg8E}Y~c;2R; zX0p71ZCF`NjaPihv>CB6#l>X}4UtG>IK6(eqO7ZXdm+^+PEV151@S@j$H%r}OPsV%Q8=XZ`S99C0W8yglGJ4_Xf z-rrg?EHZLIGm z5rvH9|B)O8MRF7t$x$qk9K{pK@x|nf^eIQF&2XO~5=j`Ti)nc=q4mXp_80R_9F@Ot z?`2xtlAoWl$Q0k7m@F?)H~u>x4We$mv{k=D(vTQ#U;~QSA2&^kUN)6N=+T&4`U& zsNaN~b}z%7&5TjS0k3o&=@UlfpHF!teU0Z&O<2s`85uB!4B%XtI3YbsB&UwLMtbpd zO{~^`qjJD7YbI318W}8Bu*IbOO5R}XDi6#US)9n?ffN~xK%XgsOx-cc65$rJx}iZQ zWt0k)J_-jjv+L*DnvWl~Mp_Bfqpg=r=F$CbV0c0A6OYwaFX~QzYST`QVt6mejC4n) zHQKvprd?#JR;D_XNY#_6%1hP0G)82R$h`6xy*;_IoJQ4@+-Aha#un9-tJlpZ+PIFw zR7ZbS_jX%Vif$S+r=qT=nn&I#6(B{a-L^iBO5wr2S3J3J`uK5$#nUHEnvp-Vc;>kA zh54L8=TsJ@RxqnVYt8uj%qtp8WvA$?WO;!OLdMX3>zH|=?)J>=C|Q^*k*^mktLM=b zr1}^_a@%*wPiieLBIRjaa?9W{<*riq8OpYa7Y(Z|pF4~OJ`D}UHRZK+)m3!a7F$%j zFo%khC~^<)4={QObsV>qg3th#1_AJ9pub;58S1aLo-u)KFn zq0(MZbxlRpoZ|D#>*^PjvZqbR-XGZ#2pT(CBihH}BQ6J$tEY(W>M+_6~VM32!s ztDys-Eh8cIl49Xc>mW`F7Js(Zw!}$?&uLE@p|oa zgwV69I9v2;zBJN)FS*VSg02QvJ>t5!s@`{9SD~GHhB79ubzaB1QTxo7+gS1{zy3ZV&T445Y8RJU#rDMBlAgMQRTMr&DQZJ4Y zx++08YROWh-fiS|h4B{GsTX^^oN={uf;Si_#T2axP8z z^Bxd@3PLfr3=c(k5Ui7r5!7|b#z;f z1+c3;y471*UbT01II`}V(whA9<(_@|KH&N5(z?2ec~v|!sP6pJ(|9BG6nS-hthjn^ zacybUyz=6?3u0vMwQQ(sGTV~js3{Rw5#3y(uSbtGK4?p_;_0W8E+@r1QU%8y$u;2Z5p?sBx0;kE%&F+Ebch;GhT#JJJ;pIf&)f!oCVM3}VzZa5 zyz_f&Dtyb_LZtgq;$@lVyR)j6LChK&6Q)4SS8X@d2G*^Gfs&` zhBsQv|HcD@$-}h&k*65NQ}F0t`Y9{%6r&WehomLfVxVUUTnJMW-@De(=`)eRo05Ce zwpAXF&=A$Xoj<#DPH|}^Jw@N?$URuXNY9s0x8k0>qhOyE>HX`tfWzoIPG8BX8H)c( zVSD4j+F(nQWY_ISc9UCOFe*}?O$}UCs|K3<$ZpTd=jI{ud!?oWC88-28Lo4es0Q?^ zS<^E%#pMlUUS)j+;!2=C@WU?Yq3?j6Ad`xvB&J~1rQQ|-^7He1xHZ@`^mco&=uB=A zy%qRY#WH2Lj}v`2g4~qQSU$fwfAuoH#QzC zFlJBVCn5eAg66dLid{MCLV89up|QMlf#XLgY8rqp3)JsM%k|BSz0#|hbq60v<+iI& zBC4p0(cELTKM)^XTwG04nPf0cVbqn^#%#ZwA@W#cg#Qy8p)R1u-*bxdXN)c`no2WO z{IKlIndrY<{6&th!6sUMN=EF&oLf;{S4@26)KK|)U?zEWtS^Vo*x1FLT@a1r*_r$z zdlf~B{R-@^@lvJwjsjF^TCUKw3f|Bc{xhma)YQlF_wu3VNKWF$0o^oEb7~cJbv1M! z!J}Vi)K`_o{8~u&_CYSmrJsM(uRHwv2ad_J$~ulZzAmLHWm{-UUB=ZXniKs%-O-%n zH(hdr4=%TR=pulgJEy`e@b9+F=BLBymP^4DHMph=s)ZA4ru$>CeWkjfGu5-n9kb~t z`yO)y$pB>lpdeiq9=VC~h0uvfY}Z3&pnQ+&}yeDcm+RQ`doz0E_m?-_MmIzwGr z{d{CN-_)g_cB_lay__uLo7J7&Sh3Zce=~XSrXNM0pRfEMldIuC0pztg<$7MB^BcG} z+jK|jXwcS_r~Bh{cvPCC3RD-(@$8juLb8=WCh=ytl820ldF&LQXfelyKy%?V8Wr$s z07_?9ER68owYrMpvP!zQTpa(&sY z@sq76eqlP%mvY?2XA^oV+L8ozV&UFLPFzE>7jzof`=5(jvr0F`X%BQ_U3vrac)IR6 ziF<2fCw;YUXXzU07CDWc@k{EBM_x0(G#0<_Qd3`BUc9iPHdbHS>2H{A3Wi4((3>ab zmeyCsiYqIs%8UKyZ0L=R^geBQzZ}2LbsMdp?(vr#!TJ4j{5Cp`Hv`UJE7bU1fb&;3 zH2y2V7X$vX;3w1e$AIfM)v{jxs)Uv^g!Xwc@k+s24!@O8)9d#YGd+KcQR8<3J?gzt z-e=47KL`3-0pAGt2Y@4ee|bMJ%R%}p0LOCu5^$9BGTRsu; z?{VO}1vlg5GoZ&fsqXLFY0}38XEvl??V!KILEnEryZi$MH{}ln{1K?f>j1}iUJW?L z^Jc)2{w=_f-rL`|lkIsF^sWXR?fE_6D1R5=D1Xp^gnXor0FLx`3U1cRTA;^z*#kJ* zf5ZU^y%<-QI`A^U`CF~JJuU(q<+K2f<+>kmEZ2nx+U+R^9P`g=z#jv9LI)+}{1Wg< zfFu2K!A*a*0zLY3E8y)Q|4qQr52p3Svz){X>z){Ydf}8%?0rcqqqXs4H#PSXS9OH8=;21x7g0tRN zXw~sN8F2pkh{mUZoTs3?a{xzszAZTSYuHb{3H02@Y59K#`ey(?G)w|$;W&8$@RI<4 z7VxtH-vs!jf^&IKq*d#!0D83l8VBCwz*_-F|KAGuX0T_Q;HH00keBUpd9nRo1vvVx zR&bVsep>_d=(m>u$N2mJaE#C6mqr< zH{0_kT6H|n5uEKoy)g%V3&?p5In)%ep6 z`cDMsJhmUmDU}zIvz_|`K3{OA9{~9KKz{(>9|Jwg|I~q>d=v?$h4rGGh~TE3mjHes z=zSLOK7juj>p9}O@k4qi+ z_Z|2n4*WNOV|)CI11~?uFE87<4eY#9a5Mgw1CH`<27Dm+^LD^754;UHjx#?89Od^v z*04*Z}Yo?6WIo*_7w3&$1X9rTkO^tSF*g=Z7PJ9^>jOfMfj6 z0UYE1HNY{R-v=E1lksITf)>+nCjvf*jMa9Y?ZBr1j&WWhIG6V?v}!qT0eu+c=Vr4t ze*VOEakk)WC+4N;fTMrv0Z0FQ=8)g_B&AmQ0p%YI_^Z%<>j6hUF9RI?yv~6?4mkSx z6~M7vdjQ9B&E$qf3;P-UcCp~5->w84^W-CdW4R`sqQnQ}PZivhKL>F1!xIiUPXj&r z|0TfD&f`z@?P0xWX9?iwx32+?etR5nwDa8467mr*bKq@)oBqEW=&@Xn1CDmS2{_t$ z{IG;Q7>9QXZt7hN^r-h?z)|mOfTP~r(-V4;{tCd6{#L-zZzVat9MjHn!Oi$t1UTyD z@1gR-^r-hqz|lYBB8of^x03`n^Rk#r>iq@aSl;`F`+8Y^1{GT8z5XK-_#uFw z0XXKvGQd&(4G#Q4!A(DJ1bU2zKLC#Mw*!v;{0Q*ZARktZwEMYEaMREHomXBMe+=Yo z0UZ7I3E)Y7qwllwV#-+nIF{=sz)|mv(Y_qhZ~Q%1UQGKd0mnGG8E}k~hX6-^=8W;> zn|enHZt6W3aMW7|IO@F*aP-6CTwgECNBlbuJT%sB=K#S?JC6W7DNX=K|4%w2A^)$m ztJ}*ZfWHa&lV|z#toKlIo~A$XD+wIOQKb%i5#ZSWJ_$I=*#{I!6iJ#PYz z_TMrgAqV~Q1mGyA&%^{h%E@xzmpbqp9QgMg_-lZpKL_O7?I{2p<7bxO6w2PKwCZ@K z-zBMq@wWh<3v%%O;0=IdeXRu?>+5~M(QhLs`Fi`&2IV{s`1U>tJD(AphmThQz76O< z2mF1&`I#JD-hPu4deJ{80FL%d1su!u2H+ScnbCxNEbn~4G2WU0N4-A+9Q6(;NXW-{ znCZZ8037Xk9B`D=0XUZHxG4#}DCcYkUgE%)JMaeqM?bs*IQn7nRNo$sTf82*NpOxU z9EaQtIF9rG3OJ7Q4=GHPH$+Nw{1ga&GM&cj@iL&t>+!1q$9d^*1CHf=3~(&(!RIFI z!ML3aING^IaQ4r3TDASJ06pgaw*Ws3%9}kcp?5K~qcZ{T2lQ_O{sq842K)%XPnn*O zkN3ex3C?~#2I!|a=&u0$S77ISz)^l9$Uhe3uLb&}0M9J)?PPl{0r|5Wc)j2phv>IP zz_A{e1CDX>L&3?Eq~{zSbKuW7IdA{G+ z59t4s0p9|0MgorXg@UvHvA$}69_wp6&|`fae!g#yS&tFH&H6eEaICM1fMa>f1UKue z!GSkAuV+8SYNjSj`ej1;834m?{}e3&*jB_^H9OrpV)8qzbGLe{h8^&^Bs7J1234BkdJn@ z32xf?6QD;sUjiKa(+>g1{`9Pi6MB*UV!)C9`+}Q!V;j&9A!Btv8@a@nZ_<|t&VEMv zdmQxrFHP9_SE$E>0pAUHCg6VtJlla!72J&f89xP>dFL3ou9wR}4n9w{0C2qShzZX1h}Rw81bS>2w*mb% z;GbuKeiz_d0dD|&8{p{w*8xYreF!*S@BABZlr!jZ-%%WgX#W(zF`q9Koc+9wR_)L0 zfF9f9z$+5+QO@%YoIY`>7PeJ)l3XZ^Cb%0gnFfUzX5|^_30y2_R=U;O{{Ej0YU$7Xps`)J(v? z4Dv4n9OaY(j{VnFfNutS>Hx=bH30q>pubIUG9_u;`+cBCIrjjLayC2U{1)i39gQIy zcrn|>HypUY0s3_DkgrxfZ-aRzEI8YP?b=0un1lXUz_A`t&edeJZr4W$J;!q`;3EJ> zJ12mAmz|goGl3rM`LaX)7@+SB`7(X3>JjD3bZMY|(Qh|`e^T)q`av%D1M+3q8;FOp z6#TFR?8yRp^s`*<2lUQ&&{qr2@qqPyBhaJYS^!7A2Lq1z{20K$2KEmX+|)Z3aE#9i zz?XrXH6S1DTnjkbxgK!LGg$BY($7o49<(3rX@&9*7J9S&>NsZ{?U&2AKs?lgUi8mO z2mT$`Ob# zz#dl|?n`^ReQ|$*^Ky4M>Jj~e^?M-o zO}vP5rrzUySm8K6i2#n{ zlU%`B9**mDo?%Pa&SDuyu7gdpMw2ErF?8ZUZ0)?I9{L51stz;SQjrW zAN%W@fFAQ?GvHXi-vS)ROSb{OkoL9z4^>)&{?BsY>C)?Qj#Hoj`t7(cfGJ;u*xf^+p?zUu3U zhibu1`j~^h1#paqy8*{|;JIR6xV|tSPLTLv{4Ju<^}Yt;3g!PCaFo9v_!;YWFyL5^ zqX5TxoB}x3BgPfR$t z%EAld7$?&J$2j4#^TP76->d+7tS`RCMB0VI2EM?0=CS=L2^Vudc^0Dk;94 z9e`&E&UWJX;S|8%1$sRn#q?_cm)q&e&i4S9+Y1WkK1JIzN93F3%>f+km&YEJ9E=lr zd`$Tn}32w%NM>g}qcB0EGU|Lu& z*4Kl8vrO&JUjW_+_)~(L_4OR!SidiT9IVH`0FL?dbHK4(90qv<=|=;O^w$c`c4B*J z0eWmNw*ZcD^~%ZnLT`Z|Ko zW54`0MeWmLzs&bEdEsineE4^T`t%rw`ufPEpDA(3_8>ji1uu+aJ+ckFFpl-e&vNi$ z(vJZg>Awaz=FgRYWB-WnH^ctuE}+N$=sv;CdVB=vu^yiU9OFl~7cLj}`+oy^)cXnG z*zfm)IQcWQ)Bj)NVVlGWmk;wE-=pV+ahwlX41U9S`wrk3Kj?pqpWQ%@^>qaJAM5L6 zz_Gqg2OQ%t7jUe{a|AczZ5q&Hyy0~O#@iJ@kK?hqfFnJQ1F>B!26`-SD&qvc*3_9w&U&%l`?2A)FphCDP;lPhc;h6%vAl(VV|niY{8_MPBj6bS&jOC^ z{r7-lyM9%0vt923dTiJK0UZ6)w?BKquSXoW90)kJ>!E<7|3?6hd1)TtNPj)xm>+Hd z9R2eHz%l44alF&1b`ClH3Q}MvpKDr$>f_(Jna=_6)spK(kYg&Gm z$YFby0gid>Q@}Bg-2!+|<*`vvF3e*S07pMh0sGN!Uw6=d3+QoNt@EB)FTVwP^bgMK zqCbB|KH-JKo#%YCpC1RD=X^BI@2um6^`bwY2ORzXdys?qf!hu*tQX^ia|yqRnaEi4Dy7e2?*2k3JZwNH=lh3F~y_?!&N z&jY<^r=BNd`?0?p2laIc?d$T+0so^MeVuE{`JxnzaeS_C9N;KNUng=k{Eb$v_eP-q z9oW-T_RHh9svgk~H*pM}T-c8@FE5N^x$bn}Jci+g>9HTg`F89FuVzDN zVR{@7F9IC|Qk~10TyCbI{1vvx6Ahr|zjCvRFNm;O7ssPWF^9)S| zy(k~s5z6P^Dd+{|Uk`Yu5OgLV;~eF;fE<+nRlrk`kMV}`3!%IyA93`<89A+-PRAU_Z2(Vi&acL046;BA1H0FH9z1O6b;*8u(j;0=I(5Aa67zYjS26Z0+l z^BX{q{`>*pnIIqiiGD-*SnuBiIe8%GF2K=FeQm|0Xy@HPk9MvDJQL)jo!NlD3G`_H z$AISnJ=zlm{2rh$0{mXUO8`eX^8tSw=xYG~7vNa$KLorH=13BLU9PQ-malN3OeEqH$wDa45X9@vBXlFLyOMxEk{{-+n zphtV6fUg4jBEY``cnRPrXFlM1u7jZ(z&`^ySnsz2-U#%o0Y`sMa`YD^K#%^^&kV5W zOpsp&^yp8%Zqf_-Q(v3&IkYG0u;&VpgZ9h^JW~`gv;pu`?3oSpXwMXfJ(mGJ+EWfV z+Vdm8Q?aKM=%rX5Lv?^_`E25TnuxX|WuI|f7KWmLA1M30(a%LN{XoEVyfHoq@TIcP zcn09B0oQY|46O(JaM|ZgyX>=^BW0gAFUdaR+P4ht0Q_j#=gp^p9}9Sf_=@Fx3Ggw1 z*ML6@0nY^b3jiMicqQOWUnJ)m0nY;ZHGs2Cdf5v2i5jHsF2MDiFrOYM%)HU}o*3tM zmGHuwVQSC+$JYY9XnI|*x-Vv2-|J_(N}wOXfGqWZ>louxZGbcV2BCila6Q+@r?vyG ze;dVk2jKcyLB=y=K8;T^y_TN^_}NS-%V~h?XLb10M8KI|*Oz|IjpdJHLRm_Ie!K>0 z+WPk|Nag1^3!m2B2(^9Y5EPqGt$7@1&;zg zTQJ_72Y4Ca4S+L!yPR8L;9CW61ALxfytx0K5wDn*e9|;$Ckf;7s2pdGObOvtEsFH*jSXo$mmgV?=8egop1#s3;Bc109fHQrY&<~bQTHDhmHxh>c&h*a+{d~Zgr~MHB z#9{;AD)>qR-zE5MfV2E}MgBIxS^n0;{S*BT@VDB|BKZOFU;{4^{8R(qDtL{7XMVw# zyTZUr1aAYp)+bf}+X0UOz8&y|fDe{>WBVHb9|Cv<;e#dKDgnP1=<5MzdOa4@al!JL zeuL!Smw^6ykn=j=EJw$4_CY=o%hA7CW+VbQ)2|gf=L3Ed6UuTm;7tF7(60cT>2+Rh z1AM6#Lfd-*XF0zTIWGbJHK2bTaHc<;3qniwK!3}J%l%#TKLR+@7YY4hz`qXkO@K4K zem<`aaHiMgdI<1Vkn=d;EN6}AeHZX=0{zE;GrfL(E>nIe&g|a;`jY@>`a>ihCIZg% z+Rj;kuL3!xfU_KZpK=A@-v;`1fU`|C(vBVgoaN}>1AGcN)8|a{g$5rDJ&Z6bdr;7q@(h^eXX z2At^!N`JNraHijIK2v+%9e^`^p3uJr`1cg0|L<+UnO=XN_0$aiJj-tLch&zkHSC$Tol{dt^VRK4jrQWdFb#XW0JdXd~S73tfIP#K5<=FR$HO=d&c&z1gB;CRIB4h zE-bCAFE6euUr<^Vt0+s`?)0UmWwh01d$2?z^U7mX2bJZq^4k3K>1*a=V~c9aiz}+; zR=Xm*dqI?f#_ku^8Urb44z%J_%euD;(<*9;VKZha{ExvT4>XG>LuHNtzW0G&ur-~JRUes7FVOSHrC z$f%my>Up)L3yS?Nux?a&ZEba}-)~!jp;P)ab+`h~r9;uXbc`-C%)TO3(Le-_s^dAN7$lRU?T8qN;!gqA(g4q@G>Z|MPbO5IwDh^(=u+ygc z7kHM&nNwC-T}4CS1vQnFyK;)t&uaPkqm+z5@4l~;+5%}`={7x0VKs_!;eSiL&I*BS z6buw~;cV-RQsp&^u61{#pNRy_?5&*SRAdV#XX8nE1mG^1=|u{lF~fT#FWHLNX=dt1 z#l=TB&eYXo!h5HJk_%v|lpY@8q&d{=i7f3N7X|C4=k%pjT|K8Z-5Tr>&DPc>J%Tfb z^qyvSLhccrX*Bho)3@)#$=Xt>QaeouJy&2$AoBpDcf-kAX1C7NyFuepje7SqqNv+y z(h8n#YqQi`uU&DZSz&u0p24e~^hRjCp*gK;?F|Fct?3@N!PV{Lc6NQcFKlpUj2_mW zMiS`_&Hv2+w6=Weo;po6z2O8)BiNS#X!V0T08`KIw#%qA;;jc1r4?R1pwCj1y?9BQ zX2o?QbS*Wx&pNM8bf;Cly;J;jYrMy;aCKpkNM~~)`^F4+66taMY2=mO(f!|zMQbYP zYC^1c9ARk@`#2V@&X8Et4{D`)JKKK893P#qOa%A55_fd3AgjdNZ;_3QG$9Jy*1R5E+B z3f{cy5mkYb^-8b=%9@`)rnWpbzqb0CeeyVot!qaEOfT%?QATH`=+-hyc}pJpqu&@< zpFp&fbK&_@XF5Wvn<7o8#Vs|S1PwkE;YWJJWmX#eE*rYjS}a+%_nKy>$^xb9mBwi? zVP7}TE=@2!vG2RKo@=AF!gjlrb|TdDoo=VyXe0VDnqF%cK?Q+Q^hR6IYWH#c+tr#S zrkL;jXAXNT%;RP1ZfKi=Ot;_#%_zJqon1fIcKPjJty!Lug3H@<<@AtE!Fl1mv&lZE z*z+Us$k^g@i_7Ve;?lBm`UPp(RmG+C4Fyx^a*@a9`3oo3Ob?7b{%clP>PTOa%%+%_ zou3~WLB*-4sw=OJaY6EF>Sjdo_=;G37KDC!n>449C`%d=I@&UbOQU^N zF+F2OXC8qDV9q(YW-Ivmkmq6CPT;d$MrZG9wv?L#&Yyx(zsN3tz?@TFT3K0LRvJ^k zfi&VUWxjw;*X)t4YAs1~FWCKw)Z$BK&d~90UieGOm)53!rbFc&R$EO!#F<&pHCNXf z0vAeY>ay{tpfxy3OINQ|LO}D__>b81B%Q;F$%Fwp?jMry`vSU<-8FMSpT0?BzL}s4 zO`Wj?bfh-Tly1G)rm9FrPV_w6TKA%uy*Zj1U zT-fzEkzbl*be&GFK<8^OnwvkE5j&TVJTyzoR9h%@uFTSnrknx;o^e%s+&95wxc52B zqJ1y)r(W1#HSUGFZWPz1e=jUZxxn%4oOS^1eIesIyDC^G38Z^{gAUbB6r`76J88e^ z>TqX4mBp!^{A^xU7mJL>TAO$gO<&C&M$h>)G!)mA*Va{6l~z{778Nhd@rIREFIZ4s zMemQRs*aTpn>_7;)9PY0qbL03^NZ)w%U#O7Ve@LM>ucz(blqQ?=>3H9s=Fj%d2%GL zhxGW{FZ|wnc|Bo#>*6mIetFHR;(v#*RQXFR{5#U%*Y8e6{T*rW>vwr#`T70zsoK9v z>_>inAAhR+Z5Dq19zm-7>n;5JeS%c^Hwr)c@9%`A%KvNO&yp?2&(1XXcL^Wre>V;O zex#2V)c+nGr)qz;@T30s)8IeL!oQTTRP`5G?EfGQ{rVdxrxFh@?0@!Ys`~YNdy)Uc zH28ll_9OpCY4GnBetG?;vY)>gOe?uDl`u)DBpTC=ws{SmC{{JIe zQsvj*7)1O3kp{p178UY;oCd%CW(o5DGY$TkQhxLwe}5>|^3SpO?_X)?ud(p&PJ@53 z#eV)iR;u=|u;}M+U!=;v+QR?uH0)n%;r~w>{2MIg=kG+NYJa;$Key>r`G0NU|0E6j zw^{7x?;WM8e}_dsf8#h+{(lHR_8Xyq`_Ze(a+znO;!JV z3qOBPGFAQ>3qSWssq*XZ$zb{Udy}d1H(K=b_i|I^UvA;&?@^}8ztY0b-``D@f3=05 zzmJ+Kf18D$zvr7O|2hjle^)hCe*K*XtUvxfaH{+pE&BO8o~iP;Tlo2V!>RIbvGDVl zC{_Ng7JmL7ajN{=Ed2ca%T)QdTlo2V#i{b|u<+-l!N1GG&)+jnRsU`aKYs@@Renu~ z@yFjgPL*GO4+{DDdyT2`X9ywk^Y@TbDK69%4Q42qR_b^p{{k<=&|EtodzgZUj*QCK;V&Pws2LF5u ze{CB4H5UFKr@`M~;lD8r{zeP`Pt)LEZsBiDgMX!k|E)CmS6le6PJ_SA!oMsH{&g1q zXVT!`VBtSDjrOzA!hcd4{OuP08jJmzG^Qumlh2~jp1*7r{#VO1;&1hQghr2{9VX4w zfNXQlWvTQXosmAk^JkaQuFeO8eb_sZwoEDAouHm~-~9M)(vB}R0i8;_EOT%9BgD%x z_aoop;?i%Bd6mRuyc94z#DM$HD{e6hp#=lkgO?p%Rr4IfVQ`G;s zgMWL9`i~?7ZT9~)Mg9E!Q5*lR6!kyv;QuH^{gWv0Z2CR^=n*YuT$=vpalVbepYZ!q z693Km98QhT#-EX*{<|Ffho`820DafVrax2oyNdrg4*uaO>i?62KQG1d7f|A}**`Hw z{SP?!i-cc)_Da{FS^w*a-ZhyH~r+W&-u zzft%PQ&uGYnep?8!~SfsKSx;kkiS1kTu{^m7@Ja53u{cP53iKpWc}Ef06iY z{+}iGM}?6O`8%1W{pULLw~KzQS8vVy`Cu3P7ivb?n)d(1VSk(0Um|>b*hu@P{Rh$a zKIxR#*D&nJD}6@x4K7TJOSSNu;NKcz3Sj^7yaKvWwdYl?`7h*`ENcyEJ4dU_1|wlH`Bi9zeDJItG4nN@r8|L zG420m7yOSHGEDowPW(3eGn#z++l8O&|5n;J?cXE%&H6uJfzN1;KYghpls4DV_gZb` zKSuZyl>VN{{~rhcu?~LIf9H@xZ2B{Wf0Ay1wu=#JR_;01~v;X+Jyr%yaI`pqg z(f%C{{td$4RsFx|u)pMMzNg#4{yQx87t+IbOlj7CMU~IkRr`NT_|5)nf$)p^_{O&? ze(0S}0mhigU*+I8>;F~ef zzd4~w?V0{-B7U3y1~>bbt`vUu-$vRu^T!_1Z~E^M(chK-8fgNaHJScv|3P20>u(qSuKd3r@!R~rPW+GY`-H{+jiTT5e*sUn(bARw`+Ui6 z|GC2NOG*4U{omA0{sWG)>!0S(Z~Ff_2Y-?9KbJ6F?PVCp3yI(6|Dvz^CEX_U9RJVI zz8U{-hk)r>`4Yk|J}RbmuvHg}VM+VOV%?>qFH{{Ov$f0yvT zk}y^6neqEu;c`6|~VHsb`l z|5D|D)xrN;hkn!lQJNs*m@w_%D*V+(z?lA@K>RlUx3BOSF@L{IdQAVX6aA+D&#Cvl z)Rq4a|FYB{I+gY(3jeJAl24fOP85E#{A;dD=F>-}|88;cw+Vk&^QYe+ew+X1^TQgn zL`5;@k5_5m^xsDg{ja5H|Fzln`rj`6_jXbL^~7(pe}mXRU-;Sn*Ddz{!=bZ`x(HpWhO{&3}Wx>06j1 zdf9(}rG2yh2cB%Nzws&B|1$@Fk?@Z<++f3sh>~9zQmrKBM z{Oq*YfAnc~`|tZ|vR-{8;`E`n*1^9)_#f%Q{yT}^W`Fc%KmO7F_bv8k4zt@|@wK># zNjtvO1hn44f2D)pEdSA`+x6E7{~ZZcYR{~{BZ%Kt{;jKgOR@cbL=w#Qf2~9Rpk;<) zIW+Bm-@%_D{4xz47iQYu;jrJk)wf^&j+5i>V~hPWsenvr=HG8GkE=}DG421egTGDq zyP7|Fh4^j$FZ#A`f4gXB`*+j6>HkY2cKeTPPBJ@w;7g4kdT)1=e;jo%HveUc{#-5` zEN1;QwkD_Ae!VoBs!_@$J{Y<7E5$(rWtuLx=v4ZULiV z*R=ook@oU?t9+)e+D`-V+w5=no^OA<=w|!-TkQYDp?{(12h-KAFExQSkFwjJD*rnU z{zlRNO#g%~-ZR_JUy0vV{@go#OBxM%0Fhb-TsNUC+pQmX8nEN!Cxf&D>S2Q zP5ajnzs>#)Kk)6>&4BG6XtDn@hyK@6wEy}s_VRBR{)JuG-$48}`}6Md?Qa);wm)pK z{{x5q3%_e9mP21^;#^Ix-TqYhpK|b*i2k`og`4&FIPu%c@2&MM-695a`46Mj%pd!W zwcEeR9Jol44RgGU9Q<2_|Ez?o)ShYo`NVItf6Lvz;U&V)_8)1n|8|G|f!{L}%b{ui zP6vO6@J}?vnD+n8VSn~LzWohg|4|nEhn->f|I8Haf84=eBK-WDJ6ufrHxj?i|7~J_ z6zo6NV*gjpwA)|UhFTN*rvIBA{6)flS6BTf@!Ra*Ve$WQ7W+3j^#9|ogw42T+J7Mh zIJ?*!zj|wZuCDxl9`W1kFZrQgap?b{7W=n3^uK#ITAkQ8?Z5PFyZyU_|5<~d^o2x`fTRXPDz1@)f)N?ZSU3GSj|k|3Kom*}r?8@BhKV&-o|Y zV*f;k{ufiUe}#j8yYLtLX2eTj+P}I_D3xCf6rn6cF|AMJ4s7s(vj!=$zgxSk9@+e{Qn1s{WP9cQB#fy9QJ3d_X)d-pDNew+QdVtw11`Wcjfj`v?Cx=>PLA_P^z@KXZd`=v2dA)Be24e)&!NYlMHW!EffDGl}13e}mW` z6@Jb?7g+3HBl^w!(9D`uV*f0Q{g+Sy2@X8Jp80@p`1CI9 ze^mGb{ulnP{QooJxA}j-PuQyD@f-hEe1O=a+;{~(7!E3{VN^%Gwvs4w3Mj-e*Wb5=bHNe z=+N)|)Mv~Te!bEB`uIhM{ug0${SP?wFBkpGg{p%h2*NJ|d|ERF&k5GbUOU?G5 z@u06Usuj!D)PE}R+seP2U)D;?I^pB;UuDtX=FmS&^e-2Fy)pHF*P*|SUsgj4mVbdo z|Ik8v`M0N7{x1^0t^B(l^z~!;t1bGQ9Qv~#@=M%R`5PVjS3eXiKfnJ*`%mYePaOI; zi2hvPjQD@euYrF$^zZnYuYaWwa{bp?^j}5;G^RA;Z%2yyFCu=M{~I0->aVxxZ+Ga= z{F!ffSLOeOL;rxE2ley&r?mgH|1)WT!IXW)PkJ*;^mEy8F^{u_|4<~N{Sx8NH1G^L z*4s0M-}HZ@@N0Xu81r~E@!R~rTFS4>$@PDorTmwR{v549w#!97-QG)D*jK#h?Ofsa z(Zv5Jgg=4!dzw$<*9pJr|90Wua)_q%w`TblI?BI6%HKA~=i~CnM72CbaSz9rZ#wB=j$-=_6Dg55^j+i6`x>m9UirS%0`e^2X6w6c!x(RwGX z->3Blw0=bE|Izv}t^cHzY3`zRt?b`J+aJpQy|lfL*7b7yW7__N)(x~iAQ*RBoH`$- z_2;y{OzR(L-A3yxw6gq-v_3-XFXZ@f+CD*RyBt4B+ox!KhSp~V+eBLqspn|@m0-`) z_Sdxjme$`1_9|`vMC)&bJNh{m2oz}n5`X;S!(fT&6@6!4n ztsl_3i`EZmW!ityx|`Pj(E16jpVImnt)J7%1RM-~c}s`==wE+Y_m|@XXnP>71LgQ& z+76QaFl{qr|4`cUJ!<;%j-Y>hznAw1(?7m<%KOLAKfVvi`(L7ed{2+}htR*FvY$m; zzSnd*tvP~ynYMiY=44t&(>jLMv9!{kcMAPGmDXXj4ySblt)pnAKab~J&!m;-F8TN? z^zR&6$I&{TR{B%(Y7=RP=co91GX0CvIz^7B(w65=rpfVi+VZ%FujlE{n?e6((t07S z7tu<89$#x-Oe zs%Wi|<67GCn1KE~?wc3Negkb6$v*cPi)H@?+Hwx1Kkp{`$2pbvm(sr`*Iy}Ob6glJ2D#-q*G430L>%*u|ouFB%VM>p@U@XeD|cNg6} zIYS+{K9t3E6Kx@uRaxtJmpHc3cGFVD$Xh;C=eO|r=EYgjX!Fvn9emI-cuurs;0f7^ zU`5tCG9mIDv9M4gjb-IToBkBtyflkziWlDBD*NH350e#zt!uM5NTSVeoZDKNl~LHd zULEgHdfMs`(ZHH4SV4-@^8&&a5g*r*m3v!p#E+Vozysg}=Cd3KYmP5rXf z*_^_b#jL4eKw@$o6GyDODATA+s4KqHJaM zVA_A5%as#d@@xhfo*lQERYk{s5I6TRRdWSPp2;X2`;MUDhgV6A>6nQr4-Mc@&?7Yp znE~W?<#-iX&Aa$?CSwdQX&+1^*?dS_u9`kvRQ79>NSCzd^5I~vI;z6$%tG}!pAUA) z!C*efQw$Tca`~W04l?J4kK<7e<;@qvOL;8N=vRmrUdp43XbaaVRg#j=x~PT*Dkp@G zYb1gMg))eYWeQz~>^NfH!rFw{IJM3{mBjUsYD{yYBS!kIi)@I7o2od(ZhD5B`lXkT zyKLO$JLgj_JWk(AkdrIyU5Ow^g} z+JU|Xs;QTwl-5*PD6LUSV~>;ZjjBWx!dqhG?Dy&qOE$idOpeFR7G?hx@%Vj>dOyD! zRc8KExQX9#$6>Rar0N)^W_lUbG$pub^Pm0d(zV{aO_>1||Clndpz~C>q@Bv+he$`; zCwulpDfLrQdMIl-85r-MHZ#q3Hos-5I>X0)+Ip2zuUJC13JH^TT=(goJuA6#RTNMw zQ2CUrgBMDYT@SD?m9kGNSMx4y zZ{uy;Y!)0nbBz*4>6NR3+X`QcMO!CiaJt&6>NdnVV+-vTHvc8srz2Lvso_$rX7(SY z?uW8CF(mshk42FG_zV}pPwuZ4HvcVdh&n|iOxp1@SBHfAYT^kmyJ$b+R2}(4yw~(z zwE3xUQ{e!Xch!JR{Z1zNYm}R!OP^R?H+^n;p~rczH-s7ai$2EN1{P#pV@bgu)WtAfBC?@Z5 zo+kUK!90|;C19UwuB4pLu*8*0Vp2S-Q$)g~9o1|f#ZDU?^m&y2c^!`vqaBG z<2}J1-t&8;S>dKT+1bsPQzdb4Bo%WCWkxDFDc~khusJ`QWbigewz<3=*PNdjrRM$Q z?*6L(+R1_+O;i@gD4-`~6tq;5<8!?-je{$<18luTCn7qOb$*`Uw;dkMj4IL1{0GrxB*k?^GFtNqp~gHEqdS& zEHK#vH*=#6dLWNH5G6H5Tx_L=J@Amybne)HgqJq6X!61arD9?hd7+VZx#qMVs(d$m zrLg(m>;>wV_PF~cmJ?of1&5MqsC-=*_X8I*?uSj{hkw-H!p3pg!w>rziVTj9Tb@6Q zk2zD({>9ums8(FC`}qlaUSidew_M)yvU1jE4Yz|I2HKeNJ*D7#Xl938ZL63v>ev)&}Uun`xPnt z`s!u9U%$k^_;a6sT=?N5m(L(APj!@%$hiLq|AOG>5$VeC!};EF>FcNl26x>3vC1n% z*Ds4ss3cA&GCL0cCy62Y!UbzG%#WFt{g9Y2)Cos6wY7>_oKOLb?pUXgQ^H2xd>r$f2p0oR)@o{lBQXzS}i@XutOvy{xLo7udV>rJiLqpXdB}NWv-mJuba5edB8+gakjV|0W*&0X zmU`>=wPMwrn2J2jR2^4+$OfoO=U7&Q?)+(#-@t-)i6D<_SapL5L3EkUQkbNpY8RUn z%c_AckYv=b3{PZas4aJX2^lp1z?~nHbbRvzzgR3VsmJ08kCKi|GSm-L7Q}&i1v8Le zUZh&%?I9FuIwY0Byrxib8eqpy>w+f)_eUuA6`;M+z}PIO89h?^r#!4Mkt&r51# zyLSFk%0==^sJN6&De|7C$%FbkcD4yyhKOZBMAyh}k<`}|qsH37|8~B}=eT+jGPIdV z26faz`=*PbjzhWKw~nIHk+;w0O{Cq|NE0nv73!aihc8{^5pDAag{>ttTeVgZNzp!F z>k;aB%q6~~T_v2S6=y-q^?A{zJz{Y|>-GK|3&C`Sw>WE7c;*|{rpJ_YE*-XD$?$EniMBQrDh?Hpl;jN&+~OZ#ddhv z)vAZ%$%mi&L%o7l8ViS;t|z>ZYG$RXgUhlSHud9iXeGB#I#NUKcuphzKAqBe24n2`?*+>)T)JyMgqnV$-F?Mv|%YND%TEa|0Kd^zpf9>-7|SyQ9sI`7zpOTlm(e zXzUbT)t>p(@|jr!V(#nX%d&FA%WhLu&i=iV$9puCZr&Yk;t6-Yvf0Kenm^$2w6un$ zG`I7ys&UcCbAd@ye{5dCl1()A_b-X#NP8n)A9%6-^|Uk!D0f(jD?T2)5l zo`=R*)TOGp7sxR0&kh&-ZNI`2&?Fsb?s{sbh7?Op(QAQ0+Dga!k}QRy9{&P7d4iFW;TMoDCu;hwW+iIPi9NcW*%Q2;@#8-)yo_&GaeIrEago%Bje;=TRKe|nB5*g^^~+59$1y0u zu)?1ep(em*3#c@$c@#*$Eok09+FVF8pMCxuJ2l$$T>Y1^)p6bmKfFH;C%JowYukAn zUtjt5M8nJYcCp|7`9`E_4|MgybG&M}5g>)NaR&sZ^iHgyu<24#5 zQKz<)X#8=h%3Gwok&ZjY``67pbfYAnL2w(xw<|bLjbjU1Z(zKg@s9)-`?nKD&9vhZ z(h*kIlN2XWu3x`vps@wJg8WHWWs|8T#mFb|rgRyhEnnz34f;QBQB;5GVgVzBOUPpK zI6{=ynrUpN$NQHN&f_VzkcaVjJwvq+e)y1a%P*pOd8*?{I;;AbV8hiHNZbo0vH~ZB z7nCJCf2A1xtf$k;Oa7_fP=V>JLG#KOYJ`c)% zOSbwF>GZukNlOk;$>&S!`qUo{se>-kF?B?ncXk}DoQnP9l6Rv~%4ygcQfC`!FKjKN zdqY%ZbEr34`X};XLGx$P=06tjpInjYN#dtCNe;NC!oTOm4@pp$Li6U~CVr@aZ}1JK ztGG@5GAJBr8ln>dzorzt>b`t89tLCL#m1DI&1&sL`F7tT+V(?n$F52GvC?ym{gm#k{q2dRK{4k z{aD5ulLkBPWzwkQa2a*1@<$zX#W8tswB?Ec(TzX4&tIaae2H&hQmf!wlba`Jk{{`w z(SFklWN}MNhIp` zBfPIBPqKLcohg$@;ihZV%=zJ2;fKf1N=%%LzgSJ0Ea{h3!V@OSps^I*;if5E>*NS3 zG$)^y@f4v|8AHjh)ywt??blba|#j3f82@W&10$Oa-}S2XgL zmgtfvGo#INJ~1q#$waazHrgMR>ANCAcIFD@k#N%-RqH&JDJhgkYCAWsq#{zEa|Lx5 zRAD5iu(c*H-1JRS*YOJHt-qB7cikq^^&uM5?7z-BRca@ek8|}U-PI0oY3Q0@Ja3; zzIwKrh4ZhSsoUhpC{gYk%kdFKQNo7_^ zco{!7>Gyl{D5iA3_iyDlzPp#y@6~^syEG~|)zPeI^psh7soXeO%Z)j?wEG)3PN>?c z$m;e{9*HlaK0T^RdM(|3n4PCe`>n*hwMrtDJiBTwb9m|TbdK&Dg`196L~8mXux->6I9boU}XI{ABdWfAhHS1sb7; zm%c-tPqcO5q5SC8*M3QrTd?`rcIpY@rZuYpI^|8u{snzrjxKqsq>#GXJRX@-cBJmW zS3;sg)Xc+6{ad_6lqz_lqnWm={FKo;jZ((1!b?x#i3=ZBmNzpkJ;F!U>){J$OFrf$ z+RP(M?pwG+p?P%9KSaNkHqAv8Z1gN2lMxGVc_9`uc$La~jBi({!YSBS`OoSQt~~71 zQ&Co_;}bbaP%*MC8e~NNroD&t@|i6|?ajTOSJz8r0GR1cJ{X32roKDn77kHz6b>HYAa3AX=4Zf)LlV_-Jb@ zwzRb^KWkgsT8qzus8DMy)mE{-;+r*Cv0CNli~skWd+*Ghow;E{g1`QLfA{lAX68Hh zp8GiGzRo@8P7Y0ndrt-DAH(iH30CsdyvpR6m@>yOOWi z#4txgzw=gNG}arz;~w6&zlxxxn6A;_DduX{rse z4_8zE7T2Rd+@@e&>KkS;4L~v7o@2R?OlmW1@Ff}qxK)*x>Z83cXVHLG8ckhKTT))A z5xv3G`>IhXsnOK`^lVIJ0b)Iz>S>Oln2j0tTd-%l88jfcrIyn}VZUWZ@zg$z zic>kI2?n<4+G2^lF;HS9R?T#28Y8AHZvR?|3H=(RS&0U>fv!q$*3%3E#f$;OTTo10 zNc(4+(gYRR5q0+*Xa=0m2|1&)yOmJthV$-Cz-q2gDH(b;rAml%ZZzJ3c#4VkZNZsIvFy>nhg1YNx_@Ak_Kw zY+dKv(+ySAp0VU^+pBZ9|9Z#!8oG2Zkp6zK&nZvp$Zp!R(!0})v}d>Ux5#f2qZ-^D zVm%*nef8`nYxITlIq)#W*XVmF(qe8An)vp_2&yz1usA;~_LSwY$Obwqp-+uk%v8v6OT;nb=Q}Wfp>n|o*nBwIp1Mh zY>?sEa=&W}#*San_^EB2q3L3+)5~i*v;rz^tmkFOXP&qvDK7{AN;ji{*fc1k8YA7y z=q9;aMbEqU!$8y8UR6bNl-IESmyCS?iYP275%0aStf-y%A}{QH+QOKlErhZ#24!It zDGOmpk1o(d@1IcVky*GPkA?^96=e^8AF-+b`!eN+`fV8q`#atQW$wV&J*%$?y%Dl{ zvRDq3d`j8eY5Cn{@<;l~Snnx$v<02(xQF3mfmR3YVh-v7ee?S? z97C99;ICcifk?l&_-cBatjn2kTz$^`!}~9F`}eY?#}{H&4UJr=lC*PWg&~-h)#ofY zry@Dxr94{u*{;=Y_B@kemsX%ikB=Gj%obq4hYl>mkgC9qG&^b;&FJy_h^}CS$QpkEgMBJJQxkKT%SLJnW z*uFKgcG}488?gO}eD%C=J_Ig*d*Au%NItcn^j+!NGOIHAGh++D#tO~$+-4B#!Qu=H zG!o;A%@* z%)KY{qb%!g(O}S@#CkrS`G-<;UFCKPg5*~$JG zQcT8?q$MiHJbGGTvb>1(L0sTiFBT^~*k;CrziUkc-orE(e?2qvL}$_SkWA$TBqFmT zrBBsI*IOm2Q&3Go{yP3=p%9hIHXts4v9{07cmG@ zopb($>$r6bX3|WPhulC$sr@11*JR1BTtqxQyewqh;qYt7?VSJMxi zuekj=%2U$+yl^&pR|_!t7Vt@IZ^5Q~bxS53<{_@5J5H!_#uCho|k1`4mPgOawHo z_#9H_c0HIc2Weh+Eyh%5TjJub4`ALz%A~FjvJw-zJ_xt3iX{(_v-!Kos*kiv#gAh~ zAGz^?Sm;Si=*RI+ZMgp?UdJcLK~tRgT!4+G8o}0wsURuRSzvyU{1V%&a5Jgsd64W= zDll28OwL16^PoFPk&$~oIbQ|aXOaKa(FF^qld3w=!D{LU+80$os|X$Sk(fk&A@w0N zsj5Ft9vJI6KyHYqUcw6u_5ELQ=W{);X?Ct;9YT{P(rnYhLiZLq8WXDh3i`i|sAaql zc{Xf|dDH5F{wpzs=oeNQ?qo^~>hn?x3T+WiR zgO@zKGlaaATWT^bL-5c`>p7Ick!>rL--54BF08N)h&1P=GO!lfaB$h3dbR zW&KXBr_%Kga(-2roEwWJ9OL6mMX1#OYKfvA9oO2*y937)9%qpmgz)_}&h_zeju*wuAsA-=8P-uhh>B z6d(N8;sCRI$`5sTcqP$F_DE#ZLu@P&<3vSr0Tz&AZCjDNB3jXVP7&-qu%q#m?BF0S z70Q`*@iXm@Rgj8^mW2p+0eVG8`>*;FQux~yJ#YS26ot%YEc}0F@*QV6zG8!5z^z(tK$(5suhCypn%9haz z&C#S~fQp6{{if8tv`^agV2Ns0I8A_i4)IUT&uH*Pet0S-mWi-3{li8CiuEq;ql?4G zSn`%t04jTbv4U_UcD%MeNVZ{fOENI|b?(0p?eg`Td8hN&Z*{?gFjiE*yVGhWfa2LdHTU`PF(h+pD~kNyrOYfz`SHP!VX zIQN#QdG6bs`LL(HlRx0SRGK1?mHuvt1E=0glaR8WK2o#gbkXSn^SM$33IkoGfP-JmCw?ujY z!_WNKar;Alt@fPlRXM4z;MMlWQ#0v8n;3!Z>ob1qZG`L(cUgPs`9y$)BdUTF)B>#I$gPC1zuM|g9i5qxQ}bv zGhsHbe4lCG6f3s}MGnNwA5IXodkM{3A*De#Me3%6ZUB_h%!UiaHA!nNsMnMx?hp=+ zMI`LhsFD*f8pX=BN?%&gA{Pd#iQHInM6Boi?U+Jwgya`RWF%Vr3@wFw$sUy4A4q9N zsZ;@q5!3;sl#ps54X}CdL{u`5T#9P~8eR~7eLLAf9t>s5Gnntmeg`)&PH^o}m=0Ej zibj2;1<8}8#aJZlSgp{s{DOjp#6B7wF)@tdL<47KOBwDhhg;Z;2GnCk4;eor*Q|`K zfX*9*K*71jm6k=yK`hDg;!q+DAZdEXQZ*7!5V6V=(G4nBTW}y!0XY*m`p`+O|BsOK z{{86R=(HM8B|*2iy2rm)A%A1ng~CsTt>sza7qhKjW`&>4wqDK( z|1#TpFDv|C+1Apq{cPBJJj_x89;hGdAE`Y*8MzZ@eTi1BgkgQxHW`j}>aq1*jx8xq zndFwTXeqIt21vutDMl>$a|*b=luS)=8A%smAj=e3sh*eES6@Yy(<&+f3Zk8H+h=_k zbh6mc7ZdzCp5V9t1H0jb>a%+rv-|$F+aK@0j~Me%|31o^kD0>%V##}W9S7;!M_5Rl zlGC+0)Gn=J(poqX*904me_QNkfim0qJ}4?!a?mIAJZ*1|BH|pN&5Qk3UjBLgNp2 zA)k#uLmPjJq@>cw!WH@-GYoC!Vd!NZhJMGx&?v_G6njyXa8+(|XIkXjM#k zD01~Dc!IxIAC@y}>KjX*4NC9~g<%KBt_;1LsF{&GaR%9l^MWRfQ!*+;?mVo7W&z^5n~+lDLdOL3BRDbJ)I zrfKk+D5k>DazC6n5>9U9iiE%vEw&ZL4DI((d_Gu!;IHKO-%0iWC^gUvG3(t%zC|;7 z6WQ1^ejzc&u|o;87kGj8jW0*(G`FG39&GG}wp8}CgCaQLSUcba&Of>h{SYQX(wc`) zx5hkt>U~k*sW#|&gx;O(TGV8n4P0Rs1k)C*+$($jrA{iTOdbPkmwi*WA)2Tk_#dkC z2fqan<$y~N9aJI9(LX`e<9ZyKrA$3=3h0K&lDBB5Z1I}*BjJ!;Ui?aGJD$bFUOEZU zcF*V4x{KeyX=Fs|eu{^+8XSkpb7Dtf=>Vrd8Z5C9^fU+SR|nOL#Rp2d{pL}j1IRc0 z+o2b-)?|mSvF)2|YmJ>g=V$x#o^4XzyS6m&Dcj0Z34T zg6`y@r}OEa&#O2R&FDeMG#`43^C~F+v`bBgRnTb)IH&@Cc+uX9K(Q;!qQA1+$zkEVB6aFiGo!4Px_< zyD#Nwk2A0SNW#vZ_V2U&KSShkXvzr`OA0N!+ME3AE8%llnXE6w=^>RpA6AZiIsNqF z4Mg{Dv{w3w(~Bn%aYwsA>MLrGu=fC^YBWkhLhEKs`3P;b5UqyVY!N!FNH=}WiCmCk zq$!HBT^N*Qtu)ek&o6#27W!x6C=6olhwE*byN+riLS08{4If6(iDzoiuycf0Vq^)O z@F3dvBD$09o5tec_Kk9J0mwPu{V)k{ z{gi4x`=}psvPAt<>Gc!oZelp7j^MA4cc>@$>vNzJs4{pAko_KnAnG64m<6OS_4wPz zXl#3m#x}>_o`fhcKCyi)elKM-S~er#@ibi&+{R>1r zrGAEbOVJmvWW6C{-w=cGU9OKOKA3VMx%)1Dy!~L7MXGJO$)lT8CEkfRz1df>%QVEi zkcxMJ^9G)yT@*?414jF4Dk$2qA26Cw>RLT6e1UfqSNQ^SwqXCn4zxl+NUqi7hE<|0 zMLo&b=68<)1_L$9si-o@4jrhQGVJy=|}1pZ2hqN5T*7X>Z*t^p8CW`QAvn zzj`kU*_%smpUI{0--+1wU3*e-6Eyb${sE z!>zSB_L?!)#@+3{0_*lYvhFRk){lH3v|)_(hlqXe5!Uj(?ahT&|K9fVW326aQ=m=z z+SeRzy|u56F!$|e|MwBrH}|LeHxICXUuZpjpuP1Ap||qwu0rdDgY1-}>R#5W-QNl=-OGA*PlEnD65&B~k45%v zS=J+=E4co~gbsd}RKu&nTSAZ7p=XHbl_TuyM_9Me*;+C)+izYP3SF@xWIr6W?#r^b z91{AQ{Xpm!QR}z6*}sZfZ|B&!zj1f_!^5n9MC_kLLwDubori=r>}~(`u+Z=Ju~#1w zdSo9$uGyFFKiQW^e0P8Q$-}H)9b(^cSm^ab?2iu(U3aLx@lb2qp-A}A!zk)|hf#_v zqD0cEmz!sVrWGT|Z2KxZ^v6)~^>*loS$3x#`exY1{WD>@UzJU7Z?)~0?C?Fd{km;E zXWLtB>%XahSIeSF8JZWGeId{nLiT$jtv_bj%SMKt4BM+wm)Z7BBSUZ6_Frt>$_OtcYZ*2Q-^;XviJ5_HzHNt+S-nw=V`;&U>xjpPh>#bk!X|J!h zw&dD>sJHHm*tgYN*X7wiska{8*S@9Rx@AB6&o$QD``H_6te@uF>uRiz^6f|B)~Yi5 zr?ahB%k4j37`o|HJ6Rw4?^Eqn7lx9R_6_x+e^=V8FAQBXgOEpN(Eaz}3~fKtey_%QbEduF!q8P`5wi9yx_{(sBKnJSeo7I(`&Ap|SP{1$id*-@ z?KN@ho7Jd>4{IoH=WNQv&u3Het7bFh+4hfWL$}o0KdTLWP;0+G$NJ?Q`}H~2OLOeE z=2$n?Q|3ffK~%r=*N}Z@wzVx}uYocyYy1P*)>B#bJ=xYZ**5NfkWKeL%eHUNw%*7_ zcaOTgJu9?=>UMLJb+c_>Gtb&;+ppGG%XhOsZnD0cV{fbpJ-EBQsmZ!)4|`Kh=!TK@ zHTBl|z3j#H*2}r}$2HamxfJH^2)+H;-uCyKtPl6LAE~$Q-QWIAz14ew{g-;{#RKf? z>#gOVv)`L*z4^I`TQbF3dm?T6-APkzDv``4`73+y|a ztZ$uRch+0mzuX;quEx6IEW5ACdK4QEP9jwfb=J#Hx3NbeS0 zSVu%38KWSqbH66-20#JAlxrA|WzXpV{btO!DW%;bt(R)DIa zD#C179YspV5+r9v`)?K+9=v>@|C{}zxPnDCB@G;5&=F1DNVG9$yvLbB$psRJDt;#Q zN6a`?40#nR1e8PjQG2QA*-H8sxNdNB!ODvLIp{lEV=+a0fYmK@oYc7_qP@r9IH`X{ zu3kzH>(`Nb5iF|2%u^V3&%opoX6+Bhdb9H@V4hG(^RkNGW)vB2WK6R%v=v7mC#It$ zc@@1dV(%%bNMde?V?Yl8RUDUCktDaXQ?N=a1+9ER6T~X8Cr-Jay1taBz8D}zFIc1v=+!*U}Xc>XoeG(@Q_LM_@j>DOQOmzJ;rb(I@ z`iKcmdu(6jq%4s{fm-JTtlRmVz8UauK}*xm=*upc(Q^!3*0^HO-hAr8QtO^53Xu9O zxGLz&^X`Onq|QJk%MZg-B>VvZ=!XUKCy^y}1Ys?^KPw$$>$3|$oSJLu zDtfc_C0LIOm#&MEa%(vljRVy zse&)-r{+^RDtj7pP`aK_;vk9v4nkilWWAziI;5A6ZJmc+h}#*}H+h2Gji~j@JRKJF z2X!a|Hmp0)m&`-8=k#%hmgJQ=dcKrToBFWfH|eGl-@tk$~*~(EF6*yh?C$ zTWTU;QJbO@!@1tlxr9#ZK;>5Sz+t9mIs$87DPvVB`JE)IqN%ZvF_46v5b<{Dml5=V z)P4X}f8W1PKUDCgv_9=$&HYsWF@as017Z{uzA7A=|B-$~tt5&2sv_mfb^T9+$->@f zFNul1(DQ)GM90GY;rpUL{Dk|%1{}aluD#h()r`}Pi`PIQo3r#3?3rLQgBRVsr=Www zL$a9xJnZ0$4bTk#g;c%V6i&sQiRK|xtN0igo**Ic+04fP46nwc;w4j)a1L5Oy@WD} zYpJ}(=sJ~o;OdA*5jC$4t)3L&nhp&o&EpGT)1fMxUW%lk(p*%EN}7?JTf#FVI$?GZ zwIHBqLFkmaDJ9AzonNWzhK@$B{!h}M;rz-s{paNiJsEU|Yk9u%G1|*yQs_xN*>737 zC%;aIo|kmtl~d*v?+z~$f=z28hn?qqrYME6qfPa}<1 zUNn?b8sLD|ft<~n(Ocg-b?Nj50vjvVU)@Qi#jm30+e^h|87@=TPw!xK{nalIkBpc4R#p*;-8CS5w**$t9E~;`62V+bij5{ne{*q2G+&U#`Gq>iVnc1^w`H zgSew&tR|%A+iU2O{5{2@9G*)#EQL;v&!OB5lv3cg$RTVJJ^3RVLHS!l(UMCjHN@si z@6~+_{$P^;H}cc3=t8D&p%?J!L%OFPm(Hu!C#bG|k^9#m{bnh8ZM1yM=>Ex>CLLQT z=_e1vL@a~&kUwAiDvJLXPke~O*_Ql3)d!wxNTsWX{JGzQ;EBE*Xiwt_*7vCr zXqZL(C0lVnb?Mb~p$gEuk z>X@H6oQjDFgR>_qG^H^d*__W+03ZK#?efzKDkfC9nZ?}X#9Y^p3G=$t!6+@Kj>5p9 z7Y?_FE5vAXO>}doE=LZjdLr7sbZ|FBgcw#j~Pd4NC-0!)WpNG5=P?O2_#OR0q%K1(VOzX z{NGV__;Y>8P9Nt|5+;p1#1{E6j8`VA865x5We8%lI^$PbE zh|-UOa`-W$#Z`AnUZoov;l0AxyVl-wXf)uEE{i(ch5&JdueqnYvb@F`4x> zgQr8^5!;5W)At>>(sjzqi808}z~48ekTj=51Ac)sO=S8cnN5<+ICs3>5j~2MMh|D` z6WAp@ab;%=$*P9Dkz_SU$tsoUdum<;LI(&*Cg#kdIW3r1O3y+NssSlMz=umwl|;4F zAX(zQBm{yhcNYYSiX^xSkRpfx`NCg ze~}2B%xKxSI1^*l-g2&SRw++P5{rFMp6*j2?+V>1Ej>^_5zDO z9R#W!2Kf^2B_R;p#^I3=5f%h3oYAQWV#uQxj(mxEk;)|GYa_*%^2I@sIi?BPoA;u; zU_<~xD$G`X_Q)4!CrG|lf$p%$S0@u2x_r$dIuML1x@II_6f#X7mKT&tG9{ACAmodp zq|v*#Adf(we61nTh9tzKdPX-L6E3O`N{+2%GXA`;KQtV_^$Re0?1b%r6)5>K`C=g6SOyQ3&MPd z(!ldZe)h;0Wv2q2c^@?`=O7H~bJp-14E1>99oJOL$$WfV#n_%uwxvcN-&qR#iaIbizmSS6{%B$dP2uMDbn^LM{FsF%*Y&}^aZSiSSQ zG66wN7VS-W#MdHOtk5%|{ya>R%o5>bCjjOYVu?V^<4!hs7u8z}Hd4SOUXs$fcjXEMz!^6YvQMf2Cp1CBQkA@ii~L6&;eaDi zpP17b*yX6JdlF}?mDFgZC zpk6vum*_u=h)5S~(4EGwv5f>!V;hNV0NbuPgsNZi`rZOdMFOLhkW(WF;#?oe1%#g7 zYs@u<+y06CWHFuAqTJ_ETa|fg5xX|2la@!Ap&KLue;FckqxL zdb=xRdRU{;HB-KEU~hddFUXUWawMe;_{KrKbf_k2+@`VG#5A4^xJ;u-NC4BW(EC_? zlS5GC1-+QIl)(@-pu244X#!qqOgq6@pX^NgAikA)s1BWP`AqNjf;_rr$~O+|t?%Up zmZY?eCVZfj0pB>Nmkw1X__mRVnE1wHx63!0?+5VhBdBS$#BLt5A^VD6)pTE-zWynKsti>wu}PO%VFhPwTJ4^`BuX8plhIOrhMbT-ulL5 zPg2U4lrrEO2ldjS$^_rGQq7w9#;Y)wZ=}Bo;M+Ew+@iI&QVes7Z$je(wNMb>q7)E( ziw!H^wvs-|p*nQF!Ke`QuwJ8UrhMbT-uhl%uu4)|DJf;ZHxBBhLzM}>brKO1->St+ zH7Ow_VF2G2>_;VYCM88G66Tdctw_810sUki1w;*(4lCdKSly|p4xMkSnI06Lbj_4+ z9N1gm%L`UWN;gSL8SssRdg)MQf^V%v#KbpNt-I}wH1Pp^dzV+T4&SO-dn`5@gzg>+ z{vf`UQb6zxS^{SoH}rW)o`>qt`L>yMD$w5g=$a|tIIy?Amltf5lr~688SssRdg)MQ zf^RE`h>35!?c(x{wtE8jb`I-B9KKZvirNMdc8`MiR>bAN%VFi4<)J!szHLImh;JL| znknBnu(!UK7p#$#R!d45@Qs6d=}={YZ_9{?iEq41;_{7l{{r~-H=ZYf4iymE&McCpMZgQItQ!Ahow zk%_K2M*paKrOyfUFXnUfscmw2vNcw!VFH&)VoN14u&osN3b0pp=x|Uk9jZ&Pt(u6W zu?;#{E-5xn`Fd?ZCtc}~KZ>P1u5XKteJ-{hY{$FxQ*-zVZwh72yY>Te!+rod{782_ z&3x~6{T??)mOMdw5Nfj=bW2I?;)NgPld!(CmymSx%yg@k`I7vX!o5TelMrQlY zNH;fMvKjk53Ao`L0P%75$ddb6WXS|Fo90~7B=9C0af6Nmh_K*}EQs7W71oLu#>7bg zQ^iRDUD*ZI_@;X`=LsLqD~c?p?~svrQZ@-y{e3QY1fM zd^osk@q;(pt8sjCWbyg3Y<*M~Zx3?^n*ot~jPO99B9j3T%%w+4bLsAaPQ;5W{tXG* zl@F4=kc>#$)WXVB1j(-Ry&7eDBm5Z;*kL8IG%zd1%$)AU>$)8u4oEkNGyQe$1 zUquA(CpA8Pu+`rhS#kj7$gxEj$-?RXn*1e2u&Am`)`+jke+Oigy&S6I{Fuic_ZZmY zzD*zLF@H}UqdFJ$pZG6a*ZCVnQXaRFZ2IM~{RR>>@>+-dXZ%U|%g|q^6*-T_UsYtZ z#VC&P2>hh{6>wm$7oU`04l*oHi=T;fKSiF_fn|<#C-IK`)34${C!mC4J4whn?KA~^ z4_@^JX)flXp2!Mw3)`%hLY|@T^V@%_&czph6V)){AB@~k{$UoS{L#M)lDdETf5Y5x zS!MDL(R`1)gN?%?-Alj?DvNiW$_E-xs-E(9!lsk`S53Djbt>XE)nNm7rrjBd0Z ziR+L3o3Q%DyU3ECa_>(4(Ytgf`OixlKmQ|(-$xf0xf6ZaSusw zle?7@odI+Bi>3Ufw>PqX-+?{&?YuP@S@Iq-DB4>SjTWlC(Y?RE+iyT-(AMNu7>ZB3 zTPSBKl@r&PyjIawFY`EJrnk(Cc#M%IPmmT_=2Db7hGeR!%pGo-DJ7IS(!H0Gdun%l zfRLx%sj}nH92g(dpt<;aWQD9r-45E_YR-F_>9eRWYB#T_^wC8GHM=#z(HTbciO5WZ z#y8zgdKuH~MocfBLpg^%Gc`nK{)OkU+;&BH-l?W9l8F%y!Fh53q1*s!xW_U=J2pa$ zDSUFoTDWBDCr1>feg%Zm3t=#zD}Q?&?SC04Q4;TOrW|q-Xz5}{nT@HvDXgM|lOs}p zqHGGwXY>*15K?zh7YLi?DANHHOx&DQEhWj0w8XZ3yS^Kq-_#|9p@sxK7-WPBzc{08(fu0@R z%Hnls^V`qNNqvrA`(oX&H89qH$yf<~?TfYlzXD^`$yo2v7v=pqjK35Z>xgWT!%}|j zOKZ!^fw5je`KVlf=GVShU!zXZUmN$zSe5+R7wgT}0%KhuV?D;NeX&|L2gYiWv8wpB zFV@?sz*wKi+IXB_`(m~A2gdrBjCB^j_Qm@5mcUp^8S6=Y?TfYT`M_AUGS<`d8tv;r z*&Iqq;9@AiZwo7A}7{_`p&Pjde-|*X5mRgLylUgR{_bKxQIuL8>J0+&fQIQl#f|kvbLu#B?WPvQF-A@EcB{H0FdaH3B-L0IU?2Xp- z?|~xs?@#|O1{LpX^bi=bu-pedUeRl25@a@y?kx|Qm$bxq#1HT$@SGKMBKb)aDmx*} z?Unh?y}E_aW%9Ifn*1w!G@LLaEAz4fWdnJcW5{}0L86uFkGRe!3LCifdtpJS<8m&)eeeO><{Ou_w!0+)JRL<&U` zVl-ISf3+Kw?;yeAiX|?%2!C<&2|nr+o}G&$9X)7qz$peC<8z$G8`t@g&J`$)(cx$b zI8eL*_qJ*#Kz`BAcK!NPj2FMcy*xx^gJq z@e6iJS8icb^j;D=oc9lx@R1%*okBEp^3>s@ z;bk3TJYjbX3-8b`y+B>yHne*B!Am1VFpkdvnnSnv(S4q}Cq*Eh^VKu%qv{@ARg^kE zwawK)hecqzQ@)u_V~fIRFgr>!mqMl*zI-!hNquGmX9AEp8~Q^`WazGxt?Qf)skaTP zAgv?_e|HWjIma}RMIfdvh#l$vE9E=fvAOs?PUF39_BOGFTXy75R8%Yp$7lWy1&0tx z^SK1+$*b~E(P@C-@Uh;ntNx2?6wmaXdOZY{TVz<2TviJQ5;Y|#p{FNCIS%AFo20!Q ziV)(hrU-%mCkm8Y80~s2nw|A)B8{$wRmGD+r2)jgQN{$%u$Ud(b{bVF4^Q88@eDoT|c ztUuY=MMOf@0V%FB^e5{CzqqZa>`*(=?x}6ik5=F00;l}Rr12XjCo3d{n{cHc+9N?+ zpk?%qUCLJB4xD#f%2vzJl=d2Rk1Ftah^-`22(&>3!u>{dj|e3^V?ssqRdXrZqyiyA zpSq_?rhr14q)XXmdW&qQ=!($WRA}6js-J!=F?i0G&$w0YVwAfg6%6-|R~YVRNgULx z=@!?epw2F3owy;TaVx6TaVhIigoI03r}KziMivcLmrzViF;7*$6xPCMB1CW%T_JBJ z^uQZvC^qkz4Sa;a@&ZyWMV3517V-HMfh&)sgoqMp?6G2B{2IOM!73DK&}jnY#W>O7 z4rU=Kh>5Kj5sBMWEt|Q~iu_qPR0JsVVe2>PfY}hiMUW=BVo*WK- zsSJIH^Li@b)JX|a_9y{*rbKb%Wu*Hm;vuS|kFKbjJZC-b*LNx%!~o|HVD}k>aF`v>YxuGl^_;fOL0wHgcF2XW4+f(V|#esp%~omC@$}_Nx0`@++DY%1GTttasT;B!VK&!Ylew5v#TP4t0-QHc)h2 zTj`3^4K9iGu3kZLkmogY1vBaDA z9q@h;JGQ8S-a}Bl$7-AiA%P7!xKeLS&w}7aK#Cy71P-Wte$_%%(8Q8^1;v+{<)EO& zG(mec=LN$Hg~9V0e)eZ4$aAg}aWv1lo%Pps-G_(nH&;kmLZ=+1EBxlZ2<1yRF$;>& zf&G6e2KAAcaLJh{+C!csmm|py!hepUq|t-EfNIz0Kevno1>)a|RXO$7rJE_kYNjh0 zCjw!@nuS+j)KciMNGMwASqQ~4KuRbuuu%p;wbY$Xde|!7OF|&HiR`gKkf=z4eSj1} zh(5h={4=XOnS_+FZ?DWO2L&yr3EDRyWui?4Df27%*`J*tDO-j(nv^N~jGgoUt!83F zm$MS0136=V;*9(=DP)>FEH8*kGWm2Joc}LHNu!5p67k$8UwO2X3`uB^@>T6&on)B^ zBs&DKD2HvKWQQQ+i?(N#I6&1%b{L>qZICbVUJ?SqLNL4Rl`jicVy^%1EKepOUwIT?$`=JC zT1*qPx5;NBNb+TIi}J`9WhdDGcPqac9{=ApOl#==zc+E^!X%8Yu;DCN7Hp4$ckQpz z%#Z`7509OaN{6I!_>TR5IjENo_5={W0_!U}TTVL`gS_z|R+!ymSnTHAPY=^1v#L3q z>;w>Q7F0UKyeLcX8j4yC$Q1;#5+K5}q`XFhsER<6^&kyjB5nsnYHRrPaw} zcUeJH3DZgfupFb~iD-Cd3o}bTu!R}#F(E4Lo~ro@Jb=ll0Up5rfY$|{$a4`-kLo@c z%L^zEoRIKJq+ACWNWOJ2Ldhi*L_Mk^Ax%+E%C4CII@>bT{a6$bljEpn*g9l?;Ei1U zis;boT30eXv@g15YLCo;y>bX4mz2nig(zhp&m7cChw2iQTunr}4F13*kQ&=agag>t z;dLf;oQT0TCG^WkxB@trCmR91*O)gP{=j`K6rw#cX|Ql8{=lo59{e}xnkoM{u(#e} zB`Yc2Bq?RUKMv}pBT7arY$ZA-7IH^GU65#bG-L#@@ZSf4gxm5QCt|Qr3^HZGt^mTM z880>F4bdOClLs+Ha_H@D7Sn_BfUcSHjRSk@dwD^rq*Nj)WxzKM>ZL<9N#i&XF)@uN z2QJfSQWC(lHF_TlJq*n#C=!?^rZHu~er_vxPJ@>k(}wPM)9Rr*biT!y-tEHAI8(lr zQY3GE!>?3QDx_;>{UrzW(xJ)(-z*|x;v0|UF5hVWAHcVm*UxP$Ehr@4#EOAjAp<(g zjT8{W-0=F9uJBMDI^Q~&9?rd>Yo>hTz~1_X)uf~}OH#_9y>U=49jZ+5t%!)2_?9PL zs!oy?nE`y;$b*%bPJ?0}&8{Wi#Im$3_|SwkJPpUoVQp{AJXD9yw+5z%vv%m3Dc?A- zx4tpilaykTQU-kEpk6vunW*I`5i#+N6*O*pBYjQ)-)8Z6>+r1=cZzR915_4#ZbB6W zM0*?Fa}%N-szc`+Tf1X-ZY$}%GUXcw_SQGNVTb}KZIYBS;2Q_^(xJ)(-&PS36W>^Q z=kkq|h5>x*<8_%Hkq4RAst5cx>rE8{qZ6qQlzVVif z%ePf%QvrP2%Kf&}-Z}+EZf_KWy28M7N~$R!y&P7)6?v!*oo_iz4+lchHB-KEU~hfP z{d4q_y!)RS-#Dn34pk=jwuWlf#5dkGars838v%Ul;B|?^w^G__p-5A~ZNu9@l!HqRdXpmV^2K|t)$Oc)gOzCMB*D6!rN^@fE`szm zhEMPjk;BTUPy_k#l939w@4f!OYa}5u_95qDu&s0lbU3J&j;u>?ZW+-@Y;)4q2hVHO9NHka4y{vS=>xkj>s?N6XHM~t*=XM@g4FEaoFfdL-KJ8O_YSU&O8E6fkxHaHg!z!qude~xMCsSZibd#=iw5P_N80De zl3y~5$d2bDx|4Q1c_g7eJD%4gi?>rG7(cA$)Lp;6yYQ_1`iPavuTQY`vI3z|PnD1d zh_t&P9k)uK{Q6$z^!dX!a8S-hi`D)5SQC2`EHID|T5Bhzzdkd+zU4&NYj$=bjlXJJ zA2nAfzH#I6>*Ey3mG)Lnl>GWGQGR{3u|VIp0lx31<(Dra{qG&@5==F-H}WO_}wuKzdJI)*ZuB_QU_5&juAS>^1{@`e&{P?`wy$K zl_1X}qN>r<3UXAU31O@k28e*+MTAe~$^Pd?hG=%eb01ijZKOF+54jzpI5L#54y7@W zLZ#mSyD0mG@Km5W_!eDN5?f^wt2e4FAP6PEQ&^Co0Q9_!=6;-zlM270wu@J(UxF%C z1uUpIPn-aTic|-ZmoJzGzp(p2HgzfI#OKrXg>95UpO@h8a)dWsHeQQy%olU)8-X#e zk}>zdYt4Sn@BR0~V9&K)^j+k~cNJa_82=!+e+1;bQO5rOK5PTVzwV!b@%vE0l>U6Y z9x(py!Jd*Y$@p))wS)LqvQwn5<`>EMv+;Vs^#429=kk0R{~vfgVEl`N{X_4N@z2ET z0pouV?7jInGy|%?XYhK!_!q;cCxCzF$@pjD^?>o;4fg1qF5~~5UZVy65?;peFC;%g z^gpTV<#imU1@wF-sY~F)^A8@h@zGD1)Nogbrbf+X4L__)&Bi!L{TC?Crfvh_c=C&$ zgIcrjKcu_S_ya*|#!KlI0eL1TTo5UaY}4pZ=)LQLNF4!QljC7Er}{jZw2H{&a_BfH z#xw^+>5~Y*!@HCxBD){<#Nfk)?tyc|E{IH*bJ@mUZb8`IZQp{_;8D66ctkrN94{ ze4malVcbA8!7t_52nR|yDB+Zv!TBC$9!JWj5RgE})*@v9138L1Okbv$PU0mjmr^v{ z;s6GJ(f(hc>5BkUUPyedB6(5;eUs9W`iidg(TXWAw7(`&8B|zVj^msR3N_4jC-Z(C zOr$#(Rm~An+3Jp@TWEs3QF}W|IAs6t;1c=4^AN&~sT*Do6!%mL#PIqRjNZ5`qt6a+ zOuYx6dR%gz<4Y$-Ry^%4Tr98We%3F}ms2kpAm(3Jxs?^QE_E)*QEQ6f4PEa+k4@K3 z6_Os_*B*RLXAIIpj(#8sn6l~i zf4|G+lPE=?%jIA3;(vk5<*9y`OXcU0=65*?qEgvA=Rel(67?PUJALBpmX@|e@x;bN z-TazF%lvqKO>NDbx{A|h#)~Jm&TpAJzh+*%r8Uvm(%d#_PFYX%pK6Al&Go(!!a_T3zDvHN9w>LG#=hQXTq5cAjV2VGn zZvOn1pa^NTV2WQnetuoeoW|z4T>AkDOFA?S>IQU#Q08JHt^6Z*9@%r}WS`wsqZB0|t0Fktu$oNw7iYK})I6G-g-H<6HtLH_(=X@FJ(VV}XuRmXg4O!OnsNd`LXwILp{sOuhLk1+P^tAQ+ zf$B|0b;gIG$X{TF2gtIXNBv%}xAgoO`k&&G*7Yq!r{+U`{ymd}R)y&2LCKG8R=m5p`Ck`Z|^b^GsL^s>mmcXz%uVUfML~(I#L(P1e zi8LnKD$o_~x;zGE{4>x~1JHr;&jSv_!;a`~_#aAlXN&e(d3LtuKIM3)Oq+IWwD9cN zn5(u&CyqO2T+tUNwewT)6~&Xr6&*9KxM-|+5glJtJgI0>(G+A6rqcWiU3#V!>c|Uy ze&lXB%P`@j;TzsU{DX#>e}omud+cHJkFYX%uZNo@F*ROLxTXNCGXT3W09z?BTV9FY zy#d%piR~+|`MAC!@1t~$<>qx|&CI1~G|{l+0yhm;n$kg1tlXG*X?#Z-qM24N z2g|fgWoVFbRkABI~?2~f~ueHl^i>@9qHMgW|w~E}V zth@KfEdeq$xA5fLC_Ni##{*g;(>qD4i(X3a zTB?hyvq7~B>2-#(ZrLNZ5D+RwBrt8yBBCkjufna$udK^5s>`ga_Rwlk$XB&&6!0+N zAJK{J1f7*>bdClc+F_yJUHIetpv+ejZ@a>kxzVgeA~z_#p>j-T|GBX>o|oD`^a;kNpF|o)bS~Hdos|J`$jY03raFB#Ee@r?~Bn>+r@uQOV+JV~FDY>N(Oi$~Y4%-y!t5jVbtHsybS4D1h*1G|H z)q^rGlBG;*lf-VJg1LQOdONK|=O8;iG2W3OG5yBVKkh?jqYs(EeF){TNWLEoU5eKr zci9^=mQ{7=KYHP3lhHvn&lEIV75!hnXhTeS;hT zzCKVH&j`q)x2fN3yPW z@>d3ybDU=f8HdK-Jel8b;hyv6mg!WCzjgZf8$}p$o}}MEb+C*wgr8mq9Wvg$LDa$R zGR|Ol)R#g2ibneLmoM|2DUT{aqEg0rNGp@YdicolIIFKM_OQIjxDrwH!&qp(;pF1UYs~zqSrg^HOStjf65cDx=`3$Dn zmlgg|R$xA-5lyPgn&w4(P9C8=~ zy*W66gMMU2tc?{eEq9Jz20qsX^SPY)+zn4s`rVM{%bT(Oa&`;MUAd~iO_JuG1C@8W zQ{GcCp8Z#F9;b313uSpP@bfsh%#g*f9hk>cl-yhNc zpDzUGGe-3}(2qnk+j`qIz|aDRt#<9ny$xFn-3RS1Y;|Z)?rqq*#C_22!q%nQlY1Ms zzV1F~cVX)??a93jTbH{J+FjVXLVI#=!`34ALAwiEo!XOo8@8@=AGEu$b(Qwy-iEC% z_d&Z0Tix1|dmFYEyARr3*t%MKa&N=d68Ay73tLOIC-*jNUE@AzcVR23J-N4GtJi(d z?!wkLv?upAY%Oyiw7al%o%ZD3hOHai2kkCw-Kagew_)qs?t^w0w!Wi1xwm2KyY7Q_ z7q-5qJ-N4GYq|TN-Gwb)^=OE=4O`#$VFZLNa_8~?!qyM{Ads;2BLn_p1AeOk|EU50 znF0SV1AdzUzukcU!hrwMfUh#(zc%2%HQ;v`@H-9o?+y5B15O$y|1WIa;|GC+9nGx! znugdc4IksaLiqc%C-*jN-S0kVcVTOd_T=7%t+nohb{DoD(4O4eu=Sw(pxuS7hqNd6 zHf%lYK4^DgYrXd5-iEC|x)0i2*m^{Ja&N=dpWFxSE^IxjJ-N4G>oNC1y9--?(VpDf zu(i>B(C)$(naBBmVe1J$2qbL%&4B;ifRkOG{};A4`9UCI>uCf24+H*;0e{YbKX1Ta zFyMU#{6z!)vH^d^fWKtz~46D|1#k381R1^ z@b?V(`v!cQ0sp{&e`vrzGTXkk8Ss4!_`U{we*=Di0VhXT|1WGEWWYafz}4=W zmsZ$1)DWIDU;ba%8fCyo8}I@HKE{9_VZaLw_>l(uC@~N*MNV+fG;!P*BS8Z z4fu@){96Y6I|lqF1O7b&ezO6;#ejd`fUhv%KQ!P!HsH4!@Shs+pBeD~GT^rv@Y@ae zFAVsv4EQPo{u=}STLb<(1AeCgUv0qeGT`?Z@OusT{RaFG27Ijnf53o0Xuuyb;OhI+}Zc%BcZJwMAjz=ub$2WnXd`tStf`9Azb#y{u7 z=`>H*g4lgs%J?BJAn%0z-=RKyHHSaUhmYVYj{5LZ86V}tzrpwyeE44(FYw_9j38)? z52sT~EbDL|{%gj^`tVbCBPd;}EbBwYkMe~-k40ph5C1vilYBSssHtur0^a?{_0t#i^Lehypb8t_>L{5%8x z6$372*Xb|A)&=PhKSQr*z`tt1;|9FifY%uC*#^AUfX^}Dbq2iNfX_AH4Fy)b1Qt=Yw? znbs7>uW;z7@OLua>ELQ+JRVcb(Uu?oCF585!jHhzbF^mvrs#Z?@or!EKE|*1;dDmr zXw7a-&9LtV9yH6`XuzLhI!TAVqVpw8c}Ht@Yih=M7VuG)s}E5#68hRqP`ckV(7A*0 z>zs6>^6qKIZ**{#?g&h^M{9O&3ZKCEcbxEwPBr7-b8t1H{08`_ELWcZ@!;QMgj=ru zBqs60FqI!=x%!-_#P34*pz=;a_|clZoJx18#H(cd5%Nmk))=kXzp3!Yg7_%Q)z7H> zkUeuy_%|hC^?x6e3a$t-;~@gG0<6IptF|oUpw@p^6n+Z z?{IL%$097fMp>@jO!4t@;G-R{Tj85Wk^dy|bUq#i70hV%;1o$H3zBDm2i5-}P|XD4 zV+?o`@X?wb-AR(a{f6-8VksCzzr%n(1$?w-U$;uu)Kn}TgXo-Mz-xeyvRr-UQc33_ z;6z{1MR(1=iCBV;*6i-o`FpYeBmbjk~e z&O1IjKVf{E6JFK-K4U1nA73Q#^m6@6;_3ORJDliz;?P&}^SH#*>69NK!l%<&&A1&> zgx1QtuR^d#S?<0}o(%9E#@&6Ki4xxkT!m4z==!Dszv1NI@Wo>(pL;m@Q5G=Oz=P<| zHQ=`!@NEYCfFpy`EoWSfinMkUzc$A6oP6FQ@gE!TCm7$?2|r$j|NK#ut{<;u`~WAs zqJM({U&r`CPWZDW{k@MS`hGmlxNBGTtjfOuf1UBe9QrE!QC}qbe!PWo*RG8HgptNa zjE`~Xw8*=Y#*w_a`(+Rt{#^-twB_25sU4t)IlQ}%ro!)m2~SY?GZ=U6#}u6#fseA> zeK$pClOg;eMMS^I$^X~oU9|!KG2;`Q@M?tE%=ly<{>5UVf1HC~E9;@lfIrRnNly3% z8NM6>mM8D^%U6MqvfTaU68Z80L-@xG_{+dYTPKBDWqj3dpFM%_GABRe6G}hwTN`b; zc3etgjy@(hpKE}RvR-uPsC*uX4kxHw7Z~tn1AdtSzZQ5AL&)D&6k`A8noG<4gXrgrDcs zC;1Z7@2iZv_FYQeRvGZD77%6yQ&F#Yx|wX7dnVi%a6Ro;FLoWd{rJfS#aM%Li=QmUUer#{K2mwvZT zb>j*|{Qs>1f7yVK!8ktJa_!2t%apDMuJWeS|DGZIZqr2m`wkYNX+2E881NuEHyFbI z4fts55}6CjBA;IREh;12wNE48T>3q1!1pSr@QWNe)PK?Mr@({q^P&MSm`-$DyEU=z zj&=_`h|Wp_{+I#(z<{50N-+Je8Sw8K@aGKpL9t-^Wd?kK0l&_G-*3SGV!&TA;CojD z=kp}sqpigbf5~5&ew!F~?EuN=n0^(f2GeOV;5QraJ_A1Tv|#$j8t^L&_}vElRRext zWpKJ>2E5IH{}A{n>l&v%uNBp170)0%>EKG{*8*4fGALhO=kTumWP^M;^K_!~4Tny? z#Qy+1h|XpX@7hmBW%!Y25FOWkQqd^_9z>^%!@G8sg_2GyPC~SBC#B z~vc63DaqTTt{geR@O1GKAyLOnRlFn}!|CvKy<^Mg#T{}z_ z{@61q-P?TOuVCD@!-P2T?=OtIc9 zaqTUY-2RAh*RB%X3;*6?{4O7zmCQcK!#t=_*w@?Hu(1rnY=B5!|z+i6;GaMjjNnCaWeg%Qq2Fy^ZyBqPw~?aJ`Q-ekK-+ySiT_B zvcdCTo73|0G|K)%s?!1tqA-41 zzU2JWGCz+zi2Sf7U}DBDO(dN^zQodV<&7|HVtLhRwQe)vM9g4p*6UVgHG}77r ziOKPJZAV9Ou?mahwDAdwirVz!v}?;}*3jn*%4bfDrwfulo1RaFEOf%pOiWs!zACU2 zDc4j`;z88ZCr{Eo>7fcGK6XM!f};>KCk%xKsvw<)A#r(t`hcHSQ4HAuiGe>UF$_dp z7Rj9W8|$F^F^K1xr_DSjK7fF#DjK+aL}+FsXeB1J)g^XLXcNaY)wQ)%%se^H?8Bve z_7F3+u$(iN(a@Js<|oF{z*H+!87>zY#>JE2A@IlBiIj6G()ct8>OnoT;QWM4I6u&L zhXk4NOa{!KSev+{wGLHOGN&cJuyIaZbGg>}Nm25BPG<6)I&^6*m+12eUq`9raG=~w zo?Dk_YHY46KXYe#O;^@bMn9#A)Ofw%pK{v8nWsIdN!%dHG$^`*$Ztlieh}ZEm^`Pk zt+j=w>6uE(U`jT4>cd^WvLY(kDV1lOJhd`@#`Nhk%g>6RHTC4ma%$aknyPk5u|=Y4 zh2(4Xa<(s|>8x|qcWKgRGjd)|e4$BEQ_Ea@1&zOyROS&x6Mc_VnF4Y37<20FvUiYd zTHt|`PYdkL#vq0PL#35-UdzrMhfmUsi^u17bj0yFnzokanx@9YCGiDCs8zS-hatUk zouK}SG-sh)JPfIniAp`Ip}BZcT*=Mw(H#bgUcO?^oG#@<$Za}ps`Fiu$@*vTzRtoQL}t8r!hC!Urx70- z3mOpp(Y$T0I3U1Ik3fD}L+kZ|=jt{7;R8uTqWvzQN{G{S;=l1P!(PxzYbL?<(|+w1G`i8?IJNhr}34pt>~Og-e9 zRAKYxS&5dWmW6fmiPGQ+O^MHl&udTAB#?Q=HBxrByF4pU7Xg<$^RXWY(rl=ckP) zg%wHRKvUA;$O@GflgEjeJbr3r9+s4XdL2*A(h|u#CJcA224`WIYcx0!O@fA{Hq&J_ zeTM3(Syv`^5N(&quRnXkTZAZxrQLHAuaRc^JlI9H3(=X*>F05p_OJ~`A|#a_AEOn%|JG8JLt?*g$zhy zSnAX>U-AvxDjz!#GcOUpnj_;Clv14tRkp{XbvURNyLPg>b~gaNAiPaXdmym-u8G$) zHMP`YniQ|=sI6IN2760H9r3+I8_vXJ-0(506X z_j|YoHy`y~JjkV|S6=Sv+;`2G=1-Kmp3d1(hGRaJn=ico0 zpcQtQQl}z%Q+K+Cv}sE5WcDVH*EKI_oZr$s4;l(qA{WJrrwFgfHkc{5)y{9^X50Z7)z!|+Jv39`4bj;gU^^DF^WAc?TL6xeSCgR z^W3_4{k#P9tE>a136aO%6@Ab;MzlTo1B(WM$7xd^-9#ST4+f^&<{jNW|Nl8!v9J zQ+-Xb`PnISvYGZlFP-2hl)-q7SZt22seoU|Itu zZu(o{0OZqKSWr;aWvbI$3-u;jsLT{F9JK`|)?YMZd^VjC>1 zIOjZVE z1}ODB~!dU82nASZw6b)U)H-;<2dHejID15-#7!s2**!Ms6A zp~~$*TWMmY>9F6J-wbH%u+|2mu`sQfn`%A-8cse2q0diG&e=fsh~sb(93Y3oWWk{I zA4AA=TKAF0qTwdIOKQbe1W||q(lYK)26RR{Un53h1LQ1o*$AZWExGCdhsUn)?kfvnvkRbI-6uyCP}YaPZ6rj#=1H=|#UV~#Z zczYskG*sdF#9#UO0R95`xj4)GqwV7NoIDRW8`pg_JStBHCVZBLw@RFjL*EzoicY&0 zK35B`P9!Eek7?o6_fH6?Q9U89FzedA#`YR0hG}DA z0l(XT|J{I}K!ow5oyCdejj9uZHj^+Dx9m(5{#FOap$I0sn=D>+JMe7ItF7fno{X+|{m#cMTFr8;4o=&Gv3$N2z zw3kaqmy=rz_+tiqiviy=H<FVLH)o?xhof@u( ze?r6c@L!dO{FB_yL}jb?a+QXES;K#=;X3`NG+d|uv4-p6qkFsM(!)>Ha6SAS4cEiJ ztKlbV`P^q8m%c6!Q4K#y3xBkR>vT@laGlO94cF;hs^NP0Wg7l@E#2=M@KqZA1ugt) z4X3ZCDSo}K;Rk8qN9`M24`0%7JwK;O93-s$H2P<1`2HGxo<`>@TDlEdc=`&S%4e$< z{(LR`LWv)Vbf3_|C$;cZTKMm4_}{efw@Exb|G(C7J^!mUI(q&e((qC(-6u3$=kK!` zewY@1tA^|0w`=%WTKEIxgpb;zo^FAL>vSe)xK8IQ8m@<*qv0F1dRr%Ps<(YLe1jHV z?{6pXkAV24hd*B8lz%<^PYvOJZU`SefXVylkCAvf{ka-`pjMxYHC(TUn+^ESB~Eg9 zp+@InL-=Pk{2VR(#~QAud;Wo;2o!8m@=GU&HnAFKf6SeuVr`2&Jos zKT5;(@TY6I9{wj1Pv`q>T6mrBDGk@>2?yi5!1Vin?7aziR7Lha-0Tt2j*5tTt5L(K zn6M^p6NKn(?Kmi?IEo>JAkjc#(qU21U=pQmqS4V&#|>u~2bXc&#uXLWaZnjX9o$A- zMrnhJJFa}^+J-_=r$-VdOv(>3nr|MSK?bhWSB)DF`5x~)(JJat1 z^P&6maKO?2BEYe{Re&S?V}PUHX934N{BOXK{tFAf#e(l6zXQkRLOD4W{B*#vU9SZk zp9?bOhlg1Hc@VdU0FHXk1swf09dPv9p9I(IcLC62oID0N+P@lbwC5GT(f_me=VDW-9zEmuTrf6}z|o#+z%KxQ-T-(h;Kvk6BGvGK*z724c^AzAHXC>e$XAR&eX9M6k9{vJwlr!kaM7eO> zbu!>+&*^|41o3|k;Fy<607v_4&X?CGvFxyZorZLuYlvY@j1ZvhjP6L zI6ja38*r5KHQ=cCN5C=9cRDKJf0RQ*QTNc}--dS)dJbRybzSw`A&}Q*Q_*dtYKRZf(Pq1ed$hYAYVCQO} zzYcJWw}pVe2=xB|9OoO~0379f2sr=Bx$?s%z%iaX6Ad4F-1Y<<^8?1uzd%054?gGG z=rL}QK9#s#2YOSfU$hhB2ldj=HM1WB^gK^9!<$!+(a&8lx?ZJF9A8@q)e!$bU zKL&cy{(k|Uiv1r0J=%})oUZ-Ye$oH(n3ClGEb#;T`4h0`7{Jm07Xtn%(ElEA><9lW zxLz-R1sv<;?|@^yVE);be& ze%qFEVSQn_QmL~{NwUY!&D#dK+>oUe8P9Q$!>zt39Q_3MCR zp7c>ptoz!wY7e#U%``#{jn4}c!~kzQgy`*Sb4R{j2NP_8{e@4kSe zfBFNCdWQgx{!#Ix`}5agr;d-c;L|L)ZCoeIVs5>lommz+zm%Oey_g5kejHaLezv7t zvn=>c7W^Iy{;~!CU$bWc*qH_KY|B5ZfFAw%kp=(Eg8L!Lgqy?Al18%=_7}2PFb+jiw$)95Y$9kUv zIM&My3qB8Ulw<4Ho(FoA|A__fVe#it7W`xjevSpd$bzFkv%#Ok#7^#C(9b0n`{w|T z{<#Bi^n)#*tO0tIgYzvY=X0P(e1A)Mhg$Hl7JQloe@$@q&pmXl;_!DCdi3)V|L5nV zcDg5|U={lmL@<7Dm&*g&a`QcUzJ?4l1%frdzB3pjwDF5#a{Rqx~ zs^qwg>(B55Up?{}NpHGtb%b!8pdrH-Mww zp8>~u=}vXT2g|{F;k8;m7{_w`#)9wWQhW5rLcPm2F1NgxukiUD=WR|BIqaX~K+X*y z|9HTc0zHne{sZ*5zW+YpxQ@R8a9juPE`H-;^ICwa-(A6c$VwM{#`c!Dnp0zjaX$Uq*GI>gy7~F%Lup*V~cG8+yA)CEpf8 zy<~x2TxY?2>i|9G+irlL4tD-h`4;_oHQ0morToVAg7uY3zD56FzD0jxzU5r1>KF4Z zkEs-n`4;_&`4;_e%eS1P_~3G3{Cq9A9zQ<;j`pw(d@w!cVV(o$Lyxy#0gmP6J;RC~ z@tr-`l@kL$;P`~gsQi=4_ypH|>OelOe{IY7uB&2uISuHsy>MM9IXkkw zpr20>|8Sh3->wF~Aw9Mitd~^U3;GA!3;Gk=%fG=t*j`=-9NP=}6Wa^=-_~Ame1dU; z;}g`oE#ng`7miO5SN#IFFK){!POg`F;pVgl;5fgH>qL!2!w1WG1nBRy;GYAI>pMN6 z{o=aP#en0w$qc}8JaZ-BXipSy9Opa?IMP1}IF5gw2OP&U)vgyjKcGKX3C?WjPc^P) zzo9>01o>#s1`EDR7f*ri|7;6>tOXxy!H;CYbnpqwb)(>Vx&8q3SguevS4@(e=LOg0 zEC+g&^CsXJKVJim@w0FDgkGc{3^>wX1vt|G5pbm672b!%{gx*Jj&Y0c=OTRt&|^Gb z4LHWb&46P(F900nEC(FryaG7Nc^z%@~j`kb?INEb0 z;3#J>;0IE0sr+^};JBape85ruM8L7VWBwcm@?Y?Z>&7|aV<7J#UJE$3ulohp+r>jb zkL`l{4nDZ~m4H39EPxKi#{+&d;27tR0FH6~7T{>-*MMXF{scJIOJ~S4Siidhj_sun z;8-sQ0FL!?np@iBd{qekL3@fVIIj0ipt7j=c>?GWA7IgYzToVRJ&0GyDFu40M~t6x z(EAP0qyP68dvy5+gPkb98E}-(drJA>IKg=M7I2IQp7Y^Drw;*+^w$86^^0+c@iPzT zvA+HcIL6Ok0Y^EH1CDYQ0*-R9f5&)R4fH7gb-;1m?LUB{{4W4U`QHPM@w^3ar0-#g ze>IQFY#47U4!OQC9@f)6ABhYL^8&6z zeG2p#x6R-O#CKuAbm)3_7hKnS1mGC|g@9u`Uj#VPHv*3IIQ~KU3oPT7YXL|42LVU< zC&2gw+n4%&5;hCt=X9XQcJW)l4GsX=7+~Y4*Gu`;24LW0*>_GS?~Zmh7LZVoFRatoM9Hc(tT*T{j`cN5aNYm+0FHiM z3^^IMCYgLX^A z5BlL4z|jwd7W`tsQO?zXqnsNp_;L&Wfd$`H78H~GZ^2Kt;HL?$`?DT!^ymE+Ij;kb ze)s}#^utdUyq~-X&E-NlCjyRgiY)kL7W_5~zTAR;V8QWwz|fxVvSC8^=dpmJKk<9L zP|kHiulwO%z>)s%7W`en(VyP~j&i!m3*>rS4YA;(E%;>?{5A{zxCMV!aNVC@0*?ON zuTP>~W4VHWqaVftj`Wi)_$`2=oQDBNInP+|Pc3+_z0CFxvEZXEc%=oOD!A^?`v6CO zzG9KnNj8@0@wpG+=!Zis`00S7KQ9Cv< zIoBfRNx;z$YXL_;ylugE+9zQ@$~hQtlyj5?Ki`7SwBUDJ@TC^~9Si=U;JQEel`lSE z9Q`>$a6MmL3^@AXYQWJCH(K!L0Y^D+0FHA0Yr*@-7kTJ*4zl3qTkx3{{3Z*2hv2$D z{{=Yu^GA!EezKuiZ|^4pj(#Yz;4=V6e_jtb%DLTwzhuETTJSyxB-#baA7sIQW5Lf7 zT=!=baP;S+7CG+%j(+$aaI~}AfoA)20Y^Ef0FH9bwBT1-@c9<}B@4dMg7*lR?cY^! z-Jin&M}JmW`{JMT-IWfU?IiCVO%IU%hfDX1F{SW{g{cs}SNM8&% z(*FZ+q>llP^!<-;%}KK7RKSt`Wx(z!!9_c_|5*X#W*z9){|(@n z-!gI%_F$gL1RU3$_XHf*XAc1!-?E%*?? zaUaDAfaCsw^8iPCE(9F+4^#t=a+(20Id=e#avlU6{qro~DCZ>${yN}j&*y;SevBUg zM|-*qNYo?BIS6pH=V-uD&QQQn&Y6ItoKnD1&ZU5(e{KLA<=g={(%%m_(*GUs10g@` zJuu-1jJF|xW4oxe;8$DlUwh)+ey|Gko+LQuVcs*Z^7FlbR|CEl6XkF|xW7O-`v5)_=!XD44RG8aTLJhbLeJ&m-?~zI=YX6UfL{mrC4k=yaxMk@ zUZ9@|`13%I{#*<6vw(hQy5@uZfaMAR-UsM;O^^?!KLzjsfMfn)8b0)XmVf($50-=d zX(`~B(Y5m1MSx?!$#u;K%efrruNGX7t3Lug`r%%{QT}XKx+i~o>}%Qp^>qZ;e;e2{ z0`QH3^Jx#_RsQ)L=y5!JJM0U>=bAm)VRYzn_7R*&vON5KVbf^102VtzXu%Y@3P=40Y^Fi0UYJT zEck&vy>jVx9&f=bEqId!|C0rO25_vGrGo!Tt4G`)g7kaJz6+gxyx?3eq%XJ7&j%dq z@p+Jg{@egK`u}IZk$$IMWKvH-V8X(xf^hl^N!rwoms;>yfTN!q1lQ~FB@6wl7W#uT6LzBfeuC@rCjgH1h`)=6{#*d^(f`i^ zj`XW6_$I(nPWRms_M@ELEcgi){5%VOr3IgF!Jo3={{|fW{2#$}KOePwqFhKnNN}D0 z9Sh!j4^Ix$V|^VjxZdu{0Y^Vy0XX`($$~!#ILcWIILdk3g70eCM{%SDKg)uLE%>z- z{P%+Ee*OpG=+AF0a{9r(3-rT@fTJIZEcgt-QO@;%qnz6<_)8XiqXq9{*+((Rf}df* z&k!}oxrAG%rgSL6bYa!vsp<(z53ue9LvE%-|oe4_>LVcAEq ztKhmnhXaoOtgy(r1#tAk!+@h7p0VKgdv++Nvt=K}E*AU*3x1vjztV!wx8ToN@a2N* z{`>)O^k!GE&C`=u;Axe@M#wOGQo9! zJ_0!U^DT>3T zc@f~~&l@aqo(CNL@CM-MhyPme-C!RD%J~)GC}*$*pJ>4wEcgQ!e6=24mOwTI17HZ z1wUVK-Jib$9R0b_A}0no`k}LBKgli@JRfkBa|Yn(&#@N#8Vi2E1%J(ge`Ue_S!VyM z-{sW(d8*Ls?LBOfa~I&~ho=BXKPzlwGYh^8>?1<@!!3Be1wYqkOW_U6E$gX09(Qzi?p%dZA{l%IKoD<(`5oZ6KJp;oxZd$Ez>$6v z;7EVgkqJAIz6NllUjsPqgZcz;l(WZC3Hc~z6yQid18}7OSa5bX?z773@5$Hk2^M_5 z1^>W;XB};kZ^7qV@DD6_R*pr!1)p!hi*h|V9JlDtR{-w~asH;@>^IzJ^%>CPKC7Ju zB;@0|@Zo@Cd(Q_P+vzaCaXlCJT^tE^&H{SGud?9RS@2se_@6EK-z@l(7JP{XUt_`F z1|0W0{RlX&*Uuc7@IU(VdJ8@eaNKY64B+U`w=MYYgA#g?{%F8)UriC<7!T(H{%fe; zQovEpY`{^@wSc3XI{GF*xCW z^w0i)qnslENB;~29OVQ7M>%H$j&ddfj^&yTILf)ng5L!=%6SBEl=D2`=%3#VN%#l% zM~$}NGc5R(7W~(qc()&~f_gbgaL%7s0RC6N>j8fiO7SJ~W{v*&|3Ap;5IL`AZ zM}2P_<5vNFekV^5<8uH%7w|g3X9>>biU1x3`l|uI0dU+OrG8(7#hFj&f{%xFt>cTP^f9zugY>Xy=`Pr()+k3;le; zm0YY}wWp3{%d&}EFDk~APCmC)U+Oy&nNI0p`afChvH9UIK%a^nTeAK=Q8lY_S@v&2lOakwL#`b`D#xfbomh2Fg#@{s%1b)puIz^3%2d zZx;D?0KP5uKLm2n{|^F=@@@9p+WRgb2kXlgw<^anEynF#Y07yN=xuT`#2}6zjAx`* z-xaoyLHP>-Pene)Ey`Elp~@zre8kaCj4PC*#s<2a z*DQ8EVetdzF_hmQ=+VwY0Y^Wmz29sP+J86DqkP`CuMU)-19(6PxJd6nxlsNBphx-q z{Gtw&e>C6$Az;z!HwYL)`Iz@mKL7raI#B*5zym_S5XNB+;3z*2@FgIp0PxQNM>_{Y zxzNt+Sv_o zv@-+n0LVu>vjN`-_MrVIgPa1OM|&K=y9515z;^9H0X`0JlrstN7ND;J{5N0^*88_WUkCK+w_q4T ze?9_o(4P;09Q5a-fCoVSgMgzydEQ`x?pGn;IakGMY@Ww*dE!Ms0U3{g1yd5CS|)qgVBk2l#J*UVTqE%U87g@feL>eO3YZD3DVN_-MfA0?zbG z&O8ktCp?b=J_h7G1Nb?BzXCYZEBPBVe4Oz72>4i#)2*9#!+tm)@cjU1dL=(c!^a8F z2*AgKoFc$W0iOUk(<}MYHGG`#%mw@ckaHv8lK{UTaHd!C7Xf||(60i#0`T>KGrf|d zzDJ$?#`rk;<0C^lEyk-{#QUedU!C!b0ngUxmHgv0e4Ox%1biyUQQy1H@}~jb4D^=( zehc820-tkIlyNE{quk~0=^jV z)qpPr{8hl00Up@JyJ5Zjr;dJrFIOO)!+|3ePH_Lkq{{)=r zb7dUaR~`mf&PtKNC-vT|l3yV7lYssOpjY3E&h-4ZUIy>a06puSByuwR9y8Of_AcH3 zy8+JhUkUvfz+VFT62O^$1Pi3&e!$mwko*7dfHQr3&OOs3V)nJ(rTc#;z?uFn8MloF z{1u=d3pmqf%J@UQXUg(l1Nw(F`U2^9ef?`@Ob(Zfr*pX4J5N$q)nyeW{ljI`!@m9# zO2Q?+{^M(Ed@j(xc1lJ0MP(H;`WOH9v{Ofg2bYFtRFwrw3-cya7EddmP&TEoR4Cge zKv9FoS60@9hfF97my}oJ4z8&xF0HJc5-yuiJier+Z0LkCGOcn(;naleG&z!$;hh9(?t|*^U zR(Qr~qryXri%X|Z&&|ypKt`6A7L$$TQ!WUWjtb}ImQE_EE)G|hl!t4`JEKbIUtytc z{V!)ivOART^T7AzldCF?>XcG3B^~!~Wogq_VJS&cMjc#M zU0qr2B~U{pv`L?)4qHXrbhz}X>c|~H9mxdhFx?(D_41hbwo+%x<{0I`Vg;bRqtr3+zu0dL1}5RXJ|1E{wm56tvI*C zbm+A*deW5KA;pp`Iz&xwytheCirb=~b$xHA3Nb6$J{4ouwcRQxNnKkNwPQz~xw$li zj}Ju8pl6tTeuQyb=l?*j*0ye})u9%+T zg3}7O^)b%ih+oK(HqwRd`F8ud##T{7$Cpefo>)7jl%KVWOG_#$>|MT%HVxU2GqfRU?9O7x@iJx4W=7<|JzINh75=$g)^&bCE z6~i7>;@JPEO4BNY4YQcu1LIbu@6!L7j%3>{u~+&pP zg{{$&!iE=oPlP zskpkfQy8^XyzLi4X=>#sw(XaR(i}acUY%`(>vjpB_VjJ15Nc2D_6wt}(A+_xl&)rb z_@+Fl)*l9~n>RXiaX9_lvyBBxH(EMaoxP&AzTN9Jx1&ZPHoZG257^YFTf-gd_#He# zG5Ek}!43+$9n$R>%A9@{>Cj4d)&HVlXR}~Cbw{=;sIKHa@4PEMw||~>y+~gPlNG_r zYFcNUQgT6=d4pG53zLOIJkG*1PBkwvo-t}@F@G{J$6b6(sG<$*ygQxO)p;umZ8JCQ zPx#+9*q(0xx9!GY$+ZSc(h6GZ*c(2eaOA1<+JvFjQslI|FGT@*!Z*?oYR1#!Ine6IF!EITcYWew9olyhZ zwRJ1SZM%i^8c|1Dm?X|%VP5eWm9IKPs3>1&OgY!4|7{4{M71LLO~nO z>Cl2Cd29Rb$r@T+7M@gHIc*2;f;B#$JK?bSx&iUb;MR-0u|*I1#%<3k zP79}=aq4JGGZ?%zf=rd7#yDFe&ss{$8~JUe>e51PmZQq~O`d@@W#O$Gq^bcaZS>~h zHJu9Sn-NlZAXgpUFJ)s}b@M;w&W^11XW)`$^7xLo zLa&GIIMisnHgrSM8ge9w-qxXqO`xgL(iwu- zBoB2&TQT`;J12?uRhqoHV+yPLxC4_x`^DCkx0wKp;?iyOZ3!_|LR$^JEm=t=>zLJs z+UeV^PB_c4oj$SV_xYXy@oRH znEDz@VOCmMHG`&hPAtyNEgn`;QCaFP43g_CtA!&^9d%OisFRD&Fl6HYN32frwh z8K}0FT)gq<0LysPw(gLc#8mCf9a>dVT~mhNtI6Mr$uDdV$nn0e#U+@azK}CGnwrEJ z$=^Lm>+|}zPr6I?ym5+O{+93aq%ZlYDXlJdzltl>>6>5L#_j7%+GX^M`KW!}+fsH) zqW|-8v?FcYzP@a~E?Z6USn`&st+nr?6m)wVIE#NfdQ|*TMvXm+Czh0!(1sGzx9_Er zM+?2Znev6d@l9#`)wlEoHI>!VN~$OD*Zxi|tF9@jpgnRIPy!oLT*2S{>-xmqTS`~` zt1Ia{Ek+0bw=7Kd+<>ymiSchg-g>vWJ6e;x)~;8!zxL!3TRKDS8;q$s+h>&px%R4F zdlE`;wXZ>&)=E=TGIx^3{P?$7wiCgv36ta)*576OI`#bVEz7pnkvy5DF(>OY%nP*R z9WzIgWJwcAUsB$Vf7)V8(vh@lH>KRvPWdc>-R5>QE>!B)wY>(~j)SaaZeME0SU9cS zbY$~jTNZj!lPydR>6G8nim&sxQ{f$?A{E=W{#BHCVcPY6a&bCJYbqs7xpuUqx)sIR zCRM4FW$XQxRJg4uUPo(BrNma38j}826e(@-so0#lpNxgriehwx#^jP&vSx0c;oBM8 z$!KYcO0q?D!rT6>{OxpR9jhqKa-_5=ri~{cZK&H`AhliA9c0W|@dqjEXqtc2MjK#S zxwJfI4ok(|dg$Ah8bd>ETeNjh)YjCTB{r40R+()LV`!poD=lqHsy8@l%VWu%zBSkC z$ss=8f@#6I6{@zrfJwTyLc6t~hUT#q;!`i2QD1u++fH}o z+n!fdJ8fIhj>)U)r(N>Z_Z{;WE^oyPfJ2H4^Gj-K$}gZ-lq=hsMly~HXpxte0&)k| z&<|(OPl8Q#f3X5v^@y`+c5Pz+;^GUYPcNpIp=&CqlvL2$X2nx;eEs?7yy)dKU;inU z;j;cGpLXU^HDOw`7yhzI#S`gAz{-66FQ~4pt%6@p+q%o$Ci{H58CVMhlb`MLeM-MO z$G_z)Ki?KV+xSBUe*Qi4RQc6!-=h9|)8L;V`sL>VUHkbrvs2YS-N3(h8vJt&<>%j3 zPgTGAEl?~!|4w|W{PPX=?~?|<`t3>d-@a+^uNM7Ta_0EiFAe@p2LAoi;O|Yee4zhU zrokUD@V}4-|B=EkKWFI1-#^meKTi13{|BVOKT`P7{|BbQuYUg>?SC^3{sz&H{O_c} ze}nL2`QJ~2U;XYp@^46kU;REk@^4IoU;U2#kzN?O_0KVtYWw|>X!$_?gVNy7mf!tE z{)5xtA1(Y?e>)SFs{IoT{D-8WKP>#%e)md4f1QCpD-Hc~4g80u!GE)X|FAUp=NtGB zPlNwK1AlfJ{0j~I{nFrHY2eQyEYFxX#|hW^zC{Ug)hSHJ6w@q2n2{2LAWN2S64qwr(?FHVC$ zLmZ9#rD^c@Ht?6H!5=X24@jf_k2LUCq@h30z+agL{|Ey=_o)KM&$j2kkp}+RY4D#X z{2AUb$j#r^q`^PIz<+HT{1pcN>(by48~CqJgMX%he^nas(_rAgAr1X=4g5Ez!GD8+ z|E4tfZ!_@om`dRI*%p8E4g9yH!GFJj{|{;KKWgB=H4XlS2L9X9;9qLszda59)dv1M z(%^r^z&|ey{2_|G%&^E0h9i}=}=|0fvuA4-G2!oYu88vJ1c|1N3p&ouD&N`t?_ z!2fU>{BsTbkEFqWgMt6iH27~b@c%sx{`m&}$I=)--EZLkBn|#Y4g8DJ;9qFq|5qCP zOAY*orQyHT2L9|c_+K&bACU(CTL%8;(kTB22L2Dz;NNKAUzP^{R|bAw14%W1{b=A{ zmj-{=?#ccC$7%5QGVmXlM*a0R@DERee?J5N*fjXF4E)a;${!#%5$qFk&uR2OM}V56 z;*fix=0g;^FI{k*7AQc@Rrj$}I`;HVT=%tfsm5b{J=k{`otaXmI|TLl{xmRt+3G^1 z#xb7XXPH~epG&+fvpe|~kNFn;8kz50VlweRDEzuzy8mWc_#aJC|Kk?^MZ&*37K*NQ z{V@yw+7$KIQsGVIU!P+6H(U5WNKt=1RftLdCgIoXOD}&nsvr~p7b)tmu<-i^d5&*S z{|grW&cd%%pHG)}E;T-r{h2B1f8WBtdy4u;Ql2*H52UD{#|b9>gHzN$g7TD!KS%hb z8;QG7um4{YzcGI;VyQl#%2S-b=Fq*Kzm{9{4@uGf0X@w27o=$aQN(Yue~!WasKNeb zi~f^Rw11U_f28p5!A^uj_y1Ch{qw~B9N}gEUqjcr|G%>6pOB*cN0C5N{8R~l0Bq+= z-TrLiH~D{!*zX8G+kYKh>-LYa=x0RmktJ37x%=8W2*{nZD z^tb1~0mN^r|4jz}-AP5z{dbe-*Zp^8ivH_D3vBEYef)TJivFuklVA7WKD(IpH;ev$ zS_SIywr2e@5-)pdcx#-v9_vaxVBYoWJ(9H3jO$ITh z$M3E~Td~D&^!l4?;m;KQ_WGZzh~HHHF-ts4b3`+j{{gzz+wUV5{aGp6zrn(vBm9AQ z$-N6AZ*{y+fXV(jVn6mj4-uzszn?ZAoBTgAMf)#qhrhl2SwZ|J``3v5 zFBAQG{M{|~vur%PT1_B_(gUig{P$YQuk+8@M*cArpeFqfivAxHrn*;p{f{DklmBv- zdX`QXe)iv!bgkF_KD|Bty8rIa^BCJ}zZ-;~9z$9k3x)r%R;VxO`SDxDuQlxVgkNJ% z;=g)Nv;Q^;|F5+Q)BV>-{3ib`5dUQeKl|@lGDi2GzmM5}M<3%^-k$&F3BR8IP7wa~ z%74IK=JFQ^Ki4@PdinPzepC4$)F?A z|IWvXV(p~!M=bokEc{xS`MT_F)}JZ-?fLI#(r@x#)$(NjtuXknQuOQoTP6D2^WR4n z``@&bU-#emeaz*5%fhewZ-a$@z3{Kn>Q9fq_le)+znm4GrR#*B+uv$~|Hkd>*{}QW zp5r{m_WbvO@aygGY2nw*cXKsj7wu>E-$Dz&?!SLp_!kL(d;RBX;y3v(W2NW6>0&JV z@1Jz7x8HvIoBh}4c#n}~j1O=1ERk@|D8_! zCjZqL{P!9aLHFOiqF;}{siMC<|Mfi3Z2u)G`fqZY{JQ_%v+&o6{)t)z>h1S!;y3wk zv-oeE@N@jVY4Be#V2-~JQ}o|L;n(Bu;}rcj;2^XAQ{`WfCcp0ggAO+9-;|>N_alCj z|HtrVMLNd0|GobEUAorecdqEyxP@5=kH$8VGH z>*YU2_>q^db^adNX8)ziKRZo+-T$9i_zT4T_WI9{iQnY^1qT0rN#)NFhxC>6Z)k#$ zeWLsS_bK}SY2nxX|A!R)|Eph_{cq#f{db>*f1c=XFMr%k{3ibe_+?c(#<~B!{Joj3 zb^jf3gxP=H3p_@ajfWn8w+p}Szn%rimAKaV52OtcjBPFdU1{>`{y+FAv;Iu6zdir& zPy8nT*NOizfBa14)ct>>=-1#|pog9Y5*( zr&##M34fP3r+1;3|1t~z1dD#%|BEgBRlMt{lv~~Y(F4u?&lG+V-|Eo)_Z#9j+5e!}PtD6cxc%*6u>X%1{U@eq|A!X-k;31e z|KGLPzuw^gJ_h^u8)Ww1rzzThnT3Co@SoYr`^o!1W)Q#0|6^VzW9dNu^Y^Fd@w3*V z|D=;N#d53153kd+CcXWR6#lm~F?#$QO8h4K=ZO8y!q4%;-(RBJAGYW}@?=f1-0JqP zw(#c&e|z??u-M;MzJLPl=kNc}?e8F;m;KQTCKpk{~soPlm8cp{W6W? z?!V#huh8v3h1RJEPOASaPf5-GyDa?8!e7b4;n3~BjrdLWSFQCJM+!g34}X7zZvV#? z{k{+=g-gwyzTtW1@+lgg;Iw7kc?m$Tyc?@wZq0eBw8iKl@eBQY=4z|ASusi0IeL|K@KzgWD_r zdW-$*g}=S>52bZ3wp7o5ivLp0;d=cKAbwN%n_u%7^Ms%4KZpMG^4D4PpLe=$xp%ME z-|H6sal+5vIfRF9|0@>zSN_{$tP_5=e<1zo_Gi&L5tHckckC!nYkT!~sqpLmFA#pT zov-!sztRqWd*y$b_)YcayzUho%Rkgm{sU>9$5j4(&rGfSQ-xnIe?a)#EC2d-_~&W@ z^!k63_)XHd3<_)Y%n`<7=Zjz2~ar2FrP0(1O4HpVM4P0zGC^zvU? zVD{e!!rzLSZnWa~vWJ=ZHwizF`S8%oe+coL%D?_?k1-(p96t{I>E&NB%v}D=-+EfJ zQ8`_+EwB=KZKssOyzGD{u>jl?v-Bu2N1uh{DJje`4a`^y}q6^gNHTz5MyD#r^@pubH1z|CiHqo~ir=!rxy0yoC5oaT8N_e$-xD8r zmg4whqQQSRiGJOG-Ag_F?X{oxE%px*e)JVz>+v(O$n3uY;a{dP==r0B_)X=nav}T7RJXZ|4HIE**}KAY=n;K!pQYMmHt#X^%Xq#472?Y&JY6aq}#u# z9sZr$@qY{Po9tgB_RkT8Z2t^{{ddtk3BgJJUpP}UTyAyyf3)x~68`ggw3eg$|6AfW z**|6zTSfcNq5aJ?*dH8iwtv5d)_T>QCsp0~eBW631H%8ifeBi^((V78_)Yfr{mRo6 zIN0N7|6gvf|3;c;U`jpyA9>v4)Bk%?6X-tloNeM?B>eoHQ+Vk1?@9b7`}6vEj86zZ z+kXZ9>G6M^MgNqiP;25^xBrB*&GuIbKd*1#q1&HN{3iQ1_4N#&bg;+G_BR^rf7_z} z@Xt|e;##+VJU!<#rq^GN@INO0QxbIh#}dEE{xQdTjOhP42K!$Z{d)i7`^wWeS1Fcr zK)auMj%R-t&CX`w*X>pHuf$wT{3iP|Pw)ih2qF7FYOsF~nkQiY>GsbP{gad;IR~`+ zxx%m8pYgRvsPeR8)9t^C_)Yc~i2aT*vi;W>?C(a;`6l}VqW@^6Sk3|MzQDpiPWW|t z{r+O%*UMj*V)-kG-&FoNhVox;DE}WV_Rkaj*;;vZ``@(KzcNMpU$fZ1#$f-A2K#%{ zbGE7e){Fi`e~?ln=YV!UM)>vkS(&2$M-jg%eij-0f0x1jt1b4g7yYz6(dr1a zy7T#7x7Z)})+5Z;=ym_UVzGad!T<9O_Gh1O_WwB1U!ds^X!kROU-$n!;cqW~!o+X# ze_nyteldRjVzB=Oi~WmIw0~ckry{XF-G1L@ub}PO--q~3_SYHgzt>=Yh3MD&?||s1 z>48>9pw*qv_kzX#D&f!5==JznX0d;z*gsDAx&8jtV1G6du>W-X7m0qwFJgQFbs^_l z#+m&e_|79}&;A>T-{k-7VP5>u$L_)QKWMPOXNlSVaiafB;a8`Cx{z~~@aysOM2hxb zMEoZE=NRmN#9;qx7W;kQdj?L@>5Z_AfBlztCX+Srg3hzh3kY*6h{ozfJh{`0x9p$Ec4tRQ)TlHxa+d z{~5zQ|K|uHx8LUs_P=Mbzd-cU^hm2C(CW_TJE_bZKQ{}%ic`g=+dqu>P4?%B{f;oQ z{rr_MieJgSSM=-gvqc8@S@(7h4#isPD`=f~8WPhE({$&RH zpR?#6Df+XOB01~&pR(v*Df-6=AN!AAX;=KJTwh!CPft<*CX4>;5y|bJUrE&U54^za z|9PT6Aoi=1;#c?miQnY^IilYYLN5P54EoQr=wFm#`OmiKUt=ggztW)WSN^}oqJKk* z`Xd(oIfcpo=Pk{;{`V~UGk^9Rm#rKvXT`7Jw=Mdc4f_9S(4RNST>p6~>K{n_ruyGx z(El%k{%b7y$BBMN71UDxh(-U%lRW<~5I&AS-cp(&_p1IsCw_vH^3MX%KS$`*N%5=u zjl^#%|7OvT>u0PO7nGaz=WOvbI7*S66~BVV6TeBn!#@^4#{wbb^7EEN#jo_Q zwdkKN`sWD0Iw^j2|Dr|zCee@O=PhxHU+Eutp}G7XN_(D^A~`F51)oa%rt%l?kA=~( zKnS_~yroLQ{B)uHN-jSy2`he8{@v)~E=m}jA3WEys4vOKL${yrb=#SK&h8%Nm|-6GXLP%O{&f92 z(Z?qJ>qmL~(X%~%_1{C)9jytMRF{{GuPCc2o?KGZzw+puK;rPOz5hc74RSvinwK-g zyBgQ?^1{$boyE^Av6JrvY4r*DeD$C_i}Q5>|D*qJ``&PAkE6Te>5uI?f&P9i*9CMQ zCf6s@dAMAUpmQPpolJj@V5iXeRQjW>5I)*Y;L4(9aUU%$`)GO7$8!j0(I30w9Qyk$ z{jolpdiR}2f9KO5O~d%c(O(JujieY^ zb}^l+=`SqzwRE0Jf79u2hG3V_`BM6uCHHl7o-Nn)bZ(IAE9ra{{YB{SYQg5xxk;|C zrE{}fUr*=X$@PtN{=Hn^Oy^tV`c^vMCf9e!`A#|CCFeiNdA^+gEa$(-d4ZhomGgaa z{;QlHkn@9ben`%b$oWw@KPKnL<@}_apOW)JIX@%k=j8mnoR`RXnVeV1d6k_1A?KIm zyhhGz<@^er`51Qgu(O7pIc)TqqnyasPUHuteq)AwZ;-#?BO(Yj)%10u=LVd{H~kGK zbRr;HmJy0h_7z3GZ8@mfiC!8AMLylYvKkkK4{2O9{kUM{9pcC&j&Qycy(l{rc`uaz zU&nvat4`zE+80Cp{_D*CY0H)^mtX!WT@Yj4%#6r}#zixhPb7Kg_9e#J6-D_!`y1H$ zV6@ni@IFcS7fA>o5sXeFrJpIK`!+7}&-oLRHl1AH)Gy6AckHn9hK(I|{;=XD!G3QA zXaDFbdzUU)nbXvbPQID1j)<&pS?WKqj_;f%Zh<}#>2K&pEP^>JTzdX^xpxH!T)MnY z)Rp5j?aA~`(_lWipTr*idCQh&Hct!yD<}5%AIMQp98p(=v*P3o_qKjfrW5J0q*?zw zGA+YVpG|B|@T>X^Mt-C!t>4(!iG;HwN^&`>>E(?_U(_qj9sJGVC0(gl^UZssnLl~nahR6R)jKNreBF3aC=JCS$+@I@&9OBDdW?h%6#wZ%FuCK4HbRSNRY06-6gxWfV1j z;BTBm&ThF)kE@%w3cOf@(AlQA8bKl_CgOw28j5_hWsMVA65B{0`424cfxQ$sOCVmT z+5h0VrfGQJ6~o;w-B~d_z{RC=9-mhXcih{^@N6eCJSQHa!$-RCis6$ys_EWseI1|a za8}gc>|Oc1Snc984R=Vy82TGW*VCOy{TwEY)N>v`cge)&|22EKJvouhoFb_V)2U6( z-pGY=qJLw{Cpghwhi1D)n485w?kXoTlUvY;ENW)U{0)EV%*5QNnjDJ60*c#SS^RN^ zv?IE5D1kNb&K%0C*-mt9AQ)L5iXN9m`8625j5z+YfkdnPI)XB9QFLl%QR6q^VMWo2 zlpQ}V%HK%s>=ie^7Dd(<_1mCAc&&u+%w4?LT}+`u?Uw}fB>}b1g^uNR){T@GMW=b9 zJ|$7Fktlz|v!vB)Yww5!{s!*(IN@?n60EwfAlhtJx*Oph8O>iO(-32PE!sV4y0uHeeos-GMqUJOrD{pz%&J-bMQpMK>T+yMX z30Wf@3W3N+-hI^VMI1_KIZpkO%wW?=6kDz>Bg5Uq8n@dBMQ4$QvDsd88<91V)46Ng zxKL!X(`j9JVo~Fk+7ir4UOZ5Y6BEU4*R0sdoTHR7s!GzO)JV?tbVio2C1fQRW29hS zpg8qE_?^gkS=rMLqRUR)$|5%SXBeJSoRV_DCK8{iK`5@n^{?Tp7 z>)h_`m82&Z;RcG(3k4eX?iqk zJ*#P&o5kba+(o&cunA-MgH8NFB$P#YG@Lb#5gwQG&7_v2rC!OK6n;u}Q(-5n&``gR zo#(&rMvDIF`xQ9Pzu&E>X~O=L3aIa-NC__*RyQ+ijIZ_y_IXYyS}>B* zn8P|L{ZP{SFIm8Yi%?`jR^MRcrAS2JW`;g+lA`C#M|CpwwN(Vv8AJXK3ReXl70LrKoH zFBbLtFgTmc<8d@yumfjij)-ic0m`yOK8sGK@$@H@=kqIgVDJO`q$u){>nDH1Zsd+4 zSM>KZ;Ev~ge(^U*>4;06?Ut1*dnuuu`T4cZVRf?{U$`h3omCKAQCL9A$*o($-JNKU zEh95X(Iwv$u?-WN=#+lk?NYUc;XCByZZ}e}1?p zINS>ak8=eFqhrT7(Hp$xLtV*cW~bK5&4~}bW{eNcTahzI1|x-I!p9DK#uL9GA^z2! zS^RCD4A+EYno2Zbl9X+s*H+nGRG{0kGPvcUfR9PZsEqpW$vGQHNdr{?|4<3Xn-hvs zxeL4$65E>|Z{qbGihR!=%yXNltEzF46Q$BD2 z`UuJ^ly#cf3*O@lrRY#(z97>xJ!eLi#XcjUTzND!qy!kEJT#A)s8nv!t6xNqJW~on zO%oj_e@T!!l*s)qML54X)Wpw^AJXW7EcaYPPk6i0Fgz6bj{3m(utG9?D1QUBnc9_Z zdlXml(~0Yjek&=Nc6DiYaX3**HVX`L6%X9l#JfYWOS3swCm&( z%5e=@Ir7OE$)nG|*Ol#zcHND`V*!22$MS}(2lW#f}d_3=Vq_?@Y`LE*f826|C2L2s-3Ku7` z(%<->9&EsES#wAy_o|)|)Nt4cCx3RRN13dyQ%*te=s0I1x%!kB~eBhQOCtec%1$r(?Un0(3 z-)l(_VboL6h@&X7k(Es1t~;{KeSYJ9z4iQ9 zDAH0y{W=YW!uj0!7Uh2xihPlHelzsz8Pcye6C;g}KB-;dx z=9A)&Nfytw(fo-E*916dyq`&9{RLfdF!ZmEA)EkPu)tp&67es z;GSOfLa26i!$5*PG0KR?RDkqL98sM*Q76DdyoRHRO;wef1VWU&>eyDPs$k^BmczXK zP6HY0hrV&8$UNoPw|n!$6UAJh0&=0^Pu{Ccw! ztszss6;u2TLBhDUO6W|}YVOd5OU$0n<}<}B-}AxOjPXHX;)vtJdCI3W;u5#>=6Y^h zt_Y*sd9O705k5XQZt*wFr1azs@M0I!rJH|gAV#s}C~F%>(g(2|`sewT=Ak4L(Q}zQ zsn}S}6jum;Q6v`Z7mE+Ur%<+#A-KPZzpIaPIUfY8w2cjqTjpw#Z3i~Z*WW=WP$24SOFMHnN zZ0B~;z1dS)^v{XB9Q%}}BxwpK_BoY@9!_G%(y-5oCTTm>?WB{m@pyr?9qF1{K;_(n zDuj~bJ6q03*!mbj{>F!0gDD@JPS&~;GXBPC94$nAdWN5gV%HE&Fj`2R!Dn1p3aiOp zY4710jGoCKv??zD@Hrb0q0b#+q=B91rLnzuK-2g=7nAr1Z^id5yM_4Pa6eBf?tfi4 zskrwG*K+q`8mg#gw%Ee2T=!9fisXGs?)87odMTI2u5&Hpt8d*arE3J&hzX`@;{1?9?6Sp^e2(;O}hAb zTo;UXr<_GKsvhfl@nc?g{$aLM`%Sx5sJB zp*yz-vBT(!iV0axb#;;mWQ5F1E%___jh|EViSa)k%6K_ui7TmPArC8GU_tJ%%T*qJ zs+Ho}`#jS5l=Nf$Kl4m=8@rfVOV+gF@HdW+n>vQBRAjiW$cSy=;*zXOxWUr7hGN;P z8Zv_~xM&d?32X`XZY8%?W(|1);$x@&`_BFb_c5>j`!3;Hx~EB^AN-9wQ8`_4?gN@P zZyOiyb{k^%Gep=*zQ6Ha#T%Q)-io{sD|3xq(b7ytxr0SIyV7EJQFAluF@h~CT9zg9 zxl_L)@D#0_eMC{kcoH9^u$3eXUIfX%taj`JsG*c&46Aqp!=|;iNYc6i}Z=FU^#~q*T`U ze1=p1Sx(EionY#OBkamg>^54%0Ilfa4mM3GwD zmxeImJ%%l0Q)#80t+1J0Ida6oIwXxO5Nv=oobhR zpcADhId5E2+l?k0TOQc5w&h;&$M}+(^3vj(a5XK;9CJ)@QE_SI6uPS|4F{&wR#XJ0 zRE7gnODf7INK~u64?jIOju2ijrv-qn?xGSu$Yta%l7OJqADXD}GL|@+VCuxRfl4odke>gpz zyr))cLQxvkM~7#|PNr(6dZQJXLV7F=P+?+&2;!&Up5nq~Er%(~;;BtOdPmOQo({@< z?tROL-2TSI&ZaJe>UW=mDKB2oZGC6o!cJX2?(Dm(Gha7%akC})jSp3yvX{kDo07y0 zbw^d2V*T-sBd`7z(Uqz{-fPsM^;f^ht#BTWaOJ7c+@p3p)>-^{Gwpi&O>(^*msD>D z*y^oyeW}S>s;fR{cU#%ncYmiYYdiZQo%woGXMU96eMa%NmLaunXj_h~c~YQgQS5FX zpty~?PbMOPrj%QUP<(!m;>YbjGWP3srf+0lGNILx*!}c_mjPyP+(ZPt0vv!$(BKZI z;>qAY^mG%9EcKK}k79|TXbrUw+Pu_MNDYTpU4u=9)Cy=mA{5!gE3cFfzDdppYN0gK ze--aG_a=Am<}041eSt5i=1DRw8}r0^9joGL_-|RZtQ~v91)AI*L!Z(d04>WGQfcFBI4%A;#cvI0Ns@Y(qH>Fvx96^qtAg#AjvW8g> zwfjw4fwY!{JX%N#HqD|{b+3ZG)d{L!cXfhiRCrb0o9&9-%1^sZG(8(^x~vt4)IBlv zW##jzAiVA-vzf6&C@WLC?@kXT1+lY8h|K*mU97u1>R;BJ=M9}yWM?v zcj@v)cVDz?mn}Vfw|DLGP!Hd_u3Z{3e4lph@^ueiUAJ!E_wcRhM)AJB8#7(sotgg7 z!)*XQl9gT8rvs z+9ychC7V0_txKmR+!21!rQ5e%d{=a(OOoduTW&q5)84!|aM9&gbm{avCR^5}+Y4QM zukxiww&m9SJMDQS-IhMn{r#SuZtB(T;a4)(3s?fOn{WcjY!qvCg2zB~GKS()W~ zeXnkGy=kA$?_~Mj+P51atM}`+>@eRQ`*&_S)c3=IEd3?!<)1#RXY_F2pAPT2_;BA7 zhxc51IF+Q!tj@DK%~FMuGwkQ6-$)N0ltRK;+5QH8b%S~uhjK4H7|B{dhQHwlDlQkHVf5UwDrp(>5P(|aPB1%(q^G!I< z8%NQ`18O{8@VaY8O=slndoR~^zGPr6t=@P6<_RlXUoR6WHgd|kn7bL$%}G`^Z;_ep zbG1>jUl%(~v}M?hl#zvE%V4%{!bZu*R<`WcMrJeHLQaqMOY>kQ6JoGc{5cYTG{1is z1u^ZxrTBY>TuRP~2O)*rDEbf(3c1_eHIO(Bh1{0b2!%9%jT~_0_#3WuyVp1ug*U&R z7m7~uV)J0SDT>abn=Q3@F&?i@Y^FFUkp65hnuYVi;%utoL^#qEri`V?eZ{o>udj+c z+95cG1Bm1Mu}F+(eNW4%|E^Q*J;CU%6vtam&lI#5qZFTvI?;>id2KK|&ENPH{ijLf zSeTsRuB%38k;t(ma!Ys@TGAttXY;0q@DScwlIVHKQZLpM!5HrY$;@Lo&NE47FuGSL zvW4cfMOH78Rr@F{XcO9MLfcQyAwybj=D4K|?UQJ5F~(h!+l5w1)iO!=H1}hQ7}pkW zjf~=sSllQ|Y8{EdJC$398+aE{;B9#=#(Q-VQ|6+Cr%7vXHBFeSiSJ9@@ZoV}n>JGC zo@66qf#epP6OZ!K*~T1>^1oA*Z&@3=Dm@#IpaA5#T((i38_6}7FK$zfSLoT|H}(Ma!aoa;u9zV=hwheM=_8^M~`=^STk zVg>Y{PUjLxxz&N(Y7xDH_>#?`w-`8|kododzw)q-dL`;8?7E9SO{yQp4E2-eHWIgf zeoMA;{p4}|4B)wTH96(UciZs1q;;Lz0`}D$1F^sHW!GG7*~)X&qn?Leqo5-Xo#Z*{ zP6DZ7SmieK1KPv_A)>xhIJJVz)^PlpFK(_(TweY@{$H1P)hi(m}E z)69_;NeQ3u_+#wIqNXy+cW-Vjf1s$THq+bXM^b8!i}Bl7DnDF`Sv_u2e3V1x(2f~# z{s-Y=uK?c2oeZb;SL*JFe2f>GWHGz;9-8=~_R1@Y0=so`y}&qQm_;*&?m%Absb88w z9Z4bp-C26dgrmsu?C-P0xjeBHYO1VqComlFbfgD+DnGvd%l?)DSoG2WO|MbnCX+1% ztbK|0YmW>yO>X7yH2DL>pXu#=>>z(D16ui;cU8KZ2U`2vg{}VHtF^zCqnD72$B~O$ zjh`rU(dd+RVN-_HK=!5m z`gD5&J=XC%XGM{pX|DwB9sVigKj~|pdRfLh;Nv@vUz8ok&-3J^yMRR8wTm0p)|T;J z9NJVs+Yo<63ty@-NjAM_HvLGRb)y-b+_kDC^pY9d)$b?uQrp|IeQXxJf3=iS>>Ig@ zfYxa$rj;ePx5#kv$Mg-;1GP8YqL)5+f|Yld6-B26=y`)m?UsP{bkc^NSULHNG7vw7 zl2^P#`7apx%8N|v47PfogUT6U4bm27Vv$xdQs zxD&qLg*v?(-knF1t>=Fd^Vx5Z5N|#-gG9UYp^N>EgXo&3HK>i1X47QB&or-nFtt>g zK>OI!SYMb;tBvctDrhxBP5Z=2B>NEDm%Fy*b$8!MQz5x;vA^Nhr2R zd+If@LwKWIkjmm}q6*xdx6xcdLJM=hiFGH&iOr#YU#eYqAIq-0$huko_S_SDkNPLc z6WUxj4I$jQaGKqtx$vJ|4c=V%s6cFI5-s_F%DmScnyrj1j(ttST5<(`tR`tROGxGQH}cYU zu!$BOoXAC7`9Cf1`YW&Qy`8>6+HC4pKF@CQrHTtYk9w%8Ft>jHL=;lLu^o@YNKWce}rq<(={Yz*-MOl$EGwpY3s-Y%N8}y=i zG%}~OwmH;kLwIjajK=-jL24g7cFgf#wHrOZ(=9cUv+0UPmeh^-8;_v5fDpA0N{rdm zTKK_o#qa`Z0KVn)+GUW!lynabL5I&Z0*rT5O1(8Ys%A*KWQm z@}ERya_4%f^%e16$fd*tNk{6uMPRHjk1-;)4#e|Q-ieGnr2e|LFTIo zH+o+wo8Ap5%BQ}6aePl~%(ay|Ixb#_-4rhtUHcnWxyABF^68&VO0+|}(-Q@0++lVahajtO@*BVtFp)7!=iGE8wyu0lZ zR$o7>FLm&+f|Ic(0iqN~A-}oCB^L2i23MBr1avBDafQx9xiz2WndI@b(Karz} z-zQ-g#ZCH$>pgitJ=xwL9YIl4*+sAl2dOV-g!UL^A zUmC!r3R*sQG+kpaAwvX5&>9anF#er8s-FYFX?BVb1axu0mYIk%DbdxiRaqQ-gq$vDqH z_hkBjH~#wP98Xv7emJLzH}QI-R2oWB$OI#6{f$?UMt+KMx03&Z48;8r-p1UG zT&VGQyCi8FV41rIf}4)N@p?s(*a_ipJdsqpsZjw@$UcKHRCg?ax2AnQFnUirAgZ z7XLnj;WPxhgnU6=Jb3|Pg|;)UBAKy!Sg@j}f!X;aD1J}bB~}FWOY@1b4RG(;=x*Kg z#%Yu=W5>hil(`rhMv$wTo37rwW-u4eQHL^dt(c0rc94L%W{+C#|Mk>f!Tg zZ(NAq^`!+}O4cDt?QtK`2$M&|;R~l<=2Fpup=UOYQU-CjO>ygd9XxR(kw25$ocbA(P$`=(ar`4*mxm-6<4az>+TFy@gQVEc zUWkm~_80&1kaMI2Gw&no?^OAq{&H%@C(yu%T+N=>zJA2t$m3m*qF(m#&z(&lxG(%% z>ONu0(5$s%o5>S_@NW}7aL5PCg88edev}VJJJBlg0o7-(Rz5h6-VOS*Q-5iq{BLuQ zLQahxA1|MHqtzoL`y<$IwS13>|Jt$S68SEZnSbLiF}XWY-)?V9gLiShzwt=+AHOY? zh*`WE6&^@mdK5fuRCs7{aq0Bwxw*Lma1T|mbW}Juw{%iTb#b`5q&!>`EG-;WLjMX2 zPa8bGva%+eJGiR4@`CD;$;I9)?lrlC)E6oh(@v|}vcgf}LGFG{nlZTSOo;_@p? zOKYpE%chi;ZG{rM{p$M##O*2CFY@xsrk9qv-$>97pVB`h&QLs|EL>7vk(*OmQ8}fo zn1ZFO4H=4G50U``O2*T^ypqx|`5(T1s|`_U`9F7H>SAg56F=~p!OofSkBk?pe98XF zcO$g8e9FX1`gdVjX}GeQ+F5aOdl{@(rKLrnZFue4nPW81XSYx4uY7V<1(}sooV!g1 zTTFJ1LR<0LwcCB5G28zCM|2HkVm>;$Z0*Ti;Hm9!y}px&4?iZ5edhSuDdF0{;QoX9 z=NvVp*1gNUEO$u%oI(9_bNYE71P0{f4#^pklTU^3Ee_~($r-**(=$8m+w1>h?_J=d zsLuZJ$xb#zg4tBjrq${~V~sbOAYkG(Aqh-y(Nv&PFHJ%S1PLLMjfAQ-HVLp@VrjLl zeYLN&wH2$iywzGSs3-_%TT9i~QmYj$Dlw>7t;H+9?{m&`X3x&fNj3uN`~P=7nVgyL zoab_$bHDDe?3HMUP{`BTa1ApS;JGe4`}fyu{vCu3o9 zo!q>xz_i?KJkq!83Bz>?{S)6>#5dCGF2ZmfMgPi)?t(L(U|7yAPk;9zJ#8GlC;Q_ny)q1bxP zW0Ny;tT5R*)@IggBMMSud?(V?~%MJKM172akD-C#+0iSHZsnkuqY->s?2*egAB&U9|t*I#>)xiM`KT7jqi&K_0 zfFEt^>{JklZP7{0sh2HIXZFLVr-DFiaf);5CtIBC?1y^}zGg4BI04$v|9Pn(5L=uQ zo%+cZCrA6?Urz-EpIQT6XTa+X_$&iH+kiJ3@Hr_sSv~{#F3evz+glqLXW0EdHiOa$ zwJ_x++OYg=iPft-CtIAXt=pk_dt#71)Kx}c!cWE)xB(sPJ~Il zZ0m+p5QuI4#DM?QfZu4qe{R5UGT^HX_%99kEe8Bo2Aoy{q+YhQCKUu?TXgDu>SbHE zr-DFi>kb1>N0X#pwneArr(U*ocPa?Pw(c?DYYq5)2K)g7{-6P0Z@?cm;F}EiBL@8U z20W3Tbq}`nnEvWM+twEMS%0uCT3wxb+3v_s@;BT1OESQ3wmT}8`23*AXsPuY{l1!I z1rr|mX{W%s6Qg}SJU}nQG(5v|SOb2d0Uu|;#b&;gZ?-id1tY+=PD;UVLXkIG z8?R6$;PV1M!}YK5qcX{Vxr?ikbe6y?TwLYws{~%<;wp#V4&1NQcm((;D^b6zl<}&; zKW(rcZKd)*M&OPsH_T6G0r!(TL-;?_^)Kd}@YVx-l=YyCD}C-T_}?z@#Q1}<$VgO~ zqqT8{xye$yxfe3t%Jd)?*E)fp z%Wv{GrRe1gP;4}QwaV+iQ{Wf4{#Cek8Spw(X`?Y-;pOubeHO~4WZ zpQQ#qzZLibmjlg#(RD1Ua6kQv4EPiSJ{R~X>-Ul={x9dJrwsl-k0yej+))O6tN||v zJ{sdBt2jI=zSaV#_@cRJx>U{mCh$?#!xF^*LVh|1O%p%=b&RWdQ&s+4XTYCgd<)AJ z^L>y}fxr^~U0e_%n~STHan(e;it*ckkFqxLTSCvj8T=oBrjpPf0 zm7efl%t^t`$@ka)6yT%9ukc9{nq#ADhr$1`XxjSO;Zy@Y#ekm&e6%*cM00U;9gQaP zXl)!x>Ho68exQn)su%akHfie_P-;C|_zsNYh3(je)_Ax|Hs9Z|IDLEpW9u0EI*wr@H<>w`EM2Yoi2V1 zKmAzXzjN^tetHzRqIEyw;Vt3+ZWo%#Pc>g6eG=nxiqEYAU+emx&rgRTfPVZZ81N;C z7eD`2(z4Jo4Xv$K?RmUNassbx9pBc9VXHFG z6?>Q5di?L()x3i;-^WXFJ@UL3@~+SKc;B~SuNaTSK5bm>K#`H0L6kb?{Dhpjq!oEn z>@FxSp4V2Z7EsGbPnYt<`qtLwC0NfsryhF&s?NdU>=Wx-mQ<0hY4VtW^JM4ESt2rY zf>@RW#^PjlBUZjITryw^a`Z~UaInl%oQ`Tm!qe>LnxSPhseoDcl&mR&VJcfw^6|i`r!cRSp-_h0 zw`pG(yYk#IiyG&QsjZ#c(NWvlxTtMm3yQhulG;m(lHzdRiYBAEHr6+LBnr-bE3i@; zetJ{OxRToaWX|Nc-N*XNgs@-rA1tly>uMl5ucz8;U&~7`3G6qiB?BeA{Ug!TF|(lVF7vo*!fsrJGZ@l(d^p#2Jy4KNf@{Psa;^I zh&+29WpP+LyKP}@Q+>3!eP&$M#H$4#*S!J z&A@^5>{uN%>OB4jiZPGZK_bfQo8pHyh?-(yXp+%??#rY$bI>_pyNDL{C>G z##9OWxQ52ilqi2Gn~O@UzL`c+qK&oger?MC)hfmAcZHA`gdRdGex9?a(WB4DT!QLW zN@QMHak+L%dvEq7=bSlxpwh~df7B2G6~w49OKQ)Vg`*T;k$EkseHJvfL{Wz6c+0}s za$CKb!07)Y3@cJKh=GvCmf6VX4aOS(BXAz5U{F@UpbNI1CyxLLx@l3@QXlDb3OZaO zT3TB@8wN&qTOK~)Ifw%1QB;*6_>GI|F}hm=tDfk_4#k2XqVj&PmC=s8P+8GiQF({u zs&H;baZ&9wj6F9*i`$~r(Xc~;8SX0x^t!%iPC+q)9L=q^8+RBX(#<3(0?oyyEuBJzM-+UXM4k5V^oU*b8Mna7qfP?iQIzkm8~+j ze7cMHu_kj->L1ix)d_P|e`?H?W>!ZTmQ;#sX+;#}2)#LeQ5veE-c$jOZ$r6>0RY*< zDUwHDVV1WI^Gkf56&-fv+f1276{~9Mr_`0DOpc1BtzpqTaoEzhIT%S0!iIj_)~s0r z%PW!cba5qZjSK40{Am!Q07FytBvyYAQXi=&&To_xVnYw(KrNLC;%6J{qw^NF$hoZI z@olKxIn*un3uG+rTcO@l!afF>{wIg+Gr?*;O6wG+BwcT)tE@Dr{Pj+Yv^XVh2WqpX zlVukhvMdtV^l6`tGw-Nd{;ARAt7oB2g$7?o{j7PH6r*Wb+t6I!)>cas?P!S3Sx6Bw zeVVZp<k5%Hw)##w~8DkGf-vt?i3& zTIRe((f0agwLlNcj>SdGelu~aooJ4P1-2E>ICEHBYGpV1)$zC4zv83(=VZta3g_jf zRvzQT=dZYx|050lzvRJpvpz*0+-5yWJh)m9Tj9ag8p8Hzc=20qw&$>{ca5>UdlfAGftQu??D1^k<*7;`Jccz$$dk^zpwegp1^E$F2OY)bI?A z|0)d+X!uQxlid3?KI=9A4{7+Ln*R+N{tn}memXS#LygZ18h$J%B+_5!KUTwE*8HEO z;V)_UnHv6phELOQozE2-{(sQG_L!ynf0M>SlR`|IKGgp0zfr=OA> z0So+4EnZe?xbD9I`_Jg|^7)~Le^%qO%Ye6GKbhjA`~SO!>vE6b4Gk2(7vomx?KH+o zpMx~HS84c24Zl&tsm@Y-Zq;x-zud3k`I`R=u|JG1lKVLg{|@8cba;*CUr&cGYq*{c zM{t2g{B`_v4bRl%UasNWL8HR;GY!|%kAr<k$Z&!zt4bwV8D<1yyQ=E_4I#|hU@A73=P-Iy;jD(_Ia0a ziWf>sDqNM^&?32d`*0!SUjIKg;E!v3^!nl*ga1+7pdz{SJ3dOE<2C&A8eXj7xf*^U z<6b?l(EQU+?JE8;4cFyfqv3~X{(q$5y4?TPaGlT18h*IO=Qa)3`8==HUmt4m@~Gzj z5RDHv$3!~R+Yel#lAq0VQ6re_$>ba~V5(GpJ4^CZT}ze&%% z;XlE^{|pT`h3gUcQR#$>NumFv8h#@4q5P%m8DZROhiRIBJ-!+=|0X+pochc%=%e<( zdBdfrhmTXw|Lba*gwVN3mU$P zapLo+hHusIe`q-UraN84XFG1C|EU_Tx4ZOl1HE2Y#QsUHo-eM{_~`i}rr~=2{jP@V z_27>*e7&aUC_K|e`ah3b>0d}7F0VaR{`J~(rt~iO==NO6xYwSWHC)dx!!vq%QMfb1QJG&7^WzR2Y_W75F7if0S)75br z{*LBfm8%r4KWq3`*gwVNyBdChhQFubvo&1TzevM%{ZH5M=QTc6jC<2b8{^(|(xLIu z)5%7SkDeZAjDju-mo9e#<6i!!X#REn-(=jI4*y5Pb^BjQjB$}%J-%+&@J;xp;`d$+ z|AU6pulmvDjju;ET#w&BYkc&0d|t!1gP)R1zaU5#>8a<7gKYr|T=zdg!*&1PV4U>S z%b&RBU(YXBYq*}S)VLh!qo=E%Y5v#ao6=v6%aMQGZfg9^tIr=bKDs`yYq%aSg~S*a zIXbS7Gk<~80QpnD=|N^aLc{g(XEmlx{#VmKT*P1RkB|-NBK#rTD!i1o>GI-aE4sY+ z>k>}EsSQt;*FW`n{qU0wIQ>eYpZ|*tc+`OZ#DL#oz_%Lk7YukvOXs>hKWD%v8Sokd z{zqws6nkzp;C&h%gw85{k7fNS-RkX`#fETQVZily0i92_L4S2VkvBa|Xa8P(ZZ+_^ z(}3?b@HtP*cMl=V$_}#)_yz<1m;o=Q0O9h6>l6e2Qv-gh0qgCT_8m{Z}H3P2K%Q~N{4E}#)z-dl| zF0UPSNH_(jx{ogMujeDxe)igbmLb2eng4%ppOb|(r9G+aQt9O927H)iPilKB|3_*5 z^>N)P8omwB%Ks&dQ!znlN#U0=PVxJKhOgD|5t>{zFHHV*{aZ9Ww`+WsYxs*AzCpvc zY53nYT<8aY!+wQ!A9Q)`d4>V+)NtKC zD-C#`hU@wFP*TuG?sqg?pa1>6hU@W8KaB3j=MoLq)7$kLz8!?hZokuTJ-xM(VQ`W2 z8H7doSHETDE&s0!3hycQd|$)$beNNs@UN%CgEd^YbH0Y_>2QLE>*?@x4cF7*3@J86 z&qW6OZ4KAsk;csF@}{3>G+ZyA-_>wEe#3_N{gDBeQt7uCaAqO?@id~l{(|sPEKB(% zmmn&`{rneb{?&Jaj@EGEK^H+LK82cpozGDkE|?6$N43?-@80k^UXz;+ACo=DXnb`2 zP5xCMR{15DSeX2eHSnjg6s31IGb696FHBIrhM%bMDb#Q^7Rr!t$g7F}Ng5xW{|Oqd z^Z&AjD;WdvFV+0({8e9`cVp%c^Vh?x z^M9CW$hZ42HTfS;O7W%3&DL;TZkC3JnU0{p z@H08OK6*Ur{AnCXT{{2A6bLuW&%|Gkmm&?<`Il(88Y>{EOvC@g&*bQOsy+_kx}G$C zt1ey7Clv@c%+Fpu3pM;XekMoP|KA#3#?Qn@*T>QD$N8C@8V&zn4X@L1olld7@6i0W zYWVva-l5@7Xn3cFKc(U7k@P=?{&_BfRNGbmMEG$A|G(EfhWVMQL$1;VGET#@`I#JL zH}XGR!_{~@;UhF$*@19gQY5~1vme6q_?etl{7g76jS-0IHxYg?`yuBUekS}-ekRA} zuoJ#n!}B#U8q|InBSy3xtz@6`qL3=Wxyc3=LOvAN09d!^ywm)2ZQM^2k?A z!$&C)?kWur<6ZH&!-IF?8(o_<{3r>D|9{r-FKPG=4JZGK|N9=ilWEl1?qnaj)fMFz za#Wv!zFn^2W0YsOYc#xA!|&Gcu^PTh!^yw0OD4Cs=`-D`{~&)?M`DDp;qV;q@xO)f z4iB!*JzwF$MFSQ5R(tT3+`d=iek5}|Zgr{ge8MLv5N;;Z5niI<2Woh!hO2RY{s{4*I~G@>Rh6$nQi2!aYI5 ziU0BZtwX~rHUFv~M10795r5mP`JbfuSL2h)zbe;8aA8NdD$|IpRm0Vo58+ERoaCyw zS*PI<^2paC8czP}7|$CfA4u+5jFA)7@EQ%jT*HY^H-Fo#;pb@n>o^{WKi%{@6m-qg zaN={LKrQPI4JZHV9Bpe%+mZ#*`dM(Ji=^A6o^T9V{TLh|7PZFAu8-DRV`jCrSppc- z-qJj8eq-~JF$3*LJ#oN;QzfIlrT-|37|&rHvPy$+`UuLo=agWBFdy(bRIQ9GbamwU z9BCXG>q;LYMXIorU0m9kvpBPq(;B5H!{H&ie@d1~sc>K#I^u6AGKBwhWu$Do69<)~ zCC)&aB-tm+83LQiE$wg{NRt%NqGsQ2Ju};Df5@5JfWwJ98X8-pwJ7kK8~1atye8bQ zN50aTH!{ci*GA96mvNb}A5`!&*hC8|O&)tLKuBj!*t-+mE2q^R958Vogy z?rSA{b1fhH$wmGCPX@k9e0-^J2&KusHop-4iKar|5@4`0XTO-iCo6pHXE7TqFz?|3 z-XrYHMOk{31EhiU7%W;y9VO~Y6^|+Lsfg9#J^MX3yQeBAw?aPw`F=M21k^C3>ra6u z<|1})PKt1kpG{5x#@b}x$nuNq{VdWOvF@o;`#q0or@ST``D05|x(0rx|3nn=MhLfK zJ{7vCyf%LC&f-muZq*szOP+oaxQ|$i!4)rmpXzC^kDyHRkiEgrz)iOBr${ev>i%?} z<2bOP>8Rd)Z0P-Y25B0BNr@emf$-CLa~IVwP)96!PJ$B05GPw=D1;wXD*af(N0KTC zQ>1=exn!WTV8ubl$zl5RsP&0iZ10a({$xzL5A^=zY`)*mZ2pAeWdDb2-^bbhtQH0; zj_7FWeH=}nXi)x-#f<3`=}+d+?f**&;ZtV0eV^{q>?!P<_|TRyruJa`4exj1=4IKgYob?cn05NQhd@8mNB%uS zpr7qSPv?N7tG}`?ABQT=vRpC*`fir5(|=>Itw6O{ns+x@f!VQL!jTm zba@*6heDr0(}|lucv=H z7bIQzYG05}Pv?82OFxt4>*2p*2>PpiM!J03C!MbR4wkRe)A_gQ(s%pN=M8~=r4K#r zk55Fhr>C*qf zM?UQXPM7{kANs-}&_CltPx~IzmA~DGp7y(^OTW{Hp7v3uOaGP+{qaMff8U3m_DQEJ zKa)1`;L_ut_SdINKf;He_ED!xKhlSu%H(wE5BH&`{psn_7x>WA{{M98kN2Uc{om=* zkMp4)Hw5}qeduXFdAjl|edy`DfpqC3KJ>H)HeGsk?wX$d=sbdS=`Zk+{|?e~y7aSs z=9~}byWj^v>83KK`5B(cMpkLubPiHr#YyWF}=>IVU`s;n@ z>72@R<=^N-Pv=&qOMj~mJ)MV{F8v)o^qYOc9|i`tNqg?`YOQ1X$7qwdcB%HPf)2w2 z=~Siw<^EVcsNWx<{znOJl^*li-c)So#Fa0W}FVsEb zIqZ3-J=-Gu9A5QV(W`gmdc0ZGCmV>~tC!b))F<_$ztIqWuY5XF$&Y>w(+?*9Tm$_b zY0CeZfqos+d-e5(|0M(cLutw%1p$8H-@^3z*$otjUis4u^e?0-pUNpe`Ma22KO@3V z{xZ<}<)2+Qlkdd7a>_qdxV`!3cLw>HVR-hr;63T0^9%g+&kIX$?6@>u`}G_25C2k< zI7~_U)3aCq!;nDzue>y+a&;CuUe;w14{%7L$>i>NupZzJP zIV_*3eA6$l{x>Rm&xh}Yb*jX($D6goK);IVD-xvQ$s7KEfZi|sn>qX)Oi$rI8@D(7 zM}XKb{$jq4(sLKb=qD)&HL?Kj2Yp&L~Mp zy!DI1s$cau@4+wp7csr=m!7@!PYjXXqo!4f^Bw%;x3c`f>~{v}{p`1e?YEi(K=wNq zx7U6*v3#%nUSj!!+3!%CAK|C}D@@PgU5EVY*YY9Kd+j#@0rHc-i{;03VR-hYzhR*F zvtP%pl2A{77Xb3w?^`V2YriFV>6iY}rN72NpKFlsQPcX1fj*DvY0g5wyy^dO(EHhc4clL}^U3~AxV`otaiG8b zV`rX(ILwT^c+>B^qa^(i(sBQL)UjS>dT;obF}+L34_^9<@q;UbdFhuM z=)LLhB?J9Rrtk3x^xE%v(EHi1=+{!=8m1@vEyC@!-&8OpFJAi{aX%o4I_%L;|B^c;)haFhbOZ9*pMJO0&wkAlbg7AFul}LW`qQ^E{Q|b1 z;^5VPIOzTK-+Gs%2y6CV2FR;_g+cz`Pf`+-U9bK<2KsGGUpI*UouK#Ae>W`_!IiD) z|805~XyUxxyAAToO4*~w@#_CIRKz60n|~C&e#SDf^4fno=>7B;KVAd>4iVv^^xuoy ztAD>ie#gl~m3n#gzx8we`gbz@Fb{!O|C>PXr@wQrl&!a4Rs!HkN#z4kvU>@WYHRg&KO->d&C26}6fr2M6az?=SG1ihdB%hySIc0~TY9*|f6pNx|F zd)p7|IO3K{Htzqh`y?MqMoW72`zGqM!wnCwzDmCGcOvNh^miVVK8n~Q+5ZOIiXO#| zxc^{kd1qS`Mq^W-s=>6=!&PV^BL!?*#n+^I~Q>1<>{*>Bb^}y~c2K|ee zUfD^JDf#OCMT7p?4@n=o{Z|80^os9s1^(&3j^z(#|G7->O+PEs)PEM}{p?@kqyH^F z`v1(J{~DH$=5^BL&5xT5`fp}>uYYAf#q=SA{@1epD*h?|-iBMzEBp5w^xwwvz1_I5 z63p%w(NFiwzu9L>4}O_l^sNl>m1C+o1o< zH1+?HLI2%8`cs$2tN-%`{X1FyF&=%xp7+DP2Fv%_--<}WnM|*ouzFzkeuMrqnSL<+?>6Ya+(-X=Ak(Y=(MaHwe!cpy zV)^qu`i4F4KVy1t`I9$QdK^su{|3FE{df52e;-(S^)D#&kAH{d<8#ub=oNS*Jow3X zHb@_J?2+RC0o;mS#s7Jr_sjpSY095rkiXhTK2?cc`PUibU(52tpwTZyudp8&Z7hE^dnEaf;P%SD+aSM&zu&Z0rE>@IzPls&)4FnF%o+IFWlGh zGmSgYa!kUh55EdG)#dAO6ZR9_KgInJZmQ!5`x)*V`S}-cZ{p{h;r^1JZ-x6Se!dOv zulacmTxzQmpWooVou8@w`&)j#6E3wU@8)-Eo88OLYvEE`hv=yqprV+P(<8VE`#tVI z;HD(C#e_zL4$M5xUXW^cW zyOFUuaOdKlhx;PN=EH5q-GX}|W36y6#@)v6?Qk!_-NElm;C=)5W&D06+;8!7H{2fF z%lLgc+!#N{;jZB4tKfbI_jmdIdvLGj=kLS)0Y6_0_eZ#|~{+OR{fV+yHe+pNv zz5O|!f5G@_xHt3jEpTt;=iA`^nxB6I_jZ2%E!;bC-^K5D!@Y-}*TTJzpVzayf!&Sl zZesTlb{}Q;59~h1?iP0c%VM-|X&Y_g!}1WA_7gKV+9GDLh&k>{5G= z-ZR;y`6GI#`4(~yV0SpXBiKEV-4MIb=23+paAK7O z*~ROec#x?dLdM8}iP-u>6Acq>mGO-HE+a{J3E0 z#5OsxDhv7)z=d*8M`AC@FY&_*oOqShe^cnlPLf_8x-+w2Ir-V$f3>Dh`Hb@Ek=})Q zGZ4g``H|R{Q$pACcBuPX;NZmGb7KFlj=d!XbnQks9(H1x1&hZ!UAr@)=Q=&>+M9$f z@q?XM1p*L&YA_LkB@Nbo7Q&KGVJW|Gy%T%R6B1hnqykF5q5{%?o7B7_um48fnvvM+ z{ab}5WR*E%LPvH}FfD{5_Q3-yN#CxWB}suPEM6y7kFDn@dmxYe#pdTZn<_+O5^f=J z*;r9zIlVQA@*SPP$_S$%IlUD{c(0M~2XCyHNpKkO%#9UIAiD_ne8QZK70njBwvtyV zHhyWo6UR~murJFdKlx7ALwQcm9w(L;&2r+y_S8T?WkH_P8z~5vQ)y}yKVJN{6MNZ- zy-1dJHo=;L0eo2-D+|I!l6CK;Vc62?dN_|oom$|Oz8($oTeP4MaWGCKE$Elw#J08% zLsXQUf8qKB0jM3ACP5c_PJ9dgv*DLN?yAhULTm>F930Yc#Pid^e7j9lYnY}vDo^GT%l z1PUKwG!IG4iP^#g)v*o2{^lf$>>fQR5_=&MdyOrM=!&1>&DNAFh9T~^wlCJQ0xZmO z``xg#iX>k8*MBzu%G!$V7{ zN^^S0LzHz-4*nr;NYC+UD1F=V-S-sYKxpY_HDc;8DbJDK*#+V1-s#ABvFQcigKUVr zU;5`z_f%v;Cx-0k#2tK%6cphhySg`8khifcPkbsw_N8bJJDZTLaYaz(6*}?h1&&kt zMs;syUZ|T|>rOlh>e5~0mW7s4hbF?>N5HSHy7#L>ew{A=RU(8~fKq-d$#;4$of(O} zO&U~pZ4`Pnkru1~Tja8Wx=882-9q3pgb_7Kr1WJMLMcI+K9S?&mlc#%1B#Ts9_l{u zLryJyHl8?LR`*^Gf)AsM9r&$rN_U5rO+Xw`Ii;ew?*srU{_hVV1bsmuoZsWEuvP~m zimVa4te~Xtm*DQE7f1WvO5Z#BhD&0Zo*p26{mWz!wb~UWS9R=3CvFZ>>_vo11)VbT zD=2<5q6eq2>c3q=u}%HYQYeMl1plWJ#+w>@tN*(z=d3J07da^QHf5sf*#A;K`XiM* zSMH>Nf=KU;1)Xr6O)@9p(c0KuKshBjo2>>=ysnz^1}Z)$)?LsEM5-ZM7fyVwz?`mi zh;LhXbxJp>@JLUUu{Km$!UGC0B+QEZNc?i7yam~my&|#QPR5St$f-Sh+CzF}it@+l z`T+HLb3tBc+1DtWbbXK!>fS?7J+D%=9O_wwEQ7i-yfL$oibtnfaIGkrN)o6g#Ox0t z_Nc>7LkMILM7xFg=ZBV2^G)*qwc-!zP!A1aKtP!kFn?xc3{{^jHLBw?vYnpC+l!re zcL5p8ZBm4K#u3?-8_3?O_$jYNTS=xDX;YEE;_b@#N2>^-Dppy$x_1(c|8K<4cY#vv z+IlpFtBz{jCh`gBVi_V)s#W*SKvYaGDAO}6?RlmQ3s7d*8p^ODr}n}s_~LMRQKqsh zl^2c^zebd+ZjnJ9FDfdK$53S4QP2qmLd#AAs`6Q+m(phMxk8Dst^{>}NEAS=)RF}j zDvStWR@4A|qQu0*k*L3LF2=p~Fypx@+9>V^X60aH!}+ z`IWCXVbKzT4G<1WvuOH#$eJKIqRz?h>-oSfe~3OG^d(93B}9)hr2@uHq6g!OlD=Og z=&NBgD!@YB|Aav)S5a;h<=BnTQkG+~PU*W209v2JmP0LMfxZvlSMP`}B-y^R5`1Mj zM?t1mG3Qy7GBP*H@Te+~JfJODdTK%Rf5n&n#}egVY*Sx}R(_(1-?u}UkK0>X`B)^& z&oDkG=(X=P^nGUErO?v-F3Qio5s<((PDC1txJ3De);TK;Wj{jnyXoZ8nJ6rp^rGt0 z5~uVsWccp4p|}vzx0CE9i(2%vVh>Z=TP{s=C0_dYhRDlZIEn)mx${2G!HVgIk5}#Xjq{dRd#i30q{L;#}g4>u@YO=?wP$pwc;%ymu2oXM1W%orz0oMu5(2@W>(z#BK zEWz}Zs7GT+ZmLfu7(mg!wW3I@M3s1F6=Dfx`f~W~`?)L%fur2cT2A73_hmtvYaiKg zLXIpU>BxO$hzkhpYoj8Fx>GXcQbzFFL#4Rh3#jR;%175lqU1!Xx;ht7RVO+tcT=-f zBrGZo^63q-zf27&L@q{gQ2o7mqZ9jkBFoF%3^mZCL)NEMP>NP7bWJX`KtVhm4o?lz z93>d|qp*hQsf_hn?{a7DIbM_uQKp5uPf@i)U$M-~eXk|#DjK@)Q!)IeU;kQgq%jL= z7LmMNo4P4HC0)mlbK>VC9f;g@*i_`MLz9xXJH8{+H^$Ed`GRV`)rtX5xK;6Nq=k7;7lSM*O@q?z2Dt{-XAc30Q>jL`j;OFfoXi8>KY zmi3GNj$yt~4^7#L(K8WFDo+waTN%|TseFdEC@FhO7#VgqazZ^flB!p3AUnx&hK3Sg zZ~t-vHWB5FNax;i0)g!tDM}haFY=+v00=|3sHkN2)ZwEj&8Nb-{_wx4*zo#p|C-4* zD0X$*gnG7tzVCVbCI+b$=M@HH$M0RDs$A2@#91pvW3RqU-cb-k3Hc$_+9|{!WK0PN|Fc~02$G5a!GQ2HH{&} zX5?+k6#evp3zLhq!i3Xly5-48S)Qzv@mh|-dQsx+79)A45=D+Th%)#|lqpy4ycRK+ zRF*6UP`s}D5o-IR8bEI;)V+=}Rs5i8ky%hzP;_HZf}5rEP$ZCJwm1*&4pIj1J_017 zmn+7ms8Jm*e!KWps!cHb_4T}|7zgTaL-|RAU(*X(oft;Us1r#;VNKM$sY6ld#4uO| z_D#ed6<#ay@kCK26(*XUl*-Byz0KQsRVq6#P6@z(F%{r&_=}?bDSpjXVR`Sr{#2#{D7?g^2 z0N?IE2UVkaY}cDx<4a^UNQ(k+ABwL ztSp#GV_G$$U0053J%VV1J~P3{f?G$f)Ab-yBz;K?4`Kofs+Xf}ipuP*L=tQ(^CUmX z@)QiUgnH^lvN{#RY^uosJ^OFwavPIlm!dsT9nYdvgOR2Wk#0HdAT3>h%!;&gB+VI^ z(+y^elF|*V>?WE}&r(@;QenM*tJaA zwS??i zuU5xCkW(;kA}eh}c(i=fU9c4ZHx5P15XEYBY`c^o<}A8)QkJD2DpGin6EDlY2$_83 zQnm)V8|Qruc`G{Bp-JK1E@GliE}#rsq+y_(W!XkTP%#u%G;Xnc1i&oRgV zXsPsMnMx^~DwVEJ*ds-WQ1@brdv6mf)LrKfSNp;3C8m(1G|0w+zVAf*<9zEC9Q|#I zF43Q+Lf;XUryK%8f3Z%ru2h*Hp;4Y!M8ivU84@lE`xHa!?XK$BMtF|I-sC7w9kW5o zc58y)2w(lTP!Uc`*^;i}b?b-p{^oib(Q!6S&L*;rlW7iYn8xBw?U{Ud-<`PV*Sfw2 zdoNzsdBuFIeK?KYTv29)u34ANvGaLCWbiJP4|BCvW z8h%um?$|)fv%h3}~Z5 z#`JK4N&M2Xq)s@NDA4K&-Geav2{8QmRBF*2JZgGl%iFvDaXRVGdS4*O%22ov9$ zW#rh8JAL5BMsj>e{`-L5Z-^c&lL3QNt?Nj?mYlzUI=;8b-7tDl}JddqV zcz25kLHfw+|0O35ARo#8$x+BLZHn(S;$w*X^zfs8zoI0OuiWs*FO@@tF*~iaq}!*c z|JwuG=i`*m>+K#WgL&CZXxm|cR1V8V;zyC)(T~ZOBe^joOoUn1Dk9a3K-}C0{)~Airqs zF@&%GzXnbpSM2-p!)UJ#C;mVu+0~u8(6YcxX;jJrO?pv<8ONa(XUS$yvPVa9eUlo$ z`@|l}3LwPt@+-fF6yM2wIXxwX@8gN@WIa^ykh4?msfX|5ihs@)WS@?{xyao-KI>fh z`YI^fH(h4=PmR9G=1huDnO;5mSEi}|Ue`Ctijh4(-umW~mY-U_BK%45GqaC+xLm{z zmj3rTKK4Q%bNl}*d(r+^E1y*hnfu*|e!$N>{eY|I=(IRiegg7#XK_?)w?mcLO2| zNrTZqKaKK#@IW1D;j^Ni6QJHo=RzzJUjV~h8ji#p(MWeYD43y(WNah5y_#yb>aO=g zkyt@NXc_H3#T%B-Y{nCejI|u0o}b`35^KnxxG^)VDqr*lN<_<#n*M0(p@GlKTB!M7 zhW9eK4qP}jv5FejPfiRan*W{%!DvQo8pg~kX10G_o95&4sTbi%-iU+Q94u=%b6#Kb%eYa6bm2gzYi9$4yz4z1ihX2S;1~ zOH`lE>^m2O=ZM13j|TDF;I@FZHp6};VErUO&ns;$I>mZ~|HSA2hvJjgpSyW7(o=v$KzFb=tN_=8Rb;0$9dbd9w(7sAHw*X%&$cl zvqOGGJ`eRY;~DuiEb?olx6Q$V^b!awi^SSWuwtC~?-`i?Y+6r8TUw<6+Bhi$>w8GPpQ=mU8~4z zY+8rYD;`5V$3a09Nrh?xMJ#ylgfG++a((qoeL)><+rexq3cw~&G|BbVG|`13t72x~ z;V3;+{{Ty~z2zE8QCbgGQ7DMzlsK1b`F%%u+h2xQnN)_v}D+R64 zTddb32|N1!sIOO+>#s31v%BvS_+BaB!ERSy7T&4&oJjvh(Z6Hoti(J^-wY8PIsS)9 z*8VP8c*ZX+sm9I~t^u(EySnrP_bt6**Ijkm{|{v^?hi)a7e(;cFM-j;!979i&l$m3 zmi3!Jush4T+O~IQS=VLK^ItRR>(xQ}`f`?DG*k4^ep4Fz7+U+}{FL?y??U|yQgQnT zeI=c{elB_cX_dD%B3IK-&^ByuY!l7I`sU_^iyLQK^IAlM zF}$!fI&Wc%^x=ZD7A|aNs6HBQZme&Mh8MOlpYWo_i`(Zd0+05V`7H|Ciz>RliFvT@`6&0C_$4(C?a%!>6@tC9vC^Sy<1lxH0~XxWVR0;SzL+1z zItiH(lJ>@7%xrg7Xz58XHP2$+GYq=8i$LNt&|GRqhT}ycDa09}rMVh0G;xV(?NFZD z*M_171q23MX>%;a*;#VMw?6^79)rSzSUUqB9^LQX^@Wv(01I7-GMVlp(L9kfWF)5G_u*uaLtnHvnN-)l4qJ zU=!~IJFj6#EMP#373(ZFqPWMnI7NQxu2A;|N-h!zqdbOru`U1)D4e&_>JwT=a`;h& zP(Rf3B~r0#XQ!%NXx`HylSi>>`0_%l{bV)ECRQ)ok@#pQei6d(ypz!v>ZYSBQ0|0! zIw^iU`@lpLQH0P+vLd&mP!x&Rfq`gl1kv1xZc-I9D*lz=BP;$E$(raxJqsz($7UCl z$f`LJEyp2RWSn+Us5xo|ic^ty{Nsxbtw@b88Ce`la${AVlh6POV`iwE&P`C#!NtuM zPA@u?n0C-oMU{|}Bh$p0h#hP)?b-leXCi`RlF;*mwogZ`VG&z4zl| z?<&Ex6MPUZv2Oo$y_q2*6uoGQ+Onj!0@`ns;EMVpf-}_(DGXd3o zqdfpG5=ve;lbWx!^>~N$|1M1;qz_RVV3}b1UH$ix_=o$~>cs6oNj_RZR}Q_(Szn*{ zK#sLJBltv)wJk95#Szvy517>Jip+!-D_Jv3_$v z746Utg7UE(qI@QYyu6x2AOCv5U3?IV_8yeadEo!92shi63S{fSL zC_y24aN5Pf_yA8na(A4JC>A$U@2C{=Y)`|H&yUzx5k?jhJt&mINKdk$)iyQJu?w`R zNotFI11@WK0h(F|1lxyBhNWT|!B;b^rE*k;z#}fhxl$RyI|J5Z0^D=m_>3|0ga4J4 z@%@a6n}hbAjNsK-cBlPB#tm8a`d|>yx2UCgRTkmjr$?-$y&Q)^?a3&=Ao#!m*1C+~ z_p+@U0>Rs}t>**57lvDJ*uj^FTW=$d53v3a3_d#Cx;Kmbyq86Oo*G8@ZP|1R5SR=< zJ&3aYT57KCxo%X(A*ThO&ai8O*mm&0g#9}sxD-X9l>w1-f#T3}gPQ|5Sjc`nV8sIT zyeoi(8~BoacyNYQlP{jD76+fnvhE24pU<*>VcY-Avf`Qco?+IHGwuHwW^K*1yR)s= zGVOm2vpR#pcZXS9C^2pe64CdNB(tpl8b&JZ$rw=zw>&t>nl9fzX7MMsLF{icf{$le z|ID~5oN7g=YrOQ8Nt4w_0vFb zd(i5#?G0Jhdp14aok?H80$(4YtIT*bDK@JkhS7~;3FaH z*#n@?s|OIX8-^3JCx;WW-W+1KF^8D#$suNUQaccOf8oQ7;FAGLvGD+Y1UUGofVDXg z{3BwThN9phH+(pHNejLouzp4f7|7Abor;*t2;LL49w+E~_L~`a{#7veLD2ebF!*fH zdV(UCxL+9v{zasks{+>gKoBYD_krM+fVD#B-oE6ffc0DE{)Kpe4E=*Z@XbslwBXWA z2(W>?Z!Z=+kN9>Vcni{4Ah;$And-*@ynHJd{6ojU=lnbvIq`taW%&!ymNxcb|^8 zcC9Nxu~;MuTX$6`T0`x#^fA`Ney^d9v!0D=*)z_1s;IH`an>W$z>9aBHFlxgM@wl>FsK)hxJFuWcYU`I~_J3PRMG|M*}H-e!i?i(WpWT4;2;~X}rl4 zc>&{NOfLOqYt1FBJQ#(vpI?;Qo5q@38JLAs`b$xMV0}NW>jww&78kZAlhhUejR?e<5#0srhzMwt6T7CMlU{mf zIK*W$o`JU#P8@+Z0p3E7fVRSojuAp$-cy5qDMnd({uYHaY-f5-h{f)u#M&6a3Wpq! zlFVjKXd!Ko=-CrGM(V+XmSHh5b-nN!JxF6HIft#BksG7mhPijh!tSpOrqep zN0`yG?Jig)Z07C??E50x`(l_8{QABMCSoc^`f~>p52bO$8gLHxug6(8;r<>1U}%wM z5e(V9Lw@0Ksl76?^gWFAuFrM47TY3@&+L69IVapqBe^ zdcsnF(g>MAj2cK@ct!eomcmWRMzHR?gz`|&-`a2Or_+YS^`H7=i1T*;sZXfn`A>a9 z=PvxGKKW05@}K%7xjxb6pSh1xNb|{BTNKr?YKU?zin(T4589Y#rdj7mygeUdB}1BT zrm+XvUkRhthW?6}Z@vJ}Vw%~Vb5?WBH19m5`DPl&mI7YJlMsOU<{WAw(loQ0b9U#N zY2JA#^UZX;x#YiC@)rwS?gjd>%s0!9SO>L2X|g#}4F01d7V4q%w>`7Vn8cIwsUK;6 z`FONL)O_hs=a*?no8}+HIN%WHm!}KbPHOmwhM$~YepVkZmh;JIhVSlMO5?%u-J$vA zL-9^ct^GK^th$>i-9J)UT(ZBp8qXLK{b>Eo#PWf`x|}pFFXyxSm$CeEEq}lFfY1Yn z4p0I?kF!k6<=DawRAuxS+P&y;J}lay5pL~c${p+J(9xVE8}(Qgg|>YSny!V^$XB_? z_k2QR6s!xIP5sU@G2bTh4HYM1rs;?*D1?M8`kgb0S)J&yp-~*cv_GVx2Z7Df>E}=M z4-awWlq)%p;6Y><>fd%yv#1kxVo_Lm(tsY{`E`U-r;#V&5uWWn=Pk;9XgIX&1u@-5 z=R|FWM9~kuh~kms z$K;-MH+Nuhj-iMwaSWpDyJFiaN!kV)*tQ0byYNVJv52qkg57xGv4YRhSiykjVHJj! zjdjDBp~86%J%Bg*SJw!B#MeSPqL7gwL|+t!j$dEU32F2-A75GO!6Y?T@7`m6i2L_N zp=Iw;NiELb`Uy#<{{0?$fIN>q8IU$FL?3ad?L?IEh@vB1;k?^GPID3?^oGRJq1- zOG3-mx^hdE+$hT}A-Tkkquf^XrYdM&V(ENj5f3&eR95{GchT;F~AUC zAw~)ygd!T_4b(*@S#*A-6I)S0KU097dWU#jTd)nj-~~O$wFM*u&nODl7Ifk{TAuze zgHpk(07f2U7(9|$A+6I($Dm&?Jo}G5yrf1DXgLAWs8ij07V6-at79_|uxn&UVpSd0 zvEEe_bcC4#B$BimQ}Yf!aOsPhMXaAm9(+Jfrt$=(2E^c4XSrso?*}wF2nvjwU7mCX zB}x}rGC=ZjXrL24!bD*ZB`wU7N%g+n@;kkgMtw7(2K>`I3F=#i_v+ZjzAIrMxcy(H zf3pdp-;5#mK6a_zBHatcnUeI>B=+jS@`ZgTqDCjk>B|3RUAabhs!PTa;ru$F-uUljW$FE0yk403dF* zK}b^i?f)?aJ4pYAtD&?07wD`2ZNyI-K9WOI{p*NehZsJhCuEt8{YO=c({4pgLUQox zR8ys`Wt;wGG&7#G~-#GZKHrqs_mAzuWt2Kz!g4Z9Hsd!2@*Q!$ z0f89hO>DjIrjTHNy>Q%r`zXHSV94?P5FXtsFD1Tjpsyb-zBeJhaSayb7ye(5atfq- z>Fx6mExo=gU*BR;83qeLfy3}jhx8{zz%N?AM639YBz{;@5yy(97*?~zX|)o5 z6(bJ^u}Mz&1q_iHX{|-1^xaT5{g#*0I|Vi2#JuWb{uGJrnbI3QxhN8Q#d+}cVE-5= zHk{T)#ioFpvl}j+%XVQMAhkB>SG-U zi7h|@(vJ5=%ua2{R?FnD2pj9C)`p>{IMZI7yMZ4iKuBm!H5L@n5o3R$dgcKbovvYY z67@1#*o?MX`)A7UCt@6VRaN|I-!eiUd_Jo>_J_Xn@r*CHD88#>yC_>$$LJV6`qh^B zLWKB8jDI-CY^CGOsF>|}oX?%@9e0pZ`p?kPC|AswjenjqFZNr3F@~6P(`6 z{A$c6(Q)KB;;kj@#OTO);u*=~O-N|ui%wSSqGQaSZC~R`W+Ym``*r-|x4-?Rsqy0r zuoa2omm7rf%z~-0aX3a)7=~JbUFyWp@~?}f_GQ++VMy+~9q}Uhi*u&jRw7Lr@X1q{ zdR3MdmhJm1#p?s`K$lDajRYY99C9CVrJwJBgLLqA-?!+?gD+rC@rgbPezalzKM;z6@ezM>v1>ZCLYQ!`J-=i(?#z@@4aA8UTZBh+7IVT$ZxpNhi5i7ZA zkwHyTGw)h_N(}j+;fwZ+l*l8!G-v!e&GZ+-CsH=L-s+)*9srb4KG0|SQSe|j9<%v^ z@Qy(MOn6d35Tz+|8Z?pu+|Dvad_0ryh1%qMkv92Glj}(4=*3K@u_u~#N8b%d86kB% z;ob?k)UR9)cZd`2Wz>ymLQ9%>h}rfcG20HoNmK0?6g2twb!mu420v+@9ph;<&kn6= zk{!iugaUzp3%`k8hiKtCo*8zuRfE(8IEKtfaY9B+B6NkSVo*#lOOK*YM6=6ET0hPg zeYk%l{lnUCQwKyQ>;4~8*|MV_tRC)1>-6FN7hxE_P-5|xmr(agU@BhYr_;fU@g^*B zLNDT2ocrZuJWOrYuZl)2s)G)E!f;sU8S>*M5g44ZIJG)H4lU@7s1lK2&_4)W`g(9uy`Ts&6a>r%aVTC}*hp{agRZFEunyl7kX;;L!&_*Yfs&&eM> zYdm(iv_*?2G*s?VBMTYS>2`q{N} z+FKfEyG(5Zw$ThC6XRX(r9TrG5LLAMIpx8uUr|FdHsaLIThQ7JwTfzosPF)0(sk6I zg}$O#N>S4Y?4r^Om(jyV{4f~b%~I@M%T@Lt-@0hw+(q>ZYUQ4$w(%l$44%|X^u^=V z8thuRC2Me2zLqlaA6w+|=jGhAj(g}rO#F){h)rYlA`hf#3%>xE_>V2(ZE0+9X{EvS zXMUw_b{>R8$xqGyoWD@!G!DRn=})Y0SyEiw+Fakz*tD>DcH<%wiIV42i1?XjP)zaj zrqAMWB3ae8H7=-ciOy>nOdl`(*wSQroHH@IvEh zuCp;doA?)>*xnLd(%LvX-GpP1VB|kR<6dh{Bu4sTjlO!;facW8VEvg?4rCh?XIRNk zP2a})EhQ=V7bWHh(sk6Ig}$m|GN^v(*KcVnY*1O(QGXWt&SXUm&OWejYE|%2^z_(O zscY8nqubX{VS~y-4c(^tGkpwr?92L6c{)Lsq}8(q;%yFJ+UeV;DjP^5bXLYC{k3O$ z40I#|X8rcU{;72@TA=3gQrA&`7W%GA*4O*y6CdU#d4sn}-at)qlx+iP=arcJJ|y|( zF2MlSNtWk*`zV3+^7zmDe=P86v%v0s)IS<(xVG#kxr6at{Rzn(s(qCIPbxf0e!A}R z{bbj{_|n8QUFquisqr_tqT=Lm;fz`6p0tO@j~O?n=!6OF;;s0b#S_L9jT=*3bd3BE z9$QpAp=d%;DU_$(-E?Jq;~XoaBQN8y5yP_S+y@#yI$V6QESp`zRC7?rDt-K^=9g+0 z5G~CW(3K+{A)}L@b${3RV5=EZ-4f!r)(6|-gKcL_g_US`Ge*DEP8VS#5N^7H(h*qL zgON?fF*bqxmFMPl1?CUW&92O;%FPxu)A_ruYZGHx8t=;(Q(@1?H?lolN6|mQy8&FK zez)>BUB7ic*prMMOFVE9-yMv}eQ~67o#3nDIO7{N5s?ChT}LE`sdNy=iYV!AY_grhfjEG^<06dKgwv(#K|fkgmsbz+zku?Z?!I6;2a_(9r8F~>pB!L7Iyth9msZNY}d(nPT1xf zLJ#6s$FwTmNpD(}NLK~@6MA3b>b=tNjby3#pNr>&tiX9n_dj@K5zRK%&qN~`S(ehT z2s9(vK5LYmiMe?z0_C~+OYO?sa93vFTf=knkv1phW|vc5rf@n!A`weD+3u!r&SqK_PSUx&YPK5=}a=7VN4zLLAvf@ zKBlnev64EU0>*ScC2U`s-_`V)rSzG}G%Cy_yLk|r6+Sepn8uWT*Li3t+)py5!a%Zj z48kXS7(C%p`VybR8B=`1z>3(WR7YvyZbVslrpgP`J#-|$iRn!CTJ9tNdLKS(2H~^C zhtGB&KD(KZDLv(L<)y+t4q-T+jYDfsMA#GMLOGQSk=&xd^}}<+C@Ey=;N*z1VK(zp z^=}b)bujico~;BQQNB3f)1mXJ%CSn|?N+9Fh-rEQ6La%d*j2gVrJ3cqg?GUUBe=|b@q;o;khM%U;=o7R~c|8hte>P zixHQ~yA+Rau?%YDDj8h9yYaZpV}A#Jk7xUT2ewpnSCMYLq}vLLgQbXrqOPpTxoa}) zZv=)5rNGlws*>`^@wip|=cxEVidjl^OqX4qTNij*)-dIwh9Uo}S@yJ4|B>7pI}968 zq7wuZ?ybY|4;Kejq{E$zancuw;{WS-_Q9mIFGErWsI37TcvvarDBHorW z-Bqb+GLhG(AZG=dJc)904#oRsrl&omO0I8N@jDNBMUGVl`fQHVfM&lG`YE}c0lN@p zOR8Z}Ls}wVL@43oI*0yUM191W!`J6#pOsUN|A0u(R+jVKf%F_8oNJi=jDhH>Ox)nn za#D^(X>J$m_zLK$JRKlzPy*Ns{nJQAP7Q^Jc*5+nsBf@|zjku$_ z`vT^3Bc81)w+}7aSb?ak+mxKIxX+?}M18?)nRX1(LdUK^lgLB#>UaGbV5aqk@3^Hc zMs8B6Z0nj-5QuGk-+)uEG4--7u~s?dgKb@#f)QX_bh=sUWn1*y6RDSNi7}~^4>;W| z1tY+=s8x}A+17ujf z54LrW{^~y4*1hht{$RT!)H+Jxx-S{vH`{u^fUh&)4;k?F2K-?IzR`ehHsFsK@ZTHo zKN#@G4EUc6_!a~HX9NC(0e{kfKV`uGV!;1uz{RLW$~W73CIutFww^WM&l&J-2K)sB z{tpBGq5*%&fbTHieFnVWfbTTmuNm;y4frkt{)Pd6(}2Haz~46D|2E+781Q!u_oW$Nei0${vaOK@oJLSnFWdU80jKTksh4ei&VV0gzz;XzM;P!U4S3jq zk22t+4S0b8Kgxg~ZNLi+_%R0jSOb2X0jFMd>SbGF47eDrOChkWB7^^81Ad|bS2NJb zB5aF(SRnPXtqBI4j+RKhY^&6OpKQQSG2o{e@Y4-A_3BeE+nr@i{$^X{2LBZXywZSI z8SqI4e6j(rHsDhX_?ZSgV!+Qb;Ab1~8Uy|n1AdMHS1TI4_Mc(!|5XEit^uEEz|S+_ z=Ns?~4ETix{Obn1E(Iqbp!FX|vMJ6L`1dT;646`awpE|PhsbPemI0q_z#9$t90NYr zfX_4F7a8#R2E5sTw;1q+2E5gPUu?kJ40zOlw;S+F40wkDUt++&VZhbO9!@0e*w*C+ z|5q6BD-HO!40yKz?=j%Z4ES;b9y8!^1HQt5UuD3*W5B;_z`tj}uQuS{H{d@o;MW>( z`bosp>;IAWCh$>J=ll4?h~P%zjw?e%4T>=XAtWv}ERl&sO#u}Zoear9QnERjK&V?< zKuK{yYpt!?QnfACwqmPR+uFtzwAy0pLKiL7eidBNTBX+I_rCYOXXcr6&zYH(aYj=OoDamKyklgQ)aS}g7rnMB@~5Tt$gib*1Gs)oB) zG!l8&YxqB%&xyPvHQc>YkjT4S!`~Bm{R*mkrah78xdQ3b$a_4vi-XV0E7k0~XN(hh z`jy6g#g2X@?O?(6D`rK4KdIRtC%AqE%smsB$kVR~O%{3mik5rEERm;QxvCa<{mNCX zgWsLU_c>shEjVJlf3Dz#+86E_jJxyro&+pSB0m>F+INri@6H>q;qDRl-FX!neu>zr z(s1`kHj(H2s1khlHAg;?cPL=IyISy|hPy|0iM+8I?jDgP@-}O@d&H#f7EFEVuC#Ya z0kZd&<5zBqfp1TAdfYyMxVtS5uFf8%zW$Yi>$Ro(cO88Hl%VYGM;CVjfdf2vwS()e z6$mVL@B=;a-*oVUJox`P_`x20>dp)u;=ylsaQ?a0^fJr|<>+*fKJg1S1A!p_ODi`z z_?R?|KkVv+zQ}`L>fnca@V6cOXb*n4b3^bk9=zAV@hHj_dELQ79{Ji43?1*m8ORUJ zbXraSlGbTDvSH>l~;EAx5d;718d;718 zd;718d;718d;718d;718d;718d;718d;718>!T{890zZ|c5!dNcJUx@JS9Ki?bj@n zAMo~T7x(sS7uQE~M%m60?vD09KX9amxF7QaM_KS<3qH<*d&e0T%nx|S85h@QN7rn= z`&6X+0shl2#-=37GYC7dD!V8mVYA2rvj|rr%4=Ndc_O%F}M^JXIapY6y!sUxm&d$8ZTlK8>0*XZDPC-Gsj_dN&yxd(sI!S7At zYK40Eo^1aYNnG)~Kybx%7m@gmga0ZiuiBlT$18&S{ErZct%NHZNhR8Ohww3h)OqYu z`Es|BY^N_Ns_Jzl;U+uBI`WTrm=R5ebNjs{(cRTnCNqisKd!Fzyfz)-MV!=NmoLqa# zUVF1&ubpxS|4ULnD0}BQ_=`#W1le0n_?STI`jPVcs73xi4!+rAXB<^z3|ya5cIFaZ z6!6NgbnsV_cGQaS0mn}2dXTcS)gpfob?~CVt4TW~=9Ci%9}`Gj&r){IBit0vgvHJ` z9DHlieo*%AbMQBlxH=-*c|Z1>x<4T-5?^%i)O9yyr-|^QfY;7_g4c<@8aH;^pXJ|8 z`kf|w$2<7@9=zSbKTP6k<@yxiV*;t`Wr}C<0c_tZze4a1v84EHaqy2l_D>zf_EXpI zl>IviFA8|&_dL+Wb^Bcoo|mT_tdpI;5?-i4*nUX(m_X`2kd^Y?*$0{B7Z6?)$jei9 z)j04+2Y0Xju!%FoPLL*!qQEYBb@ExoA>rV=CwZ!Tc+P^CAHsHa_t?2b@OsVu&WE!6 zUP=3^zf@ZAHV1dFMzN_I#NJbcj|rr%Z>n|~N2ltF=(&S6BB$bTwSym+^sDmcw+?LiwG}}4EQ?DxouNV6&Zf`rddlihoQuYrIvYjK6_OBMb>n-@OF|Pb-kyHFH5qyo{ zd&u_R4t`A1zKYL+BDQmkCk`(OuJT0LIqPti4<+rii~air?~u=`zQM69U+$5=L~vbx zvxA?IlvnXNlNJU=0Wbcf;JTgaBVG9(;iKZy=ipO3_Dhdqc`v?3aNYj?#jd<=|4Ii> z-S>XI`2V%wYcxLZI=FiklD|^%TriI9*XHSd{~>sfW@jEPREh$r`_h%2rv%sSOg+Yx z*X`Wz;B%AlQF*xkc$W9#3BgxueE#gOPH?!l&*y*N(b_ zRpssP96WWuy0Twg%63xshbTJ_5MC5mn5WyR3^Cr4Y+wHUBrbOmJ|>X5-$U6MJ;9al z5jiyu-0a{NChdIYnh9)kaQ7-UL;M>^T*gi`$GOph-(kVm6J8Yfa?-Dwfj+j#hs(_J zmk`c*(kGVO>;3fmIfSd+ahbdS-?iYONv@rs#AmoDohNvy;OcnfdxBSK_*TK|G`ytT zwO=o|%7CV#i!eS#k+am}lA z<+ttZ28MrQiAy=*CjPY|Upm5-QHr#xVhf6Rjah47-l3eWsC z?_|b%ll;~1BmRhRjzhiF_X6?zz9WBSQeM^M%qq6y#qV?QYm)M+zQ<1CdJXr~>t@1> z0@rwW9ypcpuP5y&p7RNJ#tq@gzsbbqRY%^vi-te*?<;W$Ph&e?{6`L+dOl*2D;_AC z&OB51ZL0WRM|e@-TS=a(|L#@I_$^7E{Ci4V&U0`z`Ue76i^Q9Re=m@_zfR@h6{j$s zy1y>ySP2A3EI{|27hrBhN6~UrIQgZ%p!k+7%CMCYu7m(tHEYaKlGT#2gJzb$q~ z&tW^M=ME%Y0w+88=A?a9m$MxFi6lNx{NCr_splh<{67d+`y%RWK6T_%&!Gh6%c3)x z&ofE;iq9#8o9wh(@MVsj)N?Dxi2a{A__H4S|8VfbaHi zBEQtZ|B|$$H|3wFXF^Mbrz0PL8e^283i2Y&*Pd%S9154*sUc{+PMUKlL06ElZpdb?|qR z@~XbybMSYQxRU>egQuQDQSxKXVf*hV<;RKr(;YnZ9Ey^^$iY+3p{Vw{)4@~Ep{Tn5 z)xkeX+E@9r+qvvF^&Cot_^ovCPm=QI3;t~fPd$gC^V2!6MNr=BYrCHPYgo_el?s_&F>RFN@()N>`u z@8u4jdak5JiH2RzuCc4&yOhik_g*LJwGx@ z>@Or-wVgoD=BpO`8;+f$l5tk^!gCIudX7Wk`_;4G)N>pPFFMieHxN0uAFn2wHlez1 zX2YzRvnNJMnmgmsl1XJH4ef2633|I_M@hwmL9-f&%&0wM>Xh0@q_b;&q{e*-U-D&y zB@G=Nfs)#36%+Y?h>l^MO}V=%b2k<4Mnon%pC**Ln-Fg*U9}1BW}+)m=6))3ZIub= z+L|=M(JrfWHj`XilN?(iIv!*W<*rD%>$TjaQtqmkyQa%s)8&roO6NnRyYGlqx`rl~ zb1dDL%cj4~Z2F|?#i{Q?`pfII7Z;{WqosZ{e|2@bIj?j5t%T|Fxw+5q7Or%29{27` zRkH}0-)x#i$@9v(Z1SF0tZ53~_jhUnK3=%!wdH9jAJ#kx<$2Sro&^IiZf=Ym=;!|S zJ5zK#4)jW!Umx55CerPj-WizHdhT`3#hoVx-e&B-LtDEJsZ&oU<@W|^QPm@3COR#B zjP*t)=a)m8?N?Wm2bxC9A~2EA^ggY3XFo(;4Lrf%tSp6CQ+ro32PZ!m3s3r%S5 zq<0IqcC>dkw=HyM##~iHq#BQ1*wq}5HTu(>813k2SxRquUl8qTNmS3G*ShoER?V%M zqxbT*_C)i7rIZEzP!5&0M!O@4_C>L_PJhfxTbtX`6pc%a3An_-S$lr<^bmgMnS!=%yeZjdB!QH%&wjjnKNZ-Z8ay^9D4D6Vsa$X(A^yh zg(lEjn423SorySQQjOg#G;(eXGrZO`$uJ`qy8#QA`PFE6K1g|+Kwq*^ZfPlE&1i#a zu4(B}_0x|%%07CsN4H;n*<+>DecicAxO3+;wN*syV?kDZS^8Hl=xS?7G`F{fY8KC$ zIlp>RV^?eI(#dV@ZEamGEoogJbCCoaTH4#3+&{N%Nh|02S;nIYXUH;+0i}-h#+Eui zM;oq^!IQnC*^|3kMh_$Pei^jXwqLf=2SSW~|IDR@E_*k1Vl(~hl6Y)ENhGqcyF1bm zi+8rSMO&H^OCyU*vB|SrgTQ1LmYTaMZkwj{4DV04>|=00QzL^xh(K;_nZedz*EMr$ z$WgC5(l%w_b~8^s05oBr#I9#x5kVq=2gq? zIz6>~94vXA(NUq^TLx&4Yn|+Rm9g%ISO?GA82$lzkO0x38!C^;1REM0o64H!P)k4a zGd;Zxba`_>)s%ct*6n+G(7@U;2lM@GzZ@*5nzM}7i86@}a%|E^>;V`zH|*d>-{xbG zn!sj$u-hSvpX3pNw>5G<*=8Ehs&U0n3(!#d_)8aV=ya2F%&U$A41>o&DNtLT*|wy) ztuZny*4fn><3X{hZ4!-F>JV~htL?uVnL;T8*5Hn`=_BXhhe0MZ`$#g-woP@EjPuXn zx#6_2Hs~O^Q4aJ0+j9Cp^T{lW(x8pP#%l&{UL}_vhEARHscMsb9(}nZOeoFJ7z6U4 zEf4gT@RHILhM+4+OtY-C2AqOPH$$80=_8LGUrW-aD-9&ZxnHaLe2S^U^j zCFh!$4%h~{5_T7M{{2rmTgZ}!LOa-Laxlr55kpenr0a@I$FD=^dMH9|$fhA}TC=}o zXosj(vv?h%2F>JEwWVhc^;|_r4j-wk%T-A^8O*sa!+?-vIz+9Qi|Zk3%B-%3BGl&m z8R{r!@j65S&g9h|+uY}6&zb)mM!A7mPmXDsSA&D$M4fCJ@MS!>hE6BcDkG6ZQ@nji z1g@OX&Cqm!Y`@-Xy+&9WIW5uRGL=fhDc6)`pIy0lM8e5p7r$X=qv$SrBb* zVdLu5nP-@rNEcY>{+34f=IFAvXlrchB?Sni-Khue)p;-G3aiDXm z^UyT0VMtCpr$022HlK}AXZ`p9dMHxM>=n{VdChGIw+>Wk0aP}<*ZuWHrZbefW2p7^ zK&#Km@mOapzBpFRH(l9h2CF^~u5@>4tgVqBwP7Q(6Lj`f%{{TUg^4Ejnz~FrmK$)) zsZ67zb32!5(Ci0UP878s(FaNk0e2x_QwoLVx3{-MI+rvj8k(x>oI4l&w?U|sf*6l= zv_u=I9a<%h{it7A=aOhg^{n*!wDpRnb9Tb3I*muPtgCHNTlNV{`?Kxop!SVHzA zo(bG)r99d?zj}+1xmb$&(8b&YmOs(OopABXdZ2Zj~EOSa(D&ZZFcSHqDUi;Ak1~U_# z``RL{vChuu!sM#>^x2_E`69kNop9327Fe&rvL#K?1dp6_t9Ufh5N&CRbhX90J7Nuq zSYw7U&})eXV5Gr!|NHM7v!~#5Bc4IVvy_+?8gi%R>qyRGygxOhn5GsydIinCGS5ZL zZFGZnbE6t-ox8OuEd7grh88z-%Mu6cVItP4EYVJfo|Jo$ipczCdgvrW>SQwLr11RM zLb}PnAxg8XBsDEKb|m>x-(ok-ow=D*UJ!<&g?hNIp|>WQ74ratQp1Ua8*FpskI z^pkT(&0syiW%a@_l;wvSt_JhS(&o3in%1$->5k;6M}r<^UxIGvRChOWC#_K{xgEob zI)szI4mH_d5RYl3=-G=QIug$uTr<+;%> zkNI?4!cb+f(I<9xf5~eym&{u=V(AmO_K;wCcSkhdNvW!ygrp%aQNEZKSMBi(Pw3f? z9cD*sXo=*Um9q~|InMyzMciPI{zeZ&o%5bmBA>@hON5~r+)b5Do2I;nOw^P0@HH5sx+}I%{T6id1v5 z(}q=NCwtB8$_V3?g!4I+8E2(>HT_h}!g#b*mQS6b{|Tq+NwLc0^sa1m=u8MsS3aHQg_?%h z<@Aq1nq8`$uAQ1D`Y~uF=Nq~pep-Y^aX!f&na@|Pqg~xKr@C{|;^`e{xW_I-=}acR zlr!6cb3&za!YBCyV)Tn4jj@KsiAYndg&v!x&`cVFB`6O7&J_%I7^++lZ*PrsB^Fd< zoaL>f8y^@@gJoYBXHE@XD-2@W_1D>;wcU~((RQJ7r}1(<|CX%{EfbqHmZ1rJzX<=( zUc9RzQBz05-C|k|PNoIngwh4=@g=-IX{IYTd@dl8h%Ow88QjV)HR8|=o^j^3nt+*m z32^tGRI(nmnV#fwPfWPKCnQUOfm(Eq%F=(K$ZIn9J0DD}hvX>C>`2Zv4DAzoxgTU1 zNhS}fY=gUZHRt_lCF(d0tsRtEb87f%=A7B~na`S|PO#28oh~lZD!n^8zj<*e#2vXM z+SwW5JFz0oZ425Rso83}_vVJL1a^#NIK}GUSUUd+p-5zLYqPNqNwUT0y=RfqdJIH7OrR3#ERCDmTN-2WG*0GkmG_XXzj?Aba|V^AFL~1#coWDZon+*RVb8~%jIxOFCA66Bbj|53Yq2Y_VqI#S-2a;lh%FAZk`k> zZKYpMZ0?|wpQ(#gopK&HIrR*cgA6sueUi$#N^Ul0@M)dKbr;@oUd!|W1k7eT1MmLF z%H%9POnB?({PbEHzREx{_uzVGt8~9Z@^F0y<^u??sVesP+84w21KIS@V3YLUnu+X_DZ%q{f#8mI6J45rarClpSv6LAW^PVHKdzXR}Z z0{#f#Hv;}D;MW5_R^D*I_P+&qC*Wvby@8A6(Y|^=A(=?ye>>Pg{yzmA`KULfu>E4- zquyx4apSiiCgZ~nsp#@i!C9W){-EUV2Kk=={t)0l1^f?y^V=eno%aAo{=?i@pu+fcij~6m7MwTOUPl6s?KK^6Y_E$1XZzJ)e-+@T0DcqT z{I*lY=SN^4`8)^mVUT|rVCUx`|3i>} z#Dc#9c4mT|Z5H_p<;7CW6YW0+IOf%}fMcG#X2Jhs!3&3zLn`bS?VJoa=J{H{G5&W6 z&T*@S`rZTbYawn=0girOw&4E)9P|Gp!F9i%fjs)%WdzsOt?#da&se~b&sBi`2;{F9 zoX3X~0sk4uqn!speg??DDL6rCV!me2)}=%=56|di$OY z^8EH&HI799$NanyaE#9zfMY+}S>8*k_s2Z|NBc#9qy0%1e5M6I--2Ig!LPL7e+T?Q zh|jx#BhT%EbDaA?{t$VuD#roi69OFVR059ixfJk6!2Y#>BhT9aNBj3#@COCg`M(14 z$bUQFXn&-+F+Ru1OS{NK+IUzdxIVru1{~LWJ%V$)lmMTfTI~NE?BMu0d@nLUMQ@iA z0mpIXY`}4xxd?ESzY%bh-+6Dd-vcc8XuvVf;{nHZECU?d@npcU9cKWJ_Gb&u?R7fj z+j5Y{d2^NE`ndW-kjH-UQ;_GkrmFGw1(4qa_{)IvTWgj4>wqKwcL2vc+*Mw%sJHtR z!2byLX9B(%@VS6ve$E$M&(Es_ClhJ;e;wGt{QL-T%&UF(P2~^f)ro*(oTmeh@u>kE z<8v|K7>8cKF%CZ!T(8&9K_2V1*M2GfuR}aTfMYyQ6rAIU$7{_XkM+F`aEx0Y;25{R z3eNn`fINQ%__=aE$X@!Sy)b2KMKG{X4-9^1lz{&jk73Smd7o`LjU&8H@ZIAkRw-Ro_oR{x{HG zyT}VMInI9v{1Ct~f5rli{bd~B*k8&34}<*~fTR7d0FM1@72t1yof`qi_PSMYZm$ZE ze@1YE(#DzR!4CGvQ{{!59G~mJP9xx72mETlv0gU-j&ZvQaEx2~f#i^iJ`P`M!G8?+ zzk$y$0LOLUUI(S@zX$SX0*?GUEcmT}BmesWM?1f>;BQ*+;qqQ>Jq`tcV?6T?N!1Je z9s~G)puRHz{{Zl-07pA(E%-Tyn*Ck@IJV1efTQ2v0FHU}k_G=1aO64qFf*UyE%;Qx zF`hF3$M*de;Mh;^037@2Q-FU2aefDIobNsroJ0d>!??H0=v2Kv20Qx#j^n^+!S!)_ zCdgylmI=;&=Yro=Adh~(4f5xJ{H+%GyFvb3kbl4;zX9aW1Nn^>`Ii94IBXSMkHbDe zH=bPId0_uw!MWdIeUB8J<Mhm_K?BKk18Q?gtT@N_6 z`^|u3{(lc}%>TOp$9e5xz|sD57W{BHzx`v#=NRDk0KUS4f8T-&9N>082<#w!hy_0^ z2YffO%Z2j<^Gy!#9KX0Or4(?AKAzifHx5!z8sKR9v2^LWS;<>fHTBQMin#`sSGzc&6yNxe8f(eGrauZ<@j z7Y~JfJYQ|IKLL1Rf1hr_X9}*@mtJe{6z&(c`ko5$#CDtsIJP6oV>_aJF70>**q6gN zr(f3rK2i8{z0mJ8!MR@O7kLh(9m~N!#_eRlv0c#bK=N}Se$Rrq;0}5y{5@O*+g-rR|Byq~IGy}nIg2kW~A?BH?4Cctk7 zzeT_wudAL2_>CaH0C0>?TyW-(=R>{%@;L7G0*>*#7I2K`w*a38dX!-5{3DcODh^kI{0|{Mc%BFGUxS@`u=9k) z&KSvO&O_uM1sr**ahrLvjN*AU$RnTcSnyv8&UWU5o%I&^16hy?^F;gO0Z0BPTktys z=X}0__7(p>3C-1vtv@3C}^G{9S-!f4NU^jt@Rx@GFpCOJAyXdD0^P2aEhBi~Nfg z`K=cDw=MEJTb{o-z=Dqk9LIr5z%g%YE%=uO*W-2>$Yb0tx5%%u$e-Y3k9R)$8sI;I zcDYt?&VO9j-3jtoub+WDuCKO&Jm$$~fTNw^Fg{>B`$V4O^Em(03Pb$Y2YJjQ3cpxz zd0Zojj}Uwh7N(-)uNPcyH%{Vf1s~&zJN*&YKgEJ`+%OL6dI#Ib@nbeit>r%kKD0Z07?*Yek#UB7~1bM7)Dd5Qe z3xH#uR12=>i8^mjF4OX)8|+}7JPvj+9|916^jj{tZvO<3NBfrw&O9*>?*<&>{}nb& zh2x3s^>e__p?#GnzXJR`z#kS|Z!fmVg>h`(XTT1&<39k$e(@>b*e~{h`4{EO0Y~{S z3(kCSoLmL+*k8U5IOf$&fMZ_W1~~SkI|0YIJs`Nw=V_2fKJNgI?NZDQNQF0uk8w~J z$GpOE56@!^#khy(3@ z!aOnm-vW88*Kur^if+G5aJ}Ds-y+Y)+FW$`QIbEp{X-$IkpBX~nLqaH?*fkba}_(J z!W+!DKESUc=PD030Dd*#e-K>Hx90)J{Co-QU>?2=IF19m!}%E;2ZDg3d==m*eZq{Qm*|u;2s*UIqL~!P(Ahfd3QZ@p+RsEjXTM z`wiH^^K5?yd@mUHaGpI9##Qu-*WD1G0(Q_Z|K<-Dt{3{{XLGnP9tJ+`fMdRW)q;Nw zaLikIT+*?>73^a^ybUXtcgYAOH(bz8gf;{HKIKi1G`VCod{%tER%pd)#`C88hzP80h&j)qC0ppkt zD?lFcs{qG*sBx^j_VKzlKjX|rw{OeC(_L{#9_{dNZE?}<@U=e^{yo6I4*77u1y}1p zjz6AHR>vdk7uN~ud_LoNKg^v>h6>~87q2H`yYKEuyYd$R&%Fibe8&6R)o~N!xIV%D zbq3h!5j)IhCg3Xp$9BwRUHu8z87p>}PXurkPsRhZc2e^KoYV8$g6f|d2AQe?u=u*{9f!Zj`6|!b}*jzLVlhO@p%yNF9QCk;A|h` z`8&Wd{(k~HY3oM7F;6}K9Q}R@_#c4JF0{{ujyV^WM|>X#b&szP1N$=t zXZf8WuU3KlFu+-k3&-aMu(P{^y2l+2R2P+>$}iL6KeY}}*GkS8_e;mHo)d$!z&cB6NDA)+uGOmu<1#&iw?`Dx7LAWZTWQXN<2V9+JW_%C8m0l+M zdxAXL-xYAQKN4`P7s{)8vtQ0PRnY!?z=I;d^6IxD8B*gm<7mHvzof$WEU;6>AQi?N z07stOk5oaP-0xIDo^5~!ML_3?@i`ylk^g6aSAiYm69#+%$kzeh4tPD_Xr~GAD9CpJ zo(FO027DpN_W<4jxWG=F_a-|kju_`cu&=)7xT$MN$_8&4x7ktWvRDr7>;?AuJ1&{* z><{t-v7^pKu)l%WImp82K)~4t7p|9WJUPUtygFy%7?yvT>>p;aZ)>k0$YXrQ0Iqyz z@~h5ODp}rUYTvP7AN{Il^K-SM?jdCPf!Haw@Hql-#VJ!9j<(3#=8N$lkK-8n#qsJG zkVif?`z0Wc_74CY?fadNO2H1=KMruTkMmJ3{6k;|?e7OT+V{(UBG^Iu697m1HvYE$ zrS4_rx?+Bg2K%|hL0!9NS>%c15AyUI2X*a0w?7$pqJ6({s02H?#K9KN6MWjSjl(B_ zoe|Oi+^=z-LY`lM`4r=SGT=e5^9752%v-cy4R+A}Y`}A|kNq0$PX#+@e-7Ze*gqKR zh4!1l4%)vEaI~+k9dpPq{+PFD|77rs_7O)rxZXxPwZI4MoCY}Z#Pu!O$MG5MBOkPn zINC?Nn1exu^APb;2le6=fWHs?s{ltkVGCYw!LhzaLHs`t_1!+i^;OqcIW$<`Z-8HH z-+cfNLOk~d9NTv!;Ml$efalV_g&>dZyBFYfz~=zK=K?++@Or@i3^?Y)v6g)JKFDKy zMgtxM`$51lK4SpK_!I%2OMKKh5O#_2$p`)zpGjaJ$&4fy4Nj{qFk1BHO|^$1n4U0MMTiU5y4w(%L)b!h)Qu!HuO0*>}^ek=vQ zXuksRd0?js@Gk?7ad;YVtT%N*&vVcya@0h*vEKc+|WL@`&_V71$Hh5 z9C`A6WvU?0uL6!dzXo_v6gmHqXEEU426^QF9N<+Tk9@*_F9Z2Hz*hlY4>;Os0{j+` z?*RM-z_Hzz1KtDjR|1aloCM<}#&bWA$9NtMco6I#3OL5|D8SJ#9(SPMt3e+9ehF~& zi{n@+@Im_(fL{Z4ssL{R9C^M7IP&ZS9CY5HieSoXqjAH0nz}3AC3~d4YK-uTb$ABLU zcp(qiRG6o_X2hS>b3=@eW$d6GVZTYunxv>1<&Yt_PMZ*i_yB@%g1o`U$S2@66 zuLE3Nt72STPh`L28IZCG9~PYPet=i=b*uJbsUp;fgU#qc>zpi3HiaG{le5wLz ztFA#XJ{@p%j+gOM0G}>>ka5*_`0LXESNB>l-Uv9$*D*+?8}M2ea{gZrxVqPZzgP#j zvcdQRfU9ftjBf;-YfMw zsupmTUnlbQfU7ZwziI|t-CNFh58y1%b>pI*Uu2&33`n^JHI^}1NY z>qTcZ;Bm0?W55%D-wSvb;7$%^JQ&@b>{j3<#AioswWq_{+oaL3B+X25E4&fblwD9-D|;L{TuKrMV2>v40k_pJXv1Z4{CUiD;6jNe6?V_ISFue?+xQ~ z0cZI&3{p||$Fkq+9mM_D1@hkj{7S%CUh!O`;XR_G-s{Kqza&Yn$X5b>JK#-#^ZkdaTnsq-E|f3UY4|q5 z@x6X)l@Z$h8|3c*eEhEN2e!@fYh*o91-M$vv1AS4KVd*h58y1X>|77{IwefoTL8Zs z@P7i%@;x$dZ3p}wkk6AvE%Uz@@KV6<2fPyS2LQhqaCL7pf4u_mUxWOQ0cYQR61RH+ zSIEJ{f0kuCk1|N50`P}j$oW47 zaF%~bzMBU)%XbLg0r+Er@n$LDZ0B|P?smYLQ@!y23E(WRerM`gz}Jfn-nrMnp8l#D5pk#h$XTSkUy4qTr7sXnZmPF1yedeV3?d_e3kp6~y?G5#z3C*36 zhW6Hu_Ri+Eh1HA2(tr*0hf0X3#A6qBHOFI({b6F%?+=lQ(T9Z4)Baw#g?ocQ+VSco;xgkP5jQT*$lG%w+sG%tu zk0j#J=0s=BlIqz}`bVWKv9u$`l}>g-=xT#!oqM;bGw0@^LFeDV{2K;|e=gQ@;Xgn3 zV1lU4vNtb6+*FN`#nG0oSk3%~>QHHGb6X_Qz9`n#iD_#cCv!4jNV1%$M7sw_#cQB{ zRQwPBp17Dz^pB2l2+uSbdDs{&^p8xI!P^(DEVlYbu++)!NTxw4muyV8qIa=5O>Gqs z`*On502(RXoDBYz3%c4G63y*xp_;|BX3npk)Y#S9x^!||ds|yqOAB^Tce2P)-VjF| zG|5jxOM6>RLpaJ>Dv@q_dZ}k-FwTjNn8l*Exh8hC!ANHHk(;8$E7rq4FJ>6|-Dx*% zQuJ1R0G5Z0cP>rVKi>XYS?@*GfO^~6th%tFArk9uh;<|)bo|f~%e3q=ThL?fjsv!( zo5w~d*@v-D`pJq6>o9A0a?9kbmi4;Jpfzyo1IxEeynW@{q*y%O9=Ar(lVm7wiH%Li zR^yEFx%!w;+DZp#%^fYVNP9y=S3DkTYlwB`Uaw60xpD|iN^)=}QXlRusyTZuCx^{+ z5`d=Bh|d-cS#)i_C(n;IM%0`gX^6J8*rRNd^7GDb|o^kJr$#bjWMES`Kjy6I*Cd3}+an2gSY~aT>!zuKJx~{!hImi+ z_U5{^jXkHVJUuL9lk4i1PM)*-O!|6&`w?25t|w4~l!ZC_8Jwid*_|Fj%F!}9;E;ue zj~va#W5$#nfG=~73{lHvb~ZH4m)Yl#wV~Cmxgpib9B)gOI>&vH=GKlD8th9W{-%NI zEXR$8*`}5e zMy|SgeU)!-)(p6(_(+_=@#QOb2FIly&TI#rL*{j82fd8*rJj10LC=~Fe)RQt4@Uax z{!OExzoVPnTiK8AAxdvQ6!h?C9W4hv61GV{RGw+j-Z3BkM>6E|5Rj4n;o?_$>!fzBM)5|{5JlOFtIIDDl(nz z-*HTaB0UX#V@G9X2G=_%DKjwGartN_v4d052MLvh`cfd|xxvOdS>>pjAq#S}U}(iu zSMH|`RsX?Uvu7BjtwG$8{xh`1j-+8|&WtOBAsL#T1~D+%@sos+$xx)Hd34wznVG@$ z4ob=l3=CN?MEU5C#1N&T4-)n)%=s|SbVAR54aPeR4T2+I88!(14EZ#amo=ORnwuIUY+i#oL#7 zp8fpa(ar?}{mX8AoL`sE(}u_xQl70rq0zxOkHQiOl;hc~P`J5j#aeadxqWrXoc z!s(~QOkL{p!p##q)dM{Q^&^h*?v7}@GnV?%E)0M@iuPkWj@VR+m=>_l10he8EC&+V zGK_xP>T{c6L&eP#yHq#nZ3spu=i^S+D!)QY+GC$g|C=%`Jt~u51i;JgsoZ(rr z?m)l&sE6w4&51}f9*-_1!0mmJbLY&q&mPw9uGSXLwPJEd=IHmD=FsU7 z+oCU{Dd6J&1e~#jq{be8gJ(V$&I9f0)-YSEF+?8EQilTG;mmp_)4a|q!6R&o{>MtP4_)9+JdX?eq#K^k7m zp3YI`Jd+>kjI~DF63q=+_tkBh zt7aM6vnI$8xy+?*xvvRwu53T5J5(%kiGX#{rB~RyYUoEz2kI@C8udS#rYiQMl0!hi zQ*XTCWqvk}USW?t!&IMpTbV8dWSJBO(B}Pd7p zIzg8xTz;QVc2g%gFXB=p2N1-exmjkgf;gn?l0kGXSUL0j^t0(Mp9Rjfq}hqoS^$S4 zB@$WK-5sIRY@O|GbT?9BX=HI}poCrw*cxl2Hx1Hdu~^BB)6YDXE`c>H68%_HWI>$n z?+=tLjJMNev4NMn$cVf$GR;_(e3IA12I}aAj3en!UVoe1+VpD;`UO7p=Nj}2edsqD z^!M_iuVSm->&x|Tq<5?4TL0zZAN6BC^lvoqALWDp?FM~**K4l)*BSH=^`WocJ&pM@ z+K2uIga4op{bvpOV|?guHs}}m(0|jQf4C3*?V?{OTh70+KJ-V(dw?1OJ2%{mlmbE+6`P$a|bIev5tRSBO52pB$51^FJ*5*#6)4 zp+C={{~aIt9R_`VXL_#ummBJTyAS>A4f@~rp?|wUe~FLwyGQhK{_6Ij-)HduJ0JWv z8vH-wL;r6E{iQzmZ!z$H&WHc)2LGFU=TRi&|hcJKgdV@?>Fd=@ZrDDpuejR{S5~F zJ$>kJH0TF>=x;LUpW!2Zn+^IAANpGi`h`CDZ!_rckRrMedy0M=pW`ozuurf+J}CVK|kn2zr&!vyAS!hyDhG z{&*ky8x8u$`q1BG&@b_!zuBOFoDcmi2K`bW`r8cpPy1MZY&YnKeE1LS;+_8|_|P9= z(4Xi-ztEunypQ^iGU%82@EpXfus$)JCd5B&~<{vkf%-)+$6bK1GKe~&?bx)1%8 z2K^~M^j917`+Vr%Xwc_#^10T3jY0oZANp$z`c*#Kf1N>piVyw!4f<1k==T})C;F)W z27~?#ANm^&`se!4-(=ALt`Ggq2K}>q=x;IT-|Rzwn?Zk^5B=>1{Y5_X1H--Z|E)gs zM;P==eCQV%^ecSmk22`L?L$9k(0|8=ez8ISA3pR;4f-$p(62D)Kkh@n%Ah~NpdX|( zq0_nnNjEoX=zpE)Zw@9QXGfjSRp`OA!((!l0%RMU$yNh_iUVDM$L{NBSDlX<<-&m@ zY0Hu{w565O;aF2oOu(npNJxX8u;_@8%-)Yfbog;rfrZm<6x*YxQMhRllUz4N%FIe<% z&C&n&E&A(3e}oFWZ1whAL;9xiXD;9DM@5Y@JpSBHpOrm@e`@i6e~$cP@aML|@}y6FJ^%7|HP?TQ_}At2_)oOx-)iBn+iSAuuM_%YGweG~sJhWzO> z@c)O!|EuCZ8~?+1Gq?Y?9Qhwc`X>GXzS*9N%5#qYBlKC1|JfG*ALPjYmlplN(T;ny zaX-+1J%8@C@E;}oF@GL6@Gsci9KWN*f6}q+==mSF=$DHAv6=y$e=F&m;vW|NVbSOK zKSBF?{MTFjUyvjJ-RTB3)BI5{`gdgEzYFP`_^&qbf6Bmrium723+%4PxQ^L27Jd9& zX5qi5=%X(0>-y_0`Xep+8qL7bdz#}{DEfLc=6_xW$&kO#5P!Y>FSGbRK1cp9 zTlA|$|5z=6I{z0f{73M^3REzEpQX<_|H&iG@oUSGe}_fCL-hA?Sfu{x{1=hFDgJfB zzf@GY|Gi+~f0M=k@*Md;YtdgV`oR=+XHVz<2MhlmL;U|@;QyJ$|GFIchYQT@r}R(A z!hag+o8rGg_}7a*$NxnG|78~cZ|2B-?8m{IAZD|4*~% zXY0RrSon|Phn1+5I{)4Hze@W$|K}|JZ_kncZuIb{DgNt3KPdjyhTNr-<|S`aL=FZz6pY|0aIej|%dC-@t#Z#s8x@@;{JHFq!JVQS=u(EK>jU`0q>l zCjOg+|7ua?_6p1+^D{x*HR{r_aquM_{- z;`e*fH^r}mAJ(LT@%xxQ>-l>EouFY!J${ep7{9wjU!VV;%rSmP9$=22O<#}S8jJo$ z@&5n^0g9e~H<7+6egS@1l}exU-<`km2-4%X2OXfB;@5ket4PC3T5+wWpyi^k$L}W5 zPf5Cay8dSt{hKZNdit9=&Oa#f-LddLi(ooRmcO}^`g(?-|mL^&7l+QTqiw# z3rbzZZ1Gz!`g;3+N%X~ia-+xZq(jW{&sG2DKK1qZe{9k35dPWL-yf2`DgHM~{8vlO zIsSVY;y?LNbNx43;-~Y!Ba42v^FOzfzKMS^KkQCr6Y$^Hz<`!H_$aDK2Xoz2{ z#s8KZ`M+$@-zNIm#*Y^*{MQP99Dffn@UID)+yATyZpE{;|F1<~Z~t>eU&5E%=6_wT&p&oT1^aKv5dX2o zE`L4#_vIM>8%1BwpI_z}|AKMm_}TRJ`0;gmuBq<7PyA<#-$kTvir)zSu@^0V<%amZ zBL4OGl}~civ*zzCy1--Nf4u0sR#N|6R;kaA`qbCscN(3iHuc7h>^|_Iba~bQe z{#J|r1s4B${Esa)`>z-MJ5p4gJw5-6N#7LzjS~NQ(dYc1VTgZ&_}AmV>tt7vZDY~n z_k9chJw+dNd0*GxYSABQ(bwY_r**!m{R%}t+xXE+`lk4m@{e6n!TGC}pb-w5y07Fd z@vq14TRFxrLF-Ht|645ecUcJu+I%`d{gt#%H2MFI#lIf^J!qaY>95H#{=-S%6#q?z z_|GCodi=jC{`L5et8inKEq`~Wan8j5SkX^K+TCMWEWHENA4&b(jcF(vBkDgMgN3l{%Hm71b_)Z>3L`7!Y?75)8{BhlC6e>~}%;$Ou-c1LBC z=<)b{0YQrYD8aua{`L5ua=a_Bx5%lDMknx@=iYGfe~0E! zum3XAH`RX>|5zLqxs2%Ce=wgQz5e;+hb8s;?|P!69-z}>X+@(G_?qbJ{Erg-G-djr z>+ef9STLsR7hCl8_}yyJFBSc4@wj%8_>_PizXPkx@%zJ6*KxM->oU>T$Nztb{y#PTDt>Bv zwdm{de_X%uLG0-9d)}hIQS`6bC7pmCzh_9_6u(iIxD0RPFR5_;@syy)uW*VvevwmM zy#?+j`Crvr0cVN6r~aa^L<37?iwSV1mmw2D( zGk=bS&i|z8X8x~Q_`6n9q<%j@{nBc)|83&GLQ6Qk{f;4hQ~e92;kQV@x&FO|`Y*Tm zFFq?(N8Hof?>`p(Qqj+rfA3rPZ@|0?mHE&pms-&Fq*Uvrsa z{(aq0|1}o>-Sbj)#67+J_OCJX?-Bj8wfRHuKYNkBiT^fEHY!!(ko(UK2L6{?{BMdN z>(su^e>a+^*^@qgZWjHeDOG1r=Rb_}P5eta*{Jk6|K0rimVy6Di~n=#MN!+hR#V{q zG*6rO=c=Eu=+}$?oz;LXF7^7ilfJ3`+ob;LcW}A=ZZXvVQH%e^rc@nqPp^M-t-1ak zqJOofp!07eeG~utuXh!57X59a|5+CPeTy*{-@G9i6!;;Z)+DtZKLylEQ|ir zn!cVteWY*V-(%o^mx2ET>R`-YKYs4(a2+Q!|Llv4+D;LDz5Znvx^nt|z5YM6=vRsU zm6`#){{Rp?e|MV{ol9v zzb}!hBkpN*0yEAu*S}BnZ%1X?*ZEH+eG~sep6sdM`1hcJ|Fz1$Bc1x!(dF*bRHj~e)&NXMBb{z2*Zv^-BM!L(1b zrWbvke~0K-X!1J$Yf0b4zf}0wi$3?C^#=ai#J?y0;$J@u3Tk}Lr{h$vzs^6n#1+iO ze=g~p_^&qbf6~DJ4;KG(#eZ1itHFlq;IPK zjo;;{(s7f!anAq#-r)Zx@vpaERk!On=x&n#_0LaP_}7d6sHCR5qsMPO>6`d(S>qB9 zi$2Hi83X@M#J|qJNBke7`44KJE6*{f471E3kLolTKHFq|M6M)mz`^le@Bk|k0X6k{QC_2|6<^O zq4?M1zefCLi~r9o{5R&v|0fpyBX0HP&x;2B|FZDkCjRy77y5j5z@j|3_>5gWBgCEc^>Eas~DF()0gX3;$w1Swsc%|4jq`XDs}K;{QaK zM)H3!x##X2cD}j)){B0&_#a66rufel{y6`>W8l9?{OkR`z-uB zL_b^p-)-SvdOMM&g89$qB31uUaru{pe~}2 z#lK$o*NY&}U;j1mUnKtZ{105>DpGo;m0;SZK;X|7{`I1tjsLS2{(T1ipBnhjs5j^T z8u8zu@zwcn5Pd!Vg_pXD+4w&~`lk2?zt63j{`*0B)CQ{kRQ}XN&HU@d|6IpP>R&Lm z>+JnZ^mYFC=g9vjq;KNiW8lBDf&ant&HMwGxkUBT@H+o*ioVXjL-e!7|2on)@!xFV zKit57p9VAkb>ja3E#CTga)RjV{5OccYG-9ewZHmYPWmSPReZ67N>~KB|L$hs-(cat zS^S?P`f3wYJF_)l&$$G=DX%Vij`5(os7d+yFX zqOZq)TaWvFHvV^!{>~&?<%%c&Z!z#MH1H3_%>1jq;+i@&Y0=#YYM-wZeVzYm(a)AY zSCGDmfB1*q{MpCA|1}H$z8v{aUEtPV=U@0$x1!njpG5j5{;LiA_c!prMf~gYSC#nB zcK-Ag3;%A>*ZaHPe_yij-z5BT{cxaxf5}2~{8ozpVl7{E|KmvC6u%K`-S)2+eeQn; z8~is~{IAQ=f5hUy$>9G`ga7Ya{BO$9{~C+`4F>i$NHaX@xRef|04|k zueA8@5dZXbS{ae{DG<2A;=lAqZv3~2Jm>#W2LCTv{BO$9|DP@XgLiuU^ZSbwe>Evv-q!C;W{kN;{Q&I{|!HN{nv{=xBqbl|LkT*H8HUWlCS=-y0VH6_>jX z!kRy&ui#fL{)2aW>p#ih{~S6%Fx9_D{I67wWUKq1L;9xrZxH`j|H%gbf3f%gCf+n?Y6sN$#k-_J>(F}?pciGL;U7^8ps=h0OY7}NRZ>VIm7IsQst_osh8iS$kJ@0R$hICKBw_b)1ag~u%ZSFUsersO4jNqzOX z-r|3?!GDdx{}tlDR2h`*YVlvL;ciyBG2^dRi@qincwF>#TXZ)&}}RsVJW$CZVGSW4l8yYK!lFDrAtsVuD!k^0>(tFAp|r@WNK zJbGv|^+|c8x*VF?uX1*)=)T_l9NFFI^X~MwC;hQ*0sW~GzG_Bsc>Qqx7+ycaX*t>! z%IBc7?VT~|@fpQ|M+!z)1;WcN3kL50j7nnXe?78bb$Hc`5#eKohacK9%>8~{&L-VdgnIb}{w z@5g7(4ljE%+!$W9^AW|&sCW9TO6v(wikqZA7i}{1y`(N6U(;e6)b<1_g3`P_I^~bqTJD#K6cdObgnYo z@TZzpEn`R2tlDF2xOYo<+=lQ&+lSR&Rkl-2<>LicuwLiH8sc1&_xsw)f7kZ@D>2%w z$Ep*;S4}GnSFTSC6W5Of!<8>~y?R=2V(f_UDq>f&?6Jby%6F8&s>Ile#_+^4r)ssm zn+sOB1Ro8bcm9-lQ_i1q!Ia1&;j2iyw)dUTA6=`x>$x(8;Z;;4-V26%U$5=`!2Qwz zSIrq)xb+xn5I3F$_wB!O&e$MTb?g2FQfwUA8WIcETy^o-Q8m33hj&A+iLDD9#i~GU z@78ed+qJ!~InrBCRQAGGoy384(AwV5-slm}QoV5RBT&QMzdPS9jx{9Ogz_kP3zl#CB^GS*bS zP;kZXNvf72T^C+8F1+fT5j9txQpnM*;~dD_RIq$G4Flm7ZxyV#h<6|cl-7CShc;6_ zJm$8^swQgeQQ^ur5=T1y!<-jybiFF##bh=?Y~PVUCa6g%SqRw{&YwQEINUqAwzr)= z&TtyNn=;1j3?e<+g&$?;pl7n@3r;o(OCvWoA?y9{0O&?;0I&8x`)IH@4L67c2gnn0wl)u0YMI))7t*>CLBn4d=a`*!Q#*A9NL9FbhUg z|NMk{Y|Gei!4(g2(=Gdiy6cC$x8f}#TCn0*G;@S|7mav)=cDP{M}jrW-puRzmIRaf zA7wv(2o@}Vh&wj-yYN+~61}N~;cHUOy)bXWZC;cCKYuFnV60hFf!mB9Cr;>Jf zJ8fydYFl`H)pqh7c$}H^1;fi8rarx`VEI{Wdc_|Tuajv?6jBXu3s*kW^#I#gHP^M% zd+w+=e#Y%EDnu#ic7-ta-+U$*4)@Y3pd zd$_%7#;vDl64}JXPLFW91LrmMgL)_bX?mGUIZ#WPSy$WpDffhfPFwL=*M8U&C@J0c zhyHLknRolcYrH4@;R9~`wEpl`Ue~qKA9z&0s+OCbb8J*|HtY1e}LpaPhYFuiuL|CysCc5Puhg`7}4VQoo}tQ&70n^a%r(S>I4H+c}Lt6BCq#qPs`<%>W1 z>@$b)))v}J2AW1~9x?N}M>uiy*!f%6n{V7l>!aTFTX&%>Q~r2<57+j7m_EPPvDq-^ zPJOudFEkNLh^XW9H+5SN;zT7=zoN|BdKaa`)<4rf&NGJvkJK-PANq6{Epm7wtmvBI zjO8Rl%R1^|yt8#W^Y8t)Q-!TF{=*+OZT%rx3_AllIii@(9kKOehRE54JOI&L$GnOe z_z&sGH1Nn9dtv?x-&EYxqDRHHcfE+Tj4h>QQesqi)g{!Cs|#@j^;qzYSH!+6UQ_wE z#DO)dP8?f9vki#WEPFKg#>+`6MEjAgONp%@GWIUJm@1ywmzy)_e3Mit;jmSNscV+j z=KVMP&?~e?eIv0sBd4vUsUFP8eno-{^81}uw{F@7h{h%=Lbm6c+7V_HLx#Qro&+-bty;Cd@xHf;-effbO z<{!(=BW1?4X~zeP&z#@YmgovjDk&=|J+{2d`4qY|R9;eARuU>5=YA2KP#P*PEq8uK zXw6O8yY}ZoF(6E0ulq9b?l48>fAj_vN};$LjE#_?v^3 z?K=7}R%EXk;U41!rj9JUW~ZqmM_rvib!70Wou`g0zH-=eCMdn zg!7S}x8yrdv6yf?B20asACLp{6y)sX2ebozLfvyEUjFW3sja?zWbZBc#v@#gKlM7T z6w&9sp}ka&M=kgo!S(!qM{v$*E~*dAphPKxICGwJ*+}@9olW#T#Bg7Z4fBtO%FpKrnWeteUiMI_Jd-XnqL zv4YE87CSV~8tnu++B=&Q&FyW`mPmUC?{t-`?Jt2uelt=W@F zv31r=+6_!UyCfc4P(nK0-I0!1ypvnDIk7adxHJ%%QG3SJDYcO^PB~?E^_<9@DN}2! zBSf7@k&{GIynRWerF|itpNPfd?eV&q4fJJWOC2|2+mcqdl74GeN%d)n$D)Z?^{m#` zKx?eEfu8$t;^o&=S?7{yNA;}PWlXvsL1rq^&d%nAZPgSkwn8Ujq79284NZ$83!=>} zWOgmb#}GJ$Qpk=Ken*BO$j(i zJm!R!IrlS@Cq^3^tEoAf19YmWCDzuz>W50H{_$8xOSB%}{}XWZ%lF@MVZX=FpYppmjmumZ=ebtl zhYQXdo{bb<4Dts9J^}C|z{7xJefgX`7xsGu{VDr$>Cc&w(eITkOoipq?}HBN;%NV` z7JL=Nf!7equNvo>7W(}&$fMt10e@_l=K#lcd5MWr(e1w?xL&Vc$&!%qH2Z*~{gY*> z$nrt@Q}tR1_!z*i0373X7vL!WSHO|acEFL(b+SZdK1Ja7JA!i@c>Yy9Zv*+m0bdLF zSipY;IP!l4aLlXU0e&Rdc@1#1^B&+wf&52+qn*8Fp~m$^JBI>}c8&ua>opm0v|j@_ z+CLp|w0{xcD1SNN=$B|ah10!Q_IVSOeQq!QQ>9FH6kaNy!x~;EpBDmtpzQPJV!&~g zzXEVPO4$fF`|gp?eA-+8eyl07fY$Y~K*_>*dsl~( zpacAOIVHI1=(bAi7Rq*i+VXtP;}I9Nwdt#VD#Js7^|_xaJ+%!I#$$vG`?TkldfCq5 z4hTi@Q4r6eY^zEEvaR3G-Kk*XRM&l z<*mZ_K43>*0kVBo^ws%J^)<_4IZ^cWdyck^ys6aVEJuK26%Leba60!QwlBkpIVr@p;d^l6h;iba2vrl9yMVLoqUs(-Q6 zzfT0Y{(Lr2>8twl*r)ehR^fM%a=A()rqMCBJ?mA;sm-7y4EICM1>HZdQB3~pWl;Wq z?7a(oRK?jpev-{X1k6UInpV^WV+Ajea5Dj06G-5!Y%mHas5Hb7B+4bi2GG_vnyj!c zYiX;kw%XFZ+S=B()Ow+|v_X_$`&MbSYTMUBt)i##LR&A?8~^WjF1xd5&w(UhfA9PG zcVKhoe9tq_^UO2P%$YMYXU=}tMYsGh6UT|QIQq{)*X)d|94l#izh-BXvISJNs`v+g zN8%}qx-gqX_%TlZV*O;C>T^_i^tM6 z1Gp%s%1T{SwVB1y{?19OUQJyT-b~xHzY|)uJ9SaQ}a4r&I>(ojNP=OyP%X9=CumC z+TWB->?2TD+laSojgmg%Sm*nhE!E22i7F^)TJ)W z%X{p}J-5C6f!*{>e$CCrb(Oyl-TZKTfAzWniJhU&uOW5k??Uk};aL7wUE=AUL2`{r zXII-e@aS*`)Fz&^^7I&W^73y2>}J*G=0Wy1A?J z?Y74%-;Na^>C8w+cR{rB-B@8~SEzFVMy2dzL1{E0?1BXzW#wJC3LoKI=16$mFzIy@ zP;wQ9*FmB3w|c(E#CFqL_S;WK^4>DIi1O?CneYT;fT6r=n~bQxkwkG8lyw4{&Fo|v zN$jK;{18ht5(AwqUOZ9PQO@rw8tI3LU6%-AzhT0O3!7sYr7W*#i!G|akoLmnrd2Tv zTsAewYIB7AJAn^z&Q{;1==)_VPr6S}tVUrb-CPg4B?{9scf3!uD=f^TT~yqWKdYz^ zQS!Z=7=q?+Bfd!>mfUv!z;m+a7A*(_yr+4q2Xjn)@yoEYv61@y#!;AKV<7aS8R@kWD@(& z&3bp>0^*LJNv~slpR;A@<%WRg(`mkbuQ^^)1w@a-i(Wk#x-JDoufzokKJ>uc z5D>i=FPu-Lxgn5V-H?4PAbLI77|#OfUQqV6fEfME#w7j8IiS>Bv~fAt0@m;xO!84q z>bmMRr!DDqjm}OGfG2u|4|8q81rRvGSUaFKyF=g^f79*KK7nWaO4EN5CKzG(kEXvt z;OxE1pxdY};2G}vs%1S5e7I4L3)H0$dLLf&obwoA_@U;%MBtfG&amS1Z67{A0DiQw zMnktjZz;T9rSE`#40DiiFMSpPC!gJlPPBob|AoSh)mKMF-o`V9&f?HsOO1$?;S z{}V(i%le+c+3S}<*EG&ycK8SGE43AGs_O_EA&!{m4}Lgv*;_4a=Ki_$!xAV79wor9T11)`I!= zETdrRdDcYu)WnAR)w3!PsqmbO?~k`tLY{Jw3ufd9J*z>iV(5n#j~!2oppI#?EN|1M zS=~?5u=avWj%`+J+cc$ZbMfq1{V2s+C^kFN--H*=#DW1XJ88VEWmP#>MXYRTXj*~= z6b-SfTbog;iRN8_jQ z!Rr3trawvDfQgqG^dBLB;O3*qEsjx}bCn#2Vj%rU{Ipy@dVQaD(+?vP1mdUTr}+?L zVD|Wopzle1CSf2xR>b5VeVw?z_wkBJKTeX0zb5@C1K0OQ@-fHd!-|GD=M!{b-WiCG z5Hb0Owq+oGrijTu6)H~rWCO1<@Zkn-8~8*6uQ%{g1D|W)V+=g3;&cn$*CIsQG7#6c z;<=Vf+?>n3lot_*n@=yT0+l$&Ds|{o5z=d$6WYi>2*ml*;XW17xX!0AB(72hn=CG2Jf$`z3KfNlIpz|aHv^v^|lU4 zYfoN>s$fn>?vPaU;btn?kNy*TiP>ut`pbmNHqxs!=$`#x#NON?Ya^IsX#<{e%?Nr4 z{p(&Bs}Haa0ql^$es(xKS@o|!{%>FGa2%c!)wG&ypw-_hb=3EakK>&8Io|gf^wBSU zRFb9dIZQvoNO!RG`o3t&=lxfw(?>t~3q9nQ_94B#KMqxVs6Xc`wOoDlli#V*>3cNO zv;U*h>7!rz^&aWjAJXac(J%eY9_iU1)ampw42-wl0r;6=qdNJhCRFEUpMa3xS`%9h zA+1sAn17D8YI~FzIOXepsDiDZy5wqHbrbZd?^=`Irf1(!YVk5qpa@w^JyRX zL(#5#1!OlXJm!-=tkQ?GsI#95cYdJ=V+~4|09rjVLvi6LRByIFHz~; zYn60*^VyQ@!-fn-Kc&*U*BY%+@^w3<08=hTtlMMYx%D$`P$D&%dl6;H=kjND|YGQK9!!=%}YZZR{yT)o0dFOZ#{hD^+I}7wN#>4nAzqENNejHQbco+Rl-*Znv zoPJq{-%R|NZX|vj-{IKO8Tb)nzlnVx)@AzRS@>1pSBc+b{LaSj6Zny~3cqUnrsBu* z8vJVUn~tB2AF&92=i(Pt=W}qp5Wl(V{9+t0QStfesMmBZQ0I;6*rbjN)p3zJUapQU z>UgC((v;L;Ieyp~$42BG?in@7dU~b@3P4 zvfka7`$C9~MuwHHp2$5$VvDhV1vZdqtKpI+uu@B!?8JO*#DaZB5-+!1fORItTxTNp zeM-D;C-#`T8q{K)2bP>9@QQ!pkI}@Qm!U17VOS+qYxR6b?Vo}DP6|rbk!D}dmjnq{ zq-E9`$weZsV10|RCsY{Q{-`x3Sl%OUhjwB%x1qsWAbgd!UdqBI0j?EUM?mK=RyAF+ zO^LE**(p&=#afhCinGMPXi90*25n>leKSlY6&~Nz&Lu{ zk*!ge*Ul*Z^?aUk~S0i=b5fusdEa?s*71Mx^-* ze!gp~xO(pWUsi#dEB}QHD_wEQUOJm4!5ifpK?vxsPHGlvBfPb z&-~=dmTQ_vj&fa9&W8j2>rL5MD(^}jx<7Sv!GX9t)-h;Wb9_kp4zgTW7FcA(w5Ld& zdg1TVZ!5&;2f*IL~4=wo8GN1@vf|e z*S)e4SGn0-F}E+QH*N-;;&$m5=CT6RDt39IIHF zM5crpvD}sS!eYfHhMjxN+K%0hVx_3I*l8$MWG4q;f583qsPcl29W2zqn$oiJKVh3i zJ2eNEswr(Hgc6#K{qa(BY(i^*R1v`*S92C8I!oJ`GI4Y1IviuzUI&a{+FuXZxZh(d zEJz5z_CnOzK+^4<;DZf%G>=80L+=D z?tryEKd_^~`g(p~TY>dte&Ch@YfpY)LxHs~KltAP>)}9p+Ap{Ll)2Qm6}4$o=H`(6 z1WF7$F-a?=L@kj?FmQNWgvBO4~dkr)% zw6fbS^=7_KsE+8}?z0mw>TMvo3nU-M?8KIR+@-3!s*r@JRA-Am0{Xu@%26BE6i1Uw zOS-E>->^Ggj4DF9?)Xp@v$>A?Sg?5(Y$A!LqJc$)cH$Nbm!p->hdN&YwVjHK^JE*g z6ug7=EE-rEj;6L0B5Eh%d#OQ6Ft2`VdmfON1=7*Z#EJNBoP|1ng_BJC9YN>UPTWBb zk;EUWFN!7wn`q)M`|l^coxGn+;8E54XAjulu`mBq4WZ6K$TBEJs!D86$q_p{8K(&% zqn?dy-ItFY39;Sc_!NX;kJS(I?Ml3Z@sH5j_k=2c;Esgd%HKsMBb85u;>(#2$p%|r z?LaqQS}_z4Qb4Nt*-P}sr1SZD1p8YTWwe(XXL4Zb{xmedcwTI_sr3fxauBWm4y{+5 zEBY%?+NE*Zbxs{iA$3=nnoDQZ6;dBrYiDNO<&Z?m?bB`Tww`e^Kj6iEy?l7}+$%Il zv(~n%uqO-0aqV)3`g-C!d7JWoUts;9Ab4+qwX@*ki2th~_(6encMvs%H;yxoS!}J6 z@e}`+_xHS1f%WG=@UH>ugFq1R8w!HS0_&jy7c~nOLDYwojdnS!PTY-4cA{`Q9A4K6 zx_6Sh9Ce!}Uw8H;M2OnZem;XPGwD2U6ivGWc z`XuAb82sN((7%(d$ZOiisVaQD?ekfVtFpr-fWo&Fwx;M+Y9G_X`Bw1|Pbfr%8FF+e2v-J4p{^>AF1BQuD8s@&#`+#V<%y{YRag;i@F zLYG)tmtx$Q8Pw3WSpEHigv3~;m;N=bG?YEph0zXYD6AUs44;hb^{zDJv(bf>0lQCO zzeAkw1#CMNU+^=#y-#xm4`&D)fIIoC%{FNXLH~VA= z^N;bK6sHF^s%zB4no(4oKewpxY(&>6obL=|@-ywo0rj5`+*FVXt{>1bF#oTki}NoS zZCyJEn{`efya;DD$G7QA`&9b*h+D8!NB;DpiYtq%rWD!LMfH)Qve|=*ife=`3B5+D z34keS`k6)HmJH2!;6oJ6rxDkAH_K)^%BJ2d8~7=kts0e%-$u#g<=pJNJTba>)oAPL zbXJy(7WwE>X?vTGy$8uh82StqO2~10Z5uPM)OlY&@`_}>fxhnl4j8>8Hv}x>1#jbW zK&*H$02S@~yG)!d$qoMRIE8bGf%w0(bg~b9sSkdN5B_l5V;|cwfZ-6J&?5;*~B^1lp6wBtCTa>17b!hbFO0nF-xV-GRJ_Z zm6>xL3y3>_KFb^fVumYou44f)>!r^!$AFj#%be?20N)<*3IXdJFBtZ$^1-Wp@Top{ zjSueKJq(DMy4)mz^a|(fYXLEvmyPi(AZGZy@Mtb5=<9rN&P?WpfK{IZ;+A9O8@RZy z0OS2R5AB9-X-LPw8bMqKeVyk4>jDjD9Rt?vtaE)5u;%D!)-fR8(#^tn5)iYUIWX{f zxuBrutY~fsh?!C^T--HsE(9#jq~?ZzwICM+60jP5@FpL8p%1>u2j@&}ZU|T{xgd~$ z#hKjP5U`f!f zsfhnj{8cw>=(^c{`-69>M7}i8DU23f8V~} zLk#UQ(f|LwTh3Ls*@63sjxgQ{*UwzsUwVY`F0sZ-(bpXzR-Z^dTqnYC1@PhdTzMfw zp*nKEHue$S;das+_1#tke-U`5eF!U@{eCY#SNY%}R5>p_`R+0CD#cgVv~LPL(;w5% zuYUsWC6|3|FZ?XvBgD!ZDM0h#JIN!`yQj-%VNyKd!w18op8UC{Y`D=Lu2cD#j;iRT z&rBbDK5*)@QKi@AyH((P+LEDK9S6ctBhWvrSLfPpvjm>$*J*#a#|ICh2^)bGM^!F9 z3l;9>&;3wG82vY`&oDR`aW_5p4JE$7#s81Mk52azEK59tgQgN0_p;lCKKNIC@NfFy z_W~awR!vET_#Dsho)10^FPM!GtEwd3VtKH>4ctr5UjiR)U9PC)+AW?OH`ts0WFNc& zIOVn~PP%-*F7R{H{5d|ruv6ff{##g}cs~wJt(Tr7eDF!c6;H)N9H#rw&-TGr10P}Z z$2h*g@cNP7`cxEo6Gka6vRcJ>UrpSX;6_WIN?Ip(?7`_DD z%Wil2;JbYAy}(Bp{YH*WFf7JmOfUXF22TBT8EE}Wj+S_l*V<7JgeNxa`yi&dN6Fm$q}wqUJ99Joh(2%z28SjRFp zIeg-2GP$XV>&qJ#!w)9F5Ayf?VRBm)#d|CC^NzPIqC}OiNK3LSaWXW=T z;iy@C1p$j>*q*015;}a|kJ1$a)%TG^e9?+#m*5YpX*cto?s89%pTSD6_Q_q5v+9Bw zvqdLT6@=UC57b>y^<`G9qGkC?(c2s!L6?83YF^y9ypcC7T)DhqapSUuOPX~7VIK$i zpm2cx1Kdw+b|uwRTA{Zgo;%RVojI#vT*GB86EEW@tYZ9VS@~GqA?Bi{i7W6~t0l2o z&|yoaMJ?l-mM%JrA1Uig-}!=Bm10w;8gzAQ*l(VO$TWPeZ04-74HK5Mtc+DaGNSnA zd0TU&enwV?kQkpvqoR!~E{{Z8%EeiI1EOOy(Q%pR_)K&{COR<_JquA8{2Pwh$YJ(Z z+Gb%RG4X{q9&1HQhP|;Ov&$N0m5*(R%t9AbUdFMuc6PaN59CB_pH*J&`Uu==H~ZC0 zyc*wrbAO;qe{(Ini&f4~fr)l;?0EgDGVVsUd{M)S#$}h|6Lm{tptuGkEL3wnneG`X z*DYJLV)@dB3U~o_A?sK3jLx2a50(l@NtHqnpI`eaC&Q|IqTt0AYRMs~F3mGhFltsc za8|6cZ6yrIEtOI8ef#Ff#q0*=T_w-rm2G5q#cNvqZ>)H$QRzg*Yx+;cyWIcli#Zh! zU&c%OZUs6q2d^T&l^U*c07uG*ISXPAT0#7!WEkaqrnC3muwJnr4@G-h`wqx3z3EW) zctN_O;exaGBP?g*>aiJNdLtv>UW#0>+p7*un)Co%d)0wsH#VKG@?6z=&m`LlW3f@| zs-?c$GG?{?RN(;m=x^^)_u*RGRx~%PYFQC$Yg|HSgx6<@AHRBWBfr3^!X$O%@Nxt{ zy$7ORNrUMxD`DVYK%9a2jreK$?-N8Ip2Sb%j}t^7z8*h~ze^C|H2hld)A(^}{GRl; z8+fIGn|$<|QtHn%n$H4*{+kB=Spzru+;8A_8uVKX{4N9kwSj-rz@IemZyWd<25!pL zFVs?ZlYXEY?sxM{bA25!n-Zr~>UY6CaztYG1v%OG3( zm3Tc3=d}NF0~hbB;hcK58o0@)&A>5jBm(JK88v?s=iH^nPY~3S|1}0aQsHiWhnbd*ZxNQO9s9WaR%b1{$_nK^`9!JCB13Sa~1Bk+l@Z-UpDB?dio0kH|=n> z(LS4YyUW0@L|Sd19~k%w1J~~yP*2ltKU4I?O*?Nh_?Y(my@8wcNUkM4W?;D7^05EzJi~&v*u5`-D=<; zL!5zp*hXpk;RF%f{68*XA@i$SNkrih-{-=pzbu>sfE$ z%(Iqzi4VR|;iNV7S1{JzTGkkSf@7Ug?swo^^Edk&CVnCnMBw3E{51W?6;8QdH}KI0 zev5%mHTcXh@N*5EZHwlAzQN}k2F~?u3_O_ntT5++aq;1!Ao59-5n3B3N8;dow?Q{6=_@*c?t9`f<-L_O7{_hp4 z+rHkehRrS#)j;<;v6qqi%EN88bPifqEWdn3H@6ic$9a23!2*dCUg9%uuCfBUz2PsM^Qa~@aDPGO!+Mf7|a z*O0Z~r>3paN5Aw@kMvjcA^lvHzEmA4zpfAIxdw(o&p9*wO#FJQ{{|*TFw?KWd2iF- zDN@V5dKsns^YH6!`khRKP%IB3eLdp6O}|^EGxg{Cir%JwL!~$6bA3{8(-)|DS~ES@ z8uT{3UI$?M-*@_uKCI;HwG^~J*E982zFu!&rvG6d(wBM2-_(cn6&~q-+=ujfp4`-* z>#cg5f4zRfOwaX2y-i>5q5lJYNU!%FH|2k!59t?p$Y0)v^ou>xFY814R*&>t*W6qC zt?@{|#3Owe7)i~wL^!qDReFBA*9^KoYV3GKs8f{&)UiUnXjG!ov;LIer^|zJ2CmNZ^bm3DUk*&FGbi z@pJnR*R6tu<^HzvA|>DLMx-@EQl%f@D%dN0^6yT+r;q7fVyy9ST=I0wZ&mV-F_lH! z?LT9X-phWsPLT=ARC?NvbcPP_2=74K6#tLZNJk&=av8O`Q+c7{)RrL zciZouKIu0p`3JM#YoPP8-%e#eTV@6h z+kaQ}(*8Sr^uMN;_WvXnPkZIRx9RUu>Bp*k>O;Gdf4K(KQRiR#!OygO7u`#})c;pH zy{lkf_DSy|vqoZ(xL5x7s`OX8^m3O!_tEt#|23-o`OM6~@~_5E=U?|9*C_e!@^4Xu z`uUGM7_{BwnPolYqyH)`NE51~JO4HWc;&xcrKjFzaOZz2(tG89ugZUyN=!br_-VCt z{(q?CyYv56FY_Nh(p&$0)C;fRw%;v>nEp>b>5G+oy-%{%#cjW*k>1OGn`kVAO-f|)@~|3;+u z%Kw7tGNG-~GygO3bLanWTE3#whfPZUVhyOHTmFka^6ysi^>aMs*W>4w|31>=f6nt; ziK@7oUWreq*XR3u^}$?|u%zhNccjqCE)#}bv^UH%uS^jc4S z)ams3oiHddclre?z21LY)4T2e4FF!{UmTGs^f(0be<6PE{Es-=+y9S5z8FTxL;9~< z|9kL&Ld@;gV^n(cT?sOAr~idY@6LaVN}m?2BJT9(;^iM=?)0rHz23K5^Ksj+7U{k0 zw}y=cLRbl;{rC>A+kQKa^|s$8H7I_t=eJi>`hd%TJ5+kNzFIzYV|WSaz4X6zhP+-T z590p$Da3Vp?f=EcdF#Jh$v;)4*N3o~}u;FIMR*T=ZJLhJWLu|30Pv0!2vwS%{xbukBxo2wlv5|JkVI z&sOR6A*>_nm{956_TSe_{X3D~%l>ntQosTwhx%WRpIiTb`p7R+jvrR(^+BiC=dbz5 z->l@@ijeYK@YCs$OoU+=;G_NA`L9>lxE zzg5X!r_$?#POs0G`N+S!PEwfn&!vELdY%90eB_7K#Equc^4#ao`pDlmQ>M^znE&M- z^7kwGx}DK-Mk@IeHK2|xD+YZm#QdR-%PaElr&M|qW86)9f=cgdKCJ~ReJcys2=4rs zAiY=l7oR5+g;jdyeWmV!BF!Klj z;YF?s+PM4(g>`@zGr73d63Ymz(U+}UY5C6LyZHC>lyf$;h8iMEbE!(lvLkNG4aa3- zZVOdqCrh8X)3Z;(deqI^X)^ zj0#mET7|Cwo-gdqCh1uG*u>%XAuzrhf0Bw1$8m&;m*RMeiqmgKsyLgs)A8f;IrBFf zzcDIaj^kMT#;bGs!&&%Ms`E)WPR8#O>im;9a=Nlwoln7WDt;_S@}8!S)73Gej_l&i zvJ>yx9j_EGw37v=P&qqMQ(9Qw^)jNCo%~E`;X-@d+2Tsu5q8HT#dhM^OSXxtp_6J3 zDLo}XglLcKjxKN>=m^aGqpnLe1&!1!vFj2+j3sX^P1u@!Ma#0wCrxUog37ysk8Att<_doedEy5b;Uhk z{HNGpJJB6Y?6DJn_~)I1GC2oUt}WbNkdKtGHY_Y{A3I92OtEAw8HdR)nO}YBHf0oH zh~($0?9|kHyRthLlvK%2hk=xt$Yi@?Td`faD>g)0YLO_fOEjY_e!pzTsh#TBz=O&4 zkmdYe)3^Gf>I)-@x2op|cYzahyi#H(FDi^C&v91~JMm<6)Vq%EBqz z3&z5`l(@=gLY?Q6K6PF=LVq9iD?9N_Bo#ZZESh-U-uim5XT0^+O{x#a<1f&xVWU} zfzU}+7IF=AJ{*6ay>)l6E)^@NioiKf37ynV&USLL$bZK9I<|#D(6)#6f-Pc&(Zqh? z?9oIswh?Pae-kV3=>-W`uqF$+wrcp(`w6Ktu24S*^hHAUmWY=FT{?ICSDRJ;!kAj zivyfrFkNC>&+%wm3hmR`-c*PN6UO?3AnW;^IM@l9ALMlZ*M{dEI}dH^m-BYzcNOH_ z7!2MTw7P;o;0KuiH%B9fT1rpPxeK6OZ2Jfcxj5SqQJ$lohX>nR-_1v(7qAn5WYf61 z((ZT%E#S3Q>~gexZPT*L$4<;C>@N5Ug}0r@dx>b+w7p&zMWXV7@-Uj!#2?Xq$}8Y) zCx@2y+@`?hl*6x5W#HQM*HO0}?r{Pf* zb}|sH+!yNHOv+^44m$x`vQ0o`tww#E3Q1E?4JO;&Qwu?3bx$qk0S!H>WbF>rm*?8P z4QV^l(pg)9MiSkzlcnE#*R$u^_S7ZMC`BvAdZzAdP`fUH9>C1h8D)_~L1|rLNhutm z`PoZ!&6>Zh`WInn;QU6{E3QXC10<^t+MgXx4g6oIk?8LEhW(JJ528lw46Xe+ar@0w3F#?4 zyHI6hLR~BNf9-_4kIX;~xGpc)9mxAzAebz$zFd&55>1WE*j;E|wlKW9CAK)+yt1jW zwb^Q0cIC3=tCy+M@XF?^+M1U&HB(pgxy1eA1G<}?cw!Fx?M*xJ`$*ymIL6#)YGG;E z?ye~vNz&~#rDayuO~fwmili*p!KI~PsV+KQXkB;3W~&_5;g;;QorjiZ+Jerm zwlnQytkg!IVZ7*-h2q~S6b;^7qrqD=I&@MeWm?tSr!BC0{u@pw&m&2)`%Ub}b*YPr z#YLz!&@!&Cg1a9ZdH}tgx1*_ovG&&e`F4DN=q3k`Ta!K(>ih$b7vr|`6l%+)i}ORB zy9E*mbv}+rG&Ss@p0YH*Nf#G{Iv*tETqJo7-Z5z|lDsJ*Nb(*cXiV+Yl!9pGvu!)0 zh>v<0&4?mG3{<;Fg{CFc`6^<(pG1<=Mn;ksqSteFzP)uHRO|}f#E;EV#rw62HpNiI z?`svmfQX$Me|^uHvK|WkP9+)j8xLO)`pF0+GotjfEBChTv=i^7^|N_R=r>lzz@Z8; z=w?GV^qt0Mbo-6cZHv}Tss!C`)4DAcx(%Uj>GFequ}g$*p8#i}+vy?#-KJ5hv>k7} zPuYooq;=!^C8^srGL{#L{}c~xlS)GIALFR~0k`o`=SBeSvC@Hg4nMDqvdBx9U!)RE zm#C(x>O8yh(Foe*P-h`D4LvX~ul?O+p-z4>S!Wp@lgTo_Ma<$j3&#q2Og#Y>$0tPu zSvUg`JB2JG!|n7}Q6AhBQsnuUU@h`2BS^rAk>@Ob*$g+6dH%MHLF7G%nf{Wc;2&A; zQ1Dm6O+dX_`^ydyfjmZpf}_&@5}P4(Ytp*O2xu8e>$bJ+DbtrP<$(wDNb+ z6szj-!e-|cM=F24Y9b%UwpX+Kt@6jvPmCsJmzG4)q~hj@8-!{|kBcS=CkgYuv2IvC zxYi{a3b)tf=b;3kc*=&C|0a^CvqJH`@9f_%csdEhM77v}rz6P5uA}XrL9-c(H;cR5 z);vMSWNcIOoViFK@3*NbLFYlx>wa!($^hp(S?2?tuizXNv-9&fDkF4uWa9DAyZiS$ zD+tJ{Sp#2Uy}cyYF7cOz@vNV6{?OTl6X~~+B>E@~FyGE->JpgmVqw0EV7@0;ouMs9 zGyYkb4>zSt)0P`Z%N5gdcxo*f1ZL7|C3%+fC}cpdpz{|Q8Q?rCBLkf$^reaV(wX{F zDI(1BJp@GgqZ!J?J8{m8d z78FVjk&%JU&-A5xWn`f9cNTJDr*i~JaJ=eYB2B>ACrdxyc^wf7{ai-TPCij+$Ne?r zI+p=>NLZiwA^ELLuXJ3m;?7D&Am#g7%C|%>f2Z?R9#d2Doi8ZhU(5|CkCLhfoR?+x z@||5WlBeyH=lnqFewR94Ez{&XH|xYnb>&?RyrUKPt`@ve3BFYW&q$Iy=W#}$%64_U z5yxJ(63*`-P&OublnL^A<`~gTu-!143f=isowlCe_B^$Jf8NReJR&~NtKRMd^)6t>{g3HVP*fX;G|2{^15^vTew%gaeVk1d3IowXp z!+1-2tgExM0yu_zQk|uHQ6<=1l<|ZEoOVKj(Zp^$@7dTX9UY9(T)l#%l#EOLu^4dYg zwhOVdFhe879)&?jiY-iwZQ?bEEi}aLMyg2i#Jc1nA-0NQ_X1;Xc?|=6(Y)QUqxb-q zmD@>> zDt0iLw+flV(nb7+A+t;rahWRO&2E{(uOO3U51I9pxwAJiHwu|^m>1zz#~U*1h0GR} z&u7yzdGEcwROB1Q3K(X6m=aql9hMfyz#Kdc-y^KeBBMF|Kn3jD2 znVW>nTT7UXwe7xPh@pTfvr5Rkhu5f`TPDp;nY0(E7f@zbZ)D0EJ_?hvQf3zouVgL| zGC#p? zlNmaL43zKBrMKr?D&r;LlsT86#y!#jU?i4Uq`MaE#j#Kw*(sC)VLYK%g3jVwV3(H8 z4XynymUBqUO`<<2BgnQ9?YFR;a9XyF;wlso-T*~djKVGuC~R~vfeS)wkH`82DR8tQ zP}bB@yoREp=V_M|ITx+~fhyRsBOxHS zPKxHSxHkq^6IwehZGfWthW0oW7^!%D%jLh_M<6(jG@td?aUtqR@pC~qh? zKU@|5eJtx{gt8S4P&=G4wD!HU>>pu06Y3)xy-@sEW>ZK&VOI#zA45z3^U}G9M-%sz zE+E!fx)=w`4)V5ASNVb6-C4SZ2m%#pl|=1?KwQsb>;%CVBgJ-VT{{U=t&8*$UW363Awt&*VK?WOX5{Qw#cDf0$Qo@$xWKYqn)kU7#VvrEY| zYh+b#WZo+B*?@kyl=(kwo>e~U<&BBgAk$Vdb*0SdCZJyME{MvwKxiWyaAEQdDBpv2 z9X1M8)~4&@2`c+xQE+S@zM|^mtzf53F1jniyeMYc1=ONGZt9Ipd0)OPEpr+r3iCoH?IL^@u0=mSXg)WId`8n%vBi)nO)lCR-O0KgNQW3z?P)T&~PRDycZhE5Fctii35H`X=e zh7tBzk>vcs$mIFOu}T(2C-YoR#5 z@C)AacLurhMZM-Txyq>!sey> z#3N{WJU^Ov8IOysoYy_VXI5iW-|l!H_q==5LS_1^*x?>Q->;P6AaANXG4AG3l z6W)9@>6k)I%rA6y;Xz)HKcQr?G2bJV{(bWh&a3Y3G zE7P+8r^1&feKgd09F7(9(EFYMW)<@=)c6sBV5o5tBGJ^4pJLvs=TtGCdmL!QxTF~O z<@kRsp4TVM1#uJ+KB0*5{~g)m|9pp6j+ri#F^KyNVjR!4lV}x~kL1mzq6E!(fM3HP z96)`JM-Ds>5F@FO`>;SDcM~FFT-TfjcnS6vdfo{sV%%9qK+lNMlVj~W&3S+j$L+<~ z?!VG{4kQL0E0m7H0nPbT5RIA)bcf99P6GuJQ}`Jg%f!IGmn`QnurGiRAh;+Xj{ z%rvKdPD6Vs{BjIwXve|Apzx2OA_C$Qm}fn=f_a}PCSgaZd8ry+6LuUeW8lE=TxdI% zfUWk+EG17F0(nqU9H}IC4-iWJhF7TMy@=$@PyLc))bmZ@pwRP=A_96MetI6C)-#ya z^BBfBop&vHq9Q+s)pnCukzW%L@RkwqW&~5(KkYI7Zyx6J7HWO|r1g1K>qEp&Y_(I> z1$O1m?D~8Hl1aO*PU~|NFfoD{P2E}A1>blXKS&ib1qYmO5Unt1BN#tKbIUPAE*d!C zlmpr~jG&8h;yC^#7(c~0{uub?dmKvb*q*1FLph$WUDp|+20-brThaKzU!7ke1=~y9 zcQfPXxNpl0sG8yYUJcPQU7X|mH2&v1=BhNk&pDrvJ-;w8Ykomj#>!67y9&iuybakv*+;N}vac12UkcQjvMTR zosZJ09a{%Fi$$WX1DpnVX@K*Aj0|+%WF)b}IfeS*c&4ysb-ptc0EIs#(h3*v+>wdL zKSKjODA-g7oIN;`p7T$^aHq3g7E3_;UA{Ak4v4vkvGOQ1|16|9<{cRblpPF7Hem=%N@E-6)P&^Mt#b zb|H*&(NRg_ocSubh=Eo4Z~#Y4t*KY#p*>NLJ>FcplPx3HP#OH>v;tXn;i|K-N3s-( zEf)N$6u;S}7<m zMe2m5i}#iCi91WJn*~IERU&&gm)3h`lL^U^RL&K9B}+`g#7ft=lv_h)#Y(xbr*dn^ zi6qW?kxe|vkyEQtlC9(-y7nkZ%acnhxsb&9y_v-gI*Zy~H;b_i@jcZRWAK#hEXA(albxUfJ5o9Iuca+^UunBw2Vc{^fnFORvMf_} ztCBg+YW{AQRA?hf<#dZoD-D@GZM_UTmxi9~l!n*5C^L+b(6u3*Vc90z^X`1`QjEi7doMw5qV%e@( zZt!F&sKAm`&J}wkOJT!}TFZ>n5Tcell^u6`+EGw}C8?a4%D7;eZVWOtMO1UJ+@x4` zd9oB#U`Z_lG9 zXl)tP#m+-mnXB`&(NLn;2|b^=vfH>)?>vVqN^~}}cQY9(GpttTtaQ>TvW>RKP^`-k zQsxv0Apw|qFMNQusS+jgHWXIEHyCCPJAcb)waK_p<<$N)lacH!{t0U7%x6oV@VCsB z-G*NE&gXH3-LRkhQr(vdbBx)xt%;TX1t?DwVrPLh(vmarj3z zbI4&>7K>}R*j-|w&SQ~Cav!3ShiM?uG@~ubE^u*a1J!jEIC@2rNw;{&WEC_Q-fcqwQd{vuOOhEWfXHqIYqu& zPB9OTrO3{4Wc1WH3j6AK3Vvxk1w1f;!V(iH{@IDl(s#J>_^q>;qem;4yIU)ni=Im6 z=ogciyDv;;PG6WzO@4AVb-Upc)NOq&lHOYzTsO_yQX6caX1!ZWo%*ugAM5_hST&91 zW;Ga+IM9;+^F`sxHTq6l6wSR@@_!m@2ABMwt(N@H#4EIR$0O#Fe>EN?*ZV(_S--8; z``_og-hUd``zJq&LB}|?%`E#b5aWbx7$~2NG0SEixtQNUb(?%~VW@M7K!#u~DI$@? zyOFJbEr{ej*>gI_*Ct<#DX?ym&PAG4Fy`dBNOP@-AWbJCwisVU%amF7zx5rwPsFwV zSM$0UV{MW#3=my~SZ3Y7Qa5!rUQze}y1o^hpr8r)4MW0!sf@jEVH7w-W?@QSL#Iac%)3dA^` z7^fHOUQ_2|WEXF^%)xsAUj@J9yn+tC29OUU%3RN^!b>0`*E3TEAB}8%x1bKwoHzZB z`eMZSVH_(tj4Xh8$aNR5%tKBdLqxjKuY1lAawpG&ADxQ!P2~MVQBX)BBS^uB9BmnytpS5}^GJivr=4g}afJqbl;+v`65QwsRWE5zZYm{oyjbhlCL%~6-(leRJ#PE^ z=X`D1ua({Bv;zApdz#qb zu*IAgNThdC$V9ER*Xj>DnSsGWl|@%UPf zjJ_kr+p7yu6g9{=#{1*9!p=@U{$%DSh1vO@0p6LPin_L5oq=QSA_ z=DdgqbGVcwDu<1kc)X4|3#+J#y50h;yw>T;v(JyK-_szjh`Q-j+MfQ zQ-(NYGE(TA$_O4S#rrBa(m!CELg%wG*9A_Sj0|y>Xk;?o2ejkValcM8Li*JZ=cDS% zHx>8m#0AJ*Kt)p3L!7lj0m{*u)QU?}3Y@c*vg6fpA1v3)Hp#ghf<(tlJhAXkU*1gk z(V*b^q1Ho#f;SGe{xRrp@S1JM1fM^~di2!>hJ>k zb+5>0_j04ZSi6I-CdAuWo_t3=Uc!v?i6kMxWVQL)F-SLnAi}rS1$jk=TwcJF?Dm3E zG+XLLWu#~oDbA7!3Nr~LK0Sv%EFPZj=Vh|OtHn?zoJl9I$JYQs%bJ!H#f$&R`-K*% z&xMhPGNDK!UM2X&ZzTt&+)p2`0A) zbzD!Y`dXOGU5~4AQKHE$EUuhu!ab5(SSUHyN(d&m2-kD*yhD_B@_u1Iy#IcM|1xoy zFtJPUhL2FaWV|HT#=@W}Y+;h)6}+`)3R)D1uw?4f9$qomBn~|w%o$B?kvS30VJGik z5wm#Uo9k$P;Tn;|cDkHdv6Ne=;*}0baFCaTN&vARLbQ6bP8B=a~5%OixNhSay@{4 zfi%x%rC|fPh4gk}{yH^EmYBa`d+n`wYN*`^dggr|_DQ&#rQco4i4BWI$2Jd*#i!D1 zUj!w%QC(K5td@jaaBYLUhMrkw7oq!00HWs5CiTDkrzl zNFEYdVkk|~rnqady0(#}>GlG3tzBNr@&b8}Ol}b^EpK0jhv;i%GF_F|wPJZKY+h^I zk-ft8ak0)VYbz1?T#?)&3TE;a79gHS!Aq6M_V^e;+^T}lAF30OOfd(^ll1Tv7OR%0 z$AiXUn2Zm|C-cY$=vkUB>&mW=O^>UZ(rrT({+`rjAILjCWF2-KGmsLx2Y`sj@sN^=(bUjMSe7kEX}R-CC4A%; zv=n{h84-b{9u*N->L-Y#jm#0DXXqn(-womC*Fl)D^L`OQYA&3fJQt~tL?mtJZo|)i z$7Qi;KbcH2Vdqn140axeSbF>h8f5vqM_xWbjggmWLUZJ0yof-XS`mRZ;}FTsOS-;3 zuJcg@(ZXMj77?U8mTGB#_s_?8l8JnX0YXNH6}NVrGad740wu#7^)`dKu|YW-~De!54NorfWz z)bDL35c&-Trk2v)RgVNOi<_Y_8n+G4Y629iYj(-&NoY!4w=jtwmlJDg1L^LBIUWX?;ROU^>*Wz@d| z+h4VBJ@;pH8tSytR`SMXr!bVYAnSaXQ;%~NgeWmp5dXu{Qw8xf24$RI19%9gww&`p zE@OAWeoPnwqDwH4iN_y@>drsdOiJlAO1y`hQ4c@AhSo{1qSkFt`~|>d%I>k&fSB_Q z0GVtI?fG%$q@?H0%*n8xujIICW;LyFQ)MQH%ULO_DWi1fMVWZ~znOt)1XLyN*g8}! z>Hat};mm|qdR$grPi*DJW%3?I54#kmYrmf!mZxRjEQYuw34Q6A4DVq*-^!en^xUF3 zq0o9ZWlo0m{1-@<5tyYS^)L zh;y+5uHg|gV9r%CQs^v}ks)%36~mb`2y|>Ma9E%mI>gA^Hb=Ogeo*+|FlM6{qu{BG zx%L_l(hWN<@&QNP9mME~h|8rRwU~)|Bz79^B$4Df`iVLHd>{cV5qSgzZO?hE64_EL ztghFIh|Fk{Ec96*KAlLhK7D zJZCCPP>r1UJ#J;pVVcR=jigc$FcUiq!4t$DH^VX>Enn4c8$|M z=6r>@flg23k8`6s5yqQn7Isclvi?TtKcMt> zHZM3HuiUXhoxcvVp#{D-kB!2De(;1yuf1PHn9~8WOwDr?L!LN+AUL6!%ccyjU;NXTa)?Wq(zdPExWk~RrG1fPV zg1b()+D`~Rf2x%{A$aF#>yZ&(}G_;-TLim!7rX}rA{ZME6kj5+4AKp zW91ccbIXMdOIlXO8k$$ESiYjxMS5tb{rolpUegyL@0ts&yfwvn#}64;$fc9TK(Wt@ z2zWVGgcAHMQ}Hm5c2RLh{;Z-xM9;u4N(|wb{4=Gfczu3#QOON~>Y{K*K}}Iv{=G$E z0M$jsQ;G`7`!l3Nn8H7RJMv?LiV9~8t_DY5znwV3#rz|#=SMXGum7Alf?xXok(Yhb z^K#xb^-+=YfnVe4@jCy^ODPeAN6|qQ{ZZuU^Z8SXN^T0&7KKvx1}Tytw>5)lw4U8b zkljsMgyXdiu)_`cQ;!^Ae?D+iK`OX@z>JQ8`B#iC&VOwXimrNa{x#g%UX;ZPj36w; z^R2J`C>W)GUD1ZT{AHf{&lp?}KI4`Cr=QYGe(eJT_Z4|Etj55k6~?a}`C^#NKcbAM z7lm5}6&2SMAu}=`+*6XF2#*N8&Bs-qV(r0I;Pam1_Yn5t5d3m%S_7M2GrBnN&%kIa z|MQ3x70|lV1_u@dM+?2VjTwWV-tubhUyAns<_NX|@dyD+*TC$H0ZZ3jH!dC^vq78% z#8(t@VBoCTxgj9Fw%~n)EENVgc7i!A4S0~c+Bx*V|h6^Gmq5MOri!iVRAKms{m zos(pNbPdi<77$;E$i{dUuujbd1wPUTKg|a}-3LF@2NzW~=UPB~p&|!{p8R4(ZU~64 zSa{*%b3q^hODtv1xfaOzB8nslh_7Pgkb_TUE(j!GP4dA-t;x9-5MS8Hfx(Ag+{g_9 z@f8j)ygC;I5|DR_oNEE`^^P1E^xn7VfcV0P7ya~H5JgNc{%uOf#lZ5 zc>nusGJ08v+(v%iIvK zhU9`k0v0w5@CX6%h1A>&0gKzD=7xai?PcR3`}w^b9mTBaHhj```?J2JXfGL^MfW zcr)-3#(kE3Z-%|VDYr_Tss1$L{7&|8<34+Wy1oXu7yobi;1BxXmi(w0zqHqI@yuDV zvl<$j)~qQnFCS}u;VRNJD^_0Kw779aLu^H3OKfGNsdiQ){?tw#TU$S)>4F)v#x;y? zS-GNd^n`KN=;+k3{8KLfmXovpV%*uv_%a^qY3&0S|makaaxFo|589k7N#x+Qj)YjI{n%dw} z&R3DuZp*H&btUanzP#8SJYTE*^R*f!i+n*V&wP0e=+um5iB6B6H>En-aNe|OvubBI z%&wjit!+R#&%W>gzECTjuzcK#wq>!FrOk4HNb)0v4S#DNr;;QB*-YNXsG7s-jO*Rg*CN$L6q6XJBG%syk(%978a2YFj zW80d@xwyaaYVE3;*7IgJSTz@oUeUa0G;S7a)-<#>uUNT!89wzGySiaj8LIlS)odP` z)-*O;)_i%(vWBL{Skq#KtY{YPgF3?(pY+u^%ka_Lg$)-puWVb|EL*`3FFz4iehzf! z_b5SmJ18H^7EyooGE$E_#H!g1v(9Rm6&qW&X!(lOjVl(W@0|^?#>-`{d^#AuVqER+ z>ZQ#~n_92#t%ZEqvis795*HRac!Bg+oJWDk4wG*q;^E4*O-mw&)`J;e>M zZNmk#%XsJRN4*-qa&=>C?FF;OBfY2*jZ2m+M}5GJeN9tyYpiAYGRfF=$49U7f*Jjg z$Nt0Y$bmZ;LJw67`;#X+$D!#qgPIQz?+qD+D!Mf*G}u9jBMCUr#*m!_@;L`2=4~I1>ofi$jkp~ zU+~R%t?3K1XKAPNobnY90_A1mX|wUNmR03r5ntKT(6pp+<;sTG)ve79Ez1@ymlYaL zpZ!EYi_XYF$FE-87(+LoL64kq#PcfrFrhAj9`BI!BWq;WrbJ)Y>M=e#Zh@tOE(KC=iS5a%ek#=lJvfw-Bk9|%-_H+>A^ zn*Lselm2`I$1dt3xaF4m;1hjtJznGHLwhl}@v|kIgEQ|8ZuVGMI+Wuc; zrVu#HW|qrW1S<1umP=es0l4k(4IljP25$PvAT_Q>KJ)R@`dnq;rvF@R;GZ(+Z!mDv zKa&Q|ITp?TUIRDj`E5uB>azepO~2K^8x8z)#2I+mv|E`#bM5v818+uL^Z&kqFEa4Q z4BWH>*FiA2%kg>%3w$Bsn*W)G{muMN_rVheZtC;2ft&Ws^aLWq!@}>Q4%H)9?17zd-q|oBkrhpH2Qx`p`e?L(f;K7~K4$3TL^P{D0;{-{nL9 zDRqN)^XI-M3~v6v^Pzvnhn_ELFu3{8P`I1_j||)_cYbn~fd>%Y#RH|_t14?TC)XP~+!eY2`}ZvIyo_0gn%(}(^YANoa@e`9d-zf$3DeRlcK zzu-gvIn2K?kPqvWZU^o(aMS*LDUX5lCjLhs+-zse`a9I9@1}h^6zdSG+&i5a-b=j#S; z%6-JZP5Rdi+@wEBJ*ZQzNnc^$CjBJ_ZqmmM+@$}$ft&QdH*k}FpMjh7$A1h8BDn4I zNdq_O7aO?A|0V-B=^r$3lm0maH|YndrEYG0_%&Fqr%6B0z)k+2GjNmsZUZ;zA2)E5 z{%r#{=}%At8Se6(X5c3M5(78+-)7(@{VxsNq<_W0P5Prx@V3u625!BNg~7*c=O0zLyPe-- z(3|;s)u1=q`8N#QZ0FxI_?YedNhd>T1p0%?|5O7vpV!I_d=Ap+@|x^}Uu@te|CkSc zy@8wM`$Gda`D`|Dlm1~JJg=0w&CPGv2e0zMFY&>f4cycxZs4Z=clzLu_~3u_!2_pw z=WB!y&ORYS0e&(3bU7|SoPoHh=ZVI1km>)YC_EqZWZm_{X`#&d^hpPw4fDQ5fd zh=H5-dBWgh+UE}jZnmFq8MtYm4-DL_zXK=?f%=>6+dP3vd?Di6K1m<^XFm9wKKKY@ zoW$h+|221QAy!pk_^1??T_(aFqRT0?CaRNTH?^pt5+|$i(#@>s%;-_8amHrGP`jy# z1w}zOd}$b>iv-b?M6sG4q#gKTC(s_XOw-e6i)u#z(y9WdONPyP`<1Lp2_`(2R72sO~ zyeGi-1o(jf|2@FlP8n=pK7V#8j>CzsFIx!b^XK!VhtHocEAFo^?^F3^v0?rHQ!3Bb zm(K|2>&rgU(@uJ(pE?*9UoT#*OXGV_OXDx=14#7$)v}qNlj(PQGvVh1_`CqWE5JJg zd=ud7rBw^>(*xroTiu_qS^mM}On% z^#a1Vzbz#_+~4j|-1oN)RG$5Ripq0;+fF$5w--oHJH@q|aMr(%aIS~%0{jr+i%I_p zG|t2NX9oE40N)hgZw2_50sbxF9M^Azv!6U3#rOj>PR00R0sai(Y*(r(6Wpe3luZxw z>Pj`>8?qAlhwTTxiEuqlW-IZ~?j~Fw{lr9vyR!1P87OH{^U(j8<~af0NK}@ z%aAJwH{SrEZ$MBU$A!se%>X~yKuLQw4_r@;8PZ3%o&qzZpYYQ)k7ODg7lEF8vt0gB zBwV|2w&NngwQFSfI>N0EvExm`bx15L{~qBw1eM|agzFGUhT~sEAn^0tESG=G0w99q zyeyZ0%q9GM!nYBw*=+Al!e>zV4+)=1_yFM-5e{%ryQQ^I z>gw*y(>0dsthBY1x+@#H3#FAU-7SSuYgbnx14`@L+a7$l(zdZQI7KZnT`QZ|E>oUW z&1ee4+-S99X~w9v=Y=~E2tsWr&0(&^6NVSgO-xOw4dWhzmZ(A|;L?m_TTDbhgE|dc zCoywze(h}>YYF_Bh|4+tbsMK@VH}p73_necW^QcaV3xVPGReBeY5zlO>6ltxy+YQH zWs~G(?L=!^1t;BO>cFth9Ily5bcK8-b?r+;e1+G#T4W3s6LF5;LJz-^$j5sOEswQ> zg{@ulu|*g0hX3Y*J+3QYhPKs2Tc1-(wdaI$a@fHZEKEtQix}56GO5OG_}^FVjL@hP zz`39?Yr6d!%@I51nf9!k>B+|l#y0cmsWJFU0Z3F(Tnzu?n-Gv z^PQJw?_SW~{gpKjtdiB0l|pHCXUF<=HXiaX(qw&iLKE?u#XK7>~W8#pL@+9;BO353~(ui+krOdyo2L3j+YvZPf ze|Zi3SCr58SJuGqRX*Ft^BarX(kT8968r~i;P)l?kJP~5pWx#;vH5LjT z!^*cYXS5&sgxR$;vOkdEV?5n>mPY(+KwZkS{e?B~r|S4G^D$m+b}cOmhN3*?E?*0E z%J*aU)}K%Yg0X1mYLty-of69mqW*B6F@J2#`vSpWN{4$Tm&qdT^@ryNzW!bmEM?!G zBgpO{;{D$zdsF-m)c@iT_Hh6EWPi$kd)af7^5H+G9DDzN6%3|k%f_-_?c+Hni}7`L zVUlE!_x<-TE${`CCGX?^TdO^@fqa-L-MkEyn1-}*0(lgz$TyvKc4HN))V{h29# zpYm@oqNcw8EEjUh|DEbT*FT;EdH;I@`;+|vrS^STO9V*yU#EOr^H{w9SeKUa|8S!I z&lg4Bf4mPeW&fd3`hTO8OY!l)?T{Ptr26UozfQ`f{9pV;PT~5;^Dyr}{@Xic|0A_u zHLMv4cZggm##8)0#8}R#;Z|~8B4-oJFE-9Dt zzfb+Q`xy8?TQ={1g8=Z~x1X)YE6P3=-+mt{AG%r2(n$rVGZyVmnN8qdD&OBf+{%*@ zNP%zvH8Ni|RsV~XZ|@s56~6vf2tQSSUvJJC1L`p9?`qk6{Y?@(srvgwZ(J_S)l@$% zegocCzK{QqzwuFm=g*&(j=x{|_P$cH=i_e_ek%UHtvREtlRXgsHM05m52$_Lf2PgN z`Su?O`M2Cx%OmZQA83fl$KN=QOAY3I`=2S3R7T?4`&UhakAJ%GQ}GvH${BTP5b<9x zn~(ovweRC^zA5J)t^JpslJ6?oZ|{vY4L<(gg`bLlmi~Zl()s9! z|3=w-{Lf1NfKNXDdH3ZOcjZa-)B8VD97^%CMSj9MyUNTn-v8T`KgD&7;{ADfyU#Q= z=D&S!7Je%J4X@`VnzSI|Um%eg7n|U+l?Cm>t-^MK;rC_#w4F%M@z5M(tzFhsE08(w~*jWsvVtzQ>Jc z_@Bym&0pwM{xWwTX#N}ji11VGKS$%Qr{jN-kc@Bf<2Si8k*O~CW=Y{h6d>{bN literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/options_description.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/options_description.o new file mode 100644 index 0000000000000000000000000000000000000000..6ce519356e5f19d95acd5ab4d14094316ac50c35 GIT binary patch literal 161248 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 b&-T9w{n_PzZEc``;n9J<`9GlMm*@R2EZA;K literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/positional_options.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/positional_options.o new file mode 100644 index 0000000000000000000000000000000000000000..1d070d24685473c72e3b1360176da3d47a53a258 GIT binary patch literal 9080 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/split.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/split.o new file mode 100644 index 0000000000000000000000000000000000000000..d1d87be6e6c72ccfd6622b427a58b33ef7a8cc81 GIT binary patch literal 50800 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/utf8_codecvt_facet.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/utf8_codecvt_facet.o new file mode 100644 index 0000000000000000000000000000000000000000..574eeea41ebc786c2d4de6adafbca64aad9c4356 GIT binary patch literal 9392 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%0DVxRkdhgecC)Y$)+h4p-7d-M@e(VI3D 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 N-uyzmbgx?f{{!#Rq7(oC literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/variables_map.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/variables_map.o new file mode 100644 index 0000000000000000000000000000000000000000..8fdfbb773453b7f55e4f7f59de9d0f65996a8dce GIT binary patch literal 78064 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 HZvFoU`;fG* literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/winmain.o b/external/bin.v2/libs/program_options/build/gcc-5.4.0/release/link-static/threading-multi/winmain.o new file mode 100644 index 0000000000000000000000000000000000000000..1999baa7a99b1d3c87de32d243902d449134bc11 GIT binary patch literal 952 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 g0V$jLMLHuMPzXe_`j2Fmt<8 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/cpp_regex_traits.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/cpp_regex_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..9eae2a56579e2c9003fad625413f7c9e1965bff8 GIT binary patch literal 9168 zcmb_hdvF`Y89!Nm$RU-Kqz#6&Q{*#7>~K94p?0BN#gll-F67&XyXzkWR*d z3^mveJ`|C3hUq{2(bDNm8K94uQku45YD!|4GHq!(0~v+_1I;AHKtiFA@~HZKd%O1L ztV^irH@@55-+hn$9=o?Ee4NQ=!j#DUZ93fNppTr&z898=p)v4mR48{W!&rCbtCy$e2yRVfPQ^aWZ)onJW zj+>0Td_?k$R)f2waJQF?l{};WuE0SJFu8+;o5A%^aAjZJvQ z?}3qLB|Zd+joxp>NjN_A)6=1!(u+8T! zb=HxBX-R1*=~bqa1&|={I7W<9q`3H8GIm%$&$DtA#9{hRdCACxqjfy7OeQVQXi2fLCMV0ey(q_eVM$x(xI>N zJoUoxu4S^6|0gNrT%<7A;Q7_!?H?Yh$iFgt)S)jAbz*_a4MLxaGFst-;%Zw+Gc{QLa}h>b^|iFqwi_%J7`PxSr+Ot3a}PSs=Fg z>ia$EDqw*GfFLP8;Twhl&lE9E5M!G!<5?ncKF^X?@Dvnd1ba~`W(FL}Nhw5qL@6YE zvDy4W?vcCq+G5iclcO~K)Rc=%nF#}HW>Cp~h$YfD$>ruFrRBKizRgfl1j6f5jJIGq z=ETdezV5kCqpVOD#v7bdDMoz_#CTURjxm?5)xe+d7Ng&*w0y(@A3Oj`p{AvF<5;_K z)KoGykzX>i98%maNoJuy#X#YV9?qW(jvR#A`1I=hpQqpZtW??;^gOkE{2}W2bUOg3 zABq+d5;$yXgUTHS8<-y&R~X|e0WTEeLpEy~?}sSgv;(yC`+0rM)#3x6T5EAS4XkWE zDn@DM2~x0>QT{4YyatS!De$apg;-lz7K)`lc+( zQw71E-(VJIH^8@>Nns5>6gEJJP+$Vn4FzuIS}9zKJdl8pGz#0yV=y2lMvAbv85@*B z5|E^e7zxP9$Y-8AZ-Bcazk$k(Zv>tluF1-)AQ!xRz>Kg4pGK7<2b+m;#9V{V?jvLG z=zo~Gbawq?s$H-ajn`PVoh;E{6%D+l81J&6;v@#gCRiM#K+{Ev zA&`A{GUSED{S|bR7$J#Fg|;Y@pMY=&!&@dDxXNm@tmAW>+)bY z5swPN+~xB!*LV5qSkGEnAwDU-q-S86z!EaqXM-ee!ShO(t!2?!+Mn4iNu`Hxb9BYP z!@UmYiCSsWQT0--y=XJ;Ux}NBj~?fzGn{QPbH}*74A!DvYwXH5K}p+<#OQx zO^$^1a3VdhUY_Ob*tl`MT;J1|Pw9C%u-d=c-*DyHJRLUP)7a#1Xj;W!DpCn|FI-?* z>e$*N!P{a2F@BKwD)f;YcXcXVl4HnQ^DquqtXN#*+6S}08U{W@fOHt6thCAPEmm~6 z>-IQAM?voCut74J688FZdJiu#e4C47oh6~?!NPFO-Izecp zW_R_Ts$%7X&b{DfdBTKLO7E4*J#|Xevp4{e>lb+gnYFLl=&6Pbm(#z+2EV}u*KF|b zBMz69p0MHnwGI9!8~jxp{BbZ?&aZcXf2mNPxR#LWVIh~}@3O(aWrO$H;6JdzkJ{j? zVP56tld-`K8~n#M_(2=o1shyByXV{B^)|Q^$z;^5HlPiudNv%_bAA9M_2#W>`qJr~ z-jdbSsHTVGiNXVpY_rx4W!t}+3MaL;HIbpAKp-?IwcqH^YW;py9T*x?Gg>y6PQe>h->D8ZNNR_2 zeOpjbuivz(JG4#R7Hm^OD%j!Xt<8pT?=(3lTuPkMlw4kR1#JP z^5JY$4M*Dv|K((=dr-DMi;E2fo9BRRO=7t6S|t)nbN~Up_l{*!Gx9qfoP(0fstL8 z)pA;PPzxm&7COv~c~%W|UK?Rb0;{udhKeUORm*16SuEmf7m)Q(*-*5=-jUPP(=32~ zD4o--n*LZoR)XDnV}q*dv26NI6(TsG$IO|63m^unT4tZ72Vg-`H_V3%@FUOwL5jw6 znRHIW6+mmNPaBA*a2JZi7?RcKgxCm9|Lkepd>zrV82-KmAEA_{1bn4{&j`3I;9KE+ zj|AJibRk?^51vJltat^y7t7%{3OJrlxSlA(vB9$k$M*<$t$-gD^jsw1UU>f@;e5Uh z7uU1i2Hzs!K7s#M0T=y^3i!nWe?q`75%9YOT-38yz{U9gUBJcoP=`P-`h}-Y?pFi> zAPfhdhB+Q%I5w9G_-=t8&+MGPAn@Z^k>mRWe1(8NCg>6E{!HK(?fzEahgbZp{wWK- z8lEBj%?5wXf^RX|r5OuOKf~eKM;4r)xX)v9mqClCeD3dBhNBpsTR6`3AwPaCaQp`7 zBO#8z8*|)15D4|)>6zotBM5}JnBSumouA)N1sqTRT#u8jJFDHL0*=2`bABJgu}FbTtC`F!d6@_JU@u9f{XLxoRO?JuNTBc z{TnFveEtp_{CWY$m~y*$0T=zcOTaG|_~9oDN;sb@;Np5r)cpU#*Z2Thj3E-{Mf^(S z-)o4oEdkl20KJ?1XoFLXb&ww~PIs^lV&Yfy0RhML$mtO4aQ?p`e)B1K1)~Y=i|ERx zadtTWfIk596Nb&=bn~f1e213UDb2G^J%cIyzmCrsC{V|bY-PjqxzEs_M_J$u9~3+w zk(?e_%i=);28r~;=R`Q+Khp;ed{8BmS_*0aeoEB*@SE0^^pMNO1F5_}lZEe;tPX*t zwV}n-{w#bzL7cPce1;d=7i({Y!o~gBO05jw-=eq%@jS%W5O3||JDEJ5O^{F??Ql8X z+R5L9LO`NCzAv~OZ|&rJQ5Z;+$M+VO%r?3@wwa-Qw88!1`}-w;p?z`BgQ0Y{xJe0Hku$KirpD}8f4SuHy!|V%m6Mm5yj3rsKbJqswE&dO)`CI+9j!%Mox%z*U zC5Yz<^M^}<%X9ofu#59=FsD6xA7_ksrVGFg9!tgI zzOVe506og&F@Ct$a{D}f=#SMliu@cuo`ITK q!CwG2^dk;GY!yvx287 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 !3+Cd|Dv< zLIvU6$AnF&MgiXf=~kTxgNrdU>HQG6<>)u0(ysFJ9Sx$YbEKAztY|=Q3fCgdcFys- z*}UkO{LcB|XmE6{ewX`%+uuN@eq{bs%Mz32s+$E4RzmRmqtPo{%t~7mXC6e*OKeK< zFZJ;*F)R1MG}Kp^hcNniz^GbCC*dxAq-^IF(IR5@!OA=j1L-Pr9vtX-;9^>_^Bb|^hp?p95&OfxU=dDjxPt8^zk&<-hVHIOd=1ZiN8MPs`AJLXy7P| z`Vic7*4Y4ZQ6*``_OU#29Hb77DwcP+h$lh3`Qfd=IFog>6x6W1-`bF1~=RK$K{&beAs$eq1Ox z>kp9gH&C{-;3H_??6gyhEfg3#8!}(;-~IdzCTIN(9244E$e-tLFbL8tbWTff?=Qi) zoL)xCTH5PbL9{-~{*v=J4Bb(vJS1;~65r^9OYv4;{PV)xBGbO(a#aj)OjvW*W-n zd%gakaYGsZA0*D-uWQS0B&P!vYHEtlqgVV<jsCS5+@242cn)>wzc zP@rwTE+?DULcoov$@HkkenL9Q?K>D_$QEti6m$KARKc5E5nz`=VtDXJ>O@$aysq+t z!8QMc6NHqV1CIsri-6mJ#0}u>2)O0EAijW6yxV;R)VjJp@EYtK+~?ns^TXi5y2FHf zg?F=@Yy%twu5_l$9-{?35LQI93*%(vu+ZRJp<<}E=Ad`)LMH_j375jS0{_Ts8OT z6|lE`M@G*uY3Yu^#8D)QcuS|faNh{L5jlz0RYBp0F!tFQVb}`W-GV}PU}ZrVJn3@B zL8Xs;0j(i6lPW48S|d{MyFjz0De2pB*XqnQA%rbv%PMx0i|yDs*ruF0-2w zs#ss+OrYNJA@LGmiF57E=$AcLje~ReSPHpK6Mns=b~&Vj2k6!@t&i3_+?@`-S)A z1|33^X$(aVVSk@Dm3)H*2tA~{QGVUPIU^`zv=?7JP9w(=&wvVNEa3lZRJ>qx>>nJ~ z?(No7b%WFjz=>ze+5ypsYk~R*);yNAq7~~UI{~sz_e*Vrzo0|dabmd|TO-g3MFKfB z)=9LOf}t@>RE_5hhPvvSxpV}lQj5V^%vz|~%3U#C>!Y{UU3gOBcEmO|4uB_Z+zufG zR@8=h^?~;yAz0sljS%Dr<;>r3uCnlp=!+aEN8bi}crGq0ckpuG@p)~4@p&P-Bb~O_ zCy*lt1ZKKKJ2ufpZ`#wxyO9e}SMj4Uh-DL?pXa0>Mh71R~uNQ6jD*ld@OHMMO2T*wRE@oFa6@n$+;dz}h_ez!B;4BT!z z!=HsMN^KCaYfeT~*gYs?L1|}Aka4IgQO;By?QhUZpdW;%S3&oIU?F_v#6!DoTC!#u zO!>+3^LUx_Ku6(A(*`%Xl5@+GP^4OQO%S5Z1WK5RSG_zfH$gEq$3Dy4%N9$?-w^M& zswaIYMiG@=tqfG{{y&-7qQKN15Mphj>Cc3LE#R*TztvdhOvz02SD1NT?$tNS=g~n~ zedd=E=m$5Q@y15}&(Kkb79!`r(VPRzai?<#9GF=B!7;xY#s9ssN4-cJzuih#&IiRT3Pm{%-Hs~F=M z5kBTaaYguurAxyV9ePI^FmcV}rCA_Q(6KNJ9sdAO2ybKV1Fl2cnm|s}ETfj&Q?CVFt*PdSqOJ?5QhVii`18ZJ1|Vqr+A77 zk*Z4NsMMQZHB30?;Jz4fl5mfKa9qg+8go(JNC&ZzP(VjBx6=e4qi`J0t*o6gx3$U< z(~w{uI1@_}SJkW{Gz%fM3C%cy+L{1!Ezwa&8xNdWm}ZdUti0twI*f9$2;#&D;P!bQ zB;&Z{0UX0Qfysp2w4jxos?)gi`BGNUb6{J#2j!@)uE~KaPU0Kak=Zy9zh+xgb!95- z<&_z$K2I%F^qIj+Fn+2~c_lw#^JB1Wk(cxoMjgW;iJ3R#!cW#^ZTTcAxAxe-9Da5D z(U;1Xx^?>wymrxyco`F_+C_Z6l!ocBQkwSw#}R(x?YQXXGwry?%Ry3 z7JmeJ39y~xf*8)unO);nARSn3+)Dggjenc*Z)exIZYFn*d(W$PjqByTVXAUd50$mx zQT53BX*=$DJW^_MX$U~E0+J(adTYy88W44_5;v}>kNaUrr>x5$Op27PG5}(0>dn1I z1-3)o62xq25nCQETTRWQo%R*96=SAdcOnYVbK%*{eYT2wD`LDEOAoZ;TkX0o{384v z6)Lga$LXh?PU-;@5^edLBlrfo)GkDCfc5@?CcM&?Kh5OS1aJk@7_bTa9j46OEUF$* zfdWd^z@}&yddRX zx+dXzyBsv2b?*1#VNwfz#;?ZD{j1gMJ9%gco^N4T&Ub6Ixl4A=&^q7u@^%u%P4|*a z@ag`Q_RaWqKHj?(kI0%~xwrf6ukZBOH@8>XH@7t52KjbLKH37|;aNW1!tDbdwn@uY z;%+nV#&4Yw(mK1O1?%Ral8{!iW(BTwTFGj*8rL-~Dt+~4^}LFWM7~wM>Ukx5h3A!w zt&jXGSg+PLDXFzx%UZRz+nEC*&vh&rIaf5QXBiiy-^-GrB*g8VEL>|Fzcm>y8;Lip zLuP$i6d_3?f#Z*oRU-M!83&sB$TXX;3y~v6s4a3jnH= ze5nFMuh_yZST*$tx}duh;z0l^FeqxzQJ0Yx;>P&M8}&(ywQ_7qzwBC;3Z_gX~LU%c+-^B=i!Y{ zi+|gG(~MC~0wdsMb27<0ydR>)X~&2%*U?rFSyoDxHGE1Y`G8zQwRo+aYZYI&iJ2&% zi%-eq8kGwkXxz`Rtag=aD=#H$_>@fY0c8!-;>20Vb^i`rQPyr=N>=kJndAd<;aCg$ z9kZ-%zHYnTgQ8IupU`+bAlC>j{&SV<{zATPyS`L%t>#lQ$p_>r(&EeQvivF+4XIHU zpOQ(js*d42q>EWwwaTHZ9DGV9`G9gpMowp|8&r-a$+4PG$s`|;LyPzU!p(SK#+iK8 z$|v-W52APU?yU!^B4)v%QHP3+{O&BDN?{z=LT%Yj@&%*U04fiFUl`Bm#ZkpwS~X3? z=H1XjTpYqWdJp{UF(__fB|f~StQ}ZBNG!h<8FXgAo_1lQp1N$NY*q7$jDS^MC>tnM zwqgE)(?FdLudbb{J`~AIH*$K`pey<6T=4IF;mQ0e%MTc-hu0uQlGD>+!td-eML-I1 z!F9hPo~6b+ zgad)<>Olyw`?whUPdDKp$9)jOL7Jin2R$$wNk^I}qMRvo1pabY6w^Z?U@TqVf}t>$ zcJRWaJBW;UW3&KCgOK1hw3@%aB0lELUBr>^)@gIECi!^J%Uh$BZ|)%O;?1o@TTBnN z^YOdHP{{j+6n6*FF<<^_rCrcnTkV@WJSrmy2umR*WyV`8?VIm5srR5MEOwrH0#U(} zVN(^{h8(hjZy%V4vH?~P68QrO|C-&v^}!aE{%f18+|6Dg-`zy{c>iOz63;)j$;$WH z7|07lK<8~n5z_hTF zMPGj1E>Cywkjsy|aS0{wR`lijeiWqW%Y+rAFC#Tel^>WT-Lza zlMgCFGruL2JO_kk!cK$k%Rd8&;W5{ZHi-eS35hXcJ6$AZA{ZW=rN`}KrO+9Y7#s~x z;)I0^x`gAqh2D?=HE~|6F&H|@POZ=#+QQIGoUfWo`A#SgUV`)-0O>i}d0EMqK@uOl z4B{oI&jB0En{~bv`h%AsKnFm8UbbJ(YvN0gpm|Mr2^w?&G-#9avKcRh_TYVUtwV+m zfDF-Xl+9Y*3besoD{%$lN zrIJw|k&#cx2*M=fi@o+Ei5W?aP&FTskx$5Yh!&4IRae^?T@(r#6^S}9GIGAOk6mYJ zO}L_cd_*Qbp)@TLklvCc0s7Z8OD3UE!K6H8O3Ba;*V;}8uhLP<_`%6guU2C0HUdv0 zj?gJCd~WW|45hpt#-#Y>5}3ZU;n>eu7o;Vdw315^%Xt!1rn|k-=QHb>&wR(7|2zsF!#?-266Im^mei6oND7=ICE?K`+6WBf$`wTtjUD{l3rn^wqWgIsKRo51?tCXY-U zf+3(N?uj(*{|RTQC^m=-%MnLDXithbbvyT9h!!@=1EhcRk~Q-rHePQ0Ft(7e6y}Tk zST3Y|Bjh_J|C3uKhuD;{B@>%6bDWfMy7jvjb`cQwmt)XV2NpY*BpQymn(Exo ziR5r;Cx=XGXJ~o|&G7jS^}Nm1sJ?PUd?bGkeA&Q--adHLmdncTz2l+fIe8*np@YXk+*4rofJRms-JL zfCNtDa(NQCcS8?zVMv>ZkJWtX);%qFpc`5VA{T+TmXkr?|IS8Q3!9v2XmqP{5G%-@ zonT(_fRhGMN*EIo4tyM`$>J{r#_&rS1`m?XYKj;ygUN@`?>v_p>w+cX$5HGi7sC1M zK;&xRI(@0E66tq1uuC1K%CmkU>QW)Fm02d(2rTE(WpKh5fgwh<1YwgTxI$l<;bx8y zkOxN_`5ehTRIBHK(GmM2RjX7;Rw$El#t~Cy?m5s#3Qb|_lnL1ckUn6GpM^3cZ| zhQankt9i)DkN6H^!ui+c!H_K?Y==0f!4VO%En+H!V^1#SXKQjmrzC@a_+*m7Q*97B z5gO_Y0@_lJq>zrh$S9SS9)r;^{h4fA40&gN2?dk7W1i@rGP~5$?z^sJJ)PyKOKD)f zl3->@z@D6Ke0s28k*m8@!G5UW@+}zg;jF;qK;Qh}uwZJq8MQ50twpk{1m22b<>d6AO4!Y0tQ=QzwY`p_SUFB| z*t*28Tj!NhQG0rp-v3>CP8O4AuTpQ`C#(_1hJA5uXvJlC>Bf~vU4uc%ZfF_882ecr zxXFAG;LT%yrWb`6vOuVedf^7{;|bjF07_+lpR)ZvapVOiO2#w25HA7AjCSW}v^iUO zE$YJ-;JA<%!9e}2mPJ)T?DU%xj@Dsr&IKUKfy@FTXKuN-{GC(!d9 z2kH7w8<@DG0J)&@fJwQOj|NZ*D z-wAzo>-)}h(PyRaYv;6*J}<{slkGv%@xvWRHcy%%1a-sqnU?|v8}QS=S-j6)^l&5rDT5dnEA`L5eZ4q;%ycO3-Zbttk9 za_>5dz0nicc$#(XMC-V2#uc*fI*7jOAo{M`fo&}|dglp`qOBnd;|S9u*qJQ?uW-ON z*)q%@ipZPNJNIcjG#G~5n^T>~COGHq2#wDCrq#fne+@FpbG@Y|BRxkg5%LqM0-Aj< zK3{*(5qaw{UV}Lw45wh<5C*?NDG0_dY@WV5Y}It*3g)A&rni<-#n@Zk=(F6?$M55M z#vm3lo~Dw|w3jBoZp&x7AfI6jT}OVAMa7ul`QLE13K;EG3?mhIk*9E>eJF1fCJW_Z z0?`l%Qgpke5W)q`!db^2aTDoXQFNJAd|@+_3iH zb#}OTolqol$>sAR{>WVah0~{BvS5M#!a4rvoLO^bMP^+%`&*Y>?7wL4+y#+SPrdxY z$n=>P%)ewobarIH*suDh&%SWMf-hkP)E_DFR6X?-K8b})-U{Wp1n^sOOsTnL%Cd%l zDkt5!=Dp8r{HDya*y>0Z?TYOS>u*^SMvzvRnu84(8VQI=1vELGFdE;=?ewg6fXCYCygzq-hCaOqAcOOd3f6CEI7s;t+0~ka1qa6&xYDG)4pZv0VG0V*l8*ql zI4sVa8h`uPBd+>PI0eNBQ`(K`1ubE3`&SR_lzH!|Il&t}DcEvgsuuqmHW=FVp98hV zbDb7H3eUI;M-K&*4eF{n5zjzh6H7Daw(1p6%X)xb3A;@koZ0ihaK6D{KVvAo&w-~s@;1H?Gj1GCqTIiKfrs8$sJX7kWE#!t)n0yVQO<8;lnTJ#e z+&B&yYzqxC*SGH*+Wz|B)XBxM*N&@rTB048FY+rp8bS+7^sGIqZ@HPDkw0Hs)Gz%y zNtf2U+mU8u#VmbWOZ$zycBUuiy&u-^{eR@Whebo5??<`cWAb3ZIvJA(E5j8SvX-j{ z!9Hk=7GKW~G1?dh&jZDL2y{BboLZnZr-}CF^R>0z>36gEX6-cOOz+A*L$pz7cG_#P zTnzSRLPmbQU<#~%@ja$3^CtVmf-$qp3ZrSkU?K;=+-Ym)9Y|9T#a1{AiHfC7#?eInZc{-XoJ9?U=Fr+9(T*3uVg5TGRaHovgY|1p#Okzp;T zE<#ilCW#Tq#L|{;9heq5T2Gz6-@$7D2MBy&PvUK9_D;ijeFPZ7$l5Es=?q$9(|2Cllm>?m7K5{jFv!~;DCA48I%Ffwkj!hFk&^y4 zO0)ZlN9k+2CYPp)oLHLvGSYIxg3-zj%VBsUWjR2#b|DL{l0w#dF`EPj35LQN{;U6- z{Ur-YAffy}pAzUxaBV>(UMXjqf2jZqgh80&{dM3}U!5m7VNz8DdG8Q;6vivf*@o<#|w3*O;2BEp0(FC57?{fvm-<_CZu zu|F3hA_z@rt~;$vbip(kvWu~UqKRx?SAijb5u zA7ZLwVf4SijtG2_*bd<;CPP%`(yj>BM_F4Uu_1yv4AjY=njKNFmyAwvUppc^LjgRk zOzUenT1K1yk;X*UG!)ix!n)L}|QDyX{KfSu%#tY+|K1!xhPLXS$uM|wXh_*h_zL#9JSOQIliG^iX+DhHn&9W5-0j?GyTt>eHtmPBj#Fr(E_c0|;<;^?4(?1&n$o2mu! z0`op9Z|j5jV<^I^)9bA-(UPbUyQMGe!m{%2Q*3dzq)n4vYB ztDcY&bkpvlGK+8KGyB01Om+luqL5~1D8%W8d>VYzbC%;u4K1-l>4c}+wpa0EsnPI- zh8fm_q`iN|4C^?@467gMP2kM{W>|BOOfxK-^ui2lqB6sptw^uhlPwT^D8DhR$2diJ1nt-f|ZDv zVBsp`0Wj}tie;N%Dbp*^QZdB>9E%ASu42lCr9e|GnqWEhSTM!HgW5u+@; z5qm5WZq)gY+hK*0^INpGlVR(tY_VYLJAXCf;^&OA4rYr5`rOA33kJT^xY%twtZLd} z+4LC@oVCLu?1F{|-F8^C&T0&&3P`L;yqgF!1DIja?S`)gG{ZXHc{z|7R-yB9ATz8C z&?Ji;&J$ZR>Gpu{;EPvGui`#mZC3aV|HByAUzZupyoQ&owx!Cnv(s;qoP?5g^If0WjSO`Dj9 z;d7UH*o*0XJ;2e~^RKY~%Un-*^h~_#$A(0|BBU8r znC+;;y2kern(f+juH+N%Lv&6uoH^G2@Ct`?^8uPgQnF9pcaRWp;fdpkWqPdFbEzYt>U zh+|v2^fhLIixIqq!3IpH@)quW=5%a>PSI?KtB%seK?)E&%5SnYBVF& z`?5zbT(h}@Ea0H-j3A?s{lx8FLH6=8#V2GAqWI~iEj_-PoGvX&a8|)#z_VVynG}Ah zze9IdOg24=qwRdDEm#%6t48W~$V{RF8TY6Ae>X3d;gFhLL(SXF@ zARBx9*7_`OTo>%-SbUqz3Vv6}Vg>kH3~^kBxRl*1d{vMh+>~^7i=unYQLh8p{Iz-P zYAZf2*Cic{4aXFp$#mqOg?ASr#ngRiRss@{^zW*ithDZ}n7JsQ(Z+^Fvb;>`B2=Xo zvcdikRyZ7A-weMxQo!@1{!-(ozYN#Zf4z%-+g(>(S-%b6*S!A7##xb$~mJht86($S&zFe|)#6BS0Yz^<%#g?*8U zj#2gbCB*x)68Q0iHQ#~PeY>p zm*K9qI(F|UQ|e$=`ICa_Za;?2o

p1kZFiGXy*z%yPf5H<3;ad-+FbKKDmP)06eU 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 z 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 z z?~k_QU*XVCtkuM@{^uTtekbcUgFd}K+Sb1$DaYUTFHJmy`DSCsf1%<_@n>e}@^1wF z0|fn79Qp@*powAQ#}^&?>sY@H^y&T4cKpYtH0LggW2B0e0%;q!Tc%Y z93;E_+^P7I{~h1f{->Br`_G|*|Hsah>#yZwO&Zmdo+Cvi^BSn76k6RK=I#A9k{izXbFr3;Lfr z^yB~0#IWP%M-Kgzpil1)x6A+cv*h^mgR4T3h`s;X@vl^TDgI@wkH-(X7GvulRUzwV zSidQx{7V#H(r;t^W+;Dpf4HrGvqL{`Bi-=B`p+92`iWD%5Gc2S{xm^9I$Mr^KI_}% zZ|#neuPDA0e||Dszf{n_&Y}Mr>xcE9*EsasSs(jPx)x}c{~N4t_n(nXbfkN5`I(L3 zn{xQg9J%~r%s21RHGI4MKCJjs`4yGv@@rB)Q=CN`ZE+?ioa9P zKSj`APuSqv=IGT#h2ob3i>kz{f$qR^*g?- zg`ZX&Om_W$;?OT*{bfw1_CHI|zs{lGwyoBWD;_3W{~E=Y;_qPn)u2CH&_AeJjz6-a z)(>m{6BS?5UtW=2|CNINaCLwnC42mq;*K+{{qLmsl773OPtU*1k=fbhUnA(Z)yn#9U(xz+VdGQZ?e=%S z;!FC&Sigk%)c(_g{yAw`zjb(S`im4_(oYHcb%Ori9r`W1YJKj8x=O*0e~m+b8SA$} z{0)NsrKdUK-%ab&Je>p#kTD*pw7{@+>O9zPT^aVHd4-;FzFJFiam zKf(MPL;9~u#h3hVs?`3cSfBh~DER-nLq9S?d${h4Jp-`I?=KGhHLOqPtdvOqOhLb? zUXDM)6Ibf;Y>#B?pQrdz{3B1z-ha;$^tWk{^;4|>l&L88!q(qP@g@DZp#L2~{|1MC zY(Fi$Etj7u1Y7@FhyD!K&tw0o{Lc~ezpN&R$;3W>B=*bO{aVGrWXJz6hyFU&Z)P&Zf03Yn-RW}t?Y!`ao;i-m*1tyarTCj_bo@Ae`>vor zsZrKX9jN0s?-4XU*!l-6zN8nrG5+fnU()Xo;=fwZzw>N4{zyWX|1+xGFxmBg zo8n9Q>C<)jr zf6}F_zu5Z26<^Yivwj=%DgK`b`rmWupP~Z~JAb&yp&vO@mp|&?BbtG~i9>&RM(f9zPx1d;(EqVRzm4@@X8(;Fw*J+MFU7xx_1i%IHbH;n z`EvX%bG0zNa|n~Izo+6$`peGI@vnsPzg^IO%b_2w(ZrcwLiOzOf7PL%K2PiCf&LwW ze%%Ff{LPCr@i@i7WXC^G@um117i)c7zjBwLpMRmO-+8vypBhsBTPnV!pMQbYr!_N_ zsQvv?(0|RLALogK6GGyD*`Z(5r1kkQ8tC66=%3pp$KS#iKHuf~(@|vC|5=JJ#ou(1 z)^B4X#ec7$Uv`nK-+X}o6_+4{#R zzNDXjiPrCAGR6OZpg;b*TE7rQ)b}QOSeQ!j;IsQ9kH4B~xsv(z__>|=YI>wcvi-kI z@g@Hwmuml;nN9w;3I4zB&`*3%dw5I__3ZZZxO_2h@e0E61o0bS^u4o`rAkG zrTCYzeufL0;(t`oKlD5sfjmp_gle+>{3(0{HH^fyyG2t{h|e^Gi^kV@Nyw7-oNU(#>+fz~exa?!_+ zCk6e>9QyIwwLV?5#AL^Ru|t0i>!+AZ?Y~{n-|cca{+2tm{;u1idUpHUS@EU#ORm!K zMSs^xJ-|^%rlqe*ND%^xKzceTtb9#s7?;PtRE+CA%te>$N_PUtbjTYp&AzcK_f0q1IQ! zqaMjBj!2c_OZsg$X#E)bPwnqzLI2zz%JHYxY5ixn=pmnV{&be&OZuHRY5kS#FzI&) z`sXc?_2Zi;W0k_r-_KTjNq_k*S|9trR|Wm+ua?U{PB-hRWX2D{AL@g{F@HvuD!!y2 z`MK6t-D8j_{?`Tlhp&<2PqF^-Tz^K;-v3r8zNFvG`kkQvrl9}Ak7WI}&2;>AMwqv@ z{+|?I($CzQ9se3Z|EQ(1emqa>pAe#7qWF@2{%u;{)E|}qUj_Z!9r`V-e?>_9zr~?H zlJ#Reej)vL1pVS`9r16c@w z=UgYp-${$5DY5_hkL>ZsOvRVtPdu)PIR0BJ=x@^E(5J=5DqX^E1b?UxJN{1{`b{gf zeu{|{{|AEpPg`XD%wbwMZ2!Mr@um3JuzoY>uM_kW*US15T5PP+G0Zm`JN_dTU(#=U zLdTE$|Gx$OzdH0&tRHs%_l85ine{UpY0s(rKNj@&{E3d=KK@Uk#l|Y7g3s;`iWSpt ziZ8{V|2rK&p8tI+=$~?h=B|K*VW=LE%<^b^0=`Z)fIs4_6~52jwm-6ZR`9i!tP ztvHzM`j08Tq#t`q>*M^@#)AGyKb7@6X|b(J(?ZTak5_z2Khv)DasF^qLBHf?SwF!i zUYBo)(P!`fhbq3LKkN@$AIE=R6!ec>ChK?3(ea0!ed>*M$`eElkJ1M@T-`=71asQ+Dr`r0b+~FvHTI{5f@iX{Cec0uH zg5pd1!(P$)%}k{DX)eOnzu`_f{x;SRJO8;>@g@CbtltUxy9oLncggzE3w8Y8QXEYA z_=o!bg5pd1OJ3FS^J#QY|HB3S@7yixr!Us}NlVYxKSS{){pQ!TevJ84{<{hKU;L%4 z-_H6wTY}b~k&P5z(r;t^R_Ontf_}3@zw;U$f1%!Vm4dDRU59@9&FuEShoB!-3uMSe zd;Tp(i!D^D3(^0I;!E)_XMHUH5rY2D9r~@b*g~b5A^Jac=&up<_ZIXg+#|;yy+I4V z9im^T_)`4C-pX!&BL)4(9s2pS*g>VeLi8VT=$Ej5D#%6mzxxXM-(D`qAHP`(?-!zf zoZ?IIFJt{i&>tn}zvj?S(_#me9tqKZ*`Xg@qsxC8=#LiktL}Bgf2$ULm-%L6?|-ut zUy6Sv>kk8c8jITf|2q!-7%g^CiRMf&+4^re^gCF;gvr$Z6$<*b_sQ``TeYw`e=$DT z`g0XuihtzWy8Kh1KUUEHw?jX2r`G==_n$8Pe>wDeeC~>1pQ4{$od&tY@pJfD6YQS`u}n0C;q0(ALBnj(7()~-^%)G_v(>s z{fiY}iocTevHcw==zrw_IsWu=9sgC7IV4+uN5z-)TUkHGTx$OZ3HmoX^z&)4fl8U+ zv-`u=zrms3A?VY+Z1(bGtiQ3P zlcvQADw+1f*#uhVJ8kcA=&xb@W;Q1MNrHaKLyq`aep9$<}|_p}&mv(_F3;e~F-fPMaKm<}po-G2ggg>n~D#DgI%dI{r>3 zlKv5b{;m(p`mK*^;WEX+Wa|%8d`Um=J*{8K{Ws}P5%lkI=tqC2^`B+F@xj)=)1jY! zU+XtBk@Tku`cof~nDvcZ*Bd_iZ8_<`Db?fO9=Y={#w>gv3{%0rppUke=o(C z^kb}#>$i>(^f!N0*3bW=j{i$~MIz7&62(4Qgb-~Jm}zx8=7{F@N{TNGc?ZxQrQ6!for zT-MLf#d?*(#{ZWozNFvI`l%oneg1Khpnuj%S-+Jo)~hs|GKXZh|3<}^^kX0B`d`Le z+W$`x^iO<3){nlX_2=qrx;(J;k5zn0e>LlOf__TSANN~Xzj=+;4?F*eDZZq?@&5zznO0~cKx?0z7&5G>tp#>3i{Xo-l5Mo4(w@!d28!0ReVXmMbMus=%4eX zte;_hb$Ovjvh^1!zNEjL^|Ah|1^t;%$@($6Sgumo`2S?Zm-Hha>GmIE@2UOQ2>OS% z%lhqfv09}}@Y(%g$A6IGOZqWEKP~9*`LwK`_?OlX8~^X7_>z8#^>O@PC+Khd2d!_9 z|6_EqS|!tdO$m?|rcWIDMgP|2-^|8T{tbfuYpie2KPFiJ#E|jd%Ze|>zmoN_|6d^J zU-n12{98ZL@&C#S*slMJ6<^X%|DTQ@&;MyHN*0TIH|3!y>gf3RAbo-XUrt8Cw|2c>LO4jGgz`^|gB0)d%tQ>#qmRkR<&AX(7 zFSh=fiZ8{#WD|YiIWT+4>nl{~?Ed^H;V0t$Nc{ z2zLDUIrN8pN$cbJ*SUgz`Ezpo@jbQhl{y=z{wazt#h>}ICh{;QDF4NR{${F!q9$(d z{~h~ieXIJj&i^-7d`Z7@Tdi;QGwOdX5cF?%=y$Sy*!=S?4*d-4H*(35ev_a-^?5n| zwo%GhCAwyX$*%v&iZ8{#j`hv>iS#cP^xt;qckHi)4?uDC-PV8Ip}%_j?DD@v&~N&) z9DkH1%T;nk-l86v`Zu9siz+FX>nApyNmVWWoMA?VL}QI0<|LF@lnhvC$psrXX-BX{KZbvD8N zf2E-Rg_pFxJ^na}CTmq1)}^e!Sk)1UD88iMva{B2WUse<=@8o$6NYQ>+dHW{tu&z9V&(S z|AfQ;=vQ?6PX)Q?`JZy$f{{$~@#m;8_Hs>>h8A9oA>|CROa_S3@p zi!6U_|4)BI_CHD&8&wMPzfSQb|4Rh_?-Bgp{7qTEi1lrM?eg1H@g@CcLH}MsztEvS zgY`}M2Zf>(Fois@7k|REqy0K|k@9T>oj-Z|ar~zS;UmD!x?zjnVA*9~SiQ zbLg+jG5%jV^jGel9sjQd{Tpw5(f8@~5Ox617pcJ}4qTOGEZ)+X;?W48+ zGPbAke?ib+^PwDn=#OOm_%y8_R{r}azNFt+m|gy_2>LHN^xJaOf6k#F9h0s9nxKE0xo&3;bp|1BZ@dssha zGUROu>yNT<(;b>^8}lu*NCWe2-0%$EuK1g&Ke(GVaHNs>(Jn-PG3939HLP#*moR_X zRAVXgUsL>`{Cb*2I=K8Q$Lb%b{N54DPii~Fh+nUaRchl2sDG$Gmnmc8zo{1*Uues~ hy!+!LjlT8eo+Z}vFZE7c2fw6JxBrh+e3)$h{{y6cnXUi; literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/fileiter.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/fileiter.o new file mode 100644 index 0000000000000000000000000000000000000000..d2ac2a2c0e689bad043e97044c8c426d526de677 GIT binary patch literal 55528 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 NE$ejDPbP2q{|9le(98e; literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/icu.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/icu.o new file mode 100644 index 0000000000000000000000000000000000000000..6bf3c0698273d2e3cda8affb94d8dd5a6a462c85 GIT binary patch literal 936 zcmbVKJx{|h5WSQ_feAJwmM~EyYK68iFd$1++Xb;zVogE>2=bxCmgoY1fuGcspTjSJ zJL40^kr?`<^ZDMpXUC4;rq{Dh5C9{9EBLLL1?W4ZG_-_W*a4VNCYNDYx0;GnKt45O=YPK_pEBA}#YgE08Nnl?nWgL8IdI$=3IU7FAtVS*@0>{njK7(MM<4 z^8C`Pxpc1EP)9ft=iiewYJ2eg$Jnxsv9A9Vy|iY8;X>MibQioo=W`T!?)E*qg){ei zr>ONX@V)#2{&<7XW=?cg7qp)5CH>tt@wv!Hee6H5I==MQ-I27S0YSP8|NHk*^zWYf MKdkB2W=_8U8%Jk2Hvj+t literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/instances.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/instances.o new file mode 100644 index 0000000000000000000000000000000000000000..c89fd3db894097c1291d51639731f688d1626b4d GIT binary patch literal 461240 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 XOm6)4qaQVXS&^y#+o^n*T>k$D2!_D- literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/libboost_regex.a b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/libboost_regex.a new file mode 100644 index 0000000000000000000000000000000000000000..1350f15ec127327e55a29aa174d7659dc1332e8b GIT binary patch literal 2465534 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 Nu*u|y#N1Q(4YG= zS-;~`rN5g?|2rM{lK#qDl|G-pz9#5b{#@znuu1xaj+VFX<=$R_WXIhxz}fpntD}ejDlk#HIb;?Vvx7^nEmcLH$jFe(uc<@$aGH zKYV0#0`&ajb9SWo=lns%kH2}08|r@~=%@cm*007dOTo5$H)|Jp(e)<)U()YguvQWI{O?mie|VdNKHh8$+co5d^#{D@@qgo>-?UEY7ZVZV|6I`jb(^doIzb7$ z_5WLeFU7xs^jn$!WARi( zz2~6cO8TJ$Q)FL+kz^ZAzta$v7N*!42`4q3nBR26?3aQLRzzYqA5zVCUZ&)2Vp z3Hoz?E$jE-&9<xUx*egB=ZegU0$UH3g6eQf`q4tz;J z=YKm3`m{C_(?!-^lts=PUhRVBu`j+y6}9OZv&L#J0ch z3;N-EWc^mWSqwI}^PfiGOZqF;D}8?clPu^z`dg*1kAH1=vlnbl)@$#JmJZLuz?byf zUyW`5y9@eX{7#PFcahS^->2i7p8tOXU()Y-P3iZ5CT`gN@b^RQ;_UHnY`d)Ac7@V+ zJO9}m_>z8Sm(u6`4}U*Z*FWbzhy3HsPO#a2T7STcp8qp|FX^YerSw~gi1FiEgsy+v z@8$SANZ;-J=Vstb`YTAkhw1Mt=y&}=*7she;y)fZd`sqk!25pyU(#Rxwu+xlqpkWM zE9hT#zpP(Y(3qql!O6?IKyw^_v~^tKW}p{|5^CUbsO9UDVg#e0Z}3Y&9*ADs{1pPw<{izSi@q2Gm!rd1yg8o+y z`kvn_{a?`d>7@UegMJg~^ZZW{^e_LD9Df_$>;T&UCyuXWIGCw=H%QJb!RHSneQ7m+@1e@6@YKX^or zzj~#L|L0gZ+jRZCfG_E{lfI9**#3_d^zU@gPsW=KU<+BVy)U}{Z4UZffcx8xaR|{lkGT#h<)M)&F{8V*EIl)Ad)8{xD6a8gEvB&2B$bjHPA2$Nhs2 z`Wr~Um5fn8N6_~_>JUHa&*Nh7UXOn|@TK_cKUDGinEnZZ{yPr(p4BS;OR#XZ>H2Rt z=&vCCYRW6d?-%qh?~vmUJ)wv`;@d9h`b&W?#h=on;_o3M>YpU&@3&gkZ(pl~OMt^S zT|Wi*l78aHN`DcJ->9E2=s)P7@BNF?f0_8U54!&E9rUaJt@K-oi2Abx{aKI6@q3wz!n`#x9ozk;~f|IZQh&wNVO_r9a_&sD`l zJka%L17Ff#Px?JfzgWfAGi^Z^gMSOdw*MA4_ zrTCjjpXYy(pnvPL4*K-PfrD&e+Uxo^0bkN@6ZFp&^e=x-)(??BTwaLUbp55km-JVX zKCk}@L4V%!vc3;5mc!;Y|34e}lD_9l)&70tJ+}W!L4SIutlxXSue~pN{Ko=c z()S7a)q?&(FUa}@pDBH}`TzdFm-LHCpU?km1pQ$zDt&$a@577Lu-Wa`&H!rh?P~}9 z%&%1bTge#n9~AW8A$@)Qv4Hf?beaFX0emU`b)?V7{|f~DYyT?ezx_)U{{vdUdi`Gw zd`Z9hKPrBH{*U*fBvL-?ydLtBtY3{6t6^($iT?oLOZwigl|GLjzYC-5zviIt!Hd(BpsDK|kgDN}r#9T_Na~ zz9Pq;b&wLiUKQi0e-7}a_(MsGNYfZA|BZtFNEo27iR=BpYrN9esz2uZe;Dv3{YASg zeY>CG_;aP8f3Jgn59zzDKi}=3A0qvF${gx93Hq~MmE-T20LHN4H7ma9^`8fPDgMo* zZ_l4l|7t&L|A{~AHR>F;vb_ z()SY+>;ET${=(Pf_(M~b{@+y?j{5U}FU3D@FN$9kWA*>*1^t~~SNi(=V=gY%!j=+I zR&TWG@OXeP>9_5p^jnFK@&8=VZ*$NOk^UZB>*AeUG#MkZZVLnX@~`{9Ax{5)0DLL`#e)Ag3I5L^eZBrY$AK|y z2k8E4e_!q3|2X2i<$sxj|E+@mw+Q~Pa_~Qk^m83;+8rTm8k|5ph9|DE*p{CAOl5&3EFy!IQ~ANQ8* ze`a=k`9Bi)lK)+T|GyFZzn%1T|3jpIg66O8|9>3(Ul*tUpF8-UH8!^W{7&%y)VJmK zV_hr*-_LOIe--id@v|5&w!!As{vQOsl>aut|N8|04|zxSzm4?a^gL?wM*RingYU}i zr+&KfUqAlpmm-Jf&{f7ko3`iDE{uP6N#M8xCA zp9KAD9Q4~rzsVM+y{>FU4Pw8ms@5p#LT5>*Hq@>5n1*?VUa!K4hcvU*{JSU$@u)K6#VOuO_~}ev@cB zLi_3uW&RT4)AC(}l@NKS-n764GQ@QMLvhCc#=m5KTb%J9_OZ-wk2n5*%lwDpjQ@d8 z6knfzbP(TO|FP5NwcpVGKHy93uZ!AWC!N>g`1e<#{oVVitlyTW+P_z;FkSy{;7j`L zKT_>KM10hLSKf9tnbB}ZD4cLZw0=jznQ+c9AfS7O+i2HOIbhb6s7N$|M9?=^y@QX z^Z%Bh|C)n-N1XbvIOuyP#_GQ#=${W4$gT00+KIjM;mt;{+5N@F^}m-8e|Ot}_L(kx zyPRg?>*HUR3*VNz68KX7*HQd-Kgag}fe`I2N* zCLw=P+d)RwtzZmW2Q5JT3;tXI#s7s|_v&@Zq)8SydGh3pOzU0ou9xNJpD-+;x5Na` zu~uK=diZ|P>Ru$vdYk1r$8)x2i+R`w{_hL_e+d7*@c#h#|0DQ64*p~5KY;&Z;s1W{ ze}DLo*n#l>Ao!mO{||=$hrs{w@c&Twe;EA7c6&JdN81eeKat*Jbxwx=Q{ewp!ZKk$ zjou##`=jW67VWcPe>}aPPWv3#=hFKVXn!K?{q#PM_9wx92EEUR{Y-j~&GKY=UjX}4 z=zS6FXTyKoK1tgDtL)RWPs^U2T{OGU->_-ie1G$ZgE1}sa87DUdWZk03sY+M^EdCD z7yjBG{=~nmBY0$U^0F6`8oR)#;jx5pvcDND=lc&+yrg9-AtU~VHRH}YJ9}>S+1cl0 z2OdxQVIx=r++5}Lx18wpPkSP%@i?%{Z!SyrH&po&{NaCXuqxc#l;`2ulZBfAeDH zB79c&ukLH%!(RU$9RW_LqQaD*?!Q}fm2b#NBBjB91BUNk{m)7MmPyH%zrQsJiXZV%whw3*;r~F>Nc<$JYG;4*3CT&juk(keCok|PUHW{|=;8ilTZ6^; z$CLi>%gUGL>514-PVzVVp>+)Rk6-6s-L;E<`1E9d%b0QgWiR?$uCVlz@*eZA-aN|R zGGaAUwm;kne;wyvy zzro+qO1^wo-M#;jz2xE7Nc91J4bUQ?-YhZT{4-vEtmceljMyK3 zT#Y+cek1Y2pmv;{;3-tF)%YN)*g&ZUG0@%~0^^}_x*y^Pcc8;SQX$T%@wyXK+BNNC@G_ z{4LABftip$3BxNCAAX18^@k%(!HRO@U#uNAB-M+0o4@K$R%JmWSbL&1B~BVW@==^hP>P24{_!MK zEDX|6v%?=v0Si2~0|qs0cdo}CItZMFSyA{EI4Y%l;{T0*?G?#jigS#!s57s%+<-AH zOO5A)tUvo<^o|YMR^Xwd0Qx0<61>RYQkX#f6OO>)pIY`UrzV6lJ#`<#bgFiuzj;rq zmYR2syvx|Q*Mim~_X_T<`gDUunzlYTGUlBx<&-tTwOO zyDB&70gu0B#xQ^L?ne#_9u<+mzYbrShRq}Vkw5(W!{5N$1!4Q>xjMGIC#NSsNp+y4 zjH!+_%iacpjV9@Vk^Yv`6Z|c+5*nee+^`dT4KL||Q?~kB&fl8b_+s!!M;{tI;^^ao z-^PJ%sbVqFh5hvqhZ z7@Xn{Kbzlj5ex?~?r+Qq!+c|grL!C8oD4dLK|#SozRo=@Zc2mAV1mze>3p%o1v8K@ax^@z(9fRJG3Ohle7%KHLKc>6?KfO zS=`St;Ad{q1AFH+tWDUstk+K~IgjQv%}+hq-*P;pCzv`1oh=Bz?hmh?8U7|G{Lj3W z3oJ*ILSG#kEDU{hTre#=^TptJyFAR*i;&c$2e1_IxFEk7is??b+=Y5cdSEoxTO*vl z;H}2M+bgf($%Ku+CO?uM*r)LyNsW`iKEI_TAv@fi6YhqZ$_qb^v-$96;q`efmqe0P z0Lhww&EiLPN$A1LIpJrs!_Vf0U&#-z?=FV2AUTa#U7)|SAM~)k@KKMzn(fJhO5S*v z${%=sY;GeQkNyC2@uvLLS^k#Fgqh*49C$x7JN#-sOk2X;GsBy5!khD2f~gTtP6JOe z(38U>Wm?I|3%`-{0F;vx{>#kp8Ymvh={{MxWaR_eFysUL$x{A|fm4w+2^(*V_>-R7 z_<2&}LEw)+T$GxbABLv5Iw3dQgFfZwg`b>>8Je4#m5Wo>r)P%W%L#YnwbVsiI}2Q! zimqjVYpQswP3MN+oEd)B-;9Me1K)Bke`dI+dm8f(`k89q*FcAg#J2HQ5&w>~^40M5 z)~z{BIjJ+yJU^VD>dR@Gn|e}S_%Au(FK5D8RQPW*!(WHj@!C5T9E0}rSakb&IY0a= zxB^AxH)AnL4?sEH+2E4Z?<4hxLrbqecSii#ITy3}$rh{r^73I+$qzrDAN~lk0z*tB zE4d(k0QR%7kwUDjU=8JUpJ&NozZnTEYJf7jjcpRHR%mti;m8?*tdgLm%>f+6_%f}~~RBiPOn>>{WOW%ut0_ci!bVQ(O2 zaZiX~Pa|dxC0D^aW%q!MHQovDx;KG83tBM&-9Lr56hDsNYLLwfe~QzhLjUEP@OaGT zLyf740Hk-&vEXrkGmP-K^5Dx4e_??zrOBfSWq!g&f5PMb%m0J(pbM*$9?11%AGvc< zV>A32bzHgxCnRuEJTv@pUU)-xk-ud(EY&*Jrg!`qr?9;fmDiSa)Wd3qJ#SfybILK6 zv=!^dUG4D!#`)&!Eq`G>WsJ2BQ#ajz`5Fw#9{ut76S@SGzXVzdxG^*Q7Pz2}^2!Ta zo`T*Ovb2C_p*qV>S(;jttYo7!~{(>HMuQds*+sEHL65ZW9GTUyxI0cw> zJL9Qqmgg)-e+I66>nx~u`Zq4W`H=kPBUlHq*7+jSdOXcN2J8NU3}Mb4HM>t*mIUqG zt`>~1VRK^bc`HUFEo*=RAP=LnamdeZn(bLJENR(u0OmI@PRwsEO|;vNby}_TYTWg1 z!RA2qg?f3-a6oCf1WJ3~-|)fayzp#K__4g^{4wx0f6vW%Wz@L*@gIfPt==#^ zy!sRW9o-jMW2}{1ynzn?L@27T9bnun?4}I`hUWTC*WP;f`!bOLlY7h%MRS zqMf#MFM%_dI;U^>}#aI;1v?f8J>X(5hH6V-T{l=Q$J_GlUcXeONFz|eHIG@Qb5PG2&yO2={2 z-@FG7n{X`e9X4U^xQFwwx$*j_@%?caWMHh^!x}4__P~*{6CiXY504Rf!{??Z=N&c| zyrYp1S5_X!mvw3l99E6AgUM-Pu zk19Xh0mI{Pd-$v5!(U!_jg{`0`9${Y@7fz4roU@%JE*-`>&4b8vA_93xKOKI;B7t@ zC#bt`oDSy){^q)r&re892%hE#xZz2)?g>j=?^_d@=1eum#!1au=&jh{a}%vaJ{i-*aig=b%ihLaa-UKVvS5!;{f%DHuo z!Mlz8e!m;1dU)PeH!eE2NsT|Y5?QM<|90roQE9O3Gb;FE=n_v_a4yWc;GA4t9k-GN zN%J38$nurca6Og~Gu%h#ENR(wmX$iUQh5V^(&~N{x@4Fqsc`{}Y#V=K=M$!^k=lm$ zc5P2rwGG#I@lsgS0A4p4vu>SyK_PVh7i~fH^3gWyML+-A?)o{+8gJna2X)G;sw$=% z$VYf~bpRrUeXV|*`iae{7RhzeZYY@m+q)^Wu;@4%emv3=f%$gy-x zDxE4_3m7Q*!{;SKD}a78J0Yp@8#v-q{op!1TotE9`X0DiRSVbTj)4+^Mr-v+{^pF0 z`&xRiP7kLb8({SpY7Otbz{~z>q5fU#@6E6p3jH`AB%9BZW)n~gdW-u?1Dr@L+Z#?QG3dJ8thN6Icohqrie0yX zUSY4>wh@&jv$=cT|!hD5mfgY9AMGV9C^GOtXVYg4Qf zMs&O3Sm;<=K^!}De)D;ejy!Yxro5JGQmwI14SGopSD~Gp<=+0Jsu->sG{amFF0=%9 z_cvQBPyXgzjvSq|Y%0t_p3F*cuF0e;-^4~D>o~xX{*33Ps-CUW(nvi+6+6^3rnNf_ zoTBsEz5Ffp(7ry$d8a>|jEnls`FkNf8JfxF?3VnU;I@<}S9cGGb9IZn&?2kxL`^qw zH6i$GHaFV|=4K$X78V{=|FGKCgAgaSs}Eq0C+Pb_LA?beHSP+3M-|e&849rcgzHU_ z1q!$z{CO4}5}`XyPYz|K)twZohfzGoJ_1FLf=SC#uo`J3#M__XjNX&|B;3XXd~4X; z_-rJfSlpvfTw2{jq55H-;BPkGM|pC~bHWDbPWGCH75#DGJk4jV)2p4f;Mut0qUc}x_=34t2AzO-{oAuVpytGse*HT;6lC+>ka@nyLqqN@Q2~#>CHuHTaFJG zjZ=bu0DHiv!|XWin+1q})BQ`ptR8{~U1@e~uTKv3@p_UlUYG3P@%rf@Fka*RuLC|_ z?iXfuCX{@GH&*;OH4M0=GDiz;6j7@Ke$V49V`@thHKo zeN3Ixbij;dB+a~FsUH4<8}gbj!)qErxEXZh)&e-sdQ)B2pz)imd-*5!L=^zVshb9E ze#^x@s(`IHQ;OQ?{Os#TvjE0ZSo=ntsLMslVYrtI=D6r0TylY%NeQ(OnDs^+PHE2d z;T?+J@N^#;!5uzcIQInV9VOvwQYt z7edkB|MB@>xO-;4bLPyMnKREj_h!qttT2i@e_uQcy&xBV$@|w{xC}BX_hv8NB~Z^v zyVOUQ`rW;K@En@$L@e;q?5(AylTBE}An*Ul@?Xd0zdME96_A|Irj`F*)u$xXeExT30uD7UIwJ&z?Sh+BDCJcuSoQ zWow(%M<~a3+{`^kAMfaF=!wBaU-slM(P6mKhfCv|c*A6smAqHT^! z8-d*jPt)sMp#eW~G`m*mY77vJ{B%8y!93IEDs5HlIND0~nS8*lG*9|e=dXQTg@4O( zO!=6?Y)t}bx#&{b#zMQrrL5L@3u_XUA1vy*6x8A1WHIOpG{uls9cEuN4cy1*s-%gc zN~YAYNT8W&hw`OI8O4~){r`O$r%%SR)|WBjJ*q!r9IiC5WtC|&E{YjTMjYoIM2mF^ zo1Y#iIdx@VE6Qy?-E2gzl=O~M(l9#iSI(4w5vA90vraXm(eyV)Lp+J`*l1(xNpB57 zlO>k|IH{DWe5~gC&~2Kqlu~KPw_Fy3RWdI9@=c1WAZ|^S%)*pXyC|K5(@KZVLaJgK zZi)#bPtVW2^vA{E@*UWt(sNdca`!$76QbGQyG@PHc?awHk^(PI1Mm8tx6dGip8b;d zF7fi>PT>6tdVJ4Ybnw}p2?*!O?#{dR@#YG=-paiQmY&FDM4$5_t=+I{4h+~!=*z24j} zay*ZDbMYr>-}C0;4`Xll=DrOi7rTuR)#r*H_j^6}c=1*vd_;N?|h<2lr8LWtirhXth2^@Jdb;OtjqDd#f4|`)P!$s>%F;^Jr?KW{-DRi+(*4VI=r4gd3*fLn|q@ag0dsa?)v;Bx%}Ac z^-^OS7D)T4rwVvjmT8TodlJ@z*G1L3RnwXN)R{k{l$mFBS&!jy2S3@s(k$8NG5a#@ zS#}G^bb4Z0R$zOdnzB*zL-|a5&Qy^0oXKZSq3X}v0<9!Rg7A|!&diiCc;vl@^3&IFWP(NjX@ zMShhioqI!KYK5HQP>(?9DT^gqz1psR6e%RdQz;gO3|Cm1SU5msv|i=2@%B7aOQ58q?Cyp3vpckY2Eg!`X3cJ1f*C8s6@)J&Qj89#MeN%6#KGiOY$nJ|9#)l8jHHxoZUnmjQwb5>|nq-4mR{|LpotonAjJbl#}qnv!lSluae6gLEr>=mP@Z;zcj|(e*8gRHAk#cb!i5zfZSv z*s#<61IJ8=&WJ?)B_|I)d2sOwr$&|cr0Y%^GProiAcmDbcq*g5$4z!#dEOZM21pxW zcz&QR`sM>&-m9v^7kIq$3VPi|-a`)Q*UQ(6!I;8}2*E{9UMa38oL|tGGcDf-Cw&8= zoG@Gu;a1@l`2`DeLivS_x#ju(oOyln3xoLu!F*q^ui}p=Zja};nfb4j{FMIv%ukk_ zN>122 zZR}N^Uz;M&(V{kLgF*L6GdA5_Zs#Us$fpfcVNO92X7FF1|U2k6u=tM&Y>V z`y#|=?2f`>gy9-VKPn7H2cwiWqr!eb_889hPf^J$dtOa(aH&tnC_T%Ko={lpNpe0? zTpoN$1(!|grN4DS*Aci? z+@A?)vLOZ1Hv zT`xA5ORdR@CxD~lK2U_f^QFO?(J z(Q1}+8RZ z%KWyRoT>Tia_s!|IX@&%c^}oYpyrc3OF5OZjr&Zli}`Sq%$A%AvKx#OY&VdZb1v*= zn6R63`yx32!;B&6Zzez8lZ4vn&s>W}^K4(Uap$8#ZWVNb(hPZfPJ%=v+j+YQh0;JJo*s2?+O zQhi6x50mBqD5eq~E2Yi+CRnP)~8o*}@$WS(}^tE=1~r!fyrH@BBpwzOe= zixBU4^sRJl!kvnT^cPaQr}kRwITK-{nGgF4Nj}*>pfag{sLs6|i3~*5Cp(DYs%{o> z{G&}e`PGd*7UtcQ+mfT?Kem_hzub-d{d*%}TocpuM=!*7s`M|1{@0TJ$a+%$3Z?&O zj{gW`sB&`YAK6R!kL^N!InsQU!w*fXU)8UouywzRNmi;OE$^E%4SsYex?`>AtNPVL z`%o$9Z-4201d?rp?DtF#r|*8L@U(ICe3-8u`>2zpHZ_g;Wt*e%j&zQ3*yyf0vrPta zbJJ|{+`gkT=)8V6I(P1&&VK5+aAnf@Ob)vjeX`2G>LXz%vX8_pi~7jw+zEM^xW*UR2e3mlL>~5tsB12lk`chh*Ea#XkY0=znGuzKWaPRKA z7Gp%7=d+CKncU<|F5;5Wie{EsOVTkA~8PdN2$ zbX98N*$hg!nKv7}Kls#&h3#I=pTK*z!cX-4hUHNEHdn4*Z5VHo=6Z%C-O`b(zH}%N z?auA;mmLhQX4h#E=yhSz|7q68SQ5RHP53)5d<)|~>L75@SVPxg@DsoKgcSS+uVQ=} z&*_Z(YZ$+caZ?UU8K=JoLzm&FKlw}Y*SYxjfuHbAj8k7mSAcOm7*QAXJLbw&qq*^E zIz#c(EJ9zV52C+I=J5>ne2;NMZeg6p7kSa&ks^MzZWIA`GJb-<$hm}ZJk3eFe#Lki z2oL?8ljH*|5vbQzDo~)9PpkZMA&8KlD~Knf0{JE6nfm%I;{gt!JtDd+jIqSupnQ7oiJVs`{D@@EhI4qE!V5hC_9x|FK69iP z7mS{lGhWU7l}uk`dq7f%irw6PX(T-z9uq%F?T`y$z;#1jJGnb_M4E#9~kdsoc6cqde88q-P2|G zt$eLdC*y{{jPX{qSGvr|Hx+m$J!dlidgfRAONjU5Ec|z7!S7``%g|owqCFGMuO-jt1Wtk*;}Oc#DALw-=Xl-Ja)QP$8#yt8{j#YeW|}m zwgUK(VtzY=IR@-ccxjTqo!i%fEcn|BH?3dqAyMQ5FricS!}+B>Bf5qI&r~lHvf$US zocaTFd?V-AjH?fzBZ&5N=z1*+-V5BP_BhYnw7W^6D z13Ur6LqA+Sp1&wOn8ZyUKLT#t$v`;v#l(DoXIK(CmR)BlygZ4UxKk8vW+kcTM9UOz zW-%%I+z#BtO$vkKNGu#O;bp)FctT0mvFus|+@C~Kj$dby z@%3~*d&snz6ECl*uAVq};>>B2h}F$maw@ad&>sdEk4N|Q^%Yb1fPMP(U9czhpp)Sh z)gyMH$H}B`Qi)+FRm{n*MCqidv(zzzE4vrr)Ty)QPMtQ16c}|<&0rMD_-W&(O&vcw zV~LzrQ#Z9{_|zGbhEJU}J2D(wBTe4t3z1Lr16pQ6?>%O_)!%Xj2Kl?lRZ*; z8SI`vb2;o$A}HuR;vX_&^1R5d>Lxu8yEdi_`tMeLhB$ki2r|8AwwU6s438Wd4A<1m zj!viv!4minYD}!J_Y4jX8$v&)&`(K;`Yl$!C)00n%Gfd-V(IRgmGV<6=Il}spXT{* zPQ&b0c6XH=b_yBQ$u-}VqFVltUCZyTvgPP%Jmq5t&zf8}xTfZ^dGl)OC(oKaa|Swy z$dxs7P;Ff2BZm(kRWZ6|bZ}_6f|4G6VfHgg-A%kg%8_Tg&{cOmLZwtqcH(UOka%znkNx$7xMS<+S#grF+haCVlghC1y+UmHKe77m=vTXOp0=ebvezr_)U{s{E z#+;Bnr6xRecBE#;%t`u~Y*|fJO?1YTnKLg(d#Rf}dGh6+I(jG4gZCS86n1yfOG*$w zGHd*d+2F6J#*tOb3K40>c=VPvvm@gtUS2bC%H=h6IGqb%;=J)ScwG{c)(E;!bNp8) z;_g>VXkwEw$g~bRnVa4ja}tp$vu4g^H*(`jN>_PVa)nVp4MV(|5_efZR6yyj3ytYh zcM~CNwVX0x@?}$J=$a%pngJ(*aEbyFs-*)qyJ<+8~UHL0zcHhIQnktr3`r8S|EHN!*U3Qt{R zGTzzEP_t%{N5dSBkdqFR#$$}FQ~q7W7-E)%o;q^D_@+;uJ{u~)`lVIkZ2F{{@v~-) zzp`e=g)BnRvqUm;xDrkF zEbg8leQ}*Ju_2V$_y}GDpAd~qp3UoU5A=tbQAUur8Id}b6EXxW?>)+R$dO6=Q%N8# z(a*zbRIkue%kyMGRb*VVd#I--!MgY|%HM-6fQ<1~*^z$3RFe>Tq?F4XF>MzleZDVh zFWqdpYwudg8Eh=8$V|Lx_LyN#+})Xpp6>5vJ=kqwC8@>bcd~vtjXMz47mN;lCo@TE za^K~WBP|c#Ne*YS32)8L*qe)jB|$d&cjJ;y6}DzcH8q0iY-x}V{qdGVe0yc!0D-z!B-3XLV_}pd_abeyKJ}o6|M)DpE$}M@f4#tE zdzmNjO2Oa8IGItCiq_xc%{J20TRlWEH@t? zEFoO-mk3<;SLbBG>HHF1B6u-33y9F-we2j6o zo=*#YsplqvOFi>(j)*SOQ_3%5+%5lj!7t_80+;gN6}YV5sf8+8m98v@cLgrXfzA=p zMS5O@+thny7W`s?%Y0qIxI1503VxZd7X>cm{4t0*ZRwRJs@zIuP3tL ze-gOV=WWK_`AP_Wsn1#TQZDNw<&0w7E$3pvFXgP_b9i}>bun&JFGn6u(sh1ie|3_; zr9E6DaH-GTjJx&umEf29JR@*vhaU-C>e-*q|B?Pna2x#(68OCWzfRyXUk?df>c5e3 zxBhPkeyRUfflK}Uekg&9^pxe+l2!5I0^^CjcA+HI%LFjYHktsc8x+RRe(=8MHGTnz6cc=T5;Ft2B%YyHB zRAzmO1TM$@kphp4d_@H=)4hZ79Pkbi{PzfcnXg9~cjs%Zz#D{|_kGmo@ zWL$Z;Wx5A2?&d!{3;z*ED=|vWeQ+B43<&&wf%}fp{O){R!8qw7+x4FWevy!~DGUCA zz?%gB*NnUKh41yLi_(?l(7?D`&l?2ZfH)?>7YW!YMgWt%wJ6~T2ereDDQBvrgPmg*h z)5zJ^s{`EljXlzFnv2tQV^2*Df2;O-j`OAC%NVa`obnaHZPH!u;(wm`$M)6^BcJ{@ z4PCFf@LI;-;q{B*r$5a^*DSFvsD$67yD6(@W@8o%=N%u|W|4$aY zMa=g|zWE-{Z7zHo3B=Xu!bdY+bBGQ%=^n!P*DicH<2hnJM(G}&tK-+Y@Scpn%=0lL z|3#Mbftdf?2N9+`w=-_|r?8w8#k_^my_xa(ex1JC&RZEba_%3%JTaarQ;tlev}Izz;dn?{XFIOBE}CA{V?I@a=SX* zg2mA2M4=j|yc_8y@n0(N6BW0v#~%v(RDstBoNSmb%2zFJBcIwnU4&nZ z+u#=vh>P&?xDEaz0&x*8+v7}yc9mo7kofCx8#%WKeksS)mz)3LEd0+2JSyaG5cnK{ z%lajqjXs|U{<#9*A@F$uw?w}r%k4mc%X}RsaH-Gt1x|BVqfcoTe7L}+y^RpK)PJnN zrT#SnmwHYXxYTo&z@?rIS#bQhBXvC;g#Cy4>Y3FbjT~z-4)!EpS;5=L%ew z=LCVv^1MvoQck_VWx6qeOF1n9mvVk0a5@`f?A)xMs2rpm{e2`|J~G{BgdEAgO5ifx zKMTB7q-)ks?sU!i$z5M&9p=UlB>@FA7}R^Lql9_V9(kWx8g4Nx`yz zFzZw|9^iGS8?O+!lyBC}#4mBPZg$HVn?;UU?-KuAxJ`SRA^2rIUM+B0k4_f+4uQ*h zH0yXuSJvZd!7t10Wr555zL5ogD+}Hsa9O{(JW(cnWc?m2aG5S2e^BkQT$EcO+;q`A zzXG=@&%p%Za?k%qX}HTe>l(&MAGtr!Byg!`fxzWF|8Rld3b)bcXvRsO;Q~Ki;EMzv z5_nkPa^7Am@bSz~`jgwFJ5}J_(Vw@?R5?rik6}4({ZA0M)c;(8OZ`pxlb*G>jh+*j z->v_T1TOVIO5o)}4(Uf1QE3lBg?6&T;Njw zKW4!PvYu29(ymSwxXkZp#z}v-?`xEY&7u#&$&09i&9PWlAM!PkCFb3o59 zAgC!f!gB>)!fwK;?=Y7sAHsR+p@K~Mg!2?b;U-^(f0;t@eKw|qn?8r2r2_Y{o5&*q z?=A3k0`DX64Fc~g@GSx-{s8+w6L>#%6Y)_&;vzkXzX3O0^c`cm2se9=dU%|gr;KaX#!yXa1 zu_X#xCvei$TpI*_fB``ZnTg2v1U^9E#Bb`-?6*)b-G1hy?HEB#50Xv%rhngG;3{2i+~)6wm~t@R2W@ci zo9}%(0w?(a+;puIIO+44LOq@h0w?})jBgP*rER{``I*3pzn=Ncx|MiIzWE;D_qhBB zC;kT9bPW_Zg_-YqmI$2qO}T{yPV&w7&c_Ix`0vL}*A#&({kbzU>qo-qHs9&=b9o!Q zjT$AchzmF0(QI?!=DV2B3!L;>p`>7bCvei=e1E+McgmD5@tc13P=QmJ`MzeU3pd}_ z3<{j&tjA5)B?2co=KGqH1y2005;Lv_ftxiH;f}zGe-nYYjNOrJKLLC_>EeHn@mB>t zz%YaUL*OLej1$`hex%^{Qm2oL(k1?{$%Cs{;74gl{gw%w_>ba#bDY3Q)@JT>#|xbJ zOPGJLz^NY1ckAyJIPssy{N}wIl1;byPG`G||3c>9E^v}>zJKp!`!)HU&HRM|r!e!q z&jA7_eXe2taRMj#<~_Rc0w;d@8+dfh6S&g<5RESoIPouI{uKfz`R054?E)wM)y%(1 z;3VICPxNhp6aTx+@8?9}u`IA2#Zcz={9g%wI2Xl5hS#z?A|g z{$5HL&HxLXAoCs5+XYVi7W2OhdwSL^mBP5SOk zraJmAKR>sNGbd-L1#2DCS(kS(?E(iC=)<}Pb$uk$%; zCJlcyK$Z-~_k&Y)i7(epy?pYtE4#J|$@Ogvllm($_*7Gd)M>E%PDUB=wW7?)ewQOn z=EQeZmU~gpx_I$bqs;jIW$!+6chc)_4_v_olO>}Wl-U!>-O+R}3}?@k z|Mn9z-@8sX37Vz5iqtUfWs&ZgMsPi%|(HOclD)keA$2c^vN@@jF~YrGI=om z%>4=KYp(3SY({i&{VaUoa8?98xoV`7r_|KV8jmkf558>HOf=oSzmCAByxa#j5(Dfg zVoJ|MPsPpKhe?_({v?jKzlc9{58}_`c*l$Qr|m&}vyW(=QIP(ndk}varz`dU@gBrq z&GBXWboRZw5e~zm@1h~q-EB=aB9f67JKPb;8eUtxYV3dB2EB+^(zNs%QP4gNzQF^YB zNq@5$XwEsAIBxwnBOsIh_N_Wb0~a{e-yyi&`iBvoN&ibv)bZsrUqV=%4#e-XS>n&^ zX8f~IZX~m(tNdCy{!fxAX@@)irHGd)|Lbnk{B0bc@=sgm?)=kv`AqpgrdUVZUHyHO zMgL-s|176(h+F>;vgjY9!4}shO_co|3AbDS^U!cI>Hldr^{3~;nc{!Z&G_`ZJ5&5^ z-Hd;KmiYhfX8ay_PMRtGo!yLoImdU~UjcOtxZc+!`CE{5X$PGn&SZbJG+5#ClXAGo z{s!T8*B^a{Fq8gUIsM()-x=umGsWN0&G-*ziT_PE;~$0Ro0R@ZxaF0@z$gjA&Bc+V zr*VAu_;n%2Kin07=8|@ug!rob(@>A6;dTv-#r^j&%9ng%WE`F1~ftwINQ~Qar{6Zh2Bxv4 z+F{b6^e@0|;v0O0N#E7~__~??qb7Y<{3RLEADtoncR792&uOjko&~3WyaAX}UD0Le z#~fdysoyg>ehSep6VKpZBR-};9+&!_0LS+mMy96x4E())xc@Q$(^`%{5c1{aj$eTI z%6=ph+$*^J%y}cKzaQW>@lE|ve%!hP^2Es4aTWB}^b(Lv<3GCZE@LmnSX@KDIH%^C z0JzJK#Jk6CiWhi{em$OJkUx33<4>I!9X#_yfAT6$y8M3a*1x9?8KOeUPCk`6YWvKu z2oKNkrX+eX!l!(xR0j$$px^+`eIw_U!-k#iA2?(?0Vgj?KF{;n&Lm(QlzIA7wm77f^{`f#b6R`w z(8Hv&m-GAA^clm!GL2ri~jv$;;HnTbaS+i{cTViEsLdY;C-a z<5Rf2-1=v09*iUDr2_MOn<_zRNpXmimM=>4EbPQ8EJB|My`i2bAaZKr(T;#uq z>BUShVM=?$`0x24Q~K5n`D^hr1NTh!j|cq`?#tOf0dyMf>Fl4#bP`kgHVyuJ>X=@} zbPDKH-1WGxV2r+3Lua`oxPOJ4z9X{~_d~ds;l_VY6hCut&&7Qw?z?dR3^%<)@H^c2 z@0o|6D{)_i`xm(H$Nfv(zr{`8puvC7)%c-v;N-p*Ki9E)KGO!K3qZdIi#q`Kfw&8C z1M*ytpGMqGxSMew4EzudTL?e?dv3r_47Y>(M%?)CiR0%c+%33o!;Sx*oAGlC?pEBl z;>Lf^kMXkz_wBfUf_n+>$8j&m{RHl(aX*6_|2=o$XEE-d;=UL6gSc1VeiHXnxc`XT z?5+PC?z?f{gZn<*58!?T_wR8(iu*C#f546Zo;IfKOjj~p#dI~(=a{Zxx|ZoWrq45d zf$5)^{+a1ZpfBTI&;E@}Ut#(x=wI0VSJ2mRZ({%Jpl{&*8~gtO`X;;I0^Q8+w?W@w z_dl7w%k(|a_u2gc(=DJ0c7Fu=F}ptj{gmCEpr5h(bI>o?{UzwX*u52W8@soIe#Pz` zp#Ns~e?Y%x_cx$B*-ag|mu}Prt%+$}NN)PhXAgGMUKyRgC!F42=#9G%?!Jum1Ko$+ z`Ji<6o_GsD`?H(=PSAerJ^=JUcGG)v2jM;#H+|!X;vEWl7`qP#J%ZhSP5Off`>Ae1N>^>g!1a=PwJ(1nTp!D4&l7ABD$?P5idJ4Pg9RF#! z={ZgrW2ZAc1N2OGpAAaiS|V9N(4p)e23pSU3ee%~t^~E&9RfX<-6KH5?5+YmkKH3d ztJ!@%=mqQ^1xoJ%P`YD4FJ$*v&~fbk0q8~Sz8Lfpc3%qmLw47I*5V$Idjew^H-Ii+_w}HS>|O|Z1G{6O4!dszjkEhE&=z*z40;Q@TS0GS_idm*X7?h{ z+u8jS&^y?@81$#?z7zB=cK;0Y=j^^4^d5FE0lk;q_ksR`-S>n3lHI=o{WZInfUB&LzpwF>;4d_~SuLFIa-7kRtiQO-PzQpbgpc~o!D(GL>{a4V}*u4q# zb#}i2`Zsp}9rPc#-^BeEV{e1LgZrPj-(~DQ(D&K>0q7QXCqO@B_eY=~v-=a!PublG z`Wd@F2mONGTS2$s-j4e##&&@Io84c7euH}_Zdzzid-a0m;LgRJ$5;F@Ae#qO&?uVMGKpx3c` zK4=5G7l2;R?nclib~l4AWcLlAF?KtkH?lj<^d_b)Om7Cgh25=8Zw0-L-9H9h#O~Wc zf5PrNKo_(7r=WMT`!1$GWBPNZcQd_*=@QU;*?k}AFW7xQ=r7s*E6`uFdnxDx?0yjR zH|%~0^tbH(9n*)IE@S!#)88|Fl<8wkA7{Fp>64&O;kM(w0@gEI?f5(&oI7j%t#x&S zts|OX2IvHi@QksY7f0F77q;_P+j+rm{K#jQ{mHh5zhXCUjP%|@T+MA!zdfj91^)iz ze0#yaiOjd)Kv2U9`mw53*^R4x7hk%nt`+jW9%Z*w6p&1k7C*<1UkGxlUAES48CDQE z%P#ATjI*66bgKf}7zBfxUK^+9p`j%VT6)N0cK!hzvW?C*;R2`$uF1>As)cxWgM6sB(Y=kjS+jim)c{KqP!d$K7>Wp0l=N72;XTd&YVh zzK*{lP#2NyY)jN5%f>$nrD!|<-dSBh<*~EVY9H3Gal1Ft>taYD{o=WHyt>dngI;iN26~rnC zwOs30VPWS}MM+Gw%K2BvZ|wNxh<~*XMqy|X%^ycjvYn2^WF(@?h4g})Yl@7Z50acu zhn$ZR<={k)z%t)(>|~C=MNSPlZzcMXtX4Y?(}Oy;Q*QKSov1XC^R~z$+j%aLL)nX8 zQ{>Akw2$pvQshhg;u~T-vnVTHZ`(PvC{d@_BFIDhhfwl5qvW=vl1g4d;#e@kq6c1l zY4DQZrNJKtYgUOC+1k|}pfhTe<}o@4X;nX;VVF0W3E2zT$smRc!tr{lQ>%&Arcg~= z1TExIG1?C9QFbty%)@Fr1tC>rBFZXWMo=g|27DW%y*mQd5dlxw*mKhOipi;-G2dq$=k>iGNW=IjYYBik(Mpn_Z36$?iK*P>^iMSG;Yz@e^uC759c`{XM^3o<@AtuWw7y`b3%hwhMm{0^o3fk3WQtE-46Ld z=dB>^>w3b2Hiy*=rDaHac+fYYXMxexU^j2QZbaA_T~t^>!_Pl4@eDR@@m4vXmpkpD zSKgr!jKIcEy{ zR%o5w{#DPamNWlsJMD0uW49+x54Q~Q1smUozAr)9#x;RZolkE*=yU-@uJtdOT5E6F2v1uNSB3EoS6@Jk9Td3vC1FEPDPXJTN z#xPC(!p@sj&f7uSy!SX8IxIbJYi##Yy+uy9;|Es7ODN~BYz{%!0c%3N+w5)Y?E&jC z0SQ?ZZMM^^@vC#9FNPZ1eRktoU&-^T#@9IOXavHPVx_Cb!!3C)r`32r)cD(|@#m=^ z+fn0Nd=<`%p|b5(6YaM&Z?u|de=oFlEmauIx~0+=MicTQpJ5Dsh4w4&hhaj4+LZy= z&gWq#4C{!WW;K6FQ>JYj?E#;cY_%Qq6)&JHlO(79_<{7thxiUEHSy-d;0QH#_^O;8!4>B~B$_yb2_(DyS;7(rf=k;8iVyG( zOq;056@&-9V=ez;+ncI@)dcmoV5R0(po*5;oNjDQf3uq7l-{-tRRgR4!KMuxO)gWbE+9`Kp2eXAVh*())L#3h%+ z$S>-D0CJq_1+1n5@Tk6^t8$4tq?(FvEk}nEhAG3`2BN1S1M_ctlj=n`v2Yv!84|1s zEU+f4=~+yQShBL*@oo$#|B&Vms9h*iEODr~@zAS8zZ9lXie5s=dh01>C{gREzb*hsaLK<;OY8cwjr?&H9*m++o05lvwuH#nr zrKQv%b1!#XvaauFZ;;f*kfIlIdTCGHn#zTN_4>{%`>?*_75{3?A zFe}sRyL}LnTHnzFUS9P_5AT>n^`UZ;TwOGtS>%a?!|@?l{$fwy98_T_J{)V@>jI&c z^Qu)Pl)W73p<)5W9O%4aECHh{(nLi6m@Hqc0TFdfHEkQv8qh?&7E#9_szFlgHdOxy z$O3i~5^BMjS{z2_VqqA-#JHL##w-n}o-Shzb&0N?)G{$LmX?TbVhzRnHP=EyMK#Y` zlM=9lfY~gq!fs{>$yHp$p%vT%kdU;K=8vNfUMV5Q z(Z)puB#H95rU+uni%>%7CrJS#2zw)H;-11%i%=92EiJ2@FB6ABT(aM9{#*2CWIxzO znisI+;|lD?wrU}O)&NjEsiK)Rr&Q!wvtITkVXWJzZDp5=1?6s~`Vs@srAS?sR5XFi zx?+-`ZEUzIPNS=9hF_R?4Bb!C{!jw$HD;#$7W6B6>$35qDR$X6R@0Bre}v;Rkj29> zt48^qR^@yW!k9j&GhEhbUH=Ch?6u<~F_T+ope=|(W7*BeQs1-UHxKG7?0jyw@5r^S zhu5Pg4lVem4QDQ`o8KV;7^MbnvKzM?VV^aW8g0w4LTjOoaCCL{ptUqjvKQ>EMUb_S zj`Cue39G|0K7^PpSEH|6rzU5ZYUa@v9jrDlU}MY~h&2E=KRfYKCw)P-$AVr z{u}&65jwK9&RX*?FF7mQ5b*G3&G_pAW_V%=0SJD0y%ya;qVEZC@UJ~^K*VN3E0+=D zJ;fS&gP=R=nemQVjc!nyEkTrZD$4r0ptWYLQsCKoq!6_FuUHIPVf9}|N`tOw(D<@- z+P{=^1mDu_+P{Q!g@4IFQ1CA%<*em5j8o(Z(!g4N4>6Tn%bz9TU|vk2@T-ymeVByD z%8PoyNph{_mFoksNKsFO{hAWAmft~oKz^&1IClwxM#d1Q7w8H^*aErLF`)O5CZKna zCWv7#L5RHquE2V@0$YNy)>aZ0Td`D;Wo?Qq-K5BpPLN=1sSmM(vBiE6YxyNbJ%X|N zWi(gm1#k+3J%h2pcGa#cVvA{`t0LA~t>TSqsEFB%gE4y@;%yFiImj5sP7tA$!mZ;W!x}tx8+Y%!NUsHqSvu3#|U7F&ll-4zJau zPOHGi3K1~S>OZeAW)DP2j^4XOjQPa~2_U36W@8bxBiCx8RVjto2pNYEJ7$kVNS@V1 z=c_2B79sTrsg2q72Vo|S4$719G zS1+rnoVk`#@bX*eIS8zae6bjLz=d_?;mp-W!OL%1Po)0}^2K800T-6Q+u?$)&(cT@ zt}R6RuOMG6MjmkWv6?o*MO>W}y!;k=k_RsGL3wz<)z@lzh`D?ey!@6z%|*Ugj6C4# zXEiNkF2Cj~)?DO^#mED$eIk=6wNlMtYYy_oV&nlweq<$cFWEU$BC0KM;}0jqySDIR1* z_6zgBHMisV=FVzg$IZNs!!kdYw%TvL zkNWy&OKab@kNeb5|cRUHxd))l=WEyLwu3U?`YYWK;K#x!N^Fzr2RT9w^!rolJJ7pg1c2`W>bc1A2=%4p2rfe)`tS;C z=9QaO1nORZeW|dJO6*?hEGh6->Pm<=*hasPEYZUMsf7QOdN+a}SWm*?xYxtTPmAGz zP>ca2rJmtiYc-5P0C0#$0n*A00}%3LJ*1(Re2RK%beX>=)j^+X(D?6p7X=fBcuZ8`RIg~KS`3oc_)nl@T zjYfxyKuQMmr<4rD-^LOhQVS7&O37j{=t-%dmtP*F;oyQ8f)=nQPwMpgpG(8RxilOM zrQu*GhJzbhNlNS~JskYLP5B<&q{w}pAi>y!KFUJuPQN0v8fYZIkT6vD{=wL+#f0>% zh}}uU0Q`EasEA!(t^7|-(J+RC3osn4w3_dynH(A$1_82B%qz#ya4;~`xEaF%teD0G z{|L-Z!kE@zv?!**LyrjvwrPZ@4!87EqXTNO40#RG_)s1TV1U?(0iqO39IERp3n@$u z5eUQ>u@hs&Attbx0?}v8D@I@dffy#}0Hca&Q=l3s5QvdtCq@c7g-L-|)KVbEiuzgv zVzAhW!GeyHs=#>&To9wKw}1V-@>l~o!GiIEPPY=vBdvglYl-4oMqV(I4~!TxR6j_J zO92rhjT4xfkQa>P10zO_kw#)0AYxn(3P$pRk$hmpz;TRWq_Kh+w}66?ykI0B7%_Hy z4VTif6AohZASM{e3r6yR5yQu;hS3Lz7z;HcdBI3NFk%GxjbZdNqaH(+kr#}55ZSqp z)pWgKEM-O;6iJg8jO2sF{K%zBKN>zL*;>s+UNDglOje{+F-?INjpE69nu)xD*b4G> z9EgFYkF|U#Or{;%St|=;!R=Q6&=zcIeqOwYH&gmKMRv-t#|8(ZoF_N}&-WmAUoCef=h2w_ zV^ZJI*QDFnRtQ;#Sj#bahkmxR%Ibg7mO$*P?RI0r8+|MBArwpPC($|}L;RyKBg7$z z#L7hr+J&E)?ZlULs&bE%VJ2xi&1nFcK9!%Ehyn=b&Ce}YV z0fO}peOM+OpQG15IKxpl1lYfzy%p?nlEV*&KjYK@hgg!2<&)<*9M}Bd?hNyT4^dn+Ke*o1b4%XIwEbIW zKV{|ycKbK92>cw|ys7#PWBx&Afbs}CL$`$E!?0Q#ipj|GVcW~8L#Br!Z-mO$SWWMt z>u!bZ_^jpCY~O8#vGdu!*TBA4fy1OP?0d_s3(a;4oq|z@y)snxX5?_p2dtUt0dq6|r_rcuAjo}8^X(&GFJyL#$0P~%6~ z>pV6bpO3AEpA}JK4#gK0jZ^foB5J>Nd1O?OHWV7yc(ua12tqBF^nwXoTM)tMnOTSO*vY}h$^vY~ zrzx-H4tmq5r5E}Tuk^zsD&z!vHKDjp$j-f9Re`fM5rI~6cT&~gQ&dbLXIt`IlJjqS z!ACTt&;~=`84E74PuoL?Lz7|=xR^oeqsM66hE;lKHnEE`#MrzQSxrbD4oAJHg&CM@bFXA zOT*QL@Qv~Xo#(9O6`lx|q5E3TbmBY;x~*P2tNrDrTcSOOttmgIz>7yF-q3>oP?8ag zB33x>MIWGO9k1Js&*g;5K8?0gK?Ur%?bq9_Va!sX`9QmDoz=Vy8Ybwd<*xNX{%7U{ zoz*rJ#v!!02gmPVP5Sse z`OuD|P_8MmRfSV7H5`cPm^KacoK=?Svrhp+W0ZBG{q1_UKds@Lt!e+-XA! z7M_d@F7T%22Z-+vm94g#-#~{>MPzg7G`~YYoNE(>+Db|%_oG!=*x0D92ZraanExw< z60>My=ov3xb_?1fdI8(Pfxk!&diNc6OFwi7IHaJOdtxZ~*Wxv4uXk;E&VPs|P9zaf zED*Pc=;l&jHN8fU^IwP$o3d?V^GeKpu|#%WfP2(5JeqT?O4;j$0R zqmIU>wZ>Kx{f(=VkKJ8B$1$`|6E1t(YSJmc+_fRaAkx*4OplW67m~SO#1?*&R`d*= z`{>V;<$>mOFik7dTM|8Wo`WW%4Vd(4re$-Q$<8Cdn5?QHvdvcHOP4%4$-*3}I#eWj zN~@X9(&3S44LXBj*aa;wE-a|CKE-H16Q!ww z<1*0h?U`~Udopr$l{{)9OxZrJ&g5ZL8KzzXkn|sbjPu_ecDz5?uR+@*R)+%rir1?QK zr1r!?C2h_Njqi9n4&!kE*3*+_P;FlOEIkNx;z@MV#z@|oHIaiVaJJ(gE%w%iuX5-9 zg_sb~d1g)YBXW1V-fex<#xGK*Hu20>7-h-E#<#s46?Lt3+tzygR#OzY4m5m?r8&Jc z3l~<(zt^sQR?|5cx}oR+r07a7W^(p|9i%Ld&8yL>)W!q}cd_-vnPcn9o7YA+IDct+ zKGM5kM~&4q8k{JL=py9CYCcN&Hbx#-DMx-6X!s^~?tSTUqf1T6Cwto~(J;{0CYJB$ z+M>AUsK7x9422`yMn^F63eM4z0jo23Fmy17`Y7_R8(8^MwzOu z%g{tcZ5@;vpF~ZKML}{+9YHnqPp+xIr79J{AELhAPaz#IqTf%vrB?pslp1X7SI8Wd zgLT8t;7Z(TybEuDi}Yz~f?;3v3d_)Jw9sDr0!k-x+&#g0NAsT_zGCgz{w z$98qlVTWf8&IgGpRHj|Jq6eX3qFx<~fSxqmABm+6_PwY+Q>PAeZ<*}m(9KiltKVwS zeS5+O`N(G!hw(N>_ksC5MISjytj4HHxt{Yea&jo;MB__=ceT~wdcC8qre53Xtq`Ma z^#<*Nt=@0Uz$-;MVeLuRr>GQu;Yn49|8v(Z&8cR#M*Yp}a3qdB3ycHi~ha(U=lY zb=ftT5t^7RA|Na?!DXreoE5)Q3y2 zRuUmJFI3)Bs!ML8F8OGBGf8c8%_-hmJ{*O90rmChcFp+kw(0?A`%q6bMii0eFEs4P zowKhyYUDZH?R5N6SJg`I3T2}0#Qi|WJ4%~mIZ}O4f0H;5KV2=VSgmyF30MG%ku_9j zwxr^J>GC#qq`JnHsyMKk#F#2%M4s+wOBVA>is!+O-+f^nz61M^vj2XJK=Cv5wZydj0a}sp{y;c>IZjd@Wjk+T;}6qnJPEiMyKgYl75w*9sFC97#G&RjTu-S*dD^W14x z(-!ir#1i5KtBL-u9l3+eV-fN`eDwIDxTMWmeqPCqIB)`AzJKT+HN(7=VDuIm?2(~y*k}r%5@;b)c1aOtCGXJEh|V4nSW2#1a^Z!lrlJO9 zjXYS&(3%gffdscQTxjN3ly7VKaoE7T92u&_Asa^tbrmKTkK$|@_>gk#B8 zUNp}@^*G9il}iKp^$y8DF*6~_K$jC5Z1~!1x7<|J1~=`FP?b|(gDu6^_o3C}BP!sr zqQ_N0G2%T67oJcb@g{T_bqnsf=$nrjI_)oIaav=|=RW^Y>UBNST-$@QS(qxIm1 zUKBK1*HN|AA30OYz*U4}8K|p9uW@NzN;2u`=7R8_sGr~y*Qi154(#jo`KCk5@P-gYCNG-CC3 zKTSLFAQ7VQI^!p(G!h`cX`oQHHUP83)-S0Qh-cjml| zcPdrsv3l)8*W?X?=2Us8%X!q#)Y~m#FQ)#O{M~%KDwLPGz=^?WUz68g#lYA=C7-q> zqiniBZOLqaB065v$UtR^~9%KM&Z zGNy&3H=Ty7y~=#7rn#8bmuxgGhO|T%qAjTo6IQYy>xuo0lZ>l-c6FMn#6T6oldjl3@hsk-AOefZ4gPETF8eKrv$BwZA$rZ8gs#lU=ZS9Z<3A3LSShjZvYN zXVjR|GUPaw4i7a6T6Cy-Ew`R|uA&J|rvve+A(hg?9JNSqL+GQgl)Z5k;NuX9U-kBh;h1=}hK{>QKQU_2&s^|k#UPaf zZq{hyrdARQm2s<{3idX_Yddc!*2IHY;qdrG#;9KkPh5|2v6cLVrZJQ|EA@L$XuH%s zs@Sx~Rb44K(Yi$6JW$yjPU*V3xouVxeVQRt-%Ou_=)NstG7U4(d7$TQYMqsA%eP{Q zl{irqTmXq7A0-=it$ux)`ejP}jID{jB9Nsu(T5H8BnO8kbFeR5y1aL%XL>Q8uawC+ z1kzVnG8Hp@;bl*hT#06&i+P1=5CKnCyHmY%(&Ty?yG@N{VKyE-a!uTh^@g4gW(emo zpZLCqR8xFlyQ^p(ODr$!N8j-=rK6tTau$OkO-6!k~AA z-cO)U427Lf*toSlllfp$hw;ViB#_A`{(>gRdi_`N&r0em(l5)BK4zVxi^ip;UxAGx zPQP)L?ijB|eiHAb^uin>dwJ1|K^&jv@4>!f>zxY^; z|8J++PxgHJ(ZO*(lXI#}_A@F~9;x~~to!<`$P~XFmXawy8SLqmRDSS4v0j-V3UIKp z(FVxD(m_8Q(VH?fWmTq`s8wBfAWL|4qHUMq^*Vk=+0_Z!?8}yJDF%tmVbzJho31U} zqPexsyzfJYAwtf7a310>qrwh8m-5j#u|~%F5$`&+V7*BX_AngbRS$KQPr`-9(m?;&PKU}uWJl=u9+R5$N=wzH77$>F& ztyP%)j)BaM2etj+Z44WVU?`zgxQ{ytxTpj3s}(yvJ%Ohf!z-TBFo!zy2aZGy3QS>W zART{~B}3J#_ZR3xG(P23ey4Ml_Hek{Ps8gP+lvp>U_W45o9)cSF_lW6ibM&Nw57*) z`|Y)r<0t{bl|qd-Y=Rf>mzj|C_;&mb3U@wh{0yDwP-MLllXILYb1Dbo3|Ju+)fF#c z+sj{qs!*)4TQ(yCNm26SO1|@XplK`Ka*ErKFcK1Q(%l(}^NKkBElF(KIEZiysj`CRV#)l5wSKnqmD7nN@JJJ(Rq=~(yygO5=(r#I!M(L|ygzzX zI3Ai(6(3p{@@}A`Rbl7lP)q$zd(dmPbHza0xpE59iWcFeWSHBnln@4#>Ydnq+^;Yv zQWH|&?+K~Ber=kh&7d0 zdJ{9@Xw_+{LQ7=|37d<`BOF(mrqZh)6^@VfJDs8U`Gr;SU_n*<2Pl@Y1H)w-Bh&17 z%@n+qOebk*6B5srPgY^rIdVo$3B_XrQ4k?;4zNFHS@xK*8t%!xjtB3`_Tl6=`N z`z*Rx#Ily}i_{AWbD}qPyrz;;KcfD%y&Rgflce3;(g0SwF<3~?t%U8602TlLb^Cq- z8O>ndR`Wsxgzz~UvU8a8K(_NLY!9`oGp+PmG=-XCXsrzCe_?>B$z_Kw`dN7mYBj15FambB3m;Q~)|fVKSGoef|0 zu@oO!RB`%4_{(rEh)YQ@q%RZkamT%5l0k zYTf#rH@dup9t}j-cf3{C3L()=C2b9-_ldN1;Co2Ay{hyvd{8;8#^%KGyIT|7yZ0z#<;xv8TftK z`Bk-`QJQMeX^Zqr-SWDotmEkPD^VO6Tv64rvDiTqVnux-L)q-9?EigxqAdRJv!{Wo zJ_FshC(Z9q|Bn;s99Nv z&)DFbjo0+Dy*T(j7H6{CFf8Ic3>S)Sf7t${8P3{LOmL{#uT#$=38e6(r<;B|uH@mf zmjAX}<|k$9m5TG$#cp|$U!{-PH*2J{LB}z_kPgH5wAHC%yfCO`pj?FhDm|@#XPN+r z!*LxEzvb#qEnp{oRz2;?DDVI4lPn`uK8^HUQMHD!<2S5F7~WzS>a+SQxA|<38ql%a z)$2qf;9H50k&Qmfq*bXPIi-K=0{9Vs+N|wmPf64UP_+zUx?L z^;b+|{dLxL@PN5vJupATE@n?Lc>?SSkf)kG)#RyVPc3=s*;5bC9Stf)5~!R6(I%p1 zQBH!Eq#$w$tv~gWttk>j zHg3RwLDEfUmN7FFxXivm%#~W!`Zeq~|$}+rN%JNh;xip|9gnJx)N6j-{#i`1Xo#3!N~6qriD?%SUkHiEQi=BwF^I z)l4tK1ic>_MO(GF*~m||&n}zgvzqBUCh-D#y?oT%vuFrAfnM8hJ_PXE+ykISg5F_G z&X<)sctsQ{B@R%Biu{O7muoZApXHDsr|GO^TAE@0R z?04YZpT;)K&Xr%UNO=DtOs@=0v@y(Mh^IF&Ucf`*5I*+S@1?NQ8#_jacm;JL6@F(}F*8~Hhv9v7Ou?P~Kx{~v zVmrfd#00m4B{jNfd_Gzg2Hub{U+YOy{RollJe$5P(RCRW-rP-vx0AyEi@h^}kGi@R z|8J5^7$Eu!3K}cw*v4nl+BWprHUp?LB!S=Hq(*U}E(KJ!Cjycg#Uc=x3Fg;vl)7(y zE`6=IRMggpsE`0AsI3BSRIU4xVNekj0hj#0=ic9MW&&~P^4fmh-}yj(+g;B+_uO;N zJ@=fhe{h3Y-uK)KARSkj@(?+QJNM0)!izn`5mEr`fqI|Uzb_w;f5r&NdBNWCp(8NjoI-Vv;F4ee1L^4vdHKKmSafA#T}j^zJW z^yqIGzkhdl{}bAm560f^^(5_qFR5{B9sK*U3A!r+X7#bVl=nB{bB;gmQQlX_=brF& zyHA&Ul=pwRzYY!l2laQcD?juo?{6KC{}uY@4s!n09q+FqFC2rs&>(6-!ZFcLXoq>>ZltE9@j>;T`vH<588 z$;o38aYI-NmJ-e5R1C~fKaQ%1c;3hiLvC!EGn>6MEZ{kx->|C%e5kspJhnfgAMSw= zOy!7|UBjO48=T+|)c9koP8rfBVl3qlxC8?~Y;j1T_h^)Wn{AMc-@jXXvitKpo&EV+ zX)fE848$x3DXulsnPWO&zzVd5mK3_E@gcXVvp+FGeb?=`$d1o9uQkJ zBiN#u7)g#8D@TN^_=qWhOFl~V>jp>`b)(cz?DF2W&c}j1k~GYBV_;E3XGQh z?-A#Fwq008eFd@GGfzxfEHyrfo;Y?zUJkRh@3vZ#t?!o19Tc1YlkwXPUSf*<6Y(_P@^(vRKXcS&BqzYu=Ic7@-s zd%(}mE60VO*?a*Sj?9ug01EurdqZz>GjE-lP$8Oc>?Xp2r=lY`h%p=MjiT~k;_X-i z$R)T{G`wHzOqqO=AQ@3{M* zhKJOo75P1XZ$rBAf1&-Z4<%wa$qFLgZj>)ajzg6w`<%(lkNV_f=Kpyz^ZeoD42)(J zQ5z+*ZzfdWJj@3;p>!%q&DMQ*dDd*~v7>Cu)<8emS;eHrJ@I0%3ROR2HXEe1;x$vS zOP8|5cSCXv+8sGrRReKJlnWuSQnR2DjTHZIt zPZZ)H$l>JTOm(GXmNuQKZXV`bGB;tHwqt=MbwWaF*jcSDFF}Fhc-G# zD3w1mK;v6D-U*#j;FmV38JKVHmhB(T=%aMPff1_7xcJRt9I&t>Lc%Iwc$t*EtwvM3 zMxk~!V(pVCSM<(o-ht{cbB!|(qy$kb0_rM(TJw`UM3N6k8JRms=HWa`-rJ)Ur6%xC@Tq-oidw;n)FG7M&tER-eKxiP^f7jt-}z z387nA_?ykYr0B(}WgHv<(?GDFaHA3Im@h#v7oNHD5yCv#n7DpwRoGwpKO2Wm6?#k$USiQcM1c~t4jBg%ISwYKi~med=rg# z=2}3Kp085B$KHZqY5LFdD0nPADNY#l_Ew72q7n z*)og}KLR;`Mjp`U6kS&I4-Vb=tLdNapOC+O9Z;z%2S}CZzrT$7EpmuoH>i-g9)6GJ z$~;lyAo_Eh2P$7eF73Nh?-TW)djQ>Reu!LY@#)~wy$c!6uY^yX41}h4Cou>!I5Mwj z9d=F08mK??&VJSktkeFXF}(ciNZwD?Ftd=#VkJ{uEw6IqL*v!Y)x4Lg*a(5-{izX> z*BL!KkK}Cyu?`oK_dB|jow8;#N`Ll4#qXj*^+u^lFl(e!rKWw-sV`VuRsLL|iElfl z#APp7H~t18JMGKNgDxq$w~mp4RQ)JN_l}pf+V(?dOO&54ENvx86ts!j^7}cc*u;sgn!*2TMI*>|p+VPqS zjb#+z@G#mQuQ&c#wI}c|YtOk8&xp>LHT?7$Go~Fmbm+MHag(M_n>KFh^u~#^qDFZ7 z88gnFIc;KeqW{#%{)vreOqe;*KWRp6`kCKTKvnad2&iHEQ?+%T99JQ}zOh!6J;uLi zy%&4T64TRBf;s02+4+7hoID%S{C4#0&G@ zJ3RKZh3ie_+S7R}aa?07_1iq(-?72?^~@_acB{)zihiPdL*^pU(40P@aq1c48l$tO zPM)D#)(n?lnH0bSDF=_I6W$m&($m6|5>#{wx>2W zN|)yPr%v~u6PqwSI(5=iIy7tI%!$#d(rt|w4tR3&4RO{AtcuPUqo$huajcHB63h|d zx*m=0FZ!nFASN-hOBVh-e+$`3#p}0{%R5U)nd7T@+Zkea%Pc^m4imDRMso)u~@N45?Ycs`#TftC3Tf>!TUw* z*D?<&y6R}ic^lg#{A==8Hkv!7uuKA`Xa|4ABN$iyD_= zMEC!^@>Kit;s~5U9Dz?TAm5#q_{2x>GSWjg?iRYC=%1>ez>#{q9+<5F;rf)ek`D-^ zoiRMi&nWk7T%8Jq0L2_8TcFOcVxpMqIsAs|w`yk{uz%MHcrZ~nbPXP7l@XDzb-IF7jE$wa|++`7%5NTwFSn~ z0-dUVo5y^@W4z+nJ#=4J={a!RE1pGO&!R%_C0^s9!aL;QS6+Fz%}XX~*1zuS_Vbhu zE!q?~SccAwq<2Zd^dXD!skMS#yml!24 zdIIWuSzueCVXQCmUgS5D#oi{r@nXMt!3W?;x2Nb^hpRM00y~Nf^r>h3?rsn`qwl}$}oRKzT>=j)O*|W zI8ETy;HN!P4CA+j-pzX$JBn%gt9_Qs{q{X_!00900ZTp2jLEMHz3=U5T-S$upZM;V z`%m}G%U8+$?>uFMyk1zqI{6i<``E$dLAzHK3Zt}IS;F-__`l@ zzWb!ddquJ5(n4>%*z-Sy-iwMo_Xu*l-kNw=cYpMWyPM~7kaNR_Nd_JS@vVD#1o{=}~3(|YJzq9bCH|}HHROG#N zALH&K@3MW2=Zob1tKLG=JW;%~aKXODgZ&G6b@LwHU+imKzPESjKAukom6Pp_eY}tE zYkaa#uHNecp6|UOty}E%URGi(FZM1dG1e4&e^KJuUhLi8UnbVO{f%czNJ4pc?BUK- z1)IHI^LQ`z8r>f6RbJyRfUjV7-4M^A>ja%YG`%k#WPG;&G%$Ox_pO6GmmPQ~ox9A> zw`G3sL;h@Gz`6g`o*T*EEsdf7Lp=Y{B}0-b_Fmr4xU&z~^WQ#ivY%&lU)YM}{k*UA zGhXON0u4YtR{ihtETfEjBqL><OYmfK7KE?{jfX~?M@!r|T z^F)F7H+?)S3%y-^jpqx!+kM8iLhrji<5{ny+2-}`>}y<7EN^Zr_FmY}=<4IW)Muo8 z-s^nEEj~(rO#ZlypdW!&AsTB7ypQ<|2pnB6^giWdtbRkHKYOJWe<*I_{x+Yy@9;^& zroJR3bH8a`Nc2jF>=f;<-!7=Sz)`Oz$hD#wVq^q5+S2Zl}#x6?xw%GTxJMruG5vcpk^y$qRkG*Yq=f z<231nn+qNiT=057EHk!BJFfD1FWk>~wSO~2>%vm+yJf~>dv(fC@8eytpRrXi`l@}s zsr`({#cSpJ`+7evGcJ`y?!Gebn`Oq8&QkaDb7o=uTHxJWVsr^0Q-$8oN{n?yx6r4n zioGwZ830Lu4wM+%ijOdi&3%TgFELihAiw4FZY?o>Aw#vaulE;w7#rmFqrTqlCC0VV z@|FF(i9L)>a(hXC?{g)_z5UC{oG7_m55fU=gJ{1hHhwAi+3NNFw%B;a`%PXv<}5tZ z&s@fr2SK!jVr#%?ecGWQ$vk6zu7^7f2{OgHq^NJyT8Jk8SsCv z&GRdY`?S#ebYI}GgZp$J?~8qn2YlW?_BB40e&5_zZWlUZvrp{T^k!+Hx1-2-tI+#I zkq{tN);V#{PeHB%@4|hIEd?7H)vkWtErX1!`==>(3yEUuIS^v-e>$y(B|PjUc9O+=HSCV-n)Iqa_JELKJ*Hinzs~s zm-Ugp+|$SCltF?1UERl6RqVZ~k1l|u`(9npjHmqD26&$wVB9mn`@#StGeDPe;0Fco z7iIbyJNkG(=xZ$Sc|YxIT-(>no5c>a4!F*9BTag)z}x9HZZ5owd&unyud&XdQD=K5 z)_C9QXWZ@aF6!%ft6+iWQ=jovk@v-Z#>-y$@QK%ZcYnc&$NL)_i@gu^H$E!%F76LW z^j_cJ^Glz1Nq^5hK6&#epZAi!#^Z{V^!5I!pYce4Z*z&!RN}p|#Gz1hr{qxDew25D zaklP5|2JhKy!eeSng-2eJvfNxn~JJelz6V}bBTw`O??mLZ?eSOSz_E@;^qEhnfXn7 z$P3A)ew5w+V_E#49B}!byb&5+@g1I*6z-8c*z;_Wm%mpYczXetMF-2n4F@0GcChip z!K86Y>7{-BRQql#o-CE9_DTA-qUuaP&y&T?9xm&B<@{aN&-+0?0{j>@V%(?`wVU@Njv&zdXFv|3KjPOX+L26lsP2x%v(z zv&k;)QqjtZ>GuI>*R-z3vTv7{d1{6rb`VS3cvqjC*cDFIU5$yjdPJleq;(&n#0Z(~ zYy_glke#i$OGF&FP00G$8x? zztDb!J))Wd`wOq8U&-Te>fl@OYGFS@QtUK*_`UnKxq>rtS`21$L{eGGNJZVcIs~PM zO^(5j$9y7CtP5#h)S`s=aU}T@qO`nMpA1(`s%tJfC)W1SDherxdYg8Pi~e3ccw#l` zS{m(}I%k{m#d)pvY8`Eo24X8>wywuFDegZ{^!UxhWHelsOvJDMTMHVDyxrFHR4^rAFtE<@+Uje`bNf^ zEk*R5oNZ71h$+Bnf$d|Gm)ym7d^0q#k5i0aYS64BPDr)_Y z#*TFx^(m=oR3tfCHA)5$HS)32s#p1x*D8*Ax7Yd}HJi6m)N=morl~+=B4^t(D}vQK z&BXWlh~P*$=M^0;RPMl)?g~B0h!UUHyPm zp?TG+^am6!?Ld#F=1cD*ew;L6iqpw0Is{tosw2t*$h^3qL__`-0|Go#|(l;~<=U0=L8%vh)uA zGwGKCS>}4x4+pNz1IgilrCIt;^m7ldvh&M+HXWme?6aHi1zx6aBcAtkIM99J8OpKA&nRf?}`=Y)A|Nrv6c{EX4jiUCw)#eO)`*S%57=BM0h{h3GH zwzFdm}sR zv%}6Qns=~x14x~Zty-6dAXf8V2?w@E_ZfCxQEWi64>Uf=o&^ycC?nIc3~Jh~jsy}+ zF6%tavfuA{NYUlej*wQV=3y(L^x0yum@HZ+!LrVeB)==)EnC7>IU9((CmZ|)--6@? zH@>hMxXKz%NUos{bq+Ulnm#|Nnw2*WtKIEHm&xq0dpLCBtO<=1rMdhLX&mYwH*V&P zMt{Y5Q>LCVMfMO6`FX6;e$2hU72X2cW zjnt^pj!~t+rcZK_h?+P>^GQ~YA)AS5yf81klSkt3sHmTCqQZ*;aff;7G`)@W6(7x%RR@rp{8<-$-6h*l6LB@S)TP@-aA^KJ_0<=uJ2Mr3Y++>i&Kcj zVdc8wT>uq$*Gx!22K6y5rd(=&=C6XTKo!z~J^v81^^(p~Yj4Z5PJtbcv4+}6xuqv4F;GhV5KzN{Dm-_*_V1GDyS*pM%1il!6a5d>J5545 zbL3~edaZkYpDvMdA5fK($siyu6j4FXHpDe-LWIGjhj(2hO<({y^=uv8kuc=nJx*B{BbVa|T8^~7w-0C5 zWJgG#lKaW`&`C_R(1~Gq?<}SM(-?w6EFqmZbo(a-bz{)e{Gz#FJg`X3@yt#WKR!jTH}=r4jox zJgfWMZBr>db$xl0G>Fd)$~UeR*oa9H3ec?oX8DfqOk%A{!N84{xc+4ol1LCbiGE01 z9be;a^Z?~mU%6v{$=!p+>;#YeNSl{r8~iEx!$Kj6<68b`@|~VH*-iW#Tn-X3k@KdJXw3s@nAuv;k|-A# zSaz54?pZ7TfD35xBH2n+{>|%?t&6#r$da=q;73_~Gw!}qQV_A`tHSof5&P4ykh(L= z!SeU(?GL1S%<_n#m+4oJBYv{H9z98n_A0^@gSXNTBbb9buK7#gt`ri=st~c?TSj{b z1DPgp;@m;Gn1(#gyGMd1&c37GenW~a72AYc1-Gf};|Pv@Ikxexc>b>zhvro(p2F+2 zy*?SE;+Vfa@DcSA65v^xRZtIc1x_>ls(LBFPa6)Zx3||a7DEHSgkL(Fhug`6Ff5wNWI#{m9^3h*C;!h6e|Ajt@B z!lYnXJjh6Yro_@9pK z*zxJ-)H@kqhE$yLs|Ep^2GztYBGSb3=Fw2_;&ReTkkk+b&=I$J4XSzYq0$y+EbSAz zsXH!^E0e}COB6dwOC7v&8Y@tCtx}{T%(R&*SGvXNw^OLgD9J=|3ky>+O~?7{JF3&l zJ$_h--l;r#VoC6;%)Arooc0b z%LiiyYk%5z10ok^HC>@X1}W>z8mf?fiiW8A7#yGDrTr~)MX4eN(mU0a^mdgDxMpFV z7L7$tza_khhPTGCuLPIhD4;gcPVniY^ds_!FJyV4mxtMk_M|P~2f{f}-G%%__f+ro zg0MP+3t7#2Q%K%VuLmJ4`m|JKtA#*O4_OGrwei>p4AM-6*r%5J^Vau7xw3q5+=_sW z6;iN}tSa}W+Pw+7Hb#=zA=?B_OoD20vMga)DjXm}I_ymrBRBq|=WsFC zWm->Lo*l_hS^VXD<2z9vzeI=aj`-Sw_~XI&PM=xZVTYikI?#!gL~J^)3*WbX-1zJv z4fzh0ScRv`YB9K+Rg&)JfSm)Nq9G7C4OwTHG$6AX2&5+tX>ud3ktlD`JVutrc& z%Lk#;^qQ&U=qxnjI|`!Tv*J4nWm@m>a8JX0>5VX_GH>H+eTqdN3NY6Q!x~@hk$dqe zr0*@WPBPr0G6=9e>Fd;elg5YD1?gmu=fdyH?TFR#Hh5 zc~cyu(w@#?(6s-2r}->VxYbVl30OsvhX};NtV=|qnZxJ~s~5!z>;;O0PtEhr66P;< z8mi|$Eh3X^{IJhr<@`Q`Qx){O6qNIdo~w-(WC6^Uf*^;>j)zWlP($P=tn7Z1IS6@_ zAZ*jU*3e*7q(T$Y=0D zdF)dv7+KixYRmrC0n%fD4#YA556OML9e@1un7pIFDf&%Xs9Y`U*S)DaLDWapM z)M4{o%}%yVNB?nx#?P;Sm~fFU%i*Yuz%psDK5uL}Y9x)75p2uZwxazmW*)0BbC}8_ zsOjLOTVzkUixV&!0M(A-0(BAm#@o@gnL~5(-k0N_%LQrt%ltyYF{{baEf&-mnL`aL zg&NX+r=t!9jK)06#sajnP61R6uvYQ-qS7S$=xhev`1W<)?$M_(Ur|BVxa*dmseF zZFyLZ7mi}KFAq_)0wUQpgmQdk!$pF9b2JIN^; zUZ&1oFVQnwM1GC1SX5Zal5&VLJg&diekpUXtQ%(Q;Nt4RFw(KavNw zjP15S=iC=k4IDNh3`u+^i~Yw^^%<+o*5Mvl%oFP+1eHh{L}Ge=NZaDz(BYm~A&W~& z9SVyC*3H^nFWTwLbecAt4obbGD~=U~IKu5F+&C*!8+gr3Y@&kt0Bk@zHyw3`@c^P9 zO@j{(2ihgD$rGxN!V>!BwXzL&t;L6zXZ)Iv9bR4!uI>R5uC6UV-E5X)g;Ly*=Ot6V z3J{ieN*>Ks7V7aeGjpqPo;|*lpn#!Tl~!?Dg)RW2v}{|dZ}zI%RM3-_V`mZge9LS; z93-u6sWTn`3P$?-JUM(i@QY5-uv7D*H~0w;V2KWGyo9?VM zYhFd2!Irtk14wH|x`U@7&kOvUo48d4(SO31-kbTes!u*$C8;(HY0E4evMsaR#mIc} zngdS{^19k3ud9W;?moF_Lf-rmhI?z+{+KzlHC(w9D+e%At&PMAv65xs%8lXn?M0f- z68B@?DfM=Hc>N9r+-iTT$nw0zMn6kfA9h1Vr%Fo0m22t)Pg&+M??voCyX2*fi2MxJL(75R{Q66)f4?LHLf&_VxOYt|HcaZC3=EVv!ZdYeC{Degt!x1 zQ)&6mj{g+ehE^!K?ipo47 z@A*mp^UvSQ?!c5?bxs7=6NS@C;jWBWts^o!D|%9`ywa(wlSKVKfoVnybaviTk*1RO}+Wx)T1TyjCMGFLL2l7(Yq5x#q&e1SnXgk^89_`=TlEM zs;gEdDC(8(@be2Q`y3CG|Crhor;&4l8tlPn5Nv>L9k7s6Wdau*FJdp46pVtZzGvEG@Vf_)DDNyw>BgE&)GjC{+5FZ03S-!o+{9qQA4 zd_gyy{b6iG=>*LiNr&H(_Lo^)Hfr}JrIzR2ZL2)7C%QM_*XSuLK9}gNS3sN<^8IV- z6Gk)SS^(Hjim(#@Y>ybhef-4M6CS@F*DY6!7Yd%dS7~%ApTYG~A1nUmb}Lo%gRtGK z-oiqF@lUAuN?X-l__4SnxI!t3Dpy&7=Vnz{p4DOdS1Pp)58fH{0VCANehmQ;LG?bk z=f!a9A<3z*C7e_>WZJCMgXK-+aBwJ5zLtmF`2W})ai!365?$bgKev**Cf~zNu2QN$ zNWADPot%mCWuITXs~%!``kdsw6rWQsqW8_U8yQM3$Eqaibbk)r`3m$8aVu+j@kJhp zzovMaX%gA$Yl>s6aR{O6;&ON!?Z(qCi5>ZRXXAZOf$yJq017@hzS_c}i(M zRM81i8LE6=^s-F8ysdbPYzkV>@0OHjrvlfRjVu1Ge)>e`Fx7QFDDV}EOw$+DWm96b4e(AHx>Hvo3Wyg zy)|NY+8wG7_NpOmi48HhIL8-4?$|c)2`3qaFy%a&Z*?jf%BG$DqUSX2+#@=zX=h37 ze{`E-*Q>B|Iepxawrw@z{n4A#V$ex>@+=m!V*h*!`|-V(|6{(!H}wkCJzlrDd& zt1+9!kRvS~qy)%$Kfxz~ujmC7g#BjX2EOM*cwZO5W^;;9J%Kz@)qqm}Ww{cT$ujMfhqRNf>PM|Mbw)~i{0npJZJ84 z_yd<2=Fm1sI|GmoVxdf`KoaJP7z_6N20b5!odre<8)BtSKs;}3z(}GZd6{6h*;~;cHG7e^4d#1zDe3$FzEVYNM%Un#o z`n#E^q`dTb{2_V%&&6kj&4I7!MQ?a*CjMdcA~5G)MK2iJe=NPAz<&#R5%?l{5%`*3 z{Nw3Go_;RA8Shl{5t1;;5bGgqcF=jh1%-ijMv~|HWWj1u`n${^(F@@ru2h*zh#4;q zeLC^`Re>KlR8eo@`vc>h7sUn}9n1x6zuC{_>ASum24R&iV_`RUZ|iGR`lCLHZ-?cW_VM?wD1kNrUK`C_yXC4 zz9+Yttof^m{Ys?rJ6uJH)?$!@^<j>5HsepPSd!&fPs+T0x@GK1EeOdsNcuR8rL3cK&T_qKQ#Z;Iy)6Hi8WLzerLJ6wO96 z(_SBVhaNp6TIPYONsiTx^n!K`uCIJ2ya2^w_k8n`Khk<0R3G|twvv|FA`6Qi`TR12 z&HmMvS&I?Ib7=`_lw059^D7MOElA3dIKLjmA4HO8fiqjh*$$9(z#8rALZqy|^26`~ zta1R{iQK4K`_$T9^lPMmfokLoSq|O4=klNQ*N;WCBR#7fZ}=RGE;oQgnxke2M7_WO zfk*G=ib+!s++mYkq+fH&jIdevBL6$2Ul#xhB`Rw9K<(LmTcfHRqBjg@|CN2%QvFya z7asj`Jw=HadHg~!U$csLuRJ}g(w~;-kR4i|q;qS259QpDxA8cBs2tjit3#U}(H>W9 zTjP)Q+qR}OXkPKK^3!*@R-Y&TpzUtN%y(B!O+tU_T~%|rHt0cD6W_V-x&Mhy4paBb z9U~qT434^{(+~w;uw_c=GLY8wt<%J6i!(HW2Ienss^C9T0JywBRR2iw0;Rtu@0`*G^tIl=+@ z!cu996c>MMd*zM=?PWZ-rwiY=Ztq+u_v)MHICQY1F?fC?`YjCHaRJU`el%m}@K;Vg zb_A<9p7BWRFRqlRbN?-WrN2rBP3{@rvEO->7RN)LeEHUE5AqwaZz0{b6~+!*;)xEx zl_tnOfLLRVhY@Ei`eWA~fHeU~#oCF}GR1hKAHPU5!In(dBXrw#gL{$c4-(c(kk zU0e|T{q2%JJY9Kv!@t?&7>?ci6KCVP4Hszmg`08uf8jY#66O7z_6mK@H;rS#5NmhV zz&^>~VO&u3z2@5CJCk26D_NDA+58M!lrCY&jjx=0KF`8spx-`ey!9Qn zD|sYT($s#XWnDf)N{pB3HE3%>L+M!zjd%J3xw$ zRuz)TOw@AEnQ91w-L+t+hpU+=<;xzNf;Q}$@hcmsQV|oJd-=rb4x}?WgO)U1@tb+2bc0Ez*Mo#ql?SQkXd)zK(*DO*3hS9lwiv zbQVOmYl+Ko_FX}ByYwx-#_#OD$i9*~ek2sxy2kowhv3Fx_=*D*EQcb%TjtUY>}Hx5 ztMv-F7_WTjO~01imtudl%vwI~d|6K@B(Q#dUpC#$i)AVb7$tc}&1^#hFS@T>3jm^& z0Dh$pBOCZ+cL6bvKrE9MI*?bSxwH)@r}N{M_eO?<{?AOGNoGwy#X68tyZCg92`_V- z5uw4CC|A=otT3DqaZd-wX*<3{VX~~wuCkG>z(Jf=S z;D&C_{n9@QVEee8R?cga_GOkYriS%uuh&_3+}@>?;Zo|CZe!BZsl~avYo( zv1==z!{V}#E<6(n>@?#IGL*|t&_6F)KVd=G2bbe-=F$$Ua+M@oxEG5h#x_>v~J%6+UnP@e~0Whjj{1^Fg&77bAI4A#V@>gcC((1C> zy9(=5XTr9)t1SIi{jrjVmxt{iMLh4++mn1@`&`=GgUMSQwl`9R$80?x`vYoSw@UxR z=29$yx6S*Wl{)+iDch>t%I%Z7+zDM~>#^Idc!vI@Dfe3~Y_ta6kG(!Rb^IP6)+RG? zWtJ}V?ANN@`jx}yh=;bVv&>PeBB{fI;r2HQ)8k=Lo&H+OvUnd@MWS^iI!+}TMxva4 z3R{x&y}S{Iau%%+5U2Za;~X(lXdzv4ero-5{oN};Wx?hazV+CUoej4d_$WFpY(EuA zPK7&uG=%tvEj>n9vTkjGJ(Ke%KBNW4+6dc!5xE6k?xQ+65V*QlPBYZ97wdP;` zDoqrEeMsVw*c3T7;tTPjoP}$YOjl+wJm>7Z1@_0qj0Bd&G!IcT$5)FU9}+H3L~ROlUfj_&UkKtbkdq6|$J6qVlpxF22%%SEw8Gh=Aap@YyLhb1 z8nDPK+@ezeDb7Pym9tk^z@00ma_3>NMA_$Za>m_#ROc$RmA7ln6vFzgOgP)efQs~} zN~|OO$fXg!R4ap+I(0xuDl4_$ckn4hG~?Lb>MYS5=w%qMG-hHeckYH^IDk;H%CaAJ zML3k!43}$ui~M#tgRp{HIV{vANdsHv9&D`;0xMM33T&OX7b{|7Foovu6G@(s5exy< zzaL^SBB|L0wa|;^|00uPG(rcYGJRsjT!ERlz*J5PJ4cnU4{d$|ESJ}QK;4|75*K?` z$%Js}MI;sTq<_yFr{4B zCbl(_no_U}+I)wy(`$5<@G*jQJ<2=UDenLZ;4wb4hU=7UM;R3|8_ zu+(gpt(MG%+Qcajmy|vyAD6a`__p6{zL7F&%@ttO{UDzhF=}*i5!6xrkWuCG$H;5{ z%_j-I*_kZ%pw^*tBC?hV2Hqt@bOmRMgic_Zmo2|(b^#M~N`ceC%d#D;keTbSIe$Y3 zzmc#0dUW2A@TNmuI-cuJ?EUnQq~RD!X>?Zz?1Auw4?IW-RMbocRsj5%3WG=vZ)F-a(^KvSF{qG`p=^^xyRo@vMnK%z)1DF2n zV}X=QG^9_trK1N2yE?PcMNc3g>tA+1Hc6Bf);SI}*C4Ttk(e1Zv#q3K1Qw{NkhtLP z=1@(A>K7YaW7)`b@fWqxYKqPNdaSR`KH6^aik>AoI#!HcW*~N+=SSyCjD;BN$PCn2 zs3sU-+sI3a3+3)HW9}q8blT zrHZ=LYz<1V5-*WC{yWt4kcj#SMqBwS=cTDy6l7%Kcpo?Q_GCE88Jvy6o`${RFOEm_ zW$}UBcqy4zoO$ik57m%(8LHJ%b-Ynw*bL|vtk-U#WzNcmS72tHpAUC8&($W!IGR+EKwDH=%M!%u(N$e-T)>nM3 zuV6jgjVeNb|y%Re8TI($B|I7*5S z1^q-{QTeDuhYdXG>M8bPMGv8;Xh)xrucvrS^c2rmy{v^tchv+Ywc_aFZ(KJixFT`iy7w9ie5Pu@=mYfhd zu|Rk%IZ(|43HLLfeb)XxbQxts+LS90E35lqd&sOTDzC3x%W<8;2x?x`wzJL+2X;gc z5e1sk{6*}w4qU4A_*+{#g4+RKXKXXcV~2+Asb!rtmKuc~S+=Z^ zthIz0>CFLg^yT3TJ}J6i+^!- zJj|4c{iG;*e6^zJ5wWI1>0m^ttQJ1~YRVe24GG+btZ^C-nPJ%f6_slfvaD3xp>hSQ zx0uc1Z$`v#5!sYHtjaPI`^fviyRr7gy~*cA5qqAeI+?h5MPC=#eCL7h8y14qlTTA`x_b@r!SF$zKbyKvT0Q&yd`cJ3~6 zY=04^9|H8y7yRLfjG?RDD)5e^#utRdzp0WUMF1BRfPB(1)kSj!&Ie9Fi}O~V7N?8i zk|!t~&STs*%`G>gdy62?(KeJrpiYIJH;h?DTD&=FIib4Fh9aXoq|O>Yj;8r{FF z(#dQV4O8|p`eu56ok;6TB-eJO+R)EVn={`Er%piBJD$@qw6{VTO{n^HpVS#R=~(P# z)t^WJi0igd zL1Vb+o3Im7_^nh;$vUNIDrIDpA|kh*^_(YJg_DU!EgI9EJ5=GT*46Z?Y|5LY+0MDz zw6${&=-D}3D9sz3t3OYDmZxtjQ$xRJ&!HBw$dajsH*2X=RGuD8uk@5jNMK=?p7c-< z$+l~rnnz9wd z@}#V?Ni2Q!k{}AFgFZ*$%H0hJdLSO&PCUBLK!=+ zO4}4e+ccR;eG=NH$!MFNF%z$oOsl~f{p>|zNhRLA^R!{8az(!+Q9qYRS{-Tn7(9qH zp#PRA)5LdF+NYz@K3yW(r*Po$#zWZ`V55N?j@GFUTBj>RO)DL((`NZXe^jy^Jdnxt zM=6nDW9Xjh&^?V(x+gd*pFZ8}*aa?zP|{x2UHPbxA&&%S^+7p(ldhTdLG(>-JI%Q0 z-GK=DCiv*x^i5;3`lbuZ=o$K^sig0rZz@3DMCZ(A+5cCDgKjUQ<$3c{fT+T_ZZ(?^ zAY~+}f)SwdcXUn*07CAk@CVxQW0X)}&kRQGV>yr9BYc{UP&OD0l&(8wXPUmca!Ie} zWjS6Qaanp`hC(+!s z(ktXIzNWz)CCw*`&#J0Op3Js&Iw&Ad7ebXsk8cb>a^l37}w(E%pz~sos-YPA$KC?y* zvfV2U=`p{*-mm?7zt-Ka`Fg+h>-}0N3@~~kFPy)U=!x}q1oNQb=JfQ)27Wh!;P{o z*rtD)9}~0I<*;`0GxfnAwMC1zV=~g$_t64GFp?5ORS}qu5|&qX@NwL{EmFCuKJbQ_ z*g%2AZ9wvApEVUrPP2I@Z*W5PNI2OilBylxtFQdvnAC9C%%TBoVa=b0efB(*uCJmt z2g`u>5rO@(*OKV#TitM~fVml{<{nai5WCQu3Jn zggWekdQ&B!?g$*Mq?tbqrgfLvGtF-KIC`3Otx{1a;E0Jb(W}gn8?E-&3NydRYrb2w zYJTSStVOs9M6h_o-__th3DDEWQPSsZ2k8BI*Pam~@nm*f@E)?6@sJ$>#$&r4k0Lc5 zAw3=#CA0mY#^X~hqdMbZF8qxQj*Q7C+^}b~_mH>ihO|9^nLQTsdqo28M6rf@C1SV9 z38>0+#MAEdpR@&vCdF5YUHumNAH!&OY-xSqljwo?0GBjI6ilhAyT$Qe-I9EOtXgAeOp|;LL}Kx6;2+D>#+?|Q0%^N^87L@FuPiw zGPkndb3WORmF+F_(za;71O?Qp0w@%)o8KtsN2;|}qb91G|8|9=DJbGVdvzimi zTcn)est>IMQ9ConIz&Fs(=yiy~MlY6HeO!c@u_JlR8v6}k~*0L{Q$b1wj zqf<%P7*)C_0`8d2_fdhx?+!ZpZ%Qz%EPd6z6cQDkkY9@Lqq63_RJ7kSHpr&Ju4us zZp%Ctu~*j*8(9`hv4W@ur^i4Ea{8&ru*ntC{vs6kt|WA4!)F{VEIM~U zI8|qgopOBpf#!wBP{h%x3%pc;KjAK+duD4t$TXySRY8mO8QbLDEfzM+ov}BMNuB8} zhy*@16XJMYj^tLp#Q9#9inj3juKJY4?j$i17rjZL5&Ka<(Y~qBYJasz?HhoLMcDlg zC@NB`06WERlgNs{Dvqr73a3iMRaYqfN}uSMaOFBFEleDsa}Q*o$JEGw4hOtOzH;6;(V@R|1oizeBjqOj)^Q4Ycpvle7` z8V@h8x4-u}2SUORqBED@e01_^{jls^45X9h3Y6QzYZ@;bI z7RlQp6}B*k@3hHdF5D&suh4+#J_^fr_>YcAs@zDwDPLqZy+Y(cF;K{&NAoM}52Pcft~>$~`|tTpfJ zXQe{)?mdoO08jJ2V?T?eLZ1mb*rOmAZQ}J4<@|b%y>1ZW-HRV08GQ#*+lw&Mk=4p^`G$xVu9TSd%#56&UqF4St*D^uEZh5&8hX#Mg?xzh_zN=XY_RZ zu0>KOvqSlD!MWeFK4NY}&i}+po=;>luAoKyEiOA$)<0XGN5bUutc|}~7(Fxu;?nYl z&%zR5r%WC{;qen53!;7HaVL)ygagw_wf3HPBbAGERK4R_le)?`titc$AwW4Sp)fCEwVs$TBJN3CW*VUPhN!<&+o7 zFOO~An(EIlZ&0u00ik!@4FL@v1s~xDtaztl1|U3gCX0SFu;{Ie9t20wh>LfprEYDsgl030A5@@K3Jx2^)oGe(?vo=JAS=EiMzf{qQ2TL>U9Fk|@Zzyx+0_7B7 z*ocbg*^P4qOOl+FhQZh@=b-;1bFI4`*RdEUk1c~qI9B+Oc4fPFzRW9ZsFKGD!xCco zrKvbKgs+GMHt6RKu{BomL|BhwtK~(e)zRAzJFbewZrJGRSt?#D^_Hp4nLK#puTnYr z!PN2tb4=E&wtRVRsEm;K0?x`0*kg;|=dAo7r^uB2@PXVU3q^eBe!wRWHj9fAA27z) zuEd9TBA(CO{^OAXl7!9KDp1~HaohrkQe%Dffi=;=^>U;_iw~=^tb(uz5zlH79v}yr z2dKA?{2YT} za8GunM`p{D8wxWwXUSkrnmbHMa~aOIt%={s8UD!P{ z+AqA4M#%3V@RkiMo3omAKudVQx-#oKn5jD+6S$TEaybv|m#djjn@=lT5m*jM2#X>6 zj%?;Qv$R9Z%R0iI55%l2VxPg;XgT^^k1$yW?zcy4gzCzXPv`;k6Z@b1^P28?&vrTQ z8S08u!XR{s>0U?VV3xevU?C=Z9dd};vKz}fYT!i%)KpQ<2^Q^dFb9mWgcB{=(jD|A z>&7aJ`?^zGYEFgUV^^uJnxv<}5Y|*<;~q2zoKn$J6XgAPjAEt`7GnyZwub`*?UE=4 z4mX&`3hH?Q*EnQbdM}_zW#?->h|~WkGmk1R&IO1P`va?^`^gD2UpO@nQ=N_}DzQWl z^JV^`?sXnbpk1ow&|_CV7mKpx5C3HI8u=$C?G=u`#9@A4b|;y+bd|My*xh@}KOAAB zLb+YoLHm8CT%~16W+YiXh0>A`3)c&vMHpt=p68pI=X8TD#S-9t*c!hX(M^D!| z!Mku^bL^=eBuMr@%M=|FnG6Fw&bx-~k)p!DI5O*LB@e`CJz!k*EQAE5j{toa3sOf= zmo>|Ikj$?ZOXPM88GYU2XoIV6Rte2Ao5h*Ed{2%pvxe;<6FxS!`#7JorK|VDVHP5k zo88~m{NK5fGaun#+*ZM!24UJ4<6jq)(Tz+0jFiIvcCSwh)2IQkEQhM-NJh42*5uPT zXEJ5>a&Ic#o8it_%+be7#YPAct_xM4)E`_CiHP%xl>+L3L%qywRu{>#GV@sPb59^3 zU-bGGwm(%i1PfG7D|y34KIiS)C(7l;kTzuwcd8t{SBEFHyp zk0(6r-nCrK#I2-N2%DNdrDJ5!=;RsaH6zE$rDNo&9; zUP8N)^>>NYyYnhQ{c?cu;wp0I%zn|fIcDYS;3dKfy4%QVUi_F8pdDGoyAHCBkVCv- zOz6tYMTYwHkyY8LxTOW%!s(fd(*4Pi8VyInHhD7y(nO zK%YKBQ>t+$AX?L)!X>e6uwilwdClc;D#1nTqX5$y+mpulXW9stYzE<*Krr@3bia=EakNm_17Mp^RI(jpI}DlrqXI!Rf6ol0at%95v+79|kI z@w|Jwq^Q;@ES*B0T3Y0Ra`ub{rKSd*V!TRmmprw!$O9?N=z$>dY#t=x6#2ARo@kLg z;Gfq+%+9$&Sny4}R~M}Cysj)e%DUf$8ueva`v)!q5xe0DM)~5~Ju%HeCTqsqbz86- zJhP?l1L0RGXAZP}ZX2W>!dJJBZ&pj)Mnv1OR_d%NQj*!Dq-ec}z4Bfc$s!?e7xPQG zX6>iU<`etydchhQk7cwy-|{-A-;l3H=8o)okJI;Myiu>iNwxl@=Ww3bmA}HNfkpJ! zym+}R9xGjcA)@?aHxDizCT6>JgkC%5%PQIX+Hn!t(Yc2!+r#m8AJID0Xe?3-T56QL zc5JQ3@k6Odmtx%CW9^Wo!dW|xS8Ipx+V0xHu>e_88X~YIV`V8BFHF%CpqQk?+@;GtQUg;{%V}h8N41 zn}l}B%{4-{iL{$laW@G$mXCMe=oED8I_KslLnmYbky3<`O2TWZoSR>c z*WX!Fq}ZAIiA9B{u(PUg8*-Nw^4>p_vZ1@nh4@2+?~!hBUEZYM-{UMRw@I%^cbkxW zzTYgZ#a@=mr8Sa zzDd{AdaKmLDzYaTeyLm28j>aAxE4}fqw8&5AobFo(NgdIQU%w$r6^f|NIiO)RM&vB!r4KF3_4;y8n|iu!qq^L@g-fXAHod-F>!%cUd zaq3#Gt(G>lENqb4TbAqfWmZ$D$c?N_AZ>jLy|`zKEI#99SgV1BC2LNtT6E+Hi->jdX?B@> zQ_Bt?S$DcwcMfqsR>{YptUP=S@{y&-=YF*0qgs6U$m-M0>XUJ%z|8UTk@aWhcs{ZK zb+Z6H?tYxjN44*ivfG7^) zo$&B$%mI_}7Ih51YPvkJ=QC~D^#VOlk9R3UShPPby)uhrVus44~M!{Nwa>;&*P$h<1`Gtn41(V^6^!3k(A%+( z#pbh(>3_1WiYw%?u9|DLsPH~deYYN3zPtL)(Wh(uT>&(^7yaEMj)K7%U#v;k2m9CR z?;cRPvwZ#Caq>p&pR)S9HW^kix|zeLzgK^!f;#uq-zj&SS!4WvhW>6>Z23Yx-d94B zzgeC41BWgp|7H5T?}E>Z{}=Rm!znjMuho9;{}1{+2}k(}R)^YupQVp{<>~Wqh~y~q z=E=N5nOEv4^ZroY1_g7pd9~%!Q04uhd@Zjy?MqV8Qj~qo=$#;tLdw-gXzi`)gJEYBrLrE-QI7N;eCU^yuv^ zY^TLHd15bwJ)d!~Ok`ZPTlU&0GVaE#j7x(=+w(<2ZrymgMUi!9hP0SVPwJ}ZB2sQ$ zHP^LVgItkz>nzeB?#@NrJ*_u!cO>6>h`ZM-IaicFIfqtevxK*Fd?7C5Hec9PdU{3b zGrwOfzOk3_T|L(m@3M`D^mIK%*snq@`JduK;%C-!SGKjFkGJ_AIb*^14Wa%a(2)^e=Fe|5rtT}BFb z|2IpD8Q@tzbY=Kgwv-@^ham-XUv>9-G4Sdr6)|D z=s#mZbi%Y5lZX0^(z4o9fv(rrzb(cWbwPAV$3(qtu_cZ1at82Jkv;DyU!oE`s7V~?<#+K?Flc7J6^ll#JRR9+AE_3s5e&@RbQ3ut+c??kkhot_aLoa{1c5Fa zf_q(cuCWtQ{;;}Kvj7hd;N1;nl1|`9DCYQsY9x9x-`6Oq`5*DfI$Tg zK4SM-$rF$-SAgN8gU(K1^vWR{94uR}uxycDFT%;|%as^Qmwj0An2CPiWKO=s;IdR~ zL~8?Q`RDEK!8<^rZFFJ#S z*-l{IIv~AWI^g0DjZKd6>mF>vS$IvUc>_i@Z87$KUrgYrVKc>3tl2!2f*?w&dgWhL z(c_iW%D@P4Y&?Nuvzbvn2*(rUBGuz{P%wQ?g&rx|*`_iG2IQGnJy?FDyapHUl53AI zP4XrQE#kGAc)!4zmf|cn6#sM|v)RHEfD;bYY%RpQKw=(kwVVL23Q4mOVapDqQHtcj z1^`^~-9fEmowt64=Yro=Lmm+qF=c|>V71J2Fk6VlTG|tFI-(rrrpWAuj+WgNzXWeK z)3=juvE{^vju6Nc=}zK9zhf>e2B?_!upw?Xe@cglKO&2A69Jk*BB3|)h2ZcwZ-oj& zGW$LNOIeWnw_|^Bps_l7v;;PhQ}y_NB(RCO@NEinbqNgOx9Th3aSHA*Q)1_rUwFqn zH?m4QUljJ?>s1dFIGhUlBM?&QE|E-RTD5T-NzLJ0HRf=D&Jxw~SRG&cchs!nYb&=t zs%ICfUSh*^R)w$~qQ+5vD&JATwmWNr6sJin)}vu%P;MrMQ;rolzT6+}3mW3Rg+j7O zMn7?sqytI|hKcTn5V1L=@+EQA9~AgtaV|WFs?*tqkF(Gf$u}Q&W!Q}{_(UFrD@fmq z<5GpsW@;gg3J0z)50aJH&fokAMNk2W(_$vxBN>xNFZm?m1d$ty?n_*tQU!lLz2vu zs{J5D&V@9Uh|TOf6m2KanKZ*L;-jpuj%I=Uq9B_As z7&?4*tD4hK3C!^FR8y6nBneYd!qRVWc@wlPG)pl(W3>h*D)_xg6O@shB^V>F)`j>DX-w3eS@MI{~4SM=(|pxDiR)>5@84ow z`PME%M}|zEaoWz-G6?%;wp&-f71Lj>qtHKzireYyANbYB|@r?&!oC#h4H1FW>{v&b;IKS`zBO3EofWn#mTGIbVk zww3&@q{`#`Ys;q)g$U2IvW8vD+;LVlvBXNb2FfXxYq5AM5JH)p8RX~&{D9)*af{I) zMOrw^2#S^B!(yUnR*L*UXiSMjAp7si$KUVeMvT5dEY%0K3nSC60o(esN?EuCAB zTYJ&f+*0k0a_L;O#QC5)wX%%l4lp>+h1(a0ty@{ahlm}6elmobz1z~wtvc^r=jNG$ zRE2c-qM8vA8#~L+pkG>`%fz(Iv2qkt&SAFf0KsO5!66DzfhSN`$tm*VSqEswcyqw1 zZd7*{6H+y(L}UykflD#RNQ*#&5q@pqz^Djg5TB%0J#xt?= zSS~7L&C!^k4v~R(0!=Z44yvo&NLd^RgMX1zKSB*uv7&HLx~RRCNbDMSXkX)52^3mT z23a_>ygL1#%zS6wr;Y{+5n2k@RT^EAlRqFqn4mi2;dF(G`>=kKlE{Hj1m`;zo%$|* zRuBemT6t;gAtxkbLYl51CT^iXs5)P|lBLh3I}Rb?lmK_>D2u8pDP2n&!^stbkLm^Y zg1qj%V7j_@83p&+lUzinszmPkaj1K9vU_vAzUjPUknO^D-2+o2uW z?KpgqtYHHWsZjmFnUjQ$T&Bo^wx^1unks;zm247VDz5$w(njnK{K-4VK!(ls&l@Cy z@_}-)H1~3Th8-VbFpC0cZD##q%xT1;E%84TKpyj=>!hUQ_$n)Ps#vW}!LZWt3FQ}~ z89d*AVwxAqJ|TD54}45|RvWWf`w%>{yaH+DTg;DBWyWM9RR}2k7Wxx)=EtjH;sV~i zGCOk)o6P2V>0NxySiM?kzg0S;ZW3M4$1gI!1SvJXI^St~uH8sO3P=S~o@4N=CIK7D z9NMBgi|7P*o+zRwthqi<3UTZxDm2m(3O!psDz_7imgCE-GB2w2g6BE|NJk zyp+T8YKc|f9E{DZ&^N3Qj+D_e55ltsy!##SIX}rb=KrzxCU8=fSKfa&G|~{{HjyYA zmx^g)w=12PNDIL(=$2brtwcqcXd;9q5D`dICAb6&s!ICirj^7v`hPR?#u>Ai*U7|; z2_hP#S-NpYqlphgf=ebq4dI61@ng9Er@cGbnm*+m~dCob{Ilt#T z{)!j5C2|_Pbv(1r(|cRO0zJvDJG0%Xs1W3`Ga|EtOV`uq?jU*2%`?2ZWCQek-Q=~0 z$hFzCtn($@-=INC48A&|_2sNVe}!bhRy(%$tq|*(v;0Ouu=zJ_=7unEvXJktpfsM{ zxlVpesfos?o!lP|=AMBxfNU0T-mVB1+m$4LM{dSyHwqniI1*INMRwXh7jeI1XHU;unBufa6So}cDgJT}d>cVMJ2Kx{doBH>?wm`d@K z5fCVLqW;Ygcl{gS(h2z7UCiY0+3WPEVzE!cC>8bG^ohkjZ@4sihwj@AvDje2fnxtr znokI}`f@1t@3dFWX8D6m0*b8=c}nNjqUm6vxICJKRVbQHAlU|q9ir(3#_cK+TjU|S zpFBrCG-}DE=o@?G80ER7o zT1q|u4ErdXO4v^SFzj8tC9ea(u*EnhCGIeJRgkp>y@i-JfnkfaR`RNr*Zsn<^ER)T zNhSIWdC6Ufb_0ezLrNQCQivL4ac&{Z4H$M@N}6m^h_VS}PVPdC8!+r+_6Nfje@x}B zR#=sSb6dvrLSl=iE^g}P+HK+$?WwQ7OEcm=zGt{NOYT)I$v6`UM0V;t7RXcm`J?i$ zUpJq#ec|;tts^nZ)2VFR^(NdZCKnM@k%jVG)g_vP4 zSY6dJS_*z9|N7EzxhB48vg7uQ6xcC&i#zrvBL}-x4o8r^DW1)j(`6?pF*J}&Za znhUJ~A8%5$=il(-9|%9L_-)Xo3LWQHq2kPro)B^i9XF715Z($QXU-^eoL_~YGkf*} zAtzM=JURGr%26;mPZUSacYhuHc)YzWk*Cl5L*=@<+p${R7Aa4k6zk5I`;{T1|Kd%!Xm@7eFr7I7xUw0Qsq5j=~`&N8w+6 z0mu&ua}-f32_v!;fVSKL&_muEWXqed4-BWP)S5wsv(epj7SylSf+n6mm!7?#bDkRsh|- zj+!NX6-%v+@1{P>{w>z0q7n4DJ&TvRZ~JWh9-z(~zDhq5=D=r|OO3%OS^s*X2&yTcWDC_+&TMAQdIX_K1xHiE;KvzSos z<*?{(#Qml+6#j1mJ*Fs%zbEhkx|{5R1}rbhBjEer1rP2tcz9Vc7H%)v(~;ZU1KH@I z*QAfqUeG_iUZzgh=b`<p4E;DgQ!y z0)Y;SAu))OumJUHRsPdZU8_G!&ZNkIj#mzNvD$+ zpHX7$kEPCwPEPpO3sXYViY3NgZ?r)vv0L_DLo9Q!Q#64d)l}$~T%I+Rm}xO5x1I#R zL8wz|(5U#9H{#isE1TO-tCisJJ%S9Nzj1Jp=>=*j)yqytQIyUR#7;Ae!k$B!IykIb z68Edoovwnnwuf{kyc;945>7qKq%Vow5tVlI7mm#)`2<-Db8?k5! zpQZ0F6ypX(U;l*HWGo-1UnV4s_f&H|s2Q!DMEY9(&m=H@Q3&sm63xlE_U_n!?4Rbk zNYGvJAxY*ZYU!?;W|QkorRCcI;ia34|#XS z5vf97B&TdnUGe24cN5=)W4a$UH&l}CkK`UE!FwjT*(-a}TanE@@t;6%SHBl}6E?Sh zdJ``q^!9_lnBJzSt4hzlk%&T5TamX$;^9wh72mz=PfYsfV3{L6kDOT35wDEz`b_~o zbd%_)$6j2Mx|C3t)$xv#@DsC9i+v<=kg}kE8#kfEc-Kr#5+Ch!!0!7x&i+GYPi2$y z_gxv{0DQZ%srs?>s@#+5wL2$H%cNF|^zn8Sy+j%Ehn_apHSD~^+o7RvHZ;86@T8GD z&Z?i)id@%|%Wfd0f6la>o2pVnGuK>G;pF68vQ`cp6V{c)%AXZqGOeJU=fvvQFMBRS zg4A&~rfCze&J&MxWyeVav>DzxRGZIgSx6saR0Lx# z)1(r0O$ysjX4?D}p@Fszz z;{0?q(Q+K;Hh1hTMvFUP~vbBWCf2w#A9c|KM<|x{w7!y6S%; zkf#}8>w^0isg`hVt*db2g!hOcT~Pg&bdBduVu*Q@pxozE4a$)@34PG0E!&ZrVQujb za;TQvaZZ=CW@T7^Kd)3Fi3?BA9_ltac%Vc-Vy|(%A|!8It*tMMr)_fLx})l#_;dS6 z!#L`AidK1QiB_n;Sx@MBO@Pw;N${~h`IAus-I49*Ey+K*^x~b9zEqVy7E-8jXS^+E zk>O>$@*wYXuImqBdnTcpud42f3tUWBo9@`Vg{)G88ZWw)Xvw~dP4=9rB6*7&3>do%Y%sI6~Mhlx{Fp|vJdI|W;Dk=)jT!{k=CW6rJa*gFj& zeMRWcyP`&3-_?5JyxKc(Y~m=aXy$M*Jes4p1lrOPv%hun>*PMpXVFdA?C4maIT=r} z3^ze!6+lPsb>a>c$L3wFaHuyDk^YP0mzecB23X|QuZl5LSsF0EY$`l(4@KI4q|!svEfwZ`hq5?p4F?13QYaWh@!W!Le*91ZphXkZ_> za?mC%0whW$jE#Z?zC}9V=?%_=`c|@ws9|032A6hT_25>FM6guJG)MNrH(HP*Z-Uoj zPgv&_!$9a)rvJ%4m3W`-ScSf(hsrr(YH6z2_hfKwNR`6BAU2jG%#*Pf$5LmZ(9`E%i$2%<237(Fp?gWyLvDw$cQ6vjP|f$K~B^5Qe4FMpZLFR$wfn@3@dZIA3w zH&g%j&QkKqZl{Vm`P)7vMDS2|MHTJRwdn|a1fHGjks_GSql$cq`8V776+j22V1bd6 zui_r;hqO!DM>z#_!%!a%3@Av)o4e3R_BFC!z8eU*(=){`QJ$dVVO+wHizT0JRkb!A=@ z^P%;k1Yf(d=tTiuEc<@6P}f_`qP#;CDQEfjD2X+)XevyuL;2Y`aXPX@&PO1TuB?W% zaQbTgn>^vn+Lqjlsl~El4>s|D!3gQc_+dK44-@qE!{AB6K%wPZ!-nh#&q+uWw~^k; z&z381(kQXE*~(>S@XXqKs6zT288DX9Mgxm~k@)9Qo70$6OX1;iLU!0+M@Zw4`rQMB z2#kwK3oq6;+ld}{9=w6&Gkhzq$Icf1F?_FDT7GYF{@A`CG&6B6ryo}T^m(I#f97K{E~8`3-jZ_1uZi7)t|?1Fp}RxmNdc8 zdqf|v4&_)B_adRdx+@@I*vZNAmDQ{SfD+p6*xhn*S9TjO%}Kw7!>k+`yzjyRY*h1xs%s^m{OHp1qq!g%~WD6M_T^0YvNUv zg*$bZnF z@S9v=(XKy$Z41@O#wM_{O)=-@raHGC9qm&|pp7rWq^D(RobCpcu{ z3Adx|&u;eJ4>{NGkcS;@??7@ekB-R%jzlflm3Sf`*7&<{?sdt^$KB3X=*V9?BP6Cj zsHO?qiB=AO!Ec*=omQ-;whn|A8KRs z^Tg5N9Appl)eOv}%r#e4q|Vi$aoJ#w?maQqHSuaxq!FrCNY-xS1o*{-F_wuN2cBw!`y5a`i0c}EL!+b z+skS$r2gigk*~1F#z}Rlp_~$Hzu!4&T2*?7YNKIN{Z;v-M~hBkzzCEZ(_yEXSAkMw zjVa`v$Zotar02%XsY&Rs&ML%mmsurGtYaCRs?NSTEVH+A@uvxGo0{mXx~MX~vufnP z)T3edk>_zbStM7&-~P>95iB(t(-txkS}$va*1w$J z&=9{4Iz$iObRh;#0oyiCLTH{2bs?9{`kqQC-OK3{w^E*elPrsp{w0&0RinLMFMH*n z>ritKZS_xN-gdS6t(=*g7(IJpeq22L`MCE)yfZkQLklXKGVflN9z@vkbaUK$D!%MR za;Z#Vg0SCB;k)xkPu$r&p)!_=lbS$Hr$cXC9qi;zHdlDc@?6ocVUNnG7l!*i;_;lI^M z|MR0~ucUEI2}13kwrF<#-E>oC?`3J^Hv7~*OfR>vP2-B$ySggiW?$!1F>mA~+D>LK zm95YV>MAE#m*~OCO{JbYn?F)P5UzhQqQw%ClYg3uLI)Rr}u@o8`<>5AVwxhdQR5_@O% zO50h&l8d>1Mqa<56_gt|2Rc^Z`3IKZIG`S{n7e=Uw0H7zb@}CF*`upp6%rX`LG@Gz{1EAY^ z%`xf#pufPX8;8FIKu4q2v{MZWfG&ou`7^9i!q!ZTf}f*dYeGKizsI;Wm?*?HAeg{j zk!$vg36$LiePaU8A++{X|BIvY&tA9CU;=N}-tbzAm_Wub0th@<#$(w=>66G5(1jN3 zB-Y#Mse)!$$4!iU<$5#Mb#f6!1wOlUCH6ZR=48kBGyKTX#vOa}7A~FT)0IG4%20uy zXWbW~0`u~PS+eP6hzfjo>1T@TS?^}aJ@^EZ+wgCl$iW|&qvl?QTFfzz%6jzS-s{oA z{gLl%Wziw3gShZ3iwo3{vf;ka zA8u^2cohx0b0j#G_aARZfhsA0DpyDwm5)YoD!=QAQ~CKiYLxV~n*^uQQt}5C@hWQ= zBH13LM+~HmnW|sBipi-QuTm)CRldJk%By_A^_0E1o^q7nUf6bTyo%j9V(3svSJ&5B zS|)I}64|GZP}Zh0vxH$wdfBbc*L?+aZebL|DDGj1kE}R>lachrLaT4Y^rLlC3Js zB><^d-4z?MndMBU*liYt(2EAUL}sFuoJ`{UFNcMctOno`#EpQvu2B}^;;$tVKp8Xy zvDm{Vq;y-veT)bTuhweIvaj*gRDJK7w9W0uD3my@o*kP}3H~8o z_Sq5qhZt{yi+ISfR-ivbQ{3hwyv{PE~RJ%UF5Ku?llA^=E}Fdf+{>Vz4Xp zi}%RNNP#q}W6w{lwfU!eXJ4vpYCowjScln^lQ$Bz^;lb5xjR>z!ive&TgcJWB!|I-9rbyNCXQUqC{d6Fyhv zHl?h@3oG6tSz&5E;h+7|le20L_>I3lJ$>VS&{NZxO?Ut-)f7o-V=?|fgq{X9opD0y zjozfRjmGvtN~v%t`y?exDbwK|Pan?Yk>%@@)ovY^Nhi^gaI zjqyz31hG#P@fa84BN99YO97Iq+_89!M;A>F@ffGRH#|nncmwdyW;ez{9EL?>v>{v7zc@kKea?4CBkO_gE-mKxezIlB(zo$gYmIIOh5R3Fz@%kU+_tle4_XZ zj&XO!fpTs8mxkb*GkI4!QUZ zL#^`gfOv~di^kb@q&^yLL%(>7g9SfR6sn2FVE>qlzw1Z33dcgc2B&IGd*CdN;NgCS zrEF&;!FvH)Tw6xcLeC-I;ts}ee|U?#v||;eD|id(XT@6xKTvw&YFSX%0%x>=A#Hyuy{S#(zn zk$aTB5csAAgpSuqF~avT))#}c*p@nziCKjh?uE1n^-=1FqXGU<#9SyHtMP;OL~$2b zno(Q8UHnXGC_^n|tNa0Q7vCdsNnh?0e<70eNJBQt|Mr8oI9>1-sd$K{XpEpKFq!m) zrZD4h)$;~Vv9<6UZQp(X8y2V$;x3=NTruJ_CFU4Uj7t(zHIE=AEw~^ql;4r?f zIsF&nFhGYi$zWSN#%M91yk|TH0a!3)0L0*&bL<#gj8TL}37YX2!!pkA3zo4{*3_qj z`kldN{7PuhjC&7%u;4RhD>)l|uupu(t$pA#4hEm0ung4}F7#W(XEgqg#%BP9 z8hZ^Z1B1^P3?uqaz-P1>e8$z~_>8+VP-|$y8gMWbHGY8)ri-Y>F(~}KahmIZ7=9rLm~-IG-1*#aN-;VPP8g;V$y+t6M!bV zCNxzDa6$nSg0Zjw3Rw?Y@C5#Y5H|tG)$)xp{1>DL0fF@{8(yE+pOs`V~eKGo|U>PHep+(+<{%SolI%wNV-tC@vKN|~A?>xt7oO5?49f{5{nsg&z0UO#C9S0}wWHD>q1 z#F$B&T~C0SB_K)&tvYeEd=}y=-0tigsggd*w%bc*M0P5d{4C+ewr&YN7tn-KQKH&> z0e}S|2~iuw|AN!MxfZ2E!>U@}Ax|)_5|35WnOC6;2R};l$utZmASj{S@=i#?5_U$o!MPpL86faE+Bw4t5fatFZ zJN7`w&H;zeJCc*^Pm<^a?fga%7=P5qY$RW{Q3y1Gbhmb~B#z~U_5hVIrb8e3{Fsl! z*J@vQPv51l3cp#Y1FX?SjeWx08z+=OO(oePLDzDMy(NZM>~BbwA=Mg1DO8wxS61By z`mHK?c-lW4UVO$}Y$}+z3dKB%#*!W#m|m^<*oxQ+^z7yIO_9Pj6o3wke}7Zqq>xbb zb?P_}YGK=$Aj%r+*^V&)qP(6Q;Zu#ggw7dL+OrX-0hOJr>} z`w&`|7#{t!$jJ$+KUi%GF5F<76kJ!V3LeCX#hVSme9}WA6&11Ag>z=bW+``FFk?o# zt!>uK*y1^J=go>OoZhyGLy+LOvtn(tzMP&ny)8Ct$-*{{Oq#o3er$Hz^e&`hRKYvcCx!5sfN^j^t0>A0QliTQSU(J^Z%!-X;0`G%as6wkgp z!pX@t5FVw6==S2X1Q4Y>f&SufAYAX+-ObMRpW*qM7BVRwWwcd7`J3r4A^fXb$u<|4 z%=`{1E$Ia=+z&B9EdFFYCUO!<(8|%Rm7OjD;Kz`NI!lzn>>fhJepFCW**!$QeNJ-m zcIyd>- z(z$*WrL5tTNdMcaPN~>A;e@Kx5<&7zjWAXbviK6_lyTH%GwP{FWU%v|H zSm*j?DREp`iLKtBwNM@J;6uzV{17_GK*kvFX0|AB97~x13>laG4a6&}{241`B|eKL z`Y!k=SrH5TNO17vSb;N9j91t^{d24GUr{5B-5`6}GlXP?iwmm(J z?4hLhnC&TzXGsbL{j%OhdPQ;!WtwExD<2INWAc&EmpG9mpApmxVPWbEyDO|zzs$bE z7Jgg3SAy@7pnP1?pNK{UE|;LC(Mv6`RgMm6c|hSF**+f4Hsr;QT!cqcY$$xQzv9y0 z44FK`J#qT{<5RKJthOuW&YzwV#d1;lOD9Lz;NrQdIkD;UW7Fr6h$O-qIa;o5dJ28@ zTFcFh{UY?9k4gHD>+62%GA>rvurBG}vYAp7z9%YJtG{fT(5<&QS-;M0T(O#0=~D_b zq+ekn*;g5{_+ZSoTZAyP+jb}9+|~Ns2~R%4x~Ocpdz%GIg)(y;Nj)MieRSyZ$gV0YV4e zBn)@$2+8imo7(xYpd&1@LBt4W*S0gB0)&p zOcFMtC+eR{)^BsYc(uE%Th!_`>NQ@rNq%gneTtPvwLbQ5kYc(kv|}ac{@ESh{+Pb; zsTPL1#jB9Mzvs6La|=rlGOIsyJ|Ggwm@ijX~r z3v{I*423#yRun6!;zLpP1%eYk;5rt$K2?Z>8lhTuRSiI_s*bI^PRXvE;!vgB#y5-9 zrjoKq@#(K237SL_l<3{v_3wlo3a)@fDL*#jek6?w$K6?V0ZP4gNIU0Z+V0BhY0ezN z%2d2>Gs(5t!Gq*e((sV(?~l5pcu-Y-^vFr?_vk(VSN$p*v!8QMbUR}c6@y~K*!?SI z1UpvO>EM=P_lq{-dhDyyeOch5Wn1^yseQ%opBn2Uem~RK$;rN8zHz?sdl_$kAz_c@ z><0qn6U2WBVg`!PFx`3pWg`17s?0hH<_cBj2VBX~Yr2m~QV_(y8GS>>HYPD7>troG z*(gc8ZgM@=LJ|br&AvlUO0Vop2dXF|Bge44K$b~Dt&+%X^|mLyJ%p<2s;a9H8Elp$ z!swfljk}7QwP?sGc?l$XY_F=g!xbgsTL|J0Z4cIX2({X{_w`|2y3$`i|T(5$d{# znpvT{LcybB!H`q2O5f9YD*IItnC$wT=Vy<_lAeZS&mhiC^f z#JlWqP;VB#joc`()6_P#Y~5WN#MGxuIb|bTt~G?3!Oy~ryTi$D{0-UHs$KuaTcx}G z!Op4?eiJ()7o|Q;e_S^{vv+PPk=c7i`oheMe{wrM$M(ZpH0jt|WclIbex$?n1mE#d z`mxN5TQiT;6o{WA^Dnb^iP?RXd8E3~IeR7h#A_-Ft9fbkr_A1yo&3+W7|)Rs@#sVsgtRG<74cBlWe?)%vb4$ zGB3WFc_dc&jj0bJlX+{~IvQ;=bL~MfIj5o{uJp^cd_pK_`&f%go31@HR+--Jo_J$B z`L3-tnQNDuElXzqCtKv++!uV6LA34Ovn2go=EYsX7e)SSp{Cb-3I!!Bg?^mq&=i^> zODfE+;z+qeGuI9`<=#>(*A`mv`fh}iyI9K7hLB(1?a(7{q(J+xT)$X|sF${v^IqB+ z>Ef|BnqgmFMXgs$HVlz&UlRG)BoAcLy3VQz>{sF_B6$MBNU&>7a@JRk{E5jQ3{&uq zaThN>+#WbbR6Tb_)pECT%lLiU4F5jS*Y;Bw+2WFWNO-Ujx(&~Q|0*MUCx5-vD!Xx^ z_l(NDmHwoeUCp&g=!&nr=Gx}6GgOR3Wl@wHrr)tWnd!`Ca8>rNCH}pqN$!&-ih0ZI z>yXpHSkzjsD<}M=rRS~LLP5#DsO1Y$9)>sUoDClwt`*P)MQGfBd6;{xVEn#M@Wt$A zqFE2uffn0gS%Nhum;@L0m*CzLO@d^9309wM5)hMFi+JEN?!$7l7PDEY4-Xr%R@Q-$ zD$Yhy5iX#}8|CWW@jcUorQ3OMZEd_lvvzXJV3LvU53c22*W%hw+CkD;w2vB4ZmAnq z%jVOvnuJX#{BM8KwDJ)S4kzDImhshMw_$&X#Ql7e4h}zk;3S^!r}ZE2S!P-5gJT); zNGbOnTV6{4!zk6E8vPIBG?O6gNVRuq@7z0D4hxLLYZxQsoVptc`XxQzXN+o zf0>vvuIcY}aJw1}7(e0XJy`27;pf6yn+#voB@X)q;OEL$hY3H|g&Qnot?23v&nmG6 zKW2-SrtG6hq#?!O=+L$w43+X^Ym%sA~0|7Izf1K znw~X(#;lS>V`dDC?iJHh>9$$(t~#Y6e!;{>iW%U=_p-kkn32@NRwD`)ZaMdWhj^m%hws+=S;~=E*xC}AlX!6*MIn&#w z&%kmMewZ-%#1_m*^==V~&g<)WY;La#sQwVabGWYm6VV`&{!c_rC{rZHVE1W6SWd;t zLIeN;0kpu)rl7oW=-ug90zoJq6w7WOG4A-q$0s{<4UI;Sm{FBUR<2Wxpdx<1h=S7k z+zMz>14?U8LJJP2i0np}ps;3XgO--zL->ITblsM{kjYIQR0VWW*xm1xnmeoF`$Rt* z#`(G(EhYVo!@DAUWJ-l7hQrdYu+~rxBFag`7!>>rv#qWtuvbV3CSUSSG(PI&enP{n z;#rg4iZx?EQrWes8O{&-WPoKjvOEy=#eKSb_7Qo8?;+z$%x zqvN?vx;z|DC-*UK6ZKE8=BMJ`8vbw+nA>r;Qm1nsVZ+VY$wVo`95$qLdo{;#>#o`N z)JsR(^@Ql{5xV%m{ZzQpjAMjOWnaFuOYmx5=ej+E*98NcJ8G*5m32(K{*hoeB0XGB z{l()G4rWWki^0EYh8eo7VzmgsME&dRk2Pc^ooEc8{q?2eN!W?^NNmRx=jC6y9|PTH z2)%uj1_V!say@=OoS`Dv6y7t%nFu<7dQjXK=xYoswrxr_b}E|5GWI63`jIWgKmeIJ zL$bTCb5=~}-dXj@%(V?MkgylXTSiMF;F*C8KCdOhe=L(}fq}qeoZNk)L%?W4dg_PI z1UHe6^-k$~H~YG>u3@QTqx^8YO(L(c&S)tgWZu3|hUfpUFMo#4Nj#DS9YLwHgXOGh zqt_<9D;+*8^)Wgx$GFn#A9OydZ!pTpUl3w8gNU)HRZ2xZ45!qODt|Ah+aCI5C>oT8 zg4;@2g?wsQ>L@$k|JvhrVq_8up$gac8*EDmplTcO2@wTR`q_Vb5Z&~#aa0JaxSE6R zL)PK?D&&BHQrcWf8y(!SJNh~*qf_IxPeO~-zsrSjS{2^Z>p=g$pnrd>e}AoipU}S# zhn3J#|G(#tRDR06LS%M}Dds=BdbutN%EDMGabmy(jpVe2^_ALLxOzs22WB7!x;qA@ zKfZHgrJP4=MuT4tD$sQ5$SAal9OvY+5BV3=iXwCS`ZmJb8CkU-f;dhIqQCjnlfKbL ziu6E*acv2nuM+F;&w@v1WUsY>-4Il5#8*HpCp?X{xBX!8nxZ~4AIaA(sA=!vEtd5H!Vj;yVc+Le&K zlD$pm5_Mo)y&MYe^H99#t{J)EXI>6Q9|3Ikdf1^yUGngQOD+zZIio zdrM{EsW5H%I3IY`uJm`YgrGBY^0uVwFrr7 z=MNECHk`0vGQJ%PLt0>rog9@%y_j5y(x0jwB)T|cbsGsq-#bWx{C9AQp}2xV>tdS4 z!Sf~Gf!w|t-by&v{F8hQ3Ue^z`$H*FmjOC5T`l9dWkpaU1r1Mguz=Du13;yW9@O|N zg1l*^7DD9>R44x%$;FIqp+2OSaIiUhS4Y-Vk8%f9q)#*jF|?71)+M+*xXdZ$b*Z@YB_T13Rw%_X z=Sse?fQMMNjUTb>yN`$8$wV%6^~iM)^ilY}&hK*yMV0Tm*wm^)i|ogZo`s8qlYltLtdTPt@(|94Ko9r6=z(#q^_e4_r{B;iZ_<;EMoyNCj)1OU6nJlxC{9H#3U@%SgboomMMEAX8VHhPHQ zb}-v*71zJKG{6J@TT(!Gg@k)`JH9d0dkRCeC{szFxjz8qv$-NRuG(3#oyv_HCVcrbK>TmMJFgba4;127Owl${oPk?fc?DnayB?XO~IF#@BsT*Y{FOC2iC?l|pO z*IQHr1RUjipMPFmXE2gjq3tevfO^3{D$y8k(eBOfObu4N2cvKC9+Edzu*E6X!xU$+ z9#AH2xUhaS(T}iL9{}S4#Q^iDe_MlCyNqVEEr*2Fjp`Af3gwc2i0i$T^zXh)3N)nb z*6#^EMFWLz6z5Fv8}#OqKFkrbGD)tNHMYnfZ>zB2Lq~ZR)vP(3tkyCHMv^zTFGQD< zN*LN_tgpx`5AcX|KC@X)QM=PW}{<3YEq0*CGv-1*0T`BLB7YWM#HhzH~SMCmliSL;j|8T%ur!I~g>V-m8f! z#7r8-+o#<}ONgwW#83`^M%?JYqWrLAvlI%2RoTM8xHN<@0xK-^fJK$~W&Fap_lFQ_ z2D4Q6aX-v*hm*UV$?KmtlQ_@S-s5ra;kfsp_h{#vhsT$_zz9~xmp#W%&9ayHTb+HS za@lhdKiA0}$!7_lp(F@2ac~P0t-WG)eAgz4GMmHBrBP-#=*7WKPGI@6wI}yeE{IPd z=kVC+Pcq_50w&Ijp#mw2s%ng}Vir6vDt`t}weRQa>{T!0^Evsft6 zquWR(zt)Mbnd(vkagziC0gS@42e!HXohxaHut8h)CMTC7r)K|h`e0FYv-d^|N1b`w zTf9Q&8;3W0Zkr*0%_1_>is+p<_zFbWg8M|us)uEZa z0~e1jYcFMvLq8|<(|dXmz>c_`h-867K!@tQ71PI z;aqITb|<%)p7GD28JAakkC~y2dymnI^0ACBdszqb(2pu#6u<#;j=h@>qRGb!a?#yb>`ZkSaUHSS#zy=yOVm1vIMX27{$irr#y>a882Pn+7;5?&P{hfw>!LZdoG|{`e$;ew+z08GGFC(U8fv4R8r)N=msaH-IAmCrJ1q~5PEx^aMjNm- z;WPU`M}Ive!LaGCv-|8XT6t-&?C7uKRXNSjOBEew@67BO=&TqiG|+=LRP-#C%BCOd zt86Ft2dsg%3D#({NNHJSkapvTJhNQY~bBO3lPM?h9K_Mygx+V zg?}x|myW9mX}xdYm4`u6;?psaoiDD0HGYh)DCd8hocw9R55z9CbPO z`=pq^Xx353&KI=bHo9R*al1fZHq-fA_ZB;4#V@%Imh#8+OW0TQcp`v}pUE4;!}C)m z>FxZ%P9gc^C&`0vNs5&T|4_sG&mLWnxbb|`t$d$4E8l-uFW~#@^#Z;x8!$@skB%{{ zqKYww|Bp#}d*T1%u7dyXEAs!H!vCL4e@A%aS;DAtzm-bZBA?(oY{n+8<&0SBEAzkf zX2qTI#w(T|ejxF;HAkQKHpl#BJPfXu2c>u|lHZqk6incyw0{b`$_PIhw@BTurtW*v zr&!swGhM6se@9wxYb&RFM;*Lk4hbp`wZ7%Pn{r*FYZ@Rx;m`%dc}vh?wPmjgbF^X{T1dik~=Nt zSq!9MfA5oY56OdKe_Od`1qQBzYnYpng?17!syQ>SW6r*2f5tRxfG-?u=sL8=uT68F z6zlyr6W$wQ`B%orrv0snj*BXbGt4gDBkEc39cC&0mh4zkne^_HwIzq?I=OFC4VEh1X(`uW=ykNG(QS39#?2YkW5phO9|BZxU zWtWh&40NVdStPk;Ule@R&|bT!vQ~R>XY3BDFd$30mK_g~V+Qj-gy9L{=a+KPmn?H~ z-`iCh(ObC=7Lk;8_T(oAOQl%Tx!&HS=ubUY|At>*NqiOzNqz$UmLPKd=Y+piQnjA^ zEq9WTp$Whr>N^jn*T~ns_^Xq9AX3S@xi0*a`6fj~iy69;+CKr&e2}RUJf*|jBvVuM z)}Q^c)IWD{9bCX4?H`yjU1B`a?^7>XAi~dRo^E$HGhkoPOzmN*?IUH{m<_alS>A^j zI{iR-JPr-8LJn3)Zx$_OQ2~?sq*7yX@gWxn@=8E7`jPaTvFC*G(=>);lZDpyTAGN0 zUIur?r1OtDM=oZ&@gH3O3}@BnFj-%CSS+)**2yK98JWGurGPN1pG9{Jo1)cRVeM4q zHjC9FW9=>gF{gz%h-AlH?7ixXOo|GdVqH>Z^W97!>Gv^SYCntel{~EzdWzbEH-l%V z9A{NS=GxO^$EBZ_Q$li{6s@>oYg*h=W;{PzyX3u7WzU*~1I==GEBx2$r>xZRH!OR8 zAf38wZ>1=RIf<0lvtPbP>B)|-4on(jdXlrp8+W9S3S=Fp@+Z5A^_}*kE(I>s_6a)V zuvl&SIepfo4HTS9*g&(t!1w^gLy&)6dTUi2VDR8rm6Q8~FhOCcZzyF6t9y-##Ic)> zt4LkK;r8qks7#+9u8JatS!+0Am-z+gt1iY;APGZbL(|7$Kx(Cs3x`5ZBc0rrs8wd~ zN1WWJxhU!jtV=`8TXe}m=lwIBP4KpV`A7s`jrRWs$frJ%kMxo;FNx+NG56y`n9*_2 zj##nn?xx^bAfZf%kfi@Z(dm#?B98BRf1@Z45cvOSvV;1Wl5#g$?#ed-G!>eV6XW1|ckvE~te(JV zaN-HuGZKzg7V)8V-1nuH9JJ=-WWAw?199@oNt`%%ho;;s|8?9j4pQuBgX`WcEfde5 zd3&gn>ynZVb8_#>$CfLjH+x&d0t+|W`9NHECx4i- zf|#goELF=(umXb=ZYu2^5F-VczHlpn1OtiQneLAG!)8d?CQ63c(@=DZWvDzHZarSp zaQ~Oe7mWW+0vV7A1SCUx$}mII&|niJT;%tCexDw~p4-acc@o-;@H_R+Nbvjep7Ie) z4a(z88A}d}rM3408En&XREoUXp zZK;?tzqoZ8{O$BB2rdB*S-{5D-zU*0+GY`VV$s|yfhU*mt!|q&dsf?`SZaZ6u(k-_ z*cH>;E*H6kZni!9fi%hVqxm4*wwSz7Lb0X><(YFXjYqS3@2^t0-_V8=Fpx6^MN7v zxoJEmfMx+IYqjaJx$_szRnYQ`1@mXlm7D~dTnxn_RfzYI)1ugP3e&Ji^X4sB9L>lK zPoxELb;G7K^V0tH8Pn&>=U<|x3m49tOAay?+P0H>w~cC4Tsdn78{f}3X#JKu(RYZ zOZbPi__y4~Q&vP08_1tf=lcIk{dm5^njMxsD&G0pNU;L=|16FyPG}%_c6-Z6H@iVL zO>)w+Zq;|QFYFc$U!CZvI@0yjGmNsiVjY<$yzj2&htx-s`g>f)yYvOc0%GQwFz0x; zzLFJVi+9T%JOL3Qu!2wHHFH+ngV7JKTSF|_aTM<=5;IP_J6ZX=@%vuZ^>@N-oRdiU z(%1p1L2hGL`lX@|cWT6k``i)2Gt1&*P@>dJj5_eiqw(49Bx-SYON|y~1fngXa5xcJ z?0KjhN~m>Dm=r8!QdkKd$VmPCNlTKI`#1`9iynpgbg~{?3v%A5^CHbIWORxdsGnb= zndDkPw@XFfr$^IwT0rXfc;}fY+N0uU5Gk@M-acs*JC0Lh z6B2Xbo5t_BOh+@iQ~$I9$;!8r^*dber~1yDP?Ko9xW>s{M8=$j{bx2Bqpl|WGs8{) z9aTqU$Bc0DV|mO*>YD7h8p6l?3w!k4flbwZO?EFHntgcvbF{Jqfl>0I4SKW zI13?yG6%O7+OO8zW&%4yKr4Q_lKnXymlD(?^fwwEMyyE)B4Sz5nF#}%TPyy?#EH5| zQl&s}4cuSgGYRh=A+5w%bqqSWB~;m2wU9EB4YACgPdmA%_%^fWI2u2kbf&Z8Yh^xspAzx7I04Nzhy*LgL5Eq{J*tx&8p!e zq9iSt$)ju++x}9;A>>mG5Q>F78(Ubj2ZU2Ak2aFMi*>SDpU9jlIDm3I`w%w17^w6m)Joh^-n)XYGW2$;xNA zbQ`+)F#U|X+CTG8%Qp_Gh`GC7aXVi<(w)2hjc4{<=hk<3tf)C2S7mc8k;<>EPK>=0 za=cOKi{XyB-a$ler4#s%hoNz|=r-G{(E!r*g->&Sr8B>p|4s7eN&f$Cw)3Tj_)o-x zd7Xq^5LIEgzp%=m%wfFSs~dlH?W1zk|o9*M^bm9ov|ljs5M!?UbunVxwpz~{I!$)1+z%bM@|sv zr8>LkXlF%?ES10ia$9`Jq}rf{dmXnhFU1P>&wXOy{OCEJ@0c?ag`O!}9SeYlbq|)?dEP+R)j|&veo{HJ)=s6cAKkJo~Q%$@ohi zH0*ppxEf+O^~s2T#(OJ4)D0;_`P*~ww@&z5(>}Ly50`GkV{$}Xgue-w-Su*W#c4OX z^<4??k83|lXWB`u)k!SdB+O5z+^PZN#yh!F7_D)~V*=zCJpvfr*>s@|Sis$ccV+8? z=th+((2C{U=mS%4@Y&EV#RRe=htM?TIk`i{fZlVzKq#P8euw-pD2QQ0y3L>%b*vK| z_ozrVqE`C>qumW}px(v(dv2p|nmguK#_KmJ+c+8($&&V(81L4K?ibFOGTM}=pWRKP zcukiLZuaNYY2M1=EuF@fy(IHTGQPPfq*z1mK^z~2t){J^);2m$RI~j;stKpYs!A|& z1?w`+4i&Ws(O^3vx-F$Lbp-PDuRcQG(J?q+$6EbJ`gghNnmsCh5$2nID_*vrrfhsa zIE6iH34@^(eP0KXQMIKg5;Xn`d1L$E(P0dA+IrL-;I_RqTLB?{Q&d_z-ek90$w8IT z;ER7S)JUNact3^8o4;nE!S9QOVtnYQPTGN;DAclJ3I#EB zOla>#nKjco%$)Mu(Aa}JUAz2J7z8UB1x$SB#N=BzpkUWvl!So^<5bBd}+XV^F=x01Vq#~aUBfq<7T%l4U^omU;syqEJ#7|~PsyHbDHYJi3)f5v8XNeDq(Y>Ub7{-?^Pt z-8xy-)$dSEr@7;f9nVw+wA0GWGq0O8z1IE#5bEDWffgbJR0PpO!XpX za48e+hY|*x6FrCSEGsvR$`l+-0*pQCg(%q?2tDcKj+2&nI|_%Jb!0?6mAG<4d25-C zjsuT&p+Yn~XqC^d)X8@J`A~vA39>p@z4LkW&h_Y>XQ6lQ<xr;{YRg4hf1QSdIrSLYmw6N!TBg`vFsf_}N_4({WMb|nV=!SVJZjes!GBmOR5T-9jhuTxlx&gq zjgMp7Qi7X+MN#M3CmEk2y_+~>PVP({4cS}W54j($2?%5vLc9{}uC!$aGnr~Su}TBM z91C|CGn=-NKxUKTCHgDkJ`!Pe3x#;UezN{PtMKNx7`ZPSLtAsmHhvU0`8~g*m z#a@^|FBpOsfXR30g3#I%m+ck%f^%QRexS1>_qu$iHbS>UjENP6W5(2^V}iYr5f%W8 z%`At7^HTaxCf3;dgqmlr-S*gn+tE{{F`MS8ax{(BBeWF~?vejm9p>o+W z_A243BP+=wdj+j3>iB+GY;dbdFo2VRtbx~bEsH1HnUw)uX#3me@E~KQbaI)3WG$O! z%5@m9@v376myw`2W|2Agkdyl&Own1j1Wn0UGytr8oUYHl@+L-&`hf{ zErJExrF-8t`dLw^XpdOAf`LRpVEb$McQt|7AUoEm#mY0b)6m=zhlYx^FQd5p4J;*k z&9dKUckE}Dt(FAhy19+d`yF347>S}~)QO@5O!ch=y-%7GSGd4JLk!1ah!Ly~o zE3xM;`KphRD{8;rmjvG4;EOPZe){0+qWc@$j}`N@=BnY?tV{H`&SCt8JoqHP&rtE+b@3)uF z)nb)HmZs|yugKW!XS&`+0z1P>Uw!95UtKK;$}5?_MD%m-UEG%)pB0v?6*k`YO&VBF zt_yGL-`Di-%ldbl{xz{8p3>{b^zY`-Q!knQ|N5UaH-2%sf7rzdEF!uxPeu_NLYNbL*^$hW%uPk=Yk2+oz6{AmJWRAnPU;hwpw(H^ycYx31&RQH<~S zXj~27qlFPaF_{5KhYhX}B|Oon#GLwAPY>s_!*a}XZ5mC;{7<hzwP9&-0na!{gwfS4(14^9uKszPKK5g~*{L0D7PBORi^wxL=POU3WYTPX2?rG<28 zsf7W#38b~zF6q@`MG7eC7_F4{>M`w8Yl06`X@leafFlzbl_0H|W~3I@j^_G5m6k>v z#;-CpQK;RqKNU}L>NAYEIF8jzeC`hX^O8PTNlw-&rd>)SVCvci?Qa32qMzI=eQKV5 zkuUVBoEC}!q3tis!CzRj>Jy9`VQydV$n%Im5oR_m`p`da=BwYg# zNAOIS&H%48Gj{33o)HmCfSg6?g$oz7r2y1?>8jY|^DanCjeTkQqPa6b;q*LcXVDq4 zRNGa03eV(OZS!J_u9}~kzCQ@30IehV9II%|1bE@&XGe&;Xt$b+wzURR=6NjZ95A?_B(WcD16P?_6RMG4k z7jRSStQf{)8?2bjb`q`l-@<6c8L3|{Xql6*Vfj%!=SoRa?6dx1J15iwdc03Q5@SxN zK=*)}vAdG;-R||mft67dBrdo8K6Tyxzx_7f>bYwKj5Q!a^oC2mU~9qrAmBIctxka# z?^W={QgC=cmzh)akJKB3jmQnHN3YLfrO%>;<)nLTc>~e}g`X#AK7!)&(BkX_;4!Bs z3~-1fi0mu~6ASj~+X_yNzcqlf*`9(Z9h+hMhUm za}uO4>NRalkIXI3#)rdDFidkQxYf|f7ZH#lrS{4-HAWK&F9T&-&;xtq!YH!@6zUIl zik@romuCL$A3dObC~opFiW;n5P~ersksS!cdxeA@wQQbPvKPRxm${Xj2_|dl*&d-Y zBs*rHlRuZlmspk%;a4XNNCoCGc&YW3c7u#6*2*SyG?gwc3HMiNIv61ovHx^Fp=j1u z0uwjsi0rm=V=O&n=f)Z^9@!1{U>=zmS_(RgEvT&iAO|5xX+v(DFfirnaD!9jMygE1 zDlQ2Hq7f$APU2_F5kgLGQ24!sk}ZD!rg8`Bw=?`$rHSpL=CHR)cnQ-@rF(5$@nb8- z^m9{xy`*mcRsYQTsR*uJ_F6k7v-v?55fNRYxpqlWk(dLMPB#YQx}akxJB*e@gw~G?*OZ!+bXYmE zhyEq2)QJ|>cPa;5;otd&%Abx2s0?;X|I?`-a;Q(CL*y~>f90?=_9y8fc6CQf`*_%- zN7l#&m}w~0oGd_!$#OJ}fxb(fSi!O9B|M8r@VTQ!M{VkHdeLZ3EE+D_CFX2cubfgO zrzU{R3~S3X);11 zxCY{9?{r}+`n7#W7uhRlp=e)89i|UM&b=kP;NW?~m=nO+uUI&57DuQpY?JfRfXLe@ zKRU#()m`{D2m~; zk@2_bem|=-h^ElQS4_({n%ieGC3xWK11_e?1q9t(t~Qu6N-Qaax&!ey@Wu*nGZWhG ztT_)d3iYe(rk;Dlbd#uN6dX=M%fE~1jHnH@B1y4ats&wK(R#QQdz%ke6XU9MVU= zBlef?Y5U2y)INV8LoUbOK~he>f()&JDx8t7{~=7~c!&1+pDW>6Lp;%by!zpW&fs!2 zc7*zXp0THetrQ*426Zfjk#;4ppdQK zzSX5$4jNrq7Oc1Q{v0nEQoWE=o5O>;VovUl zS^?3;7_oWmLo46GhRTqXhg-vaXg!xRBA=~pkJS1YrA6ikv$@y2dkf!NPd>q{=#}ol zKGK<`T=_iyr#{k|C1QEHt4it0=htn#uzUD^?<~-xnQ$2l7u@(dOEz--q*Fhv76kr! zj!|!?zJ=q9^c7lSQ=DIH2|gO|rX%Pbt!+UZ(4+7TsOXq|)adQwAE6u-mpp2i__l zFtGLrdBRhEK!M?{H}ZkKG5Jr5JJHNVvw$!*jgU=25H*s5P=GR-!rB9x7WL3sb&!Mx z(DNcX2ha_$3r^kjwJCN!Xv}1oVXzY>81}d6mtZ>}IMpW&-S#%S^rBrzy?iMy@w>pI znOcW20<;UM`jjw#tYjSMHl8XsypD&sjGe&PHi)W=HrhAK>fC-zb8JWIlya68zyD;Z zi!iRe#AagFh*nwyU_AZ{VGQP&Q}|YM{dV{sX7{CsEB7GiwK9g~ukcOqbN*2O@_2}F zRhdj-Gj0$}o6hX_&_g|EcM!wl`ImqFJoQs*2}X!qiFQ)M>&n^bPpv48)X2?79*A5I z3XqPut&!XR;MOqD;CB#1WY_Kc=2^kn)GHG8C-?$zq7Rheo)Ql+z4bo1Xs}u`h}cNV z^pVu1+DD;c{;BZ7+E(PYj{x(=nP>yd_nUY6dm*jR$^Uo#Gy9Jv0C8#8>#-*s%PwWz z`MM}Iy)DHWqqkY!t`z$G{>%^f{fY1W`>?lV{KBB0tT-=@u1{o@XMv~1=+#Fo{%qft z{!mY6e~rX}sbEpDY;Q%i2%^m*E<$}s*0~X-`zCBU_?yN+2-dh6>gU+eu@m86EdM~l ztdxIX_;8P8y1kNoOPS`h$-+R@##HnV48}xsTm|fzxU`4w%)Y!k+ciu{zGz#J`i`_` zUcVqhRrAF%)hyTVA-@l4euaM(eTDSGe$?cQS;*R_hGL&;a&F#)al-&rlo?t^+SER$ zCYY~lp$d1b?muMfk5)vKOPf`BH;t9o#x5mNBig~H-eEp!&!bZP09<_33K}ZdakI{n1a+OQdLOj;$cNvq+#Ff=VN19dxwIe>*ex(I>Z)Y zi$I>0zn9~R&3NlVkoUT?Oam=FD{@7MW~#a40&9;f0f_j7c5&-CAYpXnEnzQmfN%}&L%1|h5O<1CT?Hon~w32!hxHhV$a z;^}QOVY38$Ao2kr5+u%mgnGb5+9N6i(Gya!nG0rN<5`d*48q(+1do?CM&h?*Uz<~A zwUmee65Q}xkO60D>*)l)7dwkTFuR+L+W*M&?Czt|a|jPr<1X8)3#%I!3sHI7HQgBE zQ6B8hVAH5XS9w(4_)XQAh|@17{Hj`i;YsA~GiCoy4}X-%W~k>4@$3k$@hxtotl z{PPk%CPwTv@B<;%2v#Y--Y};*q3t4m*#=^m=ht2J;I1v+`p*i?ZRy%pN^SLB;HCu4 zBuYD>20Go&Jp-xIbw?I31Z1RS@Xl_>QufEi_wi!sVUmc{PXNq1t$XZ6RoDGanh+#F zgpC+`aaDR)Gw}~l%Wu4ddbRlONfH>cI&RyQu%~s@i9IypaT>9-!L8q{ z&6M4-wEww8<8CK+9{o+5ocvibS~Cs{Mwjv@pA;dqHy2igd~jlo+TF~cI=M?o>$9o$ z!>QWEM`ZU@reCsypZ*U$N5j@L8yuS5GjQ={zkM`?km*|Ih8Uk_gG%q5QKj?QZ1-SC z#t6;wsrr2FlQ+c#P51_}++uS!MhdYx6JkmFD{6GExmONJP;^AZ@;uvfCpSEZ>6yjZ z0$qZ09gAF#j$AhhrPW9lqq?eUDs*6!Mf4mJ4H=9r*~wi1<1>6LA#BpRNM1&zFMSib z<)T#F!y>G_M|^n?hAc-l&e!$t?*Pw4`N4e94YTLYpNp~B#)i?@DMHWTzaI15_$$!# z&tvaQvbLsd@-NZJpSl$Hgan)So^D|^#7#%s2u^pE2^5 zWaVC<4;bWA!!oTERn65`4CVj9rVlZqeyGJ+^?LJ=Izu;6bGVcLC1y*EvF+41GK)*{ zBfj&jQBdYrS!fB3Ra-jxMBKkY2r0X#$yqT<$kxB04zt)p&hnvh=iK=a2LjYdKmakS z)JP4m+Y_&xZpF%FPLhac$B#%In#it=@l8c)7=vETIzE4~8eHtUCbbdx%_Ie}tQT2>oP) z>t6~H5-I&4j7Xb?43rLyR_PW=ZTgM`;`S|dp-OM&ziIfJq0K8C6DKF}j2M$Z{r!S8 z`w|c0nWe{7q;4U%P8ms=jHhz`1RbU!_(#h!vfApOA8M94qQ}`2hlvT>+;<>cf$uX1C<4hNL&dy)8e2PzVr1 z(Bjn3H#WqVl{E5>{ z)1NHN)&7oDCem)s51=g5_9tnJX}hdHxT5Xva%K2-bL_&8px6OepaZn=du2etdx+7& zl(^rRnK}Na%tj>~GgQvwrA)h|Ng?=huiSVVFheHr*j$H%OCBB=GYV*!pvz%7_#;!PFpjLqJzJ?);}47wVBEChg>pfdYc_No>aJ1rZhAwq09dEyIFU z+=MYLMf)-IUrsNnuc{buI|Kn>ETOXN-s_h0%qFW4(F8@67c{sDLD>7(gaqfPRAC9h z^HfSy8qtuJ*^A%`I7ui%7~B7re_>p^c?%X?{-s$2zXKc_hO_GtqfQ~J{Ta%Pz9tUm zqE~&{Yj@D3h^7|$(VbP3Mv1doff`NHYyl|i`fX4Zq#-DiKNgZYPqMo|?5wzsS)AQn zb0xceCXN!BjTs6I17Cq72I2v|@*R3`GKwUYWd0R!$=6eHzl98rNF9FVPqMp@OmD|2 zQqw+hRAFn8o|AqHDtWgKuh+s_%xQmuQj?r3m47|GZl(Cw#v}!S(c1WmlbeK$bUP+e z4-|{S@YyT9mWtNKKNIJf`IEV3bVcgRAZj^v%w>X)@z0rzKxtx^aYB}H54jz4D$nj1 zhKDe4vSR&^NSGf-6`YCOrVb1-J6Nj;hTGb{A$pZ|i-st+%M~5t0 z)xyQUuS_^YLXmz1Iep!A5}R1Q60>V0-stUIp6PaOKf|rulzr(;w|>)A)%dQO*hy85 zdhdFd0|VOU1`c4nU=-%iQ5vy?A%Ci(ubcfQ{a z^W_lL$tR&p?AMf$7j;Io=*gB1hUY5^BV1Tyf2?5pW`8oudDwl8Q#q_6okx1%zZA8e&pAIiJh8K71`+^*&pjSd5_Maxf zjO?C-4Pn5Bm4-_a?tU$cp^7OiTGiSuXCO+@M36?BL((VQBHTi>nEX`v@vgvN@+$Ta z;;}o+)AFeDu~zTrlE(GU9xW&{=Z3EdEqkD|h~xaS=7eFWtEwKkiw70u@UCg3$Lb^1 zbG?PGrcqAdg9m+sr(GG8ej7?JXH^kYAUozGi;t3X zus^H$%ouhfQK-i6d#so}^pfLU@0=n(5-!U^78AXOWtIlrat3i{&W`50(_~ z;n6Tjgi}>*du6bkYZ;LLynm5+zyJ}yG4bGx${+w-nBaY;z1pu^;86ciLfQw*G>@bM`9hVfrdEl;H3TYo@4 zZchlyBMM=8!tL%t&n+stkf}GPuKA2bY%y$ZUqn-1>SH$y@_tyYGAe~0>K?GN%`g%^ z9QlH^zB@I@wkYZvaq^#%uE=g2U7WaPUhKa%MmGM;_iv*`dW47DBx{7IEA-!`v1F`D z6!5T~JSW5Z3QndKBTG)5H$5`=f7yE%__(U7efT6(Ads2~h#C}i8mgv>HR&}0giMoZ zX4**`Xo1QtNt3hV0le^9M5VD@ zsv=Zgq2KeYv(IJb%udoa@Ye6o`TdeP=Q(SyeP4U;wbtI}CdB}TAsqK<>kpO4>R@nG zy|!2oO!+iQzWet{|LhjsFzZ*+wcAzc{c}KJ*$Yg%z0YbaN+$|WYd}*LCFD_HNtyYN z6k?BI3zyc-mMtGAU-3#9Mel0b9i#IBV9MHlmhtFX+?wBeF>4K{jbpASo~k>Fq(SfwMR&3_Mh;heiY|9^J|(hVSGJF5Yu$%1ct+)iHV< z?%58*D#>JzBwDX;OZwXE7YMy!;MaE#@LDPc=8Hn?wZ&8d%r=1<&dKXkpu(=+MiejS zB%1*lW?%0Zy&Lz)h@=p=+dD>64Ir7z;tekUn2yo=_>bULRV7k;iOj=Ydj;xW2yQArCUAiR>^;`X=_g#>!r$>RD+T=@ z!d-uk9b#L5vwgp#|4xW~tAtK5Z?^Tf+63GBXW(8U<;%UVCZ^GR_7(tVd3G?IqA&OT zpSBr4W&(7wH-fPkzn38P{;H}PY}~-75n3>D!j}jt>y~hXbVEaP?6lJsRmQ3olw-Gb zOI@t_j5Ez$9?pb{DLhv-CVm?L1G4Lb09n+Byku1*1!b1q{aXSyZr7>%eJsPB7k+oy zTnMtSI2Yr`RBpEAgN5&+o<9d4Rn81{PotG?PISe;X}4c~-kT+Jq5rSI@K3v1r~}IX z$!NHx-LT}BrS)8v8kPP2zS^yK-FfGoSj4TNT!P)LvylCz>P?(leR*lmh%KevIsN?N zyE$*^E`jWa2!X~Jiv2NIWBvoPdDzR}T>jy`lX~%S@Nf@?FPzl^v%oSenw||m^KP_f z>j^A0S%(dy1%^G8Md-(vDS#59_Sy>n~^>>)02EjJ)d|v)aB36cEN>I|D*V4>FZU=haa-42O5GX zmVH~^@rC^x`^`FHU10v}FL-U~h*fW1QDj!aORNO{s%yxSTQ$t~W40@NsbWii4-2{q zOV1GzsN}Y?ojoa0LvBZ_{yMW~baheNRWCw~zjp7vYTg*_lDJD({S0f+<)7S}XU!+a z{HwGlIvPv!7T6u$Ty~PU-n@pkSK2fB@4?ffqeq~f!FA?kM7Jy4z5{J{Ked_CcKeop zeDA4d`o=)JNIw=F|6}^GY~?{d%8zBnh^3|<3p`=^>8BuFR{9om==81r>(xqA`s?{h z7mYNj71x5c?st_9jr`sNK5z*of6w{3;W6)q+uzNNz(nUS*-EWr1gA&A^Q3)C zZlryGF3@KpTmIMQR7%vp@wYg_k{^Iwb0;boLLn`}&hjL*I>Gk;P4%z24f_$I-Sfd< zZz|3Nfei)j%z3b-^zA(v`U#rHZoq&X;bNn`4@Z-4%_=SUZEPlXS>oV^Xu-3wtH3dK z7Cakp{$1&qzm|^qOSs^vrm_4`!O9B})O4d+k`}?|Eyg@e&zM!kfTdGCFfB87bH~qG z)}al$-Ho8no|O~rt_mQ-S^lfb*}~%~Ec*)LzMlztgzwF-Q#lhTwPfLVU+}KKqaIU~ zXm>qi<7Z`mZTDn+BnwFnkJ%^Ms*Tul5#~{p@byv9;|M~hgEe2kO?b1_+F_noQf61U z>zT-kcX_NkcEaF4)IrfPyK&0gr^8>KA_4@`+`sx&@`kE;%noT}D-Lkd?qB^ZVH_nM z?W*SC{QLO*GfZ=K(ij!i zz{+HCCjOljS<%>X+S$oFygwTL z3g&w`8Wtq$gk&?<#GRdd0M#+rt#492xPh-9xQ;6vG%`MQcFJ<6{cW7W^=ZYc&!pNV zRGazK*~tg+Iu_@S;tn}~^m+V(*B<^HznM>+oqPZlTx))XJ5W8ikFOuN&H!t~$R{Ko z51>l-cl^MldX&phP;rF{UVQ58Lj93xVQ)W_B2*oBob$0Rr6#m#KH0f46kktad>g5wS@j=GRND6Gv&1oPA z<@-HSkTk#L$SfuB~5r`kdAm#X@ zmK=|C^+hmOi}*Ln=W@Pmit%=^(TMTCBX|S{GUFpI?OW0!EB-A7wEA~|qdg_iBEq5= z>G}uf9Pr`l6IVxyac;a9F-}1*VqEt4ix?MsG5Ty2vK(UmB4|-SUB=@8=2-Kse+K;x zmu2#QL1e|&HWYJY#TNb$T2I-)n@Ah~-$dbHN_afoK}kjU9?DAI1UKO&WOT^iaK&y3 zK=}de4Z$M4#MV<7^5(0Q6{HRJ@&7&ROy)18NJt7c!guTe|5`nP)rYY<%*rbI0 z$}&dX`7pKv$feNdNPsmTT54&}ND=?2#R3#ZkOM$*XCX#_1L&0bSQfFaugKy%83XVV zg8)B=^9k!E+zuZILMpW8;$tzLB%3y$(7!3|! zGSO5XcM-cJ}95FKRGtwk{h=Tz+ayU?90|@y9LJSV?;7&Ml zJRqTgkZO1UA)i2q@!{8s@S!w7B+L>*86iN(ClF$YxXa=gP=u~Q0)%`5AsjtdS{(Bg zA%_PwR)COCAk2teEa~I;z-TLkNQMg#@d-r!SiaFp9vc~8P?)M)b*%RSsT>CddhTDsQj%RSVc>l-YN+o{JoA;wx<615=_`f36)>+u$ z?$dE<303M{TS{?6On~%==L9pJt%zp}#*?%6ATEi=(czY+yc_L8=;qA+Nr)Ts_Pxhh zcFVpjW@hwgWS8BeeFyaNkNc0Gzo)o!=Kcsa0JQwRpNIZH0kZc)2-JZju^7y7Cyz!6 zaEgz0l!UurPhsbh{V-iJ+;(IJ;Udt_X6?nw;w|%Tjg$Fb={KmBhA&7->u-i>{DUhj4o4_W4%O7mRs*Q5OMFTV;D?RpVP_Gs7qtR0~+ zlT1|%6wCPdFZ@DBg8~YeLfT)p^51W`U4GwzP#XWhO+RVb%w`BZe~5a1q+IFgpqYV` z%tT?Xc#1jfYOX*b;m+T&2C?H@Qkamszrcc$qM+0451G#HX@#XdXG5R16bsf+@>2LW zT$SQVVS?naFABBGN7&xu%V9^$>ny8PKV*J^ib` z!;)@)JYX6;EI%15*Zl`DFo}PJ8C%yM_ueS|z5B!d2QG~kcD(9ewHb{h+dg)leN^|5M3-~|Ve z;6q5Fp}f{m3sl7e40$v~6q+9D}o2Sze52cV^MDSAq#IFd`f zv=)ZD%3wq+ER@=%Uso0)w0eP9yZo!(MJ&QAAwDXK3#PzTPR==uQ;7RlwIdf2$eTVC z7D~!VBGjWuBIY8~v)D@3KLX zQ)Awp?gXo1T< z*|xk;jxQ-e93}bwRb6Hx&GCT?q`pYO)VTfCAY!}c3=BSFTM+g+rVk#6 z+z0p^UPD`yn7*w{AKBaI@dO`2lf?H^`})TLm%^1pTrAr|M_&teo5a~2%nkeTV2f!L z;^+b8{N4x68`Hw#?)S8Jm_tS!&z8F_sVFHximZ!_L|dl-KEr%52U`F$gQn@iTz3a& zqsN>(3)=#hU1_~o^8i9YqlcD&A2ii6XmMdE*(Fi{mV}e`e%aOs?+W*P1@b~R>Mi>$ zRlU!=9qu{fH;fo=NT(N{9vQLxd4JF6r7P`1%US-rygur?!(Hdip>7ef3WqKKJlcIr zpTv6$r+~q?ei>ZxwtQ;oy6fFiSGeyLSTlW4+ z`m2;q6pDG|geD%RbUxjGGDa@dU⁣_C&1m@vnhMM+0-0QKV;NLGkHlk68X|f6qL# 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

f5Dy5Rxd0u3`!2kJT;s)nJAl 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 zⅇ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

WV~S%3C6*#D6We--mP?RE0M@4~;r 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

ESdzuZ-KP^Z`KPHhol=CTtDyYs*2Mo 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/posix_api.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/posix_api.o new file mode 100644 index 0000000000000000000000000000000000000000..8255bccc2e11d830252edd0d75bcdbe01377f6a0 GIT binary patch literal 289248 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

;e(7?wYa;Ucmo2Zi7bSVOb;Eu;W`WAQZD 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex.o new file mode 100644 index 0000000000000000000000000000000000000000..adc7f6e4bd37e659f263b803ee3f3b73002f9880 GIT binary patch literal 60776 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 P-OAsvTXXO_;^P1R5qEP< literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex_debug.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/regex_debug.o new file mode 100644 index 0000000000000000000000000000000000000000..eec1709dea9cad45af5c667ad1edfabe2e1884d3 GIT binary patch literal 944 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/static_mutex.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/static_mutex.o new file mode 100644 index 0000000000000000000000000000000000000000..5ff717705a897dfd0f2538b99b8a44674a228a8e GIT binary patch literal 2744 zcmbtWU27Cq7(SDzS*c`KX+emXRYVl@u)9VhrM6o(X;ug!YDLhCadt9E#QkFSOu7-; z1doYC`@os=zR&x4K4x}TCa1p{ z@I1lr#Ft`6V^)a%z8$%$#i}?c3fgyw^qeuj%pZNdx{?!W-)4SvLWpbi`)}$GzIqDt zRxRh<+MJ)4`O$Ulo*xzPuiqcvn#zgwKND~B84MdcE}SpP&L^_+p+5W9*PiEe@%q{y zxy|kE_trL5t9@QPb-j_aRZ=XUljmgV?1e1R z3AjNTz^CaXyn9!L*DrV@2ZnMRRP-?MM~v+_<}1U6wSn1T>>Ki31V{KRowWb7kzIez zVdnf#--_>x79tN;CQs-wqcp>uSc}OxTw_;>ET@YjqH-%)p?qE`_llqWO^J zuX`u%5)G`=#Virdae1FG@ z&&o6Xfjpw80(B?!TZxMLGVFGRe{<%1qtofB%2+S#bfY=ncJZ5?@a`BMlS`tj7UL+G zOM|s#H_^4qYXeyo;F@@UbYkAoJ~T8KMI*R1LPOutj`!Hfh|!||C7laBqx z*#bNlNygc_UobwOhh(!+uoaR=XdqXWhKdKKF*B4FMMxL5{LTloF(ah(Z~XP zZJZ$mIX^bOOtHv`-fVDv-Y2%X_3LEN{W}R>nE+ld$Gdus40`{Z_``Ua3A|6(Kl}d$ z^NM)XFVT1hrcvyV4ep=k@5#ur?RO@N%<%n*IP~STuYXsNuZV{Qcm2PS4W-=pSyTU4 zD;A;~4|~@AE1CV$>Hkq0_V($<{|ihaR`vh@ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/usinstances.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/usinstances.o new file mode 100644 index 0000000000000000000000000000000000000000..7dc9fa06c72411c65c313f863a405a2fd1a9218d GIT binary patch literal 944 zcmbVKy-ve05WbZ1JHdv;5+*>RR%iu8hPDRcl9#I2$I2RgnBpI@z>MmHr2NC^+(vUg|@2x6t%Qxgytf)3DsTj`5e!&$ZNOn z#Z8>G-#f8OwO`?iiRzBM~4EyyAEmf^?y S-%oXa_SF1g6?Zmr@b%yMp*y|+ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/w32_regex_traits.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/w32_regex_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..543ce902e1e8441355b55e967a4e883d830784a1 GIT binary patch literal 944 zcmbVK%}T>S5T4X()stRC@Dfid*d->_g9ize+KYHAcq>UrB+{ zS-=A3buVgJ`g6a>yxxg|rK*i_2YnrVcsqg?z=E(f^xuq*Z^OrDqvs{?$0eWe=~$G} zqo`O?6acK6r6P(ki*l78^h)rl0CpdV2v}TIz>+*od4^b)3(oMPx|N8MCsj|fniXYU z@KVeghyNWoKndMt!;*$ptxIF<5<0|4m_4shvdv)YkFaGE{lEHC)Y6_Fx@n;*h&N52 zuk$&QdTsVSn}xBqdk4sM(DB{;F#PAzT$OdAyP8J(*;?Y?RFl3J>8MZZ_Z5#XzA-zZ b78KC-R_QC+-@l8DJ$q_?SBg88b+YwK{#ZR^ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/wc_regex_traits.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/wc_regex_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..3d4425107ba073c44066d5dc83bb930dd9ba3f20 GIT binary patch literal 18752 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%0AOs4I-#Oqh^4wV6^1~gu5CL4 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/winstances.o b/external/bin.v2/libs/regex/build/gcc-13/release/link-static/threading-multi/winstances.o new file mode 100644 index 0000000000000000000000000000000000000000..152cb710aeef172cd15b84925457397f6d3ee945 GIT binary patch literal 480016 zcmeEv349bq_J2<@oeU7@38DlQ8Fu5Etm`guJu-qaLlV*r9Y8r16cC7@2oYugl_Ozh zVA^&dDk$D~tm3iWBBDqVAPF9v9tf-81sO&qqH>Ak|9w@}GZPMFkKg`(zx`}J>3Oe? zu6kAV>eZ`P)m5{K^qwg;TdE}fY|>?t&2l8c4I|RxE)T;z(%RJeREq1y55Y?W>?&Y4 z0WTHsG6A~_=n>E>U=INc1S}M=NWh)~77M5fs0r9hz}^Dt0+tBaN5H-U_7m`O0k06S zzkmY-94O!*0S5~>M8GQryh^~K0uB@KYQP)tj2G@}0I$O{R=9@)j>B`kaE}mhq=457 zI7-0L0*(PJ#d9N`3Bqq8U>Tm9@Z68*0Xz@lc?!>8@!(&YgrCWHe0Ub%S%~LuJWu0! z4iEk%KYpg*nTqEQJa^)`3(qrnp2dTIX&QcR7WgfIw+ei^fHMS~33vuL>`Xiz@tlPR zUeYZ5l;f$uGaHW!{+&fw5N`ZSA^gn2GZ#-75B?j5_id?Vl{fo}$UAJ6S6s4qM~r4R7)As)g%!p{~w9}D+Zz-@T` zCfuI_ZpYIF?UX0lY6sk(iSW+>zYzGBfL{rGr+~Wv8w4H${954O0Ddd*J%Eh@{|<1k zz`qClLEt|E?i2Wazykt52zW@~KLH*V_|Jex1l|NFiL%=OQv{w0XcxE)m?rRaKnI={ zcv=d-R)84-Zv&_Z+zFT|@V0=b2)rHOsRBO@u)V-f2RuXIX99M_a~7UX!p{ZRS>V3` z{H?&V0nZlr?*Pvccn)B$z<&>TuE75Qc%H!j2>2&~cLB^3`1yc;7Wf5#7Yh6$z>5W* z59k*7C4gN8-VN|lfnNsLUEm%-FP@G1z>-H4*(n}@Iios1wI7uN`YSmI8@-n0IwGKHGsnfJ_2y0z^?@yg=aLLF~YAD z@H&By74Uk%8w5Tc@J4}80GufBG68P_oFwqcfIfly0jCIjD&RDM-z?xQfVT>KI^Ya} z&jg$$@N&QkfzJjE2s{WF68IdzxdOip&=mMQ!1)5N1iVAwcLLre@CASi1%5Z+Jpx|@ zc(1_k1H5104*)(W@P_~&7WiVoM+E*T;9~-R9Plp!e**AHfiD4kO5jfeJ|pmF0skuS z=K!A<_zQq93j8I&mj(U`;Hv^(3iz79mjS*m@a2GS2>eaJ6#{7z07~t0e{|4||fj0tvC-A+1-wXT)z#j#^ z4{*Q04*~v!=P;h1h2IgtCV@*dhKO+_70`}H#*-%e(g7U;Zwc56PX?aW!mkaWg2#y` zQ}~?%*bdLBcuo_3S%4h`{u{vG;>pHyw(vU#Fh}6IfWH^`9{|r2_#XlPB=GYA|19te z0525yMSvFzJRi_4@Jj%@;^~IxQsH+QV0VFg0KEe50azgLLck({_XI2!xC*EVycb|^ zf$M-J0`CLZ7f(MtmkYlu0Q(DkfPe!52MK(zfI|SU6!=vF4h0-0@TΝ`8*M+i6) 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/c_regex_traits.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/c_regex_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..16f0b66d2b8c98b1a856edd616d4ce0fcea5665b GIT binary patch literal 16168 zcmeHOdvsgHnZL5^V3MF~AW*j{jR2+CP+Tc>5-S8MIZ|>(WXQ%2uZAkJEZZWorAk-C zVbfwNE99;)&F<1|&$gVUkKOicdrrIObOYtItV3P|I5{*dEG-L!ZGkv0k5Xz{9`XLZ zxiixES{F*%p8aR%oO|ca?|!fO=9_Qkj_g~*(Y19Bhg0FjpOWd!E1xpM2t6sn}R*j@qwmI-4Wx-2j=6& z{chYe<87_@Yb|PAq>ZONO?_IqerXHCL!J)b#Bn?-+IYCBt27-gZ*A0!kf%vMv#T^y zSg4I(PH!1WSL?}0@uV6xbWfvt`;P&m=}^Z`;0dfGK`qUP`9#s&d9dEAOfBtKmxM^V z=G4mh#^8N!5c`g5#&gluNhXzPEbE>ot$bP3IKi-p|3L0ht-KzlJgl`osQDjKZ+{Yu znsE@EroH7IU@0DG()_RL4Hc-PPy5tr-npmL($|TpxL^Csjls>q8-t$>#`bZ0&<8T( zRg=>=#5%2&Lmt+Bchq=2YMf**qcE%J)45YJKe@_ zi!VC#a|7z0nV(XaF!s`fT3U?O^u9X%Tv+$c>{k>|)BEacy?Oy6ruQ|frI*=5Q!Sdk z?3KILtAAmy0{S^nx}Pa69`_c1f4aK!4)$hLE&Yfd4mtF*tacUB(}(KxGYPJA;yWNV zp4xkSesJ`iSU|n&K)`*V5Sl*Z*3Srzhdk4(o$AhSfoAljCjC;0Q+LzrH�W>OUL+ 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/cpp_regex_traits.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/cpp_regex_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..affc9705cab92143e211e3290f20318c09f26ef5 GIT binary patch literal 7544 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�D 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

JROyfFH=KkzaD&x6AT64d)B( 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∓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 F{{v&A$tC~* literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/fileiter.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/fileiter.o new file mode 100644 index 0000000000000000000000000000000000000000..75bcf82cb6c953ac63a6021b45faefa5d02e9ac0 GIT binary patch literal 47376 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

nZfykl0RnPQI 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/instances.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/instances.o new file mode 100644 index 0000000000000000000000000000000000000000..04548837ea7cdab7a34455495df92e0e42fd69b1 GIT binary patch literal 508224 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 z zs{o>j+%hv`zLNVi^ZM9Gi8Xobcrso^)y9q|qZ|V{c03t73CJXyxv<0xJ(74>v#>|a z%16xP2js-FgVujQR%sU@f5I4Blo&?2ocW+S)N4hIsXVi=ROWj6LXBrdvJ$FM?X#If zpXk|lV)e#KShb+7xM7zwzAU-(?&SM0(;{Axd_Q2M{sZJBHy7FC5p6_t$YaO3XxE-- zX>gE{mURIsqsAOfhePFTx!F+9oaNEmLPbW+x(ArI3c5)x3wu4HpHSqeoO>?Llge$1 zlHm-a)D&j#GScVDdtnTK0gNF`g~L?1f4wB0X&e-{>B#I848MMTo%F$O`Z`HpLHsZ` z{%aLaZVpH}MGVrhMb;-|`|DVGBEwAyXBQJ-u2Q(qE|pY!YxV+__7#V1VX zc!`Lm#Izst?2GyZ>27`7dd8iJUo$t=1|)xPt%&@^nwrj5MP$^eC>*NdrshkOo9<8J zV7(W2^@+EsmNNDr;S`)eQ>KMNEy?tX9BV(X%2xk`bwSW^`()E$?m+Twa1{Xeu1tNd zP{V_6jbQ1>W_oU-wTWRgyF%*%Doadh-S+w%6ZJTeie2$2Zs+xhULOy7f%Akns;bpBNdt3`YK99HS zPR-m>-pONHjoZVVBhhidWk8+R)!O4Qxd3O_)YBXyi70A!COr1iAwE!8_j-pq{mM?>3| zj*NyLTRH+`x^)Cg)jj^`*fEBYx|x!3dAgeP5udE9eo`L74B{$|uACAbJK_j@KaG`J zBL4fO(ISs*ZQCUW!lVv^Z`M`sao^?IJIQ~HamzYm<&KE|k<5kUN158*wyQ4mv^9}= zMm4KGwAuP}zHQkPRkgLfbmq3KSrCthqUC1dp{_c00L)^^$?PRq ztWWQ;FxL|D>KgX(oZ+_1|Db9X+bg%WWuu{|jkFwu5be6ecON9-%P!-M(%Q7Fx2R%y zzgKSJ_S_$p99bvl>YPZ9>Mc^e9od0m!3Cv@g;zR63m$|qty@08$gyJR}}uD2hG zZGX4kemvImY)Q=jcs<+1V~)Qb4VDuam}O(3hvUYio_MI+y4YB0)C3kyUyA8(zw6Y{ zgJWB_bq)k_QnV(xD6)i(f3n_wBJoo*^ir6RHnh$ zQdHw^jsJcmfK9ks3uJAD z#;WQMxIfIhug7Bm*5;C`qvlU>XSvlWxj_^VGe27;*xb8es>d5W{i)u5w!U(IY}tPL za;b5%C?iCuRp%lnYHwCYUa7K4lAoGq9o0o*;Qq*-^VlDh=e*&1uYoj|Ukvn{e}XyD zeUJBF=D)Yyxm|mcdxPcwng4jQyT&!licS4PKI3jrP_H596k9&5JzmXRDE0ej{_g6C zESZ!K;Tch8EGI8#Yf|v=CH~&IFHxPqs6m(b8kmp={ygU%P_{PAEj=9=qEpzYwxN{ith4qP;(@^84s`JC_M@-`m z?6td%o5T)puD<*_CS9H+`E^uTuYgs) zXWt%V!hi%AlQuK;m`40{UdowStw#D0o>24k-i;hahYr!y@{+}a!Lg; zBfUY2Ol}AY2Q641c9ycYK(ONK?}8b{?Uj8$k3#u8fiL?ISn=jjTC}OQRoaQ&5?n=` zh6;OI&#n>4oqo4*U9}yehHFDQpVp z4afZ;IADEV)(^rm9UQG1%%PWRZk3cmXJv1mg~-j5~T|wplLIh2%t{UWcv~v$rXK z1LF>KoY##TmrLR4Jxe~1B{V-T4&|&IM@QQHH3YguFj_C-PZdlg8Sa8ihU^npo$-KXT_fOu})xi6oN<5WY&HGT>dBi%wT%~b>FLcj>S)L#w zbwo^|c5(X+tGeIbDf$}qJiou5L*w>Efv)p(J!!VovtPD9KXcX@_4XJ_LlDcJ>oHI; zr+!NQ6_a4N>$f{e(V|=K2#rr;<=t*_T4r9yXZGwYG5wF34xFDOrTwq%S?5RL5wDVq zOZ#xo+S9j#Q8d8mU*BgBtxKSgqdG$E9{6<}3hu;~zGviNtM#BWz)=omy+M89p|XPc*2 zuM)v?THai)?8yh{(|`N^<&UUA2dau^`z&~U!S5gXGktw1{aF-eZSL??WvxR0LtpkE z^Gkm*Ut-$pAM|*U?}nm5e1U1}LG)#NJCn+Tk!8;gUdp)P==sAihW3c#Z`^69Qp02R z#Psm-iOWR$8X4~V;PMEktww|0iG^|wzRz!s76p$7xT-jb*7OIhvdjf_uEn5* zv#ZHY%JI&Tl?@uD>LUY+rzCg#bB{|o-Y;+O!EVXcv9L8S>iqUj?#7*#2H_oR5`9to z4Nopebw}(C)+y$=tAo}U?r~T|!My|vw*5}O)3D!qGD_ZFx2JYS(0aVC`Y*YiuHC%) zFC4?`w|3-2n8F{y-CS1v%H+6nWkq}(K7{8FtWm^RGp2mNYweBJsqt|$!`5fHXO$1E zFTTlzb+UIAR4Ix?Q9EPL27jXW_EPK7>Q|=q-&VEB*N5Gd3O_+>Le#m##m|)*Kj7dc z&k_S-!V$aIYA`c()I-uyaVrFi3jdKB77?$muu9!6&dn?zqK`Y zyRzR%UC;-|wFIrpr4yWQN{u)P(KQUYmDpfiD3x%&=H6RKZ3`+QwTM)2sP3*y{lz-6 z5Jma7D|%!TNRU%PHb|L?JDkZg_VoG_Kc#1(q~vp@QKN2WPH4>g4WOsc-yJ=LJ~BOp z{s-tOLv{WS=n>UTRUdo=ew4NpJo7)slI%Gf1sMZ&>j60p%dvvlbL=Gm0oxtN)@w$$~%phwrGb|jj3MT{8@QaB9@ zy*D#a_Hn$5LrgZ{XT(Xl16Hc|(8T-ZG7NeY{S*OJ_GHOR*L#gsUxyKLQ|n?;S{a&J zWx$Bh=x^5=8q^>nd z7fMUM?7C5bk9ek;tsH~nnT1ufCT??d)IfKVdfdzcn`*;SWX#USLa!PrN7N7J{EE1o zYvj~Yoy(|8PrbbkgraDOD=LeI^4*=djXxs9v?$Ru=GJH0`h6>(OeT$~h)lvuQlE-6iX6jX`$y{MAZnhl;xx)6DkLP(WI%dBZ)d(RqO zKU5V4f1yn{p~{z*_*4z$QQ&Ysw}i7vVLZ8^MmE837GhQX;@Ma1&GE`^mq?b3;b3OH zu4>$T6ym#k$Hnx$HZBd@6$-tyd{_ntEu9-qg^ra zusz?z-E)_j|hgSn~L@c=omqm+>?{RSzc{P@~4xn39y(Qf( zALQvcYDK}|;9-hVjufv78pOvyhEqL`_-gezmf^rIAqZWJ6w$NmMCnJo75FaBR)xP< zl7%h2IyTfO_o)JmQ7=%Ry-}IIUHy=ChOWV2K@rD&+{m8JzkdEB7ztWwu#tbQnQ4`3 z$P$;=$A&#dFqvFj=95YpsS71a(*rSkOSY1T$Dh}NT3_~jQrz_wsgF2P2+0bLvsq zt1|aVSayN9#G-Q%kJ;`6%ynk*tx|+k26k)OmzCnoR9r@N5+_9Py-C)V3W32a`d{zT zlk7^9%BsS156S)}WaYy^oD;4%rFbY`RP+TOku%tX@IAjK$81SHg-nco!cl#DEJlj{{bic@x2<=_rvop1dI>Q z&f(VoDb{fc3L~i2;!Yw_G4i|xIq!eMlsFM?CuhWWi*2|b({Vhs&RG66!8*L%85wsj zWSiNWsEsjD`?wgH|NWkgjrhnLh>c5j;(qZ2HST`8}W)W#yNrnOLb|NSxUM7x6RP2*0JumjoT;0Z4ORJ z_LfDvF2IodcH(83KKo}``3y&xdG-w>^(iP^akp)cpH!a%eO1gNU-@+V#} zGb1jd>D$y-U|Mk1@vEn@xDhFP_!iafp`dMisd40xXcuP}z-p=b}W5zvs^Ea+kJ?}`*@By!_Gy}&dWBD?Au|D*ch#W@k z!!iFOZJhW2;DV9zb-&7Y5nGJ(*<^{?J$2Q6xii^6#>T!)n|2F_t9&N6!^^;xft4&&E@^`DKAi6^jL8>#1M zZatp|u=j%}p^s0R4*O*u=2V0Vie7njh2{vwDtYBn=D?UFGe%P--sj(zyTC7zaV60yIwoze1ayb|w5cY2bA7lfYv z6@Syds%%rODa4tmr}=pK%J&{JBj%f#i?>z9LffnoPQ^jU+-7b3Xzy2apZmHZCn=ZT zKlojq6#l{Q29B|R@Voyb{O;X>EDwJ7Vec*0KbOLhM3c%hJA0oNN|@Bvx%_Tj+dS5w zt<%}vI#kI4c!UeT<2jjRY;%|5d*QCueMDI0-jsL>ai)ObF>8JVh8Nciub~c|P}zLVj0Zk68BdDj1-&w^VEr;?g!; z`C6IwP35<9s~RscKJ+;PYjL#vba6tg5|$~MQTom(At-99nfW3UNHgM4Nx9QeD!#vR z2pCFwo!yJ2TH~o$HaG^w{jQ3SYNm#Xv=VwLWMk3BA{LL+7IM(^X~5 zj5U0+?*>)%5OE9JYVZ}>t>p-53z(%MSbvPvHPp>ioA7r?NR(LDpG$5wsGDB<=?xbLz3gCUEn9GR zb}YqWFtXa^tGOs0=oIR!(x^wq%3(E|6Bo$?f@$6wrt2!1q+}rwN`^*^^u?k&PvxI(r;xy!&n9X( zkBJ=_{q2|Mc*feBJyZ1T6)Cn&l!=^!Tv(MoLednyNRx!Nki!ewBqSH8>ERpAbg;ZW zwS~7^Kg&KR;*oN*JwzWX%H|u!K_m4f&mv#wE|x8eGiKZOs(vo)Z|Q7rr`U)3dr|p} zft~HNj*xRqZi5Qw_kQ}7{vP4=H-4n5ukV!F59sSIIjPUXt30!}bD@6#rPRtZ>glu! zt(W~a-p($l<;$NU8F|XZFXLq(y^JuHUyJDIm}N3PhKjf;PKJ8ZOrB~-mCM%A*PO|t z6k(^jk&Y8nIEx0y{c}`*ca;0^EylzWr2qMEvV4C#t;Vx+g!b$_Ln^pzgK(pMb!fdR zSeKf(D__=KxmAkYDw@2m9LLZOsoc1WJ-SRcOPsxdifn}@g4s(*a_OYMy)-=g0rZ1T zyixHIIl90bPMS2s5RJH23gOa_gl>pnK{ZD09})*q)7IuL$*N95lKbJ#8lRC8@5=1i zLbFm<=ea)Xj_h2bEJVHy?o<u)%~7kZG|>BOr9zS)Q8#N?5@LM3trz}`oYh;l-j%JBVNFi z$vWI5b>3y%xrP~dQbpY6tfO~4P*{Q`* zQUg!FWW{d4$(JYLq-9MvR$k=a6a557Uj9HIcV*FF%2J0SZcbc%=)=9vA9&nl;u3|1 zTxFi$=>jpECVr9oE$8PXKiYYfEg1AL>dTpxfAze(gCC|?z(2h6@Xm!Q^XGSsRwTMP z`$?cT4wNf4jGseFlE!y$9ED z|FEc?+UvNqb{*YK3wyFdYmNAHnNsBAYR~txHw*uezp4ghlx}#bRdTm(0=2 z#l~nZ+aw0b^D?6G`W;C;ncm*)P&_{AKWX(-~;kH(F%t0}qfefgFxo834`IJb883hpPniy zJ9C8?20W%nxDv`!!RRw9F$9y1l zXP>u2$AqpA80q(5-iYws$uuIm+EsEC%mvl*Cn^Bt(W9!i4^}eu{qX75QxCV3EiF zM9^e8W$)w3XW0?^OQJ)zVb<>&Y^2yA;tO2rPwr>Keu)YfCHHf9LO_L!llx29DXYRI z$^C4@C{^J>$^AS#LWKt>_aBD5r^1IN_haN7rNV*a{vk#xsKP^%a_DBc3J*>0A7-Q~ zR2TvtZlq3E;o-^s_#jrP@Zrh*M;NIwDtyG+*Fj`tl_CG{@j(=^Wsn5{YjZ0YKxDsEf{Te?>CC%M6vuJ89JxxtpMJNuK|U`tnbf07$) zQD4Q>#cxx0Te^1k=aQgB`*WSU2^p0N*!ycUC8g2I?RD%VO8t}@_NKsybLjd^2d8U% zg9H^V%5>2E;+&+S#hH#`Ymo|;WI9T$YgKSirelybTLlMaItE+QRPeA&$6;233I;MA z0jo|0hh#d2SYuUiXr^PRb*2gq%XAF0%2jZ9renA@QUwpsbR2FSA;In==yt0(Fk*1$ z5%S?`Z+$JYT6+DSQtIatKy~+8NvW&u&iX`V%Phg9zr$SR*FSvQ;mWU@$ro80*uSht zGWTRzAQ)`gH}0dDH_e~tzLPJ1tqj(Pk`l7tMhac~fr>LseAzEa{CyRN8hzR8CH|g@ zqoDe-S4sR`6(1z=FG~C!6(20|^CT`@HL~h3iI0`IR3Wk|Ao0^AE_=KptAhqlKu|AHN%QE9-xRvP-n zvL5<&^($zG;V!G3jYP1WVWI;57_6hzAI16|MOvq1Wlr?;A@V450r|d2a((DE7FY>H zY7FZcZ=T5OJp@$Y%xR%r3%*CGBVfmG(<61x1+IBu8xPlUu(L7`6muu8wnL*jR?svb z=7B2A1I*tdr5h`w=Yh~bS@FK?^|RNa|DyZ z&n0N@Q~i&6DfCvLUM>*a6doF={2~5Y7b>;ORsQEwwA-V~0wA3z%D+JA;jnZki~S#= zN5h3ZI$vr3-=Y+#Tb*O<>HX55p5A`}FCW;KT@Uk!N9PCV{VpZsq-IL*KUtopchoAH zd!mcz{aeY%|EM~qSdN{dbE5*MOAyGLfP58AHAG` zRG^u=1f5+gbaRHszg5koTxDHgrD+?kB&wc9YPZy!A?d2H*=7orR|l0={yU1vevf~u z1kuXx$v#L_JYbLZ%m6T`qqA>oy*wzHZpnTRuGepiK?X{nLc!T${&Dn(dSaD4!Tw~= zW#U7~^K8I~pT~3;&G^<(-m2nOcCM7hctmK_g7%AMK)Kbm9Kq_TSi(KalLaT z$78oBEgD6h!xM0lW*RhYJX}Lq7Z#vNhoFP}e1sh8>C>#!ax|o;-|qrnl*s)GtwwM3 z*N^)Jo-vY$;+<)R(66qDiAfDjc`8YvxAAx66B0OOm!M7mTcq>ea`g!b^lAI*Dp}-i z;dltCFX|utqQ4%YQsnCqS8H`TvL{tu#*2y)7pkc;SK;+?{R}wSH7S?03MXg^&9^ynpN`*{COCk-PL_!2g5u82+)J1X}|dmFs4I;Q0$5 zZ9fU;Ev~MhQ(XH+pKHHZ_VQF=Q>+QptP#<)z{HeNXBuiN6P~j;8;zFDWXua;=GJkXq^>tCNzyaRCPtl0o7e4tsnTeH~m*-rdWR120Z2mr0iP zObyC$pknF4;fR2ddWPX7M(hT$;l`GCsqD^ z9jVC5X%k-iMY66U9!|Z&d0}!UwJ(Y=rjl5Ut0sZ;@oxHE$oAC*T4CrU(s zizy#8OBN@pyd@md;ZSAUJJ;u4w=UywQq^l8Om$KKrQMP*wZAko^NaF3RfU;it6XNH z7BmWk{CnLT{il-Q0?VG;)EuSz%q{OQ)32~jN=#18nrgBehEs}K#WlDA7iN9Dt&w`1 zYH*Oc^5teZR=rI8WeFRpd%20!ceCKE-Z}NW%-qiv#hjbeZb;c6sm4v^X1)hvEawah zpXq-9udJB;3zfr2k0xz=Z%H*odNDPk(5blenVGoXZ=_%2W^c)n+*?%MD&|<$yYov! zbS}va$a#gy$@QGAsfa-qFconj=oK3)uU5U_9`TLAzrBcmGg&jH81$^E;8OIg861Ye z@iHprDpAb5?rBsFssd0;D`#&i;XVBf0w9E8q~=S@=+L}0>Gp_1E6D{*KE6vV#m8bb+3UQqGF%$kvM(srQq{oGF0=zW|zDiwLRpxP#vR zZ2x^+@$*jo#+T(AVq&ze54~(1?g^=iAmTJb1mAkR6EL7|a@)~uI=3nQhdMM$ueNOx z@>;e*I(~qxlM4~88AU-EmhN~P?05^>kpa?WK7sS*}Zg_ z+dh?^eT(e6y--Az30g4@p$znc*xW&y?Z|{`; z5ym2Nx;|N-9cow|@GVcNRJX_vGa4n?OPSO1WnQStM7H@+`L_P@)G^8smJ}$-`8vW~ zm@_>4#J%dKTK&8TUB|7ZNoa*|2;u!>ig*x_DDaM$auOV3(m$pvjOIFh6o;Qc6{V(q;PEDbVW@S?D*?FT-P0yE5mamT|f^ z3;6ClL+=&NTZ){Rw^*qd#Y8R3?_TrLCn?>fQy zUAOqm7?(SE#cC{p64|})V#P?w=k&7A@Nf2t$gnA`LhoVw(otF_O251ZGr_QlI(p$s`5y>^}!on5LSf zw87RLAN z2&Ezj3e`{a_0@uNkxyOWlvTiGFUt@S`Ltn;tSStUPo+Dwd}^#*SS2GS+_k8@#msQ3 zsV(jY908f>;LPoCsl3D7)EVFf@{{8l2il>rKF8&tDd)I2*2Q?}&+ZwAb=9xrMv6Ym zXo=SBvl>8zKgK>T3bHPheG7H=Yx2EnwRHmS3N3qFQ0_+9Z-isDeAK#|PYWqd?R|cT z@)CE}_D0Vr#dj!QYT{=?;jz%45=rUr1|(>P=zNR@?BGS-HBt{E0C>zmhI@sOKEy1N zH(cOO+9wgk61sJSBFLEg{GN3sM*4aRkZo*7?^##WEAmK+sm+^DWK&Ox%58E4Dz6iF zC20zu59PpYIvC4Ek*u8V8Gl+ZQD5_zalK zKwGDoxegS&V4Yr1Zc{)OuVtSYGg;7d z{#kn1#C2TpP_Z-yiI4~0B@YQER;b2r5@b|K4|yY9is>*B=58fJ94HxOYHsD*;wDSC z#)OB|{)qgZHCIfEvbqz8$CQca;m!tP#xs|_EA(Zgj^)2pybuF;S<28W^%^7J59o-)Kv$_o zxWaM0*s$0-;GP7UJP;`xS4bAz()(YX06#T-k@d!uEg{_GiwGcw<^QJ`>>oH$VEO>&F2%Lcg((k^4o zn;#l6vQ1O0^J>(DSpxeC6K>(qIi~NTV0Mv8RQ;+|jDg}ZMVNx7RxL&wsgv_F_(*w{ z%?L>EXH%`EOQy>kt0ZR(Hy7kXS4wdyLY1U$bq^E}?^5#t0^%4gAifizx0Y>?9xf0N z^|rs8Ug53To&4LR7Q{A1k9q=%7qQoK@Pm6m1bim4?9aS85V5yJk}vwBqC!TN?IeltzKA-{fh`)ZMecoz zM%xcmKN)xMLhH$m?e_!ZtO&%9sy)%E{-D(m>3q*W|GbDC6cJq^bQ!@dG*6r26q$Yn zN$*Xuo?1sMM?zh|>}Y!U)Wq*u<`~T5ms{&t080F89V}-^1YT8iR`L8hkU9cl-)^Uc zoNawvsXzA}*87Mt@S{h5kZoh4axQ816#m65)j9QZu@&@+tzaHeLCCd0yBDDpX>*x~ z9i@?FFUXM@k!638w!<>Z>|XE`u{Wywfyi2B$-YSPdAS#?ezMMfDM|>N=PS8$^7A$1 z=`(&yvij5>NSU1;Gu1lHbTp;A_}J8sj~}qKScj9yn)_q;V=aXq@;-@0%;xz=m`ikd&3&tPh@aS*b53cqFp(^{eXcwQs z5tn1dKvLZdKn_7zNg^Lrpgrz+8;o6*)61oD;5B*yIkK_|HQzo}ZdBZBUyD*~RTsN$ zqvG=i@@1Ru^!%G-b8cxA>MV=WXF+47BDAX#Rsiz?Wyd z*)7cMhQzyDX15@oxroS?=Crd?@ zNQ*p&2>5-TVCGLLUa!K4zf!F5AF*M0d{npvMvNC!BSa!n?<_Df-0K#>4t!=ynEQ!p z+{8m!IrmuWHT}%nS|T4m;zMn3h`g=p%?qiM=H>mby+xI4j=M#1aN)!9=EP5AhCWFu zqH1f?wXl9wJNY&N;Y3ok*JHhH(!B-iJN>4YGEbsoZZBo(7UVLw2aU8W+_2Kv;$x$= z2nE~pFalKYJFGSNUO30&5;*~XLGjY^3&6vQRm(h%&=AmNsVs)7WP71Cu3c9ZemSKMaWK(XKI-?}YYdN+7)oFpjBNh;PvmLVeLA za1`_Ntxxw80fnhW851%T?~KCK;*5#Il)R}hwIpLgkg||lm^vt9LX~$NkUBVHLYnfS z_`wwfi#tc~V3-b-hm_w{tg(*Wb=1}XR!jxedbC?w_Oc|arhg)Y9rW~Fz z54T1Yq~MQ(tK87eMS~Sy1|tXJI6ZH#2oWC^hm6!k+)+#;YZ8iif=1ka#g#P>@PEXO zh&R)2w+!bJ&&r;*xize=HM`7(B9Yv@&wZ6hBso46!@1J(&lQOeRtJyyFnM?)**f^o zqh7jJGgr&H>^;gq=1Yh~tHpoj9_2o>P@->1RC(9TmFU|NRn9k;NmRQ39_5>Jfkef3 z=N=XaeA#m)x=*43iB?Hegx`A*8+_T5Br1+U_b_?;vPVf&{D$rk-85S)QE@A}2WI2T zzJ)xp`hAJQCVbiFB`Quy_aF%QvX4kq7A=)!GrNgs^%mtLg+Al5kX5DJR!&mc`?w9( zWS&AZ@g!J<79;(Km|Pw!uAo^kM33QQRVqV)v&HkMH@{$2M)G|N3%+BlihH^7dDIV_ZI?IGLTo z!#OhZW%eO+e2w}-ssCZCBxbWw3mL8wGeZ`D zHw&^}|iY)(VqQuvMeH&Bj3DYP2I&cG=%xWR{d ztyv1Ye9f>^p+)d(th}E6=R@PpMG)8!IYJ=ZbzL66@{Kd_%eKX}x{HU#D|^kJSBoLQ zz2;hISbis(Cw;(<>-pfnWE(HX4mA+-G|u#}Pk12mojO51ONAQoCz3tb=un#0g<*pLH5N8SQ^PY1OyDpl!XPJCb zzJb%!t)2F+-4UaQZbbY`aIR1GMU1JtwL1anFEr6{8>*T|*>)oiHEjg1W_k?MmPS*HGJReL^HGSc9)vqGTfAEyDXm_8oTgO+sUhUNr?x(?k6A`Mq}4< zuy@@onG)WTFZ3#o)U7$vW?+~CFbCI}UA2#~4QHyExvcpho1)I+UctE?(vW5hYG)~f znw&i>G`Wf<`Vuo?3axqZV)lw^jA?MUygfs;CwIrdc(wuNKvGmM$YruRvwKi>ZaN2W0@s-1om%R`s4=xpzjX$b;@@Z(t}45{H6P~g^wVwoY^n0aDL1a z1?0`AFhmk?MKt5alM(nng1l0pH}e3;9o>_+X^IE(2ho z2w~pSFX5n1ZB-J^j)O`#kI6kxAYr~i`~J@)oEwmEZWtipEKr54&z-Fq3m%VY&nU9VLU-1^gQVg9vX4NciQzpy!A9HVql{!=c4@43uF$ zhWvtG-~Y$nnSe=AU5meaW*P<@s6kOCQDY~Lad_wp6E|9jOv4ORYfr$P7o(DB5{xD> z+KnVCHg*q8y-F+57=1B|dC5!6sxJ${4TnWWTtT9exDnhaT7|fmdqHy?CYSKYeHx#ygFwtMb7mS1k6tjaGJ$i?4Fewjt(|AX?&fYe;pME)n_n8V?D z|3EoLB0>L#a?DBZT#h-vT8;_r^~f{pc9my-*iW936G|)PnN_=$XRhZ-B|q7%JoEEG zk#3P^t{e0oF7FEE89g6&E3p{t#wI7aBpbBSBzeWApoXD3ghm|R!k7X}%YW)JyP=|oN+Uaf;; z-#{N*iqgI;yPmvqjdGGje!~`gKqKR2`8Vx+3gVKK2xnHTk6&3LFJ$DpOo`|@YyYVu;2NiJo%T9{W&E_ zf?4n|va{y*!v9=SI=iD%&cp6hlr^$xIB&Sq>RC!=aL#LL^dqU!kA1W_a<#-U;0su~ zp|;a`EG@SmN+lk*7My@InktUuwD{vEVnej86vnO{gHpwY`%?}$DkeJ;<}Teak?4|R z?dW~^4HIpUm!i%{vQ^=Jwz?N#22MM_OFB;_O^6{;62-cEC9ECnzADFzOTU{+W0T}T z>~vmlcUGm=K8MM20td-rSDarh7%ADC&aW1Jjm7p;JZl`kNI&=hK~$q3 z5XbGGQ)^z<$fv}^(~6nHBbg&5Jv8C$nTP6ISG{JMDXX1rv#RFc;fEN376nb>}tgah@Xe!}l>${%FjFI;^fY{lZT1&ca_S&zp-`^R@ zzd6w=h#enitrUF<3k!vMT3032b}xAu4M=glImNZps7K$nR(yBl(UVlt$i^) zP!)eyXaIoi90`rA<}kDL=q+TU5ZMKZ`N=tNmfk(PczyJ)TX9x!v`pg?YfqF&lc4=@whN0wyw~70y7A`O&2HCC%64B4SWmhnWl8{BuJCs2>6|l=Bm!okC#dF zY)Fu(#&qI$&?mg*P3SX5#V{~vjfcmF^m#n=c~VH9$J5YBA$=YXeV!E3=kd_zNlKq5 zL7&G%pZ8~Gq(l?rxx8k!tS%doPfTqwj8BIybjTq8u+Re#6*?Wt99V@P zP)4Rt^6}w*A|?KIylUJ8n!T9=r>lSr{7Nk63UAiM9HHUDh1ftrzBNw_h8l= zaY{5M=~0tChJ1VCcq>j=YLB@L^IKQn+)opGM746(c8>3ez1JYflI#STqoBrFL9!{(mU_Tk#LYA@sFFMlEMXy zPqCzsphZ|6V@FU4jL+b`6o@A=PSMHG>p0q3FSr59Hd?Q zY@W+^v(;j%`ZrhC}8zGE^dvAKfYOhLRrbzX(XAquxt=2jf{R{z?8wm?VRCdcCD+ zo(owg+E`rcy#uu@{aM!5Sv+aG_Yuk)yDrHGP^~$Lz?*<;z^@OYZ6g=OcJFeYiNB-B zX0-e(^aKN}_aX&ZJm9xx`m;v}XRS~Co?LqL()nGd(_4X*!-Z2HBSAiJ<=>aq>&!k8 zzOqq=vs`cjxW7*dKjjx*UwXk5E`7Uo6)7@)#+Z~Ekaqp1kAgvDhZ2_qi% z7mCOn%RGwje4R8d{7K4Zhj7a(jNqkCXL;qcKS6ORk$JlGyeVJ$kIJmZf@9{dYQHoT zf%g_xY!zOCDkL8h+i6I$=(AuVa(*oL%XjGW1=V+&$aGnKhv2R)G{*TA=AirE@PpVv ze&8AG)*qkZ$8(u8nJ3wf&5x~_51I8d<<77J(We$Sm%AsFUvx@r?O!AI`1^U zEFRlEm2Hu-njtbTM_`1fIT-ZN^RdWbjy{+!ex`|>cW1X?C&{#i^zU9w)SwS*_k6r@ zmm2tqPs=I!bMUgv&zX_r65!I8PL#4urO)~Dk@HO2c~*e zQ1P3S0L&4w@ds&+%mxArk)Sm`h<5rw8BvM za$|9hTQlyDd%1mH9Gb%sS9mVfsbZiLtpfY zy+j;smnrrrx3R`rG!EUNtvg{YnnT{4FGaJ@TZ@L0=swy#yn9M?IkNgsHRi>+*P!9! zvI*u*lox}A6FDuIP1IJG436YJX3-lWpM6tMa}CBoFQAmYsyh)0iFBK*Ue>=~NMCJYhv^ zHu3JMHI)XNgYnY>LbwJ5Q8BmaVjXzbGka7gNf3MQVRHHyu{TVe@ny#mIUjhY=HwWGUr`{s}bwM2h%vr&VX|XC1Xkedu0+N$DO)I2*GQJF*k_kUSkV zP!zk$1uQoEOW12;5X`N$qZ?IO34NB?V;KQwQ!E$xCbJLk3eqsgf;2KWwMfa-cS3zB z&N{|U^Q!N#9>=*8uE$T(c(@*a zUw@eO_`=Hdc-%ni@m%&God(gK1xpD6`}!@+52aY!bgL5O#9t6@c@CEi))QT#ujRN3 zN_J3?jEoiK`mNO;S1P`OqEjh~IjN#(zeQWKjwnxY=d`fR5=`qES1vEJ=r31vqP%{K zi&=zMP-b_p`O##-Yr2$+@zuz@yL~N;?l7(Cs{T>`HSlD2t(j;#S$VaS!VtZf{~F`k z-D@odV}sXP=M4Q$YvsS0XHIl(##oUhc<2-(y%PFHhy=N)%4HSMc)G zs+apQ)rWn?!=%q?^O1Ubxu+6E$+Q~cV5Veh6kc{D(61JTjz7&eeP`sr+;>_ET1 zfTn_qJwnm{TMGr}i$BZBFBSwJkIAcr{^nzcdnq=P$xDm&UnUIg=I2Ro8Rk zulUwXQ~7ki^6{a5(yxB4sbBrowLL^_V@+)$rASwgLJsLyPYXR7_crweqf%vSvk@;n zS>udfA&@wi%dPNF;Fm7mB2W_1(N9SI9RZ$nrM+K2{(pkkE^rc{kmMeno>QZc^W(Pr z(ct_uJ7KqE-fQJoXc@H-Wr=TF9h?JhOMG!+&e-geT%laf8F$e-a2wfcE}1>9;TUM- z_OJ1>&tKD=oRD_g8abXaJF0X>su#_e7ytT3{OjcLS|d z#PO{I)lVUMR{7WK>5M1tsL;R8Mh`--&yZWpOJnj*DI(7Gm%Y!)P4;|X81N*Scv;@W z#st01dr2}iR74{enzzf#J(30MLX5&{zBNKE5!Q1eWK!k@7Ch;wRrrRGsXJK0h%teT z#aPtUgTc4Cx2~CL@Y~(Xr)(%)sNX?)ktvAbSW8*<^g{NNx)V&QS<$Ik05rphSUcn| z++Iq6u2h7QeL!>JiEP4~P5VYZkW@Ga>Na|LD@=Q2HqWpcF|AzP&`U{m&XouhB{FPPtvO8m5Xrlg*J>{)7=9g#$FOM~WG;4eZB^Gk$t} zF6q+@Gk%qw3z-JDu6g|AxK(uMN!dmQQu82Hyh~QtR59H=j?)>%?)G#F57b!7%GUhm zacqCZ9GAlFhvvwK!4-+5SZ)=L5;>cY|E~MxBJrqISjI(bpF1g@#8w$^v%U%NJq&<> zfj5;`=N|{nT#EPCq{NV2aDs-mro#vlz^cSG5DJBx<|y9iV_?3nIm&SI+xH{tP=q4) zKp6qqajnAMstkZO0z0i$ukScafhjOB>4|s-`m{HnEv3fE)l9iUKJJ>XMcbS0(pc~y z?S5bTE4+e)fU>#8P=`!DJ*k`b=CQm$ZX$#|LCPd{-c^z-gpz%VlkOl;P%?L{qgUeU z_({tBnFvrSt^FGpQoIpg0+QJUILiGdF@~j``%4MmZpRLd(-|EB4(ZWekmI8<$nkN6 z_-=S)V4DSZZsXYL-%=3Mwb<&(s3LyAPUjU& zHuRNVm_y1^ZVG?G7vop}XU~AWGyC+nlUSY6_oe3HIwQ|WBNqby%g$^BjS!}m ze_&s1C`f+&EV9+R$sEx|<1s!3ph$^6O@Qp|R}_Y{++CTwq#OrNk@K^oyp zVqG7U>YY+AxRhKur7_@~ACVh=4}wHe-q%FbC-8M}X@`8Vb8jHtxd&b;j|Sw5e%GZ| ziNPwh2370o6{?GStlDfmmE+YoWGj1h=^Cl1XsFw{&%1(2Vh+3~{Xu9u@9ozPN0Kqy zo_vIpcNjl#uAF!zM0V!n`Br30wBxSfkw~ryszn1d6V~zq3+& zB?U=j#?GkB69JFqEab_M!b+=fpjIcok)F+)8RAcb38V0h`;)5E&Q~J zfd~+rjMQ>~_5~D9yXQ*v7uTl}FQuH>ZJ863cgrl5_EkQ@+!5Yph=tRa#|mAt@s%hb z1iuYrkii2tRXuQzYN6`#a^4*W)5>844(>TgS=H6UWqq)%=;OMv=Kx*53HTwW8ncPk zI;a2ojc!2O>YI8TFBbrRoIU3tqWH4VA1)jxcfHHGqx}xRA|$Nr9;3GK7AAy8L~u76 z*zRvTXVmvjj_a@9$u0hOn||YY5~q_ve7BO2Sqk;8cfaz1*S*`d;Wot?6oDyY%QM}z zpLR3!DlIdXS!7VsU4Pbp?{1k(AA&C+mVjsa%lC`n%btRBO@vT3Ldr#x9BgHZ6z9v@ zpX}8y>3FJlz6b^WrR`r*KrmGP)CNC)9KTY|{5JV2>N8%Hg+~6koD*C+^Jkf&7n-8o zd{LWx`9&9&FK-Smo%uI#Ndq_Wr9Hj7iQ;<2M#|o{dMVl4)*xTPNLhT8mhW!iM%u|X zZt3grnQKSz8pmQHv-MJdcc?3N*m!Eo$fN4e1oD+sv$z;}rS?dGAB+ycL zcTtjgzanv;w!tq7&D5mI@{?yorkct^$$K(OE*rUpO_&HG*o64COT$0SdfFTC2fLa- zWJU^act&_bX?@5~&}$7|b9}X6u$*FzFT4V$OZO_$!nrvGU}_}?`51tcXB_Qdb!>-q zLI1soV{_u{bC$uzXMcp}tk1-us@NjPFQ}7vGIOw;^$?$ZfZ`Hk$<&jDD8D_LIiM4c z05^Ct`;S^|C{?;0^wn+#4F}(PlNSANBOdkLn2e6QD+bNJ z5{q>Yi`+0cmLC@R&%v?H!=k?%9NRQ3@+cd1hDClij3VEVb^7t)u_uQ|UX)9QDt{>T z`ImM%!cM%d`Ng)BAwdtHcCovKU$&bQP$}tclH1OGp`N2A8A0UX<1eh%b6A@1qVV{O z;?`FroeRgp%gkQX0&#$_&j=dxy~VDb1QIXv$M`hcm~H2I^9vB+8eES0`HU}-25=9* z!6rFuuTIyptnBBoarkOmVNML3@3h#vOwbicS{oLRoo`<)o)Tk7Fe3wB?-Gjn_ND52 z=(1TJRKD^%e2)?M_Lup5yUzM8AdHQ=Ru0@-Hz5sW&jO?4AsB;lhQe(3#3t_~U6Y<6K*jQznZeiM^o^2S zz$yt(4E{p;bEnRL+Ch42kv+2Ok?v`8=AN^4>L=?mhuiK?dMIv>|H)#$GO_We-jJC| zG#TxmU@*91J~$7z(LU!sHi|)P=@cgAp3Tn7vu%K3wA6j*S?~)(gsLb{Y{1+ER!j<0Lw|O~ix# z*$Or?|8BFY%{@vJ@OVa+;Oj5FvT5gc0dZE+&U>W)}PR{`#l9h zan=n0LZ+mXDY~fx$>#>^%1_gRT5H62+}jb6^i|l$8_UTqr1Y(wV=idEx!uXu+r1r4 z6hWfxi2L6y@-2qyihLLQ_se%Nn%VtU-RB3o-@K zt9P2`Vrf(7=zA;jTy(^Rq}J2Laef!u}yz2{Hdak*?$bz@mPojj6MSd@G3$+Vkj-SdzPh)}kI(In1mkvkC z4ywzGtS-xhH69}VK6)(cQazp}=zz4Hh7AQr9lf@^wTJwk$l@G*;!HKvpyxT;?gAZ* zdmc-(u)76H#^7hj>I@lIu{vb>8Kvumf4g55uH`(oW|MHN4N*@5GnvmSil*X{Y+e@&zP^`6@FZmg2&p(x|_=TBQD# zGQHT4N_@}BVS*%EesY-p#DZ)EO8JsjkVeZSg+ZT7L+hFp=3acbnpVr_JMWraOkS87 zjAyLO2j5CJmHVk@D!l}GwV;Dppp#I`1tzPO=7kvtjx@jMBSZ{VtJHz%z7j8hKQpBr-*5T?-GId z4pYROPm68`eUub2>2it~IM!q^umkWSW?6YYnZ`tH(gK6%}UP%&r-#o zHs|=Zi_=%9NRBFGWL+s~0A)o?$}231Lff(=Iv=C{Nm!E$%{jd_iB)tGE>QosJE_sN z8x!}>{g~Z5DNYGSPMaytnKb0uhOy;q28@7fP8iWCi^2>HfzG5GR0OfQHi=9*Z-o$8 zu>KK-thHx8q`U$L^p>ER()9+ve9-$eBpX@gtBb;B4Qc}>$Mc{5`~A_*sZ7Vda0$u} zmcalz0u}Ey9%#Lu8(vvlbwb2FbnouzBW2ytgHRZTZxTr`(Q>wgOq5NYn;?l9D|5R5 z7y6v2b6Ays?Q>1(F|2EWJ*{67Jbw>g%DSaj5M_TmOzLJ!CN>F0ty;fC9m8G$Ay#H$ z`(%)bP5bfxOCGjYtS-r8l0svVNfF9j%y;rG7<-?j72BV*(+l-%?2tx5JmWC6{G41SPU~k_ zumkUU(2DBmMo!2cxOM8xTxJx@YFbULJHs<4Gs76i?0QwkoRf*w@iNDv=?kY%yXUvq`Au)HH9a- za*1y-K`zEzVOrfttE&B8beeFKO&G{Nh0CNBmj5!M>c)=%Q5SAq!9gXrNF{#zGFmZGBy}0~B-^>rBP7+L zBQU-)ztaOv_$z4!52HS)+VU#X@17w8kB3`y`KZ1a*C$=njf z3jAK6j7>=OX5QF3^%Kn16I^w=KaeRx+_$jCe-3FDC3W;hGS#IM>(kbh_3R=)ge(Go z;!s%1$^7LmCwOa7ZT6CJOEYIAohLg+zm#&nE(k~d{KSS!#<5G*0;1oP>JwVMwO}xh z?ZlaJ`hg(P0Xo@I-6A<#v3*dJB2mEll4qJEqQqsS6K@i<){=EQoaaja5%8Vt^zL*s zt_+ZYBkScTwZVPU!SXY)1@OQ-2WWkIp_$kHxn_{kJsD)g6N8+}O@PLn;5*FkAJ=Hdo?tIZf4O{v3zy(V;QhDW{@yGXtyhWGUkd2rG?FLac z@R~?2A*Q6v3Cu8+Es}U8v61t4HcC=y$rzlbCweq9NQB=lTwmoS&hfI@+%|QN?k9Yv zd?xd{%!NF|5H*9%(odzFvs^d6r=!mk;$RhyXX48E!ilbi(ag0L^(1o>21T+Tm-%`=C2wgI)xPd_Lp%Pq6090Bb@*PL22Z%zQ?&3)aZ_Xo599pE1K4 z2x-dj18HP~I$?+bEAyKO+09KWW!iV8+Ssi?yHq$16NGQ0WJzy(V;hU-vy z;Vc`mL==`mV#KP^UYJe>p*|fm(67Xc{~Qn9hz1_lq8sp%+ep9(u?HQqqIPui)@4x? zDSVRdDeT;TgfQ@~?`x^-g?1u4%eq?58Q9wKiFk(f;#36gQxUl341kqg>-mh78pHM8 zTBNsZ_d0=>yEh4}>g?$6Z5L-P2f)$RQf-S<`qD%DtVLV;)*#-mlFC^%XH+(DD-}rh zyL7qt>s7(NLY|kGw9o;7)O07RIgv^Y%8#r?zg{o(nECU85M37lV1Th_ACNjrUBNne z`Sc}wQ$r||8bS0GCJZ=?vkKd}TG{cXsJA)1HAVU&w?4v!(d|O~srQbj92J^BG73z! z(Q(r5w3d}qzZ6M@>GM}k{c_|sn^H^A02u)P+9-+JLiX!QkhcxU2B#Bj9B}Nhpg=IMmorC*9VH#wg+-6717wqEoUq@a0x!?A(0kSTQY-MdngN2 zoLQHB-FK!^$WPQKP)xgVg|(pX&v+z}!C64m(IVp~bIEvXQDgD=*K<3fvyaK`94cwN zdZKd7A^e3$^2>j`zdRH6n zRv=dZCxQ|&^hxWaRVf7TVjg4~-P|dVEmZr{@(Y=p?%-a;FBptnzWd9gGQreB777p| z-*XC!1oK(foE>V9KfB2)d=o}s=S$o>6Fv4*M9MsyIj-IPnGh4Y+Foh*^64GUEB;|& znQ@$bjOVu=0dgtmF_sg|j+~VFfN*i%RH<@k8V+iW83Z2j#Ma0IkwQg{& z)%82NBu{jkynj+(WP<7RgPhRDdsUTfZ9k39?pK`tdTwWQ_V5XuQdV9My3V9=?|uk8(0>N1`az^^Jw6P1Le8seYR8>7vK>=pBO-Z2fW%1Q z4RZb%hmgr*iA3fAC>khzrQDw~4q08lV4yPRD(McTAkp=l#S#~Bn1&vbwhoZCXt2F` zByEvPq}-q!Zq^{Ozn*$VgHn)I53mYfW<=U!YWd4M-8G)qy_-?gKfTZ&9I1O`@&A}8 z@1R$IIiG>}f3p6mN6O&+=?qRt09(dAr<4x=^g?S<{nqwjk=o3A0#*h2;kpu+0#+Py z;4?vDi{b{!qQI8PkWWa2*&%@vy_|l)!=5?g%rbMK5C7xwA(znaOZ@ndsSvldXppgS z^^Xrxn@t!WaxC#70&8qO#D}O)-MVs`Fb6rOSk`m9n9uPQ_!1;q=*z^1i1}wyJq7}K z$R)h{4!tz4gk<8uxwAFS%=ag7YN_vw?^-2Rdes|DepLExG81CoP9=;vg$1n1nlD;y z7$ZVjKWAE#2=TywpcoP1H~1N7+A5q2KM0%+B~Lc1nRU8-{AY<15pmIWwZHA-zkosN zPhcLd&nE9Io~Yf#Jk@)Xxfk|JLgyShyx?5!0^xGZNV+0sq)m?2@xw*_gF$GxNSpS_ z1k~gwHF5OwZbC*_XEc7}MFDN%-q{HW6*-bA!e6RWq~Rjgm9iy@c@iwn4DYQOCdIMO znc47dbMOV<6w_EmJ$`--ZD$dq4~;g&iTr@yzCIMFEdAm{ehon?pC#U*$%kaff?5HkGP_Ce(BtrZELRsx~%B2pj$fD;q| zbs+!<05RC6t{)l?#j>CSVbsUn{kz5!g#eY6|MnCQGG60BkaK?0!wYtzA|7NGbAupe zGbg*mged%iIFBbxoX5J-BY`|Qjd&4a`K|y??QO)1v`X4Y=R})x5(YtcLsqs&i5L0z zKyP(B{$_C@TR^M7Z(PXd6>%|N$g=(SiwhCUeU)GB9}^ccR?z03B0j_qvx1-Og5<=9 z$Z8$PAG+RpgSewt5+Cx*=yed(rXW6K8Vk%cmeos8@OAg_qNrLEIc(QhrLnR*%dl~0 z#>irf;2T7UaB$iH5h4c9HBRJJ*%=`!i*l&yIFZj+#fjLW#tv7<3`3d)S=qd3;Hhk$wd7^j{h;l0gZRKK?cF zBG*wz5Wujfc#-d-qyPQmMRYT1U<&<*#*4JbO#E}kjcgPK_79C4xquemecXt3)k0ty zL`Mu9JECGBYRkt(6nHnWBg0GY3F*tkdt4ESU}3z6)cvl)O4f-?x=UC|*q(B&V0;jB zy*GP+_>oeMcoEtEG*G;VNW5JUn1pvaA6lXJ?*T*9(7AUOIC7ETMs?swo1xRGI){I| zxRKkbuWEh!pN<u-LDM)e)8kIH^3MeYIBKCfINy&&jS zBN$T7=}0!>%rN00r{K=ogxnx@e`j@-Sqpi}_^%Q$3R$Ve5z*1Q)jP(B7(6fg)%OnC zV{0j)0W^a*;{MEsQ|{I3Dkz?~J~jUO)pX^e3t&OzK#Pyz@%$vx%_KY#*Go}V(S+uS zRGKjS>lOs%CN(&@B$3hETNBZRUJ@tIV++#{I~njM4i#M zIumbM1+hDddq3^GiNhoNWwCE2$KB({6TLNHJki&r_8^{UC>2!46P>^vKk8%m@kBUN z#50t+!H+G-{JZUTPS+43%=%x#h!sQKar@A!IA7)90t`PVIg4<+NLlF?RrHTZNpkHY!{^Y=-VNU_+RlTrV>vn-dq>p z&6T^w8#%D70&h(G+0R8B+g9jl>+j^B6QAZ%UHT?ZG|c zjl_l!-`c-=^?fZK7#()Sn_C7hXz(V)lYgH05JE~%C0)}0#fSVY<3l7iL?S}U@gaMN z4LKPOFj!+Q_)2gxgd<5A|JLy#;-13%j2vQeWcV>6XKReei5eqv0#4XQyf}W02-y}t zN{k3!!&gqhcET00r*`5v>pHO$A0Ov`%gRZ_h)g0zM5FLeCK~nRFS8wy=#?Ns1g$NM z5>a1pVrtW0A0M*vZyFy${ka!Vm(U?y6qlAlWAVfnVFfxghOQ_HE`ZjA383{C8WaOmG z!G^h$AndG`toYH#^$Qn4Z|-oOPcD7=J)GDVZOi@X>};%~@N%}d-C2JK4Movc8#2xP zDmOtR!;2jfGcuUBhGxIM(0`+mH<~hoiyaa$lJjrYbMpYJ>u6Sq_HOo*OPI@Z((knM zV2AUl^6d`x3{6I|0KIe=WCzhbjN_@MfR3jzk?uc4bmB#_uUpC^Jp zRUU128ER4e_?yOqEc?sjL5w|2^RLmBc`w~duk?ibyKfM=NDj@c*nVvGpSAX=A@J@- zDch^VAiGArT<|S-#jdPn#4R-4_P2nhoE3o;IG9k)%qY9&W!tJG(GpXS343E^(?v3v zYCX1llvJxmrC`cI);W>v2h(hPyGfcfX;U%%n3nx-A3tx$21u`72@L8%B|%4mj-{P* zB*##k(vgbvSMI)YgFylmbKlQ{g^&)XCr?wbZ8*P7c2|y*;&yL-mXw!E!V`P*GlO5f z`5EQQIpxb-`Lf%;)WP@-`)vY8+hpD%>t+gkmQX)Jn%TEkl#B-gNW%PZju_Z+vyGD6 zmzxIf(=K_m;0f6JjxnV|kzcby0VosZ8+`9}2K=}j;V%J@{RuG1aRUg8y>6Cd$(tnr zAuTnRedL%V2H-q~^>Z8Kv1D9(vNli3|v% z|Ga<&reV`?e&lrI=btCzM6-f6?#6Gy1KksL?;~41Yx51=Gxuhd7sTN_(bAN^)s?C$!=;<{LIaOBatSECQqNA4RG+c_xm{9r1( zU7QJCeQbMuq&Ot@ogtBL4B>`PeI{Pj*(UNx%6ZgiC-YvqS#hpalRQySEQ>lqas7FJLxbM#=3Ur%ZH)MEu?%h-#3E2Lh`Cr_#_Q?Ixoq(7fIz`8k)B3 z4fdF>Zuwa}6`5z5ZB1Lv>3WjAtzJ$HT+MM_yku*tFo1N0Jw^~ezrEd>zf2w&zIb~F zRRoif9)B*I1q&86U(-=C@R6y&?{_(!w3&AyvkU!%qXE9{ z(t#n?{LYFF$Udf^17WM@vOGw5Sqdga+b`PDSJP3}0`g*pP0x_zbJNSOUd90%`4!|k zeQ~!$N-Nbtm;$kf);hyY$Unr)B)?bkMB{72Wb?AxfAb7eB&%!zmz_(!|P>9xJa| z2TGGFZ%|ss)E_zn3^VNSJwlQ&l;^eS(%Q<2&GwX*6JT?M4Lz)h9@$qHxuz!ebd3D3 z|H^f-Hukev4{+$WLks zTMNFuXy)SrThc!0lIw%Y4)UD`>lfRAWuELY*LKU7<1HDX-(~b^Ch{_+)|H~uyZP_)NnYbYjy|*Vd8s*idlR2aRK^Ko0{0W7ErNMatunMJF~!LPeUG+ zM0dViz5z4p1GF^*OZ3&I?&*yZ!N+qB^(L&fc*nhzP?XU&O5f0HmNcKH zDj^>bE~sRk3@Uvw_Hu2cH@ZTIGTiTwe+iBLH^L4p_$d+$%+y^V^N}vjZS9n z>~hF)SM6}N^DVi}K_mK=c$)l4ZU?dSfU!Pz*@$>UcAZ^3nOzQSW4}(yWM+b zcUevRLmcN@oXlx%h6S5?u?c5rgKf=Ax znDDcHI4t=I*@IALP9k7Sk#={?b=}f==MPJO4c|ToA>6;3HMRDXioy>3)qR)e!JB}& z@u$&`Mk3eN#C~2Ad9X&R4gVxQl)ZXvGf6qWJ=uAUEx}`Vg*baC$U5%=-5{x>>?t20 zspC^}o1~5-1AUHsjJ&IqJ$(F(UGh50K9=zxBd?>-oJr{@aMH|;0-0U1I+AaGgY$GC z=*T9BYO)pqNhYDrq;dRgFbT3x+Cuid107+!-(YYNLXHLxRn3J85djLv1o-+up7P_#Vs}*%W0=#*Tm$HxKo_o_j z?;`wx_Q}kc68eb7qnJF3 zlVAXCv;qrKf=jt$X@(Fbh-7%2b1v;M*9)dDspmrn4{b^VhA$Z6)&81}%BdlGps2NI zL~iHjGXFaFh}_PLGsoq2&at{=!(i^YZFccQLzUX0%)i*q8dI8~Jy1v5-G#ZG=UH7x zQW~v)b6@G9+;f|A55!9=%{UYy)*>R*8-9-8?(GwC@i-9!gEo(&~lo$2>=Jgx=?wkJNewOeNCeo@O_mLoDHp8 zSJpLufFeYH>wjEtrXMBN+`I&-A7uhYZw? zd2!cvt{AwT!}i?H!QL}0fk8Wxq1qTZjQHbnYQ<@W*AD^qvP(0mPqdq%{R_KS;XLrL zYFa!oOBws8smzB{i*{(&{@=oQ2Y}NVd+z_G-a!@pubhw3yJ_c`f!jHA&+T09{RYt~ zfKz2VLkDc9-*h&3Vqgi^r^@%o>-+tX=ChP8??+R(Q!E|vz6wwmR>8A*!1k>!$$L8h zJU^(#%XnvX4H~%MzwA=*K@lEz#pE%&6#Ux21rOh);28rKJbRad9~ijcgk1{CJ~M8n zBaql}A-tzE4iwtGy)I@TcTn6EQDqY_u^6I!`=TrOrzNBCO`UvdQzKdiY zNR~eD7RLX7e}7L1Apecp5q+)xha8Qv7mL~pd&Ri?wS=RFe`Wb$y6xT~(m~q&p~wnV zVuUS8bO?F)S7o4ApxT@YJFskLwYBJ!5%K&cB&gkxA!D0^G5J9CymubIJ zjyaJ|&|cUPPGWI~tG<{yI2=z!KR8!?ZzD&FO8LAnrg&hV2#BkSeTZ2?COZ_Dkc8sC z{$drx4Q3cik0(AS9rt4Cwl_QE3yUQZ$oq8pw}i`jro72(40Dz( z-B~X?a_<(;m-~)jeNd=(_{INfID6MtjPEaLe)3^ z8aPy1Sv@ygKcEW`ef2`6O;jV(e&InnYb|O`6Ia2m@?`F^vGK<26Lyhv?iIU35)4-l z(YLWTSzV8)?BaKo#dtR)Jz7YtEKgOAZ{T&=qz4HU451j&Gu5DE6=t!(gp}NAf6kSwfc5J|qo`E|=HtHQJiuc64pF|j%rF0z{KdObVBzym<>8W-s=g&&F`M7{!JJ zn?l;!yWx-C6STT(|Ns8&o>Oi&znwvXbXMU;0aKL?Ih@@~>%GJdap4& z|1IINTpH5@92DiePi$v)77g~EL;f@D2WMhqX-8>W>5bBBr9YN7mtHP$P+)nv2|OkL zTZBJkr}LK86wy64*2dN~a+2H^BazjEVh=P%HVGvB1c?sk-o7pg?EdbpA^5`krzu?vfUA$cyv1yhSr@8()_u1MF*b1nDe zW}&?AEwirtDMc#KXm?zb5F`qe{-U>!Gpo@(sb%S=k!-!`o<7oO za&rR72KzpaQ-SGgCjI2Nm4gZUi&jgwYUH19`0;FHTMQw`k+;Q)=XSuc#cPw>G2ALR zdNBmQT@gtwkRCbEAR6fwE|*b5u#r}6Ih#(*6AXWxaoq)WN@IyDS0N|U6@Cq(S&Kpe zFlH5gqQmv+TO06AT(Wl?`|6h`h!h*m9!IJRUGhzbG6*j=+<=^f!{b9U@j#h1S=9`z zz3G+k_oZNIqGDebJ|LWwQL9T54a(Zw5A^=1Jvlf=`h$C<28XD>u9*~R9FSAX;n=?H zpP6ngY9kJ8KVi?Yj4VOz0v{4sl*^C+ij1Fw5CkIeSayR70tv!K6b>>r1OrpU&`h(e zfxfPeOdsN)_eG?y0N<#gM#?!arkv-)73XLlecHvBBvLquiB8>3bz<{R!G_a`%~nAK zSAExO&_-|o-qB6lzR-X#)(7#+NIptG>M__}V=WrheQG2-gfx@U?v7~bX9B>|4^2PB zZ51}sk5j^kMqFJ}1eNZpi+w-F!Isl#FZ>gK3hsW8oLsu#IZ-x}P9V;JtJp=8A2fxW zXaq#F_9m8Dh5t|k%LyR@aMO9A@hr?Q3ZGOzYx)fh^9l@5X!e(~W}mxjE!ztq835+5n4 zucihH3gIZ#ScM-o{S2?j6HS?e zeaDnzSQX`>kuqSt4++INuln%wdm(CAh+H{sG{>#5AD;^lQ*KuLnfSWLO#H|jfv>=} zUG?cyp$Ji?zOR!cGZ{|k8U<(FwyYM^vkDD-I*-kJp|+9q-G7eqNv1yLlFc4TJ>k}N z&&R4xsuDTZ!0n9WcfjaB$aQ{4jaBHgwS_Y6-HRoor@F&e<}`C<;QMakZH}n-DS97bdh9W`tIyln2_o5}AGaMc zNz$ge+=EMBw+QdfudnN90H*;OGW}&86L)=JbkYgW*FsvLVs$|7;JUv;lHBe-3b^%v|XueQs~M3$*tV?HU)f>qSV#V%Fza8 zb@6(hmcA+Nhp_#RgN~@P3P0jOFeN_4`0|2|7xRp4mBJtEb~GYkTl44e0-S#d=qPl> zr0v_}oZ5K%d-zQvH%niW{-TII!1~iG$BFmZh>>HXVqY~VDgGT4^+73`6zPOSXRmY1b{jZ}fUznM4)MQ$b zuhqX}Ey6sP6j!bq^es{1h`-A$==Up`P?&`c-F#(G?aU}t=I?KK9DMx=76Y0re8vP*DTPN(lPo*`O zYw0~@Qw6ci-hQ;D;4f{coXTA#@skVDZJ_tp>SB3Ci98vL{bXq5>tYi4)u7l9 zhejTe%PoUqKN}iZH~2GZ9r)4E$W>w;`00??e-4c-9dd9a@~0uOTZTp+8>-_26~aG1 zf1VNMMUrnzoA|SVqSKJrQpGm#ifs#qI~Cp%CW*NKcE$tts4Z%*iBI5|rjx;&35R4R zrj6iQA#eH1J|`eT$0L1b%Qf^2DsBs?7#hw=Cp(L?(DR7SH)grQLgCJ;=dnq~HMqTq zd(u9urCRF_$s8K;Go$YXWiuD5zBgF)y+Zf`8N_P#FJ)giw~6sy29(K09Vl7MVqK^6x@bhrnK3F~C05Ed3j+wNa3EDvxS=_X*UebU zhs2w+zmu?KGyeu+BPpcz=83t>1`EuHLjfP&1cxRr^An`Te5q45WhJ z2W)(P%61MM@*vap8g<#@kmzn`<ZdiegF!Nwctvk{;jRj&Z~wr` zfbS}xSnoKlSYO`V7!RhKM$Zy_6+?l54SDiRS`SXL5@*BZ{LWoIA(FYIlY>QYKV?53 zD4U{8R-0f>W@{zG6En=-xyy#ehh~#h--$kY%FuXj=SZv22tMR??wiFq(Nm-Hy)LhT zeZn^)fMcHu_;&@Mp)L_w6<8FRM3M4(`0n7aKR`5a*qwfA6}|whRF4&B;Ja()S2`Ny zBSbpt0K{x59=;(R<0>avd6M@Tb%tp9Ast7`^U~8kAKDEY^N!?|ch|X5`p=B92EOr zL*%N#^4^yE*eb4v#CUj{EM<=miQU`~DGj+W5_x@S?EZ$xLJ2VV`ChTLye*d-_ln)q z5V@w|2*y(RSDBCDP4@fAijg*f2Nk+Wp}Cv;tv#K^Pes$?H6Fo_y+-$dc5D`Osa4_@ z>*Yf1R9rU(H=E?5(|JK|#)F$JdVv{`n{B~OTQ0Eg)yUoH@&hi#j_LO1)(CfwlskNn z^PfzJmSzcmo&ayXm3tE!vR}4~7hxVX1}>Ny7Braf;P{073?G>=3i}5@wDYfs6*YxT z!W3o=-YC^7zxN&Y#(!%SzR!I&dW%6pO;hcI;uD5s-hau033cr4O#Id=Y>*Nf3Q3Jx zPw95z532645%dQd5?T7UKn_hjmRTiEgOuoN?6FbvZ|fs)-B#f$R@ZrSRjb3xnkAT8 z3j|EQlJ_WoZ+$}Wu&pwl@-jrZittLJlPiARsWXe9F+l|lQ5b3jHuF{pCIr%k>I^w< z=ww7YW#6O<9I!!eonhJqc??jO)db^bH^9%al3n8%J{rR^n;n``+@FN4JOgOD&-FW(adUB9PzOsh(x8htr7DmFH-`xys(Fo+O@ z(MxaU*9+#T$P^l+0+aJs0t_`OEqmduuJ@v@gQ5by07V1)w!aVy>G=LDW8o_OTIs|5 z@U|#=wKE^a{1q6YJ8A+(pV&f18M=ipoUnKf5E>=HN>9mz6;EYfjfwmZIxT}p;&}UK z0jU|5)uqRL?Ve?T6^iT?@`|{YM1RrAunGr&wb<=-W55VvK?uJ@zA9#cfHERLgG*A; zN;eHbRlWchGrwTfGo^fihH+|<-IbT_u?<^U5ebfkLYZ)} zg7Vox+oWjUDU@$J5BbjL_gM4Ap2>WXGm~r=hg)4=r<~}2vJW>Pncs=Z@4Vn!VR4rF z8@!UvJxezpBmw%5Ff>wnvQyWg**JEAT$8wdN z_a}LI?kB+fv>Y(tvTgQWd-N7Ln@OBSU43(pww>+vn(cP6VP*UH^Xlfl-;*FwqrVdW zux2Mu9&1mWS7&|YYz6jek&T{9CH|Nh+Mf74`r-%Wb~WFt42vl9JK=yg5KXfyJ{dpb zK=?GPvb+i&Z|84dGC_%eA5{n+IVD(cw%Ab3_})={OleqO>E|LRCGU*n8f#K(UrOem zi>C6gN9Eh^HChMp60}@c-ZQhYEAy6(HePYGNBkMV_s>AQE||?nBp&iaZv(iWUD) zR&3#@$So2i_h4ge)u_mwBkqFcuGuH{+^EQ+edL`-_Tk}{ePZ7j6>&y#`NNU1^`j!I zNB%qIUfVbJ$5E00+K=1I_lxz8ifrGnDte}z9{{CqRE0X^@BFUZ1aBu6EC#NGNUWAG zXQ?^M+#YlFz4CkMj#^s|fY+!^*WPX?91>qETMYwlilRi`4IZ=QO0m7 zi;#KO#6KbGRpd(umM;*bak&_*{!kMu)JDE(4%`H;=C8lMdsY}Sx$9>B83eeH`CJbh z^xY*N(Pc$8w48+9Mz@FzvkI?Mck5P_>jOQUbLZH=opgV56VF^ZwCTq(Jxe!^*nd&iHmowe42^$-(& z(o^=1`}+Gw&l!15I{HZ81|LrnD>?EFVJh%*FCr|?0Hh|n!9PvWCQI22@a6#DNi=4E z5I?_SR-hAOwxJ)=NvSE>J4Mz4G2sjks%>3GmQTU6)M!jPaKi?Zi~w^mKZCqN;wKm9 zJLiq@zCRwa+55qI8?pGPtGgm%GMb48@|r&aLQg98%gFw57R0gr_RH+*GZ!^7m~>&# zV|}!=3U9GYDZYBI%3|ls!=@+Vax3oxtlrNa_NQ{c0sRRa>wb&DKEUg!yeuyU9UOoC zLONy@)`=wo^BwlO;ek;W{Ad@e6K}CkwjxiLI+GsE z`vbytB-2J@-yFaP8_e;QEN1)cbGF)}@3WWgtRn%5l`l1wK{#eXHx<}RU#OGq7c4KW z^-SeK*42AaW3t%Ur_06K^~oVqo4vP0l5w<0-WPOHm>%Us2EogK9t)c+8HmI&PlVZw z!rOHe&Py;PxAPFIuzt9XR=Cq0$MGR}2|w7@ixLpYj%qJ{K05D38AgY5%S}ADx;}zd zlnPQi%!zh5p9gApO9ggfo1undXAo$(6sv;m>@4kdEaz6RP4GU z`0)VHUt07l?zihInt5NpcK>R=<(({+9-jqsX-rfaJn8o#z-S0i*>mzPDQ3HdB|zcC zR|SjMfQ*6DVh!Ig8G?Kq_6`vfhu<(2zLSQf*k9l9Pj!ciS#)5a@1$WV_SZLj1P%L0 zLA<*zdY}n&t+_$eA~F~0B~{eG8$Y7wX~h}TsPbB!+j$af4x<%2X|1m<&+VLGeQjy| z{Z`?#pmIn8P@KQuBwo#&pb^VE4n^w){c}5xvkF5EKWG&`&aiTCPPYn|1I04GQ?g8%lt!cuh2Q{^dr?d4 z%6TtH`l2Lw4hv6O*Ddep{!R~F3LtJRN~GQW5YR6>Hr|%&gRw7#v2%slX*TtcOsI_L zNdU~Q+rhH5>?7dLd;Wf^`vTS=n~Z9>4;fJmJTGBOz#N)#4{B%MIOe5;SWPjd-Y%xp zP~P0VMRj#xQQh%&7S-Z>v5=uGpfi&9W&C91xP>?rFl%N2>?!OL4-&aaT9_m7&}5E- zkWmdE%N*s-cs()Wt;-L0=b*Z7Y*e}1ZFFtqi!IJLXL`Lmy}_{?oauF$Arz=jOs~7* znN(h}NV41vkG8Jz-h2&dqE@8|`Y@Pp~_g05CE@`RnA;kUo*8rGDV2 z`Jn=Nn(3DL4&><$8uDM!4I!%JF)LHV8Ut_g^&e+-z*!|<2Yhf-P_K6YB~y8g^o@GI zprh|l0{z>s>z4|K;1CP>sYqHnAh2;b10QIhXUdw)Kz;pa_v1X0g1MdTR$&I%jHqc{ zJsbp2xzj)a-9|&o&b-q zpef2~oV-idWQmCqUZw&IGwBa1;Al(UYbLmI14!uf2soa`Zu{cQyAfnQPPg9SG#{jP zlfNnRyH;?vk`gc}1bBOuESv8LZ_kx=(--k^p|=1wgaer(f?{lUo+t?R_<7xY;d@5X z7V;k$VO8XG;&U;<@r;@M;Jpo5cAbEe6Myy2_vWst&2qGzG zZ8CS+hvVSq{UFoAG-uX@pvqhVg2>)~tTL1u8?V9ND?X%~DB8O9ZsB_=TtocB?UY)& zUR_AIj?&f=7;JRAc#*_~bl(6B&smMX2`^HQ??tkU-xj9l{aoQk4ut%svZO;OV!JU~W$IgI3qnI-!#bapn`4A>chJc#v@5QcIm_qT^K3x}5xUTpoVf7O9s5wZa#%LUBZxP4|pO?@&qzFN2lA%jDDhkgOd8PzuQ60ymK5 zIIHU{6_f265ZNas0EhSj9SNeOi!%gKl!$JGGSZ3Pr=4}3!B&EoK{fVnLPrz~=;#Ro z5)w-@hnH!H%&!3rZK_E}m-#fblS{kxF}D1HBX@*8SV(T$vse!8r6p+S2}48V8Gg;j z5$`iBMFFnLKCgg1ZH9FTdkW>1-LE$*wCElv@q1EW50sea`GC_WL-oy$D(`7R8mNe= z5F3CmUYy9%g=j%iMlz#FQ^;txb8o=SL=I>)@|oss^hQ!k;W_$tt(ec z(SHKccv%?H+mOa8Vd26;oTtl*j`jiNafwf$?M`W<@OCyFZCktT_e*yk^!~MKtiU+c zBjZZEY8B3)E3K;(9n}7c51fAz2w257m<^w;E=AT8wsCKnZD@lq4%TE)L%UIhAHTDm z`+fY-4wab(P|5A&SQ_-&L#^wU#n)P0IeI*>Ui)bovFNtoe!w7KhZ}|y7or;?2hiOE ziu6-WS$ec%-dImDOXo)H%1lF*Or^X{wcfu{r>SB$ca~%}?-m1+oxm>IB#Q)kp>L8e zH4(p==(P$zmjc{B*6y>qWI>gA5~dj{?1fd?N41I^Pj|&h0+2+13(;~K-~?zY#KEzD ztlDq|$1V$TR^c?&R`w{!c^{_C9lDy%L{5@j=f%@}+VTzaEI+~$$n9zs>ZHcv6tz;|sFj?15)Y>d^6}9HjHydoK8lY;5bI+!>*Xg{@{u8e4)XW4+|E)-HbZVR}V6n(RIEeSlL$p z8U2-%LDkfW0B;PelCtZq&l^j{XtZlkpE%q2H^SBxZ;Q8yCEhTcWk6i7#P?q(+s_7Y zCIpx+(fiQ4_XDagJtPCGwzFsU_WR*?;FjmYk(Kt6Zu0blLNl+}S*dIL4sDlU_ zj|aF@xQS_Cq6jqy$e8Ve=^4WC0?}2i`pnHJV+{;Uhx*EX(x^TXYv6CXsZQ63SJftH zAaEDq%HdQ8%m_;OH(x!i1b_djK8iAaKi+6ua{PPL?^cUXc+^2W{U;g1L z|Kd4M!rRx?#r``Hc_5bOdSiX;(M051Lw?U%vv7Fqn-e0p55EV=^M-w6ixZKaeRqPQ zYe&TvB_e+u^)xcV#sg!2NJQ>9=q>KAet+!oMC92IO3d=&me}j`Csptk ztXx}T1nneIFsJ&Y-2G%OP-VFjnxXT5dY>O^mvX*+t9f-XUzZG1m!so}({T#3@^Q_o zWFijQoqMgW|B}vzS(W^R6cGpWZDnqfdoa@(BTxk&N+Xwvz){It5n zpPY1F^6sRJv5&pW@eDW^?;~J?S!YQBpoiibSDf0N&Vd zn*JYq?*SN9nf3qQ%p?#J%tS?uiff2*Hz;C)sEJr6q|HErks>H6fq;TiVwgY>gkTb2 z9HY24?BH5hbrtJkSq%sYSOFV$UCS~C6&qsZ|2^kjX0}I;i3hoi6Cz2nvt>qWgjx*+o zMchdH>QtP!i1LmFRS`NBv5lIL2jBxZavw5KLS~=^HVV;D-Fvsc`^^< zG1o&Y_Y*^7X<-q6^w;JrppJRqNa(oVnjc`wA4T%CXn>=H&y`c63-x%k4p$RRz2Wb} zsu3KmMk>fbHIc=6e{(mfqXN)_~tr@%b5mnJ!-BH@JU3^fZ1}gz2&ae2dN|r7CA4 z)9%3T$15@VwhQM+uosbprc+Aa&Cr+E+SIzItDkbAfEPRFn>Ur_&1mzcif+&@^wSSM zfFVGH*F*UeB1KhHI?`!f)VmPCd9dNnU`LACLu5QK3s5bH;{1RKsFro&nJLjv&=|E> zxkTT@pDO1ZgB0YPkKGgYr~pz4HVa_%Lg?vSMmukM-Wt6C`jszZ=FY|xTvMevcedj* z3jgodza0Z;PxhUQ#JWBq3De3NJXfO$xx6b*v@>4ndX!<@keu{tvhjE_fzOiJEF)d% zd>7T^<0FnRY=I3Z8n=3}3U<-uC6wKiOU#?gci1@B@|zvjM~|h^oSf@qitE)IPfjzxL;nc>dLzb?xK`9qc#9GBp2pUFHsS=oiE` z2K1b3%0FlUc&O$-(6{Jqs{i8E{MsIyOJT5@`6Fc|IxWMYnaHX}G6#{|Gm%xkaBkn} zYo-kst!dH4xThVe*IJ9|m$I_7gi`N8`sk8{4|u8MEVFv%c7a_fqZmqBD>k zkS4APXZ`^s=x1z`TJ(;Z^R?V8*2L#jbv0$riNNqI}fg#ggq0`FZqr}kbRfa#+2n)zm0itk=*7Tb$bP>ak?RWV8-UFDAIl$%8PY; zbj*09vTyU|x~}d1z9{%;YWa1O%dc8okl5irJki&*4KFHtF$OQc>1&>Y;zP4}X%n%0Nw;a0UUv3=kLiSsg}t?WG6BXeEiYk1(h{9XzV-bQdf3Ko1H>Nao|Ji7w4FfzMu z^RBw&!uCQATClxP1r0&MJqM42*4&3eqO!Z$P0ZWC$1d>fe6>E_+?qAIKl=oZV(t*) zS4XC==>wEVnn|`#D0|j{*jE?x?p37My%lZe(%L|&-}p(-#_zqe)<>4)LQ&)QM(7{D z%cy^Vc{kzV8POYAl=PMu;TK&CH+B5vSn<;~aCYLn9v%5syu1o9KTpR=6iYP&?W+;M zUD%)$rD@>2L|^m!xCvCJMPH}i;Wf~O_BzIeu=uRJ#gCO#)W7Mp=mqgo9zH=WS&-w# zj3e6Ax4Zx@zG#-;C=E*}r`Vy{>`-)XinFe06UnWUu4vuMkUE3%9SyMCPk^h9RTv%QVAnMqG(8M`u*K(6bZ^k|l`ym!(ySw?e~ zQqXHd0y6ydo}_OQjh&wBk@IdzOv0J59f?#XcHMAMLTw==Hzp)Knwk*yE=afvd%MB0 z6k{3rZf%#OOHz!ByCyA8G48_No864{U6WRJGd6Zjx}zJN=8XFrlav0Ll5k_Ur1w%1 z8dLDn>-6Ktl%%Dp#+9i_H>DbPr2=e9O?oxec%N?J3w0sz-46vgA}QB63BPyUaAd-v z2jS)x&tu*fQW75O`b+|Ty_J%LpI@Y;?MgA0I~7>+%RCQwpG-;kTi4atXfols6zo=) z@P0}fR%%?)Nq$#C>hqrW;Qr-otal}(^rs=eF<-6Qn;fu1E%2?WKM1hkUe?npWm)Q;(J3F^SzAC z)pvg1qKoljATly1;QPxnzKcWj*GumOx?u#jB!>pAX;;ef@OLHQt%2|x=#v)Hf!SQ5 z3mZ?`JJciC_+%yp7fZ-#I%^54p9Aq;I$pqQ>KztW?KxC2^^Pj$VR#UOQ4}MN)mP^% zDU1wF$1=plAL0RgXEZ#vgdLfMRX;NVkzoO>6s+5q_AqLK1j!6TJ+?VCs`2=P>%PQ^ zsOgcDP+e>tI5ZvW`6IQ-#WbdDd5DG{u|4;h+37UE>njfTP{vS=UKV5j)N+hIVh9pq z?C%Q1L?IelIPTQfycmWp+8;*P(VuF5GnCqpnpm8CehU8WRnZK4>4OMGUrD#4qF%Du zbPnz#uQ(36j&9TS1Boe)F;tE&*6=(Y)7$IFl%fhLj`;gx63-q~@Z)HdFH(X23C`?% z1`YnbRXCclr@$kx_?l+HKZV`)=M^wiKcEfJL>mJYHq1K=&E^q!OpTSJAiWylLVRI~ z%dQ}frJ}D4*iEJ){9|Fb-Hd;ZUbu&L3Sxf%_O$=Jc=3enqc|w#1zSUjrO788N~iw@ z7yL-Yqwe`AoziB$kMIvo=Lkkb^AUDtzk`FY1M>!&e}MNYsI77YJV#lK0#<>kJmJ0R zO%##nSrAeAjKXs{9Dv_Tnl|{FUxS-@tx&4-OZ7%f$>^Dm4amZjqJ~I6q>IuJ^`3Jwd7boA{jI7NWVJ+UF(um}EzMRfVSIwB{ zJ>b-C(Ipj&tDQxTQ#A|`iiNyS3%`BY41Z)~RUmQ^)IIqPClS8cB$j4oAAudjkU~Fk zOuQK#idR)S>_&f|J=2dI;L`sYeU3)S=?(v>@#?}I#a%MIu0+|&kwAwI74BG=fmp?W z!~OUxdJ`N+$S@vJ!hxZ~mLr(!8R@#KG820{A(6XKB9|t24%>^-TD*=oJ9={bJHqX2 z8b#iUr;t+Z6;jplqRQAU6Rf3}<@l6Pi8X`#z-m-|Y&Jn1ziG2Omf}z6ybt6s1cOnO zHi4l=6Lv^{+I)xQ;%|}1#_xaNhoirP(XR#Da*!sD+N>#?5(!EANEsGt@&Uay7j#gT2uPsqKrUfD(Zw!LpW4h?d0EUW~*j(*zs&icD?#+f|`wc zD~UXyrOwqW&K^qcl7~*=$|BIxl)Z#~g>Cidk7fFge9k`&b8?N)Jl>n-d~B~#iSw>t zdj0`NksMMd9e;5$WfCal z6A;k6n2t~Fm{M4s*i@eI-mdqS;Lvw`o12n735f?wf>aF*R4M9fdWn{0nNzUwaBlXb zPE)W+7)cWiv9UJm?>cx%jcqlzhD*|Y;ZyM#5n3D>jVkZW-Bfw_l7TL5b8nK5>E?W1 z9)5^36US0{%Wc`)5h|;6A_i4?jr|?KXEVx!=%iqd6U@4fW%&9@`~`cCeB~=_I3*(y zKe8}e^_0UB0*zP)YJ^ZZTu!l_KzYJU0bkR_P`CU1u`wop)MLQU%pZrM)s?=RJc1NR zFGiAL;9x}dq<9&nii1!QnUzjyhjt87Efm!>&a;bhm zNW6$^>TKz<2Oo2@^U*A7U^l+7dBi( z?NHk9oQoNz$IyFpbO;u9WRzfHHw{Z*!U39@LpjWWfr;6nE`u7%4>PcplikvMHd+gX zW;+IU27CP{7wYK1F*nNU@S!h3b{VCboh!zao8d5EbEs+YHM`N&N-j(|%=p>q!t2p= z_P*IpY-&Ngs4l}g)n&LF&!ZhI)PRD9hf~wZ+R{CRi!5>TWi;cf4UG@BFTSS7ajOE4 zP0yOUBkHJ;)Ije9xc#~xnl?!d`)j@LYbqx3{Izu*ths~Z9Tfrh$BLCv4vlYEr8;D%qn1NwthFw!V<@Gc8jK7L zYRu<;SY>)~#6vxnj|UD;uX{fbsS%>TL#@9nY`h5V?52UJZV*MujZ`5y&mTYzrQ*8+ z-GN6Dn^X)kG5>}3E(pSlRII61%tYDdcZ1>Qd4dRnU6;;;)J9u47bAUxILBx=`Jn(Q zVrRd&`JpauelYMN=U0mVuUHHBt8SyDfvroY&ebWVYO0G>*9uR#J)!$ksob5y92MQ4 zI)yVK^`}%m$C;bXe0~WWQu&hh(^g|F#jKq?!b1tOK{k^UIX|ByF#G~< zNsdTT;XyyN6#aErH)ITINksR9FYWe$>OX%PrIXXGazG=yoQfR(XtKkHWYJKrls%*V zINLMS&klR`Al}pV46V;VOXbPPxB*`fZRPK~U{Ax>0@q=u#p5wmrSZL!(S-Ibz7|0b z7oio7)^&JDfL9~Djj79W3o7~~9^3xkBX{ckv2NVNO9Z5rd~_bKNoe(BHBNH$OjK067hZwCqD}ZgYO*agsE<^C z+7+pmo>B0U-KP%XujmQnOFafy#AAT*OD2#1?Q4zyb)%)W&0X;_j0GA-T*=1f<*npL zhi=LGq8>2z4rK%z|DgsK(~6-ly#zyo&9@_=V75&cl-07#QFI|cE>TrSd1O*@bQx#r zQnbt0VG4gua`Zd^RPY@K+3D@DO1`Ed@+20NQ?1`=K!L2mE8M{FbUY6Y_WNYq;<*gO3sOm8^-L2%v`b96h0juG)t$q~|wFv8vgUe|x@$BxHH!BaeDqr5=&IF}T$yEJ{Z zpuO(zO74S>O%#s*moAzw5$KD-`!1O21bc6eAK@D~O{Kw@_z!A&6dHb*?XWGQypNg& zQyw`2M`>aM_m)X0>A^_zX#7I6KNy~xkNvxX1#L5X2amwO3Jq`kgB}iU8IZ?`f|*R_ zYY8t@gdZjaC~q*4f$-p5U-J?er$KFreW+7Gb9Xs&>8-8tm6?(UpA-V&Qv*2o0IdY7 z$0EnKoU*;~yS-+ehN-)k1rom4^}cG44C&P}J0U!$SNIa@^#ocj%nWY|v=7Q)E$tWc zunGt5UpxDJw_r8d?bT85SAo0RFQ$7IOBe>DhW;d3xr0bc`=DfcfDSvdQYsxN_Z-_N(G95;~^D{idzLR(QT znw%WAx*{`N+?l%|pu&UhxbBEWQX_?ZX>QqpTtm{i%Z@V}b$cpd6QT*}h*6_waLyjJ z=T$64U%~y7#}eV;@Tf{Pp)+NP*)LfcNpAe^fLVW~9i8cW*!72G8g=|#tQEtFG#Q|I zLtO+-v*yjSpKTfJ!PK{z!yCWH&_7LRA}t*caeD^eo1zIox?S=ZMG$XRsr<+N@#q`~ zsCFgyqoe0rf3trgex$cQSF9_9*R!Py36R^P=Pc!VRVe9g2^thps{dt-x+8tOlWi?CE@YsWq+ z-}2;W%v9!jiOx-?QVjz-pA=h*K(c>f%Z0JT~w8-i29E|KZ8cF!c|zX<6n$F zwDIK4RJHNt32OSl6`Hg|bD^Pt&d$}g+xkq$NE+#JKnq}WSry`O>A=B%m z0(L;j_XwzVd*60{I>}kcCqb=CR)obMBrnW-s5p1fQ6>p@vT;Gy!^liO;+hE@=*0<~(c!U0I_jjjXL2QbzVl@~Z3qz}_ceKQU z7=ez^=bZxUL;61c}9sDVg+dl5Gm zpk)d@z`}$Y`j`^pKh$>-18-58qYJmo_(sQLxQQFGR0c+y9>oa?(9Pk(p=J{cnrTmeXGbf z+kLCcl3^P|d4b5KoMB;5y0bySCkJ2i1Eh7qTFO+WS>Y3!&>m%%JJwt675@7v%F2P5 zJgzf1^1AXZjor~_LY~%HNhdLYsQwJr4l9|Ka_S4<3r;y5Y>yfqhw-W>_&BETpu(@y zUJvH8CiN5pCIO=^D}YaFW19yfa^A_C@4oA*N}iyZ$%3R~|WKbYbLz^aVfD{AM4%dK(7Sl5~`9GUk9?b^|=9 z9?nB+96ceLc!Ez8sNvMqXJnW82XvfZhKuIo&ZZ4o67XQ&VbpQj^nH0t;wu!;!7bgp zV*c~|*L^M2o>Q}Z=f4@mbZT@=!^20TC6qkoENA@T+ao6w&ihQqSvR9e)*%_*uBT?t zKPC{lww06)yq0Q-&|L+Cmin$*gD_mx+HGUZYnJ^(qG0C+Y>}#RL*zkLQSczCc$92y z$Qv2DloI|=1F@E!Eo)&n>$0LN>D{I9 zhCkSn*xFE^Zq!v`Q3k#XV}^b{^h7+^L9U=}ULvNooc5M`?UTG8hXoUfK#fo0Xv`?x9CjtFp+w>~>@yfLO}SMG|w zjpv-KtT0M_=T7JAHEu(wPZ=Gko{Xsig*_IR)wh%+HSSEBg-I%0DOjuBZ2ddR#wX$c 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­i0w0s>nZ{z+@N)^imX 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

B;y+ZC6EMe%9M53Gz+ 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%0Aw2hAC|S zP1(o$$}mNoMN$v8X-s9#B8lTY7?@T#izI#wZATeSk0dA0iVBiAUq2J zND7ZQo0gjIEBpe&)p@7FO9>A$JBtXw!;k1#|)4n&cagp%Lp%HxN0A&{#AZee^D(z#%C98S8F)xRB>-) zcrG0mRr!?tFyU=lezgAzZEs@u+qB)O;pn%T>}+Lt8yz^i7~VtpHVsF={5lEhL_9!o z%VPNtBRq%UBM8rB_-Mj|40o>6SXMs6kD~k`hCA19+{f!&${%L=@%jy>h_kTU1D5MV z!pj&wfpEP&VE#P9qb$FgcUChTe+LOuqq9i*okF@HUnoe~$;#CTEefgTGUQ zsnb~`@!5py?E&qdO?Vf}e;(o67*3nX>r9vp?aZb8yIB4Ogzskf1%&Tm_#(o48NQhC zy$oMY_VuwKS{V97}$rKsK1i%ELtkOp0;xs-bCA~eX0B#2oJLSpQdd!4ypW~ zC0y0B!tWuxh?WY!m$t(Uzn``v4F5W9mofaCw7r7i>O3dP@JDI8n&Cg7?M8+_N!zUq z-$C1L41bokH!=JL+U{idPicEA!(XKBE{4BM+uIoaYufH+_-|=@JHvlZ+dT|_leTv; z{2kif&2aqf5=?s-KAOhuUWTjV#a@QzQU3i5FC_c`!_OkzK7j`RxEtI50>ZOssc^im zj46lVHMFgCsr*fZ2U&i+4vi_F;WyHDh~XWyUBvKC+E&L&<@fW1tMhAxf06JqX6Gxk zy@KKYOWRR~tMg}dTvhhJLHQb4{_oIsE5je9?KX!0khV85dW!&f-r zv^FvP9NO+=xH`|;%5eNmBTQWkUqaj47=9&fcQd?+wzo4JzrVuN!*Hd07sJ(cgWU{Q z*H88^T%Eu7GW-tO-pg=xp1z;qVOu3UbH(s4(6)VH67s0_d?(@RdqahPk?@>hjzNWg ziE#Bypu)dGc#!44hj9E}4U@|Mzl4VvKG(@+6*2ri${%LjN$VsKYnkA zN$Gij@<$oIz{zG+GyLn6zmee)%HPWHhbey>!`1biO$`4gOS{x0S3VK^1n3epM=yEOFLh`O$(aCQDu#`1U4b}hqmu!10UI}6)3 z+Ug=F>byhQ?;*UGPM;7@}b}TCI2@KC6+~YIB_T#~ou|&)&SOpJ(6f`y9 zMge@aRaj7H6|m=ooxSO~iiF>b$GbagIZmMc)IsLoa{vF>`x5vlinQ;ZD;Yva4~i09 z)B#6L1d*_)8S$7Q6X?N-L=nk~z9fb~SdPS`hr~NLGmzePG_J?GuDZB~y6djGt0L-( z30D9w#0y0f?~GB2S2#7_|EaE;=}Zz2_TBgWe!uVQq^GK$uH&hv?(1J%3-Pso83ZA-0VuTNAuK_m3(P*fx+YB=|%J96poYI%jN25PEQL)D(8fqJl(i;$t^To zJsxU*;a86|EUci;F&+w^yi53+P8aoVcglJ+OTv!(FzfAL3xEE?M z9FRU;{^My9sGmo;6Q8L6L^LjDL6&^n{qVF8?xYPvL+voRPv^gEu<>2g7ltV%Kfy;W zcb^tbshlsUi1IGnyM>0U)Zgka{hYK2g~w&eKeWp!J^h+NBVN+Ock_(8k=Jvu!X7tQ zg%W|LzwmSO4I6nmhD!M-8*h5}w}VFEkHc$zI))jhQ_V!^h1`UCkBMfsdbC(bG86l; zyOPt=l38+d_jw{9?vLPKc>51%`isAhFT8Ydixhtnsc@_>|523%{Bci}5_2mj3DC)6RbE9#|Ac6;2>nKZu9p z{rRbY&B62I&zcvC#Y^zxBc|{>6noN$7ZD$#HeKtK)T|U<4RC4p10Sb@zHKOST4tr4 z^^M}N@o5{TIHjQnOa6ri_D@Rp&#+HkMad__KdGlDU1kT1-NlQ9l#Xjd zd1(X-QIbZHdR~qzVl7>Z?Vc>p@vMaN`Nl)`ML#>;zVOF#MQP}KLeI(k9Xa}$z|bML z9-`nO|I)Gtqo@B+{0H9iX-&7z%s(B^CcOnPyzOt#Cw&=sZzr#~4d=<Ro$SUbej(lFVBb|zk4-S+Zm`T+E~pp!qM&J^i-&j9qdIK31qJtACMljtv8S_2^e zo0x4Qok>e`*(0r~5+`&e1NcLGO#1T&JDNg)LdHV9!zIf(i6f z42Ye6!FX!vP;12;qaI@RQ+s*__Oobw@%glUaJ)IR;!A&&(}II`dTMwvk4tZ^4f2l( zJTM-D2+SOdlUZYD&z{%VI2)U+>T7U73TM7%FB$iv{3w7Q#zSSA9xBV!T#LOc)kMTY zbjrJe?k6H1qEnkL=r<7&57DVz6Lg}{gY1y3gUIZrA3Rh8m}`ME7&S!~`CQ~*VPBXV zO!h?`Nu=vdbaK1x&4IE22i$~-jrzU2C`z(`}+ ziA&D?!7KN`DWy;Px3=Nu<7b=CHn1ZN z-#1J4KL}n68BpCzQsG%ODHUH**ISb=!IAh(wDkP%>+LLQN_S7w5>%cJ);-nT32I+a0Lvi+v|FA7y^h-IKY$vfs!ZiMoSiM8jTE=@E6$ zKxN;}13KKWp8QP@|Kx&ky$Zi5*;Ex6dgE7MRu_12`hwLH$+DkJx`8mO?>{>kJW4%1 zK42T=Gr3cpMlvM6XikLs7o;DKm*PlzkwE~z8AdMs3WfQ9SV4oug+ihN{I z59uIMto3QKDaYQ%Z}(cOdRRdFn34ErIkt{{vG?=kuk4Fcjy=FMu70d6XJ6dv&@^wu zmvyi8^`*}0UfU$ct|CY6mcF0Q=x(>Fm%}U0oVv|u)?Jlc{f(w9VRV$;$+xXxOv$&jI=84pwDpNO zaBE=5HGS-oqcdPk#ZZnG!z^McFFTD)h^ZVsiFESguf(rovE5_w$+xXvx{o3ZzXz?? zIwD;bSRL$>Z(Tofed1fd+Q`Q=;j}20QY##9oGVwXCDWx{bLIKZg0c;iHt63V>eQX= zyIk`I)aO8b3pU=JD{o%|{rjN71<|)}o-5C5lZX1cLf$oXH-@~MrpE0zOpOnd<>)71 zPj@zFDRITFc%PM{ZxBJTH%~>Z6elBXU?gYrRK!ckW~4_LDZ6>94I~#MtzaZq^He)X z!x$;fNW+?^IzY+=Nxeo_a+{}Sz&L`8HM%mQd1@w%ZZekZio1C#q^Nkvc%H6!nx_te zF^`OsbS1BODsei7j6c_vG0js4!#IwN9$gvNJT)7}31mD>S0*%19Rgz^88dWWVe_OM zMW-yMBkw5ji#_8g7v+Yuk2cr|Yw;acAt>7009XY0qsuVrSHYh59o4~&Ay2Ln+a$;S zg}4PHpCcu|LlHd{88Ha-#vn&;^tS`Pk!%o>BD`<~BkNot@5f1RuJV)tF7k}y@?Z(r z+j8t0%F2;-|mUe5F^WDVrDR!g%2r16)-pC?X5sYT(4QUKt)UC};I-0&@x%mB=B z6}XmL1!$!aSt?-^S$E22q7{T} ztrUqi!xqd(S=hC`B(9LURk3_S{1g{-2ip=zj5ZXjXM=6;+rN@)iY1hX_k)oQ@N_-m zxxqJAo`W(&<*FRzqIwUXc?jSBumJ^ysuNVTo+wUG+@K61N(E5{f#Lxrizw5Gk_Ad0D1(V|CQ$~1G6s}vqKqa= zHYnpj8A6mJh%y9}383Ty&@ z@5LVHlL(|o4y+-t*xV#oY&ZkO-aX3zvYp$)ZX2LQlu*19dG^!7UjF3~RxT^d9}=i4 zgP;YD?JouV>anY7W*l6UUG$_IIu^M9X(D!dc>SQ*6usW*Uq#;u`t_YqeuCKx=?id| zzyyH2P7G2QV81Hln&+=!)I}D z#rp!P0t7eF{?9OQcOmjGiMH%s&=h1m18SF}Jafr#_mTZJwT8GWFWAZolM*kY>`1+< zaznIz`7Af{c|8+SGG8(f<1z|(={gdpXqf!7*@|9ld-$djts|s;QLwcnzpJ1dG6=Tq zv9h4(){782O(n5zb!4#ZBWp<8KP^7yH1wPGiI9|?+0u#*1id@LpPdsQc3MdL4(QN| z_C9A7(8?c~M2c)?YJ-dE8V)%YL~%+CqB4biVD35MWAtcL7(!6IXdBYg)@m#TSU`zy zQ|;!(9`_F>EV?Plu0SOXYmuZ#Uy)J`Qy>K+20CZ*Pv9dlht*z9WFLY;2UXkL`Kn=$ zC#hzX|5TppKe2I@2QtFiR5=h1T10;!d0z>2zW1Y&@R`a%z*ER`O{}%?6!a;SIP0KN zjf9GZgMTZx>-Ov9*j*I6$U2`$cqBXOU)Gg3>K;_AM&Fz|Ovq-ryc$w;)st6t5gPgs zbu!cwL-7fZQQT2z&xtQQ1zFygmJiU=2!Do)Q9>5<@^?{ZiAkr#`=K$I0TBUYGa~wM z*$EnLF_Rgj;PfAX@pxSQ>F(LHf%@vsYp9-ISxwk?$6XQ5cb^3uy7~1dokjOg z?NuguqY6>lzO{yQx57<&Zi)6@F#pY9+dg|qZ0j`@#`vj3dpY>h{u1pC8fyeCZzfpTh$6(_ByYcf9;Wqwimrl^gP?_LC`}1JwM>h zyK34siIUj%679|KpM&1Fo<=hCsBR_yJ4G)-IY7?-Qqh0T{LJrCP#-AXHgzzp?OM-@}s4LY$EM0e(}_MtB;$G|Zzyrp{AP z!%e0E1L3;cSw|h1=;*}IOt=)D2A&wUJ8gZSehHz$e^juQ1;9Gx)bj^ox`r+`;i!LP ze4zrY5A$^Xnb+HX*wHdOZ)0D3XJ!Cu)>lzr=Eq#VmwvhepNyeQ`~nZe^N~paQ4dwy zkb(A2yWLX(J$fp3D25QIg5@nQB#riuzDNb1(QsuPRlTOFPQR1+1wo8pf}jCQDYa)y z*R6mfQw;%bR1f;9b3CQgFY@CnRJK5<#4ofbhb6Fu-seJ3Exx)Z8n!%8;GS$5m1qdk zFD#C=7Hex7j|!oVDl3j{D%PHD#28Kmli;*e&-7-flSo_3qwq9FQW%D;$9T)!D=Fne zFgbdps5=ra=y*C5Y%17F`2xN7fOpHaxdHFCYYz?RY7Q#_fr%3^SZ;yG$V&?Y`mo!I z3$~M!5^8I5&`OH>H!yM74e~8*^2$wq%d_#R7z(tZwy*0bp*}z+EMll)gcYUeO0a*U zu>S(Hzlqr|_P(u7L3_z!R^r{L9&e6bVg%!y@?GVYgu)Dle<5$c(-?jk-DoytmG}xx zPl{KyW+47TkZ23Ngq6(-C9 ze#$|2(>G*UI}{&(cS5Dj7}R~I7oVjjyhtVXI-yGVVX9k_%Hfz^_L08*|L1>Q0u|t3 zA>PG!!+7b8iJ;X&U(L;zLM40jjqK7M&PuLVq1NH0?{o0Z$2*U!^o{iNo!kmP$!-na z2E0^B(|7ttD!HdH$Su)`FEUejM61V3bn=gAHLG7e0rqbf5{IAxkfmQdyu|At`PJQ{M#W^uz;s{y%pE9Eu(weB6jP(tejjw zyXP%1xGbqJrk!BI-9Y={6xi`_zjt6!%})9hUSo0Zd*!C&v{-DTZG90N6$;CZcO71O z*f}lm6tPamg>t1?IW9jzL$dSQ9flQvv_pfi`n`j0C2p`QGF?LFAKZ|WH`PQi*3c%9 zA9$XppES8lLC7^(%!whLDMt9ixSKIhMSM9AK%wOK;GL6GesNCq)STM$a;p6~<<_`y zqh9h-Jj5k{Aj`R5xwe#F{olzqC1;DpdR<@91qPSGpZmE#nI?a3q`UcUuptfN_DMN; z*VEm8%QE~qg^|pu@XR*Nl9f~FXXu%@|1WvhA4_-gle!i3bkR>LO<~u3SKySKTC1-w zTayO|a~fylG+EBcY4qpRk{1I##QMN%*n|3YW@9(S_5C#PKE)w@ErZe@wj)`z{RFH@ z!#=I*^?ht?m9Ia#D6PG}*%&%jZyK3wY=y8tdTt-$VW3#BbAq*%&htZV@6`~g*W0Us@4-yp31PVVDf@;A%i$1)%3`=>Z49(^pu2jr!A#8q&~F-m ze#ZdxKMp|u+W_>(2B6a%U4MLT9Dx4P0Cd6mE{v&rHixJha=1OXa6YB zN11kNvi2VGoDTXurg}!m^EZs1s%Hd!#{m9+!0Zd;GqiU|KYEUJP`Ii3ne`1or`etU z_`Df(idQ+07xfG1**JjxLy<4~^XF#+&@UN)-URw6wrj))kNObwY#zY=kW7Qm7FvVA zLwyB$&H=qYe)Iw8uM9xnF#!FG0q71SP=DbL2c6`(f;ZV+2Afg|==Ye~1%bUIHB|Q9 zayI*-DHjTC+ky$bEd(2i3r+)e>f(C3Cu=sYDZyncmjl?eVfxQ!7Z(67S75Oc-Ys^M z|1^&#ox)IC|5N^*MrghZ=i^@9@8#=M4lm2@&0(0bJbtGvs;FOpGpHfl{e>SKKMfU~ zMn8qAee?ZD3<$TC4F0#_mjfI^m|x#uTnq*cWQxP5&{Qr4d@E@TJX2^Y7S>i*5M|E% zdGnc_#-z>wF~zsq@Zw4nY;HgN6cmaGvisYrD2lx${{u$^ei{bs_|yI~aJ@erMt1^4 zSX+Gl^a*qav$%Hor+bqIjr)D@x((@o!wm#D+)!Mcj_BJ!IcPvu2J|MKl|BH@GZr`C zj+@!%SJj6XQF-L}*!|>+Q*en?xT?5eJ}L!VWZggbb1#5vRz7CWpF{DPUwY03vkk$D zFjC0GcAE=FMNsF4$f~w{;(sXQvu|9bB^XPTe4? zkK*DbkWb<4>FW4#s5%=e>gLSGtwZd#DIEEjCp9GR10Ohvyvdq3t+*ak-YJ*>h-cg{ zwGh`C&8`SH;%@Op4V3tebL*&zJc#UA2p`#mKiyM4`yxbkg20N#6-u*f=FVnPojrGv z3c%7+{+`;Im(76eE(7nVJsHt;cV~L1|=wt9= zR}Fg{r{(vtlOD29>tcego9Jhl=-W;7 zGfng_OmuU&drfr02@?Jb>;?+gZ=zqs#}`C5`+vKMKE-7JArsxq|LZ3DRFnNrO!RY1 z^g(>QK;ec=^q-mN=6Ibu0R2J}-5lRpCb~IZmvTDghoep5&NtC%^d{t1Z}O+aM30#0 zW{)5De=aD3|EJUJ3;)-r(S`lZCVys_{Q1~KH^;Zz zL^sFR!N;={o;kkRoG#+an8(ktCi@{%xaXMY=JIlWnm;057n$r|X!7S$6Wv@M7n=Mr z=fipv-JB1vF!@tr@?SU6&GEh2L^p@K)j^Cm_$=;rq50TW$;UWB{JL^sEac%z5>H|OV4Mm6Zupcnqsn&@V^ ztufKf{&WmLH}@;d{wSt?g_-^~2?h`GY36^giEg%^%`0}YZ>A43(argg{HBM3r*skX zf<&W7&<#`Sm+0m-65hNs`$QKriZ1R%*cbHNGFQ(DzH}vxPIWFl!d<#QBJP4d$FMGyb2Xh_oknlu=Grv6%FW`t@JE=N((DU*a~l0B zZf;4V3;VaH(XZ#`6$8-kPooQa4-Y_Jl}3M*n_CBq;ZI>2 zJ)4_-1JFhNL!Zm=Cg+q&8QJyk=zDq@s*Ci*E{Pm0Ko!al8=&=WHh<_D(E zlaELTVINcE?D>@2AUY>8iij`Kc^8k-7xMTDf5f^)*hHsrsg0*+m5I)qL`H8j(aApb zHQ7TR;}QOg^@c$vI@zbTnVt(wbkd4>|L;3B{-f|n%qWY%PwWd%(hGNSY(MijKRoj1 z7$?l9gY=*e7e9Rl^&qC|fS$9k!a$w`-~U5Feh=(rf8sAVxM{TBQTuP2o8y?BW=tDM z5L_SBd{M8NVuN3X2>S1M*?ZzR&C|M?gJo6BAq&vbgN(5;Lnb`Iq*5^C=Roe$`4!;{4+@~^Fa86C&zo=IoW+~m)7-K75$@-iiO`GiMLcMX zN&0kum-F~vp5|V-6XXi+J|o?O^oVl@>F#OVOtgXAi+w2Ed7t#Z7a#gdf9C|lMLBm! z=|2>&h`&hxk3s7%{3FS7KTmozE8)05_ipa~`7}S$#qwWp+#mndoc~7dp7d~#!c$SyrX-O1gj%inT{VK4nxxD)iVAP}OZyLWN-VxNq#pB{fN-1is% zojm?xTto4vG)s^F4Ltnxbn(%~Ogv?VlKgcib%usuE{Okhe6!oRdl8;+mTsoIQ2OJ) zgAYDLJ|q5rhF7>3^v?$ff5ndsKQTb~0-Q*ML*XCQPxwWsxcZBKD-Si2FDK#Ih4!kr+Wz}=^bUs}Q4uSokK_!sU+!9D&ZpCEA6&Eqff52gPJc!hhx z9#vBiVV|d#4{!^~bJLT~Kbg~5WVU@&*zlC`0BN2#A8&g2)FlKzR<3V@x`yl5LS4u8 z>!EJo`gW)rxqcJW&0PO1)aSUK+Qb*Q{za%;@V<$6JEy$_bt~T2@owX^m!ZDG^{+yG zjq7(neVgldLVcI(--r4E*M9_6wDSq*KjHLGp?=2oyP$S){g+U`!ut*0ZoGtYax`8y z-jR6mFYU&=2k$<-`|*wf@mRda;XNKN{w10V`xYMsN zFB`)3?3^Xn(|q1gt|x?sL-EpmjE8gDaHur5cO+iAcM<>63HYJ;yA$z_#!Gu9e*WU&8ZmwSe z^&YPOBh)`}JwayN$Mt`K`d6<18`QsZJ>5t6FxUSR>LXnL7}S+qzY6LTT>li*e{ub4 zsC3^T{-rkjtl|1~P}g&PJJgMMH*@oIP@m`e7ol#!yOoC5_Q=J1BsY(MdKA|m1J%v- zqo5wk^~XUyp6dyxHJ|H8Lmk8QW1*hR^>h#6c&?uSmCig6FQ-8*>&u}2g6n5Ny_oC& z3+imHr#(!U;+@0IbGbT?tMj?~ORg^D>LRYzaJ81JbzH6IYM84_xZ23o%ei_bSLyyl zipw=zy_Ty>xfBlT18v$ zIzOMT=$Qa#=_z$FLYLfDlnwkzHIpv42%wG70nt>Nt4w5Lk1&Jr(S6QYJpeB=uqNJ_ z)$?A8ABs;XKF10y^S@yX@!5!gipGt>+F0{j#71tAc965_%l*bBt0 z^S&0pys}toE^;B5&fgNoK{_^v_HpM1#-R~kj(HK(o&(MYL7KpEa|I0SqNv>p);Kujnp7#wYz94kY& z8xbxwL0tHxr9IS(k)waYFG9NZS_6|S)*aM7Bsef91-k+87m&Bzqh>EX>-8FDAKh0& z@C4eo*3c3fVNe4~#~TIRNglz7Gw6LzUQS&=2ALKA1@IvmriC260J(@cPE3VvZVTWQ z2wmb#7}{A@PmCw}Sb<5wAorFd@Q}U)*c>Mjd*=Kc)YTmT=h@BtBtQ!)aDV^-NZS6x z!|xKn2*5g+FpCQ|Jwci$sl2Tw9Y90`Mi++@33}HpIh5g{yv<|#j-f*GiQADr3L?WI z726I7A^C=5!7W617XSy_mAL&FfOIO}_43WF&NXuMA;!yofC~PZbbut?2~fcffC_Gl z>;zKhHXwDbB|NAoRrB)d;gpL*@nWE%yZ}rJB|g)lj*(Z-L}Wh4y9Z!`#ZGMo&;@5& z)kE=t2*8cJ>^q>lfM^S9z|-8dJ(%A{0E5AJuqzbz0HZPx19r!DV2ctWh$X0P4z|5# z{|Y#qb`P)ufit)kDYOolZLL26XHeldgVkv`gXO>(^mPTj&(_@qRGpAz>p5|IODO-P z67NfL^eY0bT0I`fjTUX39Q}Y9>kzrUR;|`9M_)DwK(^Uy(`ub^bd5oye}97z7|#?j5Yv=E>314Z>g$vbEYVax~u{WP>n7t3_OL4Z;u*a1e(jC43@HkcP>~(wWlit~SyI$R;#;B`^p>F3p=kRO zHe^j!zw+FQT+gxYez%WY1LmzaFessc$bN&jDm{d>8tA}N37sODMfVAaZ z8{U=h!UmPs#7+AJ+6nORs9>W$FyYnkk|Z#KP`?wh9l?1ym!3_PiTbm4lxHfX$;KsB z-b4Dl+>+P_>RUnJZviXqGxbpa(?Q|zRAK1*QnbUvo&z$(&qp*`vf$Zd$(wT;0_`?8Rwt7j*rcXv^)U5*`&;?3+*d-d{r zyVqdgZBtLsbsC~Y_WI=IG_DTnGx8MqkDKM|XymTEyi*yp1)!37gn8(bSE6ZqPfH;A z1E`rhiXfB7#G&e;O5`awv7rtMpy2}KQ21wX;3AuV`rFk(kU^>V5-JqIx7ryPk{qLP z3KF7PG!lTw3qquN8{w;#wRGGrd2I0 zeisA3s7%p)3Tn)-tFy%DPoQ%FvwC)<@Tf5GyA+pR0N|{SiRZb(?<;yOutN75K?F2_ zuZ7UD>2M;f5PC`h$Ra!0e$I0GDX$Z@&q>70R{YFuiCpRWHvAqTgt4!BnX~gPN>?7~ z`z>vs}dmt)0I~$w`jRgTwAfE@Eku zW9={`X5c4TlmP&C3dt@6^mQ*w#VXI%JUu7kka zq}e2vg`A`YkqWs5+jp<0S-kM!)FfI^q>tFX^nDBJv!!b#+ej&HrzssNveV~>b+@+d zxSpPOdf*0u$i>^VZ9^oK2}cjOL|5?`$n%;*`x9Qn|# zP79(F*n180mXC)Bb_QQ+;#K1C3jBv;WT%4EMphVtoUV*vEk6V%Z8DQE@K+8Ltk z5VpFgor7^yp6D-z^oHC-HuCjT)FEaX7UB~Z;<+8aMtq_&90_wb#4Pd zTgsbN+4!2c680FVx7Hs14g08<87PE_i}0zx`YxzFPh*G!iuMg*$u0eqCRzgewQf@t z81Hrisba2p(0WSKjl6s-3Jl)B-Oyau*v@SU|6TLeC zyiuHlSUL75+6s8hWF-8Dm+)8X2tR_(B&Br@0r_Qj`%iTGX{tmD-=V~>@}NPz#nS?# zq8XU1q~6ZW4@0HmS*rj_7e9}BR)G@G_K~<6p+!$PgT6UYN>PX9Zisq18M!^`VFN%I zpmicVN_7Q#7ln<7^m#&$Fk3+j#+NnoPt=6aL)Hp~9@e@*gS9651mhm4EZWIxLVwgl zZbSONnD@;A&oL$5@8p;pHaoB7^;1y47C`qs9Kx_H5^BQBe$NUkB?EBmoL#01)DlcS-Tagd~I5M*!kzi zhrRA^y22%eXGgaN+bzVsTBTHW1NVOk(7|6<+Sd@R=^9vBV07NkBWQbd2>`=Uvu{)v z#V@mJU+&(D0l(jic>jJ)z`Zs6d&I6(QvVv#f!udoqZ5)n(G#hknHv9LK0$kj zx_5Hhf^6#CJxfyz7`3Nn8RS?w#Et$P^RDwDYOzT8)Qd7?esQwC=p*-eDY-8iK<*1o za+jmj%5&Mv(a&ID@(*}7?B42^@1%JblK*cE`Tt=+`QO}2{&ywiujnbkFJ~B@N~9gY zfvxTc<+aeBrfXf2>J;e#)P5#-UQSTKBuD4GBaWz3d!nN|4|Ged2eM=(5+!72Hc|n1 zpFrY4eK@`;`Xm%f8X8OC<9p6`Cf4Fp&ufWpboqO>CQ1-n7LZXdCPu;Bvn6piEYTQ1 zlvW-vw@K|@Vh`H(V0<-Iib?(kDAd9DHAd`^$ek;x*rLd1_LMtWJib~>%%z@!*4_m4 zLCWZ>pevE(+hBC2(}fR;{u}zPeG&Nrq>JEXSrHeZwHFb_(ASPuMXEgpbpJMdw_5eVl-IA5vsA3)}Hhm5e!q{*O$(f;m$HP;$GmIZCxQX7Ir|I$75eaX)h%eJ6) zUT#n${M|{eStKL~n93OiQ`Bv@SrzRi^~TOu6@40pmeca&7+o5(Vanx}#9U~S<&Oeq z!Eg?e5k)}su=p~0$}wtG5ngUcpMvV^B1HRqTmsO_k|s)vqZHo~U8nX!$$!m&#&5;! zNcQ1?{UvLPHmzE{I_Q0ANuyHfT)LM<#{)B_RgP(b59p7ck14E4xj~&K{CKobULcae zxmNW7*bQ%2Dgny620~+u8A5vjHf#{u1|z*he~#?&_!;>GoP=*k)o1jb5{&zWq3pyd zg{qwd6XD;$AshCQ))?z2U3=v2H^Fkx z^+&o{)Efpjsd_}1Y3e0rWysYiM)uxDQKN_35_#Y@k2g^Yo3x&@tvgsvl3-&b{ADx z)D4|~5?vR$ufpb*MRf7Pc{~0~UGsQ_9_R1Cs(D!w>4y z%eyyN!uMj>*JX*khap=>C+%uTJ-y~*a(Qh@g#ZIV+_XhYupzzC6~f4#=2G;FP&>?X z1428fPeJAIKILfAD%xyZ|51(UL0Wxny1Egl?Q-mH1Z1>_n40MEH(hlm27*!A2Y`Vv zW)zF7F%OE%475w~$P=K10|OiWEvG6*Jv8XuP@khuL=tBImRy>5+Ohqe0MKcA3rI;p{l8X`k|HA0R;EN@>ys{O%p&3?Z{|LT} z`4sRbM;4>1P4c(A944jmMO0LBE^3wYVC?OE_#Q&JH}VW7@=z)Lom!wY#*F@5(w}G> zTK$9_p0RllZ9PkN!}&w~I5*-I@^;C~cEBZMJ1+4GGzMMBPtD;Xt9zS;#~33|yNju^ zWPDL&Sw)p)F;$k!b0Jzp>jC)HIbP&9rP7vk$|`E^R$d-~J%}QcM9}~}V>>}QL^=8V zK>k~VFp>9=f@@g5WBIQU35)!PJ8``42lVP(%7c{uF!2oQBJcegVc?Dw@3(S{HnW%# zww-6V$*BytOk}urbB3eMH2$X5Jj2me6PDp<6jw5FHERZG{DR3IVpAi&D8o(eKf^IO zvkc)!PkqLZVd%P`w_T20-Yb_aNanH}679tzm%&r@0UDu+{Ivn;_*g#~#FW3thv*wf zlEh)j{ADz-D3);kct6fX{@Noi`y4J={`wFak-rRaQT}2Q;`xjBtXoErWd1@&oLfg$V>wJ-{##f<*2A%A4{e+sNrke>iJFAHcFTa zN7gCBq(*qWymAkwSDLOm16}&V`Pg$kR(}@cVFA);nQ8uFZL0skCx1HE^Zv`Mf>yEs z?v2Nke=%2$Id@DzmHG7xF`KG_5mbtLjXUJ+RL2u9;d0zv5R6aG#T>}Z_Rie7Ei4y! zU#1#RJr<)5tOoDE6=Y8DVD$s4+Nu5VU+lkxRat0bT-@q( zRV3+u$cvR+_`fz7S%=%AI@Npii98?LJ>lPW(jGGLD8>~L#tK3!GBSG0YNgvJ;stPaTzvAFEvp)l9~Y)}FLJ97{mFV^nM^NG+Ugbtk^(QT|rE#mF?p zdEv)8pA+*ODSsL?;UJTjG)2Dz%vQM*3sFN+{}4TDXLt^u5T_D`;*Jh|CQB z(rxk5uQA$Qa%5yrmU@`{cx&pK&P;YAW*B7%eGuFx^D@;0jCqY#R+8=9bgnLFskbe>+D>z8l!=ivqy%#oG3)p|c$Y7c0W zl%S>#LRCZ;mRO6MFLt_Ux~%Y}B_o3x?!w4Y^j~07>j=0;nW;m1)a7lMG)~$uDTH>i zHihf9-`Qj{B=Nc5nnW%eby4A6IR@~37N*#kWUiAd| z@wWKG?CQ|(EK81HDWDz_+Y~+?>Di>ZQ~hfiPt>}oyZbn8#tm=(isXb6i}b?nhHMmt zF#3$7j2xZ}f3eiEbN2Zn?*3tGul2Vhf&??SLYg4?v?1@V2@0y5{{wGEpqV+7}y!vwdq)iqSfHFY){WSoDZQISE?BO zgvhSK#1s@gROvZ6@bp|;i$%JZt}J5DkBAQ3=2$kTUq6Y2x2!yUrrrp5(vx zH9Ej~tE^dEuhxYtRrliX!iDa|HL4qsjq~U5_y!j#FMO=hrND z*IfF`Dqw;dkK27gb(OoSuCAueT~k>ZuB)q>gnzi;MGCp+J>nkg2tK9WfmxZeqS5~wV%oXZ{?PhKPL4oGN#Pk(lnv>WaFGN(e(Z6zN)1srHQ#EKTc=P8WiuF%U#Ji)t5E zsYvI#n%b&5^>QJfxi#U%b3}OQ=|XW?Ts0qgqAtl~(u2jwM144SGhk3R!OFtZqJ=eF zu8X*Y=hoFM>cfM`2Z9Z$82pA8LlDRi6>g51iEKF+6qa9VKnD8o0(`FzUwV=$zpK?1 zs(VgN6&Ob$scM{Gua52Q-(pAyIFmr&gpVi#R7`ltR600q39@HzpIPwrZWUpZ7e6%%2Agj=2-*U$GFfK>1(=8p&6o*3{Lz8;~%_ zuX$&W9XmGPed)rQ$^|?g!W{yuT2za~zM`tG2KMKu)$WS=dZfP*=aQN_6uxT2r)Dv- zVLzd`uX0l+po}UKWd7p%`7G0-QkpZLe4@OWtZ|41e?LCeyDJbFB}&CYLN%TP8FG&T z#gl{Q7Mo(=hgfQ>ROY#x@+(EyU0Jc1oL>q~Yik$IhYyq%EN&Q1Ly z^$hUQ%Id1h1$2KN#Fln@-kINfeV$S9CsScTkd-`N_s8YcEL{*$cV!Lg*ZNwL5^~6u z5Dew7iz|_T=D05|5+zXN{*-{~0q6`YPDJq1%iX2ZrU%R1tVMuS((89z2B_9u&T8$_ zs=9^l`pXxq6^$fXwW=anu8n+MTZN*Ll;)@tM+u46s}*%fmVUhF`Ke#`XaAe-NB?;D zepRJ>%+kBE5-l4Q!SG@##Pcf_UO|GYsi{{_KOId+Wi^0p>%$Ax`ZLZlYNN4Ik*HXC z^@KJ8&7@JDSmY^zs5rT24bT?3Pjd5m5D9w;D-*2dq!OPU9fT#Hfb zp#DpSOW*&eLQQMWE(=#IR_D*9@{-E0JYkJ&jeacaIsKIJwdkCQadrUnTB-F~8gKvg z-x_cKr~MavH<1X?AH)1WFa8VvP5ytP|7?8XQ|D5T{Zd!>=WMi6t4}?^hbt%1a3#+? zT%k+L*?OhMqx@&`Qz|^_KX=~opUz(c zhi6`&R4}5#dh8@DOwuCdY2nsu}+I=CfcupwTmg$mJ+?0 zO#)NcY#C!F)-H&h7l@Vm${=nvpPO0;Ey4$^k06ww2FBScs4uy?Ym6H)lE0CLy@BXd ztfe$!;F6e+pJaZ*w5JoRppPYv02Sj-1QEWU)UW|BI#6zT+zFJ3e3uZ^WRN zsHVLsVYcu1A?!PTfMr_bAKF5R=^~7~!Qk)N#PboDtudxg740sfh*{LNA^o9Nm~qei z?U>i{IG{th8>H(wQ zS;B8{avw%p!6?LGk&Z)1VvGrM_H&jeGT#~`eLV=x1%2=5b&j*ml~m)qbA)4tMCbQm zFaHsX4LiQCx7s$^rMs=RwRY)ctL;|1^pVxpVwd(<9naaMHMWzJ9uGRprb^e*kQlCe z`Lxzzd)+48X|-*$OAlIYFWaT}t+qegrEaTjgwOM;Mh`gdbG~?}^qKsebu*Mh z>D%wTmXj`q<`awKVW(xY-SJPSDA2BBx(5&$6tm@8-`$#LwX~}@yJl= z0h!K*!7sTKR&TI4aD;5DWdS3(E&=H_t7Ao`w86f|ur}fp(BSR$cB#qg_=8<~(@Od~ zY;-gf-u$wf_TR0rJ9Z3}-gQisq>UMl_MuWw2AtiK=~zEhdN`9#x$PX}xNE3%Th>S% z;?8nBKU7*a7}|A%9nTJxx(5Sm=-wfDn}$kX522&1kIIhyE~#5S3a3P#cXxzFhQ<8q0<#;Pgx^A#Ryr7s)er~Zk06zVD zO2;;vV`Y|fx1DD6pUiMPpCx@voN5qbmUKUfadW0a%aUHnyazUZJ;)KwlI|Sj$0_eY z4n0fy15e=~qtDf9iw__|Pz!jx4`wb*#*l{$YR6366)1zdl!bk)-=Yj-zw9 zbcZ}clCF0-ZpxKbxW+>wF0y?4P*`|!s3S34S~nD(!y6BA+%sJI?IC|cn!h>B@ocWN zZx|)%lZQLDmwbYd@<5-)3MUt zk&e$tNjpXv9*p|h3e8J)$NL%5cMeBShO{ihu`fgVLk3Y$1X(bPFWL(Ry0RR*PM1~= zUIfsDY{xTaOW$O_3{iY2J624TcF9N?sdc#H?upXo;ZK0R;z-9ICQ6?jxeWT2qa0ml zNvn@SuHSQ%W9!+{y+=d4^JvF6ppMjJ9CaS&SaFuLvEWxZEX0$pd>794+8lQ~rN``l zhB!Mj9Dk$)Ms1kLblmTh;!Yy8@>DJuTP8_=v^c)Xkk(lqgd}?$jvF(jyGVu)WjJoi zl%6N;I~k78GmNX=A-)ltEFqliwmF{9L^-D%w>QJ_I?^h$z^IpgcZp@XAI`Q|9NRK2 zUt4FqoGCqLciiign#i|5WjG#kN>67v9&lQo&UF0UX^9d$_c$GoI;9;>M|6M zj|`F?q$XlD{U9Lj|454~-*KJI@~Oq~TbpgI73^3fE3Xy}J7{B$g`3fiane~(dwzG4 z<=CU3xzD=B_TUi9GtL(+P+l71!0(+ohdhW9N;x|f2JC-pbL`Ky#O#i3*_KsK$Bx0$ z#=(c-_cJPdo!LZ4+V8O(KCXezj642dqbl=0oAkJK1wKPygCDRw2HD=pbEZ80bGY9} zxdf>}yag?1-(+TU!!^}1l5|TJDl^OWAw<@5=yzp~xf3U1VF1XL`_|PG(wmWt?r0sUrrGaFU9fjFG>e3wQH+5EuSd)Jg-T6*U zes;2#g8oUWpCb0p;&@c0(M@?lN#8+h^io!$@&BihWXWIZtOT|1Xqhgg-`5H{`YfxU zu$>1K1><;D=TSy~QPHn7?H5P4rWzL2^Avpn_KSa}?lc|a3ct*|OX!?%G94uj|Eq5= zN{&$Ih+*_{Xfb6V#WrfJVE-u_|?2GwC&JQ2#HS5ZbPu2_7Ir zI#6bkq0!+xvA+%?i?KXI6@?<$nB`osnHBi5Ht(5aNL!wuMufW@vpYhJY8rPIb} zJ`|yY?CFbLM*P`$_g7@octm{g5o1eIVjaQzS2Z4aR7%3 zwK|r0j6n_j9O0p|gb<8+4w^GSN$v+>{@?(I@B_!45j-r&`3N|9>; zc!*s`pNk5HF&r;elz2%sD+|%(#~P@gE4Ebh>M6M1L(X9f(mzZ!mIV2 zTj}RR$THc!Jd-|Be!3iuAy4H?+$7{)6{peoxJBb5Q$b}V*JuY)^;6&Wr|$_4qy2dV zwbMi3$^7(F-i_S$-?tw96G}g@jehic`TrZ`pC<+tZ?++e7yi=pO5y+42jXNLFhC@3A;MJFeN`c|2`Zw!>9_^D(<7SP@|Dhl2aWAkG;2QqqEE;ZHsNRIZZHocs- z@)P1m%!b+poBfrbUP!gEf!m=^fuU8761orY3uuNy!uh%`g@MhW9l92#FO(-|Urv20 zn7psaH(W-R+ly+YcfWC9w~w}^tz#HY72}vMPyw5Z8ga5SZ}%DkfRdwBLoI#J=E8(Q z$I^WksB&~KLcxJztE3f`|AkaJMjLHe1&U5Vdt?i*kf7bhwUG~fL0!UeG`*=7&b7$H z_;5t)?k$m4TXTdutJJ3Dnhx3@L0m@Gxsx3lqn-@uMT#kQzg2ec6%w()V;qHmM7rhZ z*W{)AP`848)bZVjy@)XhFXn(SjQDOSYDCoJ*v~=HIuI?3#Nvdw0kQ(bXG-Cd(L(8! zI2HvHd~WwSxeAdmb1qliq@s%kD|w{d04MvM{2uIA!UOvgq_SqPW6luY%9lk z%+J)^UXzrpvn@wSh(X?3ISf{K#=%}fCw##6{vsuD9b(x++2IBk_*UZoSh36^Dc&~u zMvT#VAdF4Qs#Hb*nL66a(l)ZTiZX+;bT3onX&V*q7m7UX3q`B1O>Bm>kLV6bvJ>J*wjY3a7Gr)%1xGjn45C@ME zTX@v3#lTFQF~*1^*KA_rAg8gYHn(LKo8?c*g9O0_1BwpxoaMLU3-;vw2pQ1M;ggZO z6#X$F0i5UsniOq+jFmCrbt#cO!yArPMnA@68h@IRBO8qPbC(KjpVneb+*&=NKiNs_ zq55d2`2$HW&BM~(26s4T>3i7wCt(xl5v`F{YcsaxLq2SvkBx8S1`qGw`?arWw>G-R z-%`(OP-G%D#<$`-8`S@(2b+ z1h*lAKWjKTIQlLlg^dWt>qqbeW-hTqZ$v=*I4I(H3F279;@EU`uGCHytJGfPg2bfc zK3t8q)TJN|QtN3U{p6q_an3|gzm-KMze~wScHU!aI1*?1f=OB1IV&ucu&QNetQaO5 z<=Sp1=fnv+!FLJz;p;IPisUAF@kiEM{MuRIC!j5GCF@_Xiw9CBJTu*wcbqMYuE#>e zR7?j%C?}yr>f>1WN`w)NX_;B3^-r8oBAa@{oaBb-@Yc>}OxsW9&R@82Hg;uT>kZ$P zat5|6EIjLU+M8nj*n8_AHoDNI$Y-5(mQs9vF%;>9vC_FUwC@L7^=jCHeg(D~7&~aB z8MJ3g?4+YTSaYz&qn38ljg?G$z%HIA_MY(FU#JA+=txMA4h{rYi$m^7NF0o(aIOkx zmV)`M!L~iN68WJGA@3S_`OQ>9aOhV*BBbL)dj3~fDGVaNzJV6r7D6i>@_s2to+l~B z$DEJzG6WRX_Mwdqm3z0)Y0=}U9xXvn!u6G0Ge}hw34pTam@*QpXeuG9q>&Z@MWK(p-^K_ zzNR?kl~Y~KiVOZ)zEQlNt4H#7SUWnT;p8<6ccA&)J&O06@TVxA94(GcJJ3?OPYUIK zDMtz55fx@o+k*CKlR7x09TC#ba|W6r0LFTUCHxUi@Z$vCm@R0r6|Dw`axBbM0>}Z> z&cGeTI}2i)6-b?dC$RCF*I?iUF zXE^gGouzWg3*l`_d_}(i9jcR-=O>u(l#ono!}?X}=mFXFsA zx&?_IsMF$SED5%KY)d?k)|{tmfwky(TJ;Xy}oc)V_Vid)jn-;!~%Q zUkP#Q$c7`e%}V94+Z4-}z*J=UzUj*2BsCi~9)N~u+B1w}(P(6lUOh(5$Ilts7Ptt= zh$_u^sg+;=mhFYyBYVCL(}`3R7a$!ygYyPOF0@scmTh=Y>*zeWg|`L%Vz z7|`A`KqupV@49faKW-mGVe?>x+<||Tm;-LOIkNW<^_;l>6M)+_9E)lc z>cvaOMfT;WzQ{g#RW2eMUar|Xbwh4OoPBUt=1i=E6DG2?k$u)x!(mm9l_3z#miPq} z3Kl&sSZcQ&fscs*h^r2V4i*ZbhwgvtVfp7@sA=St8Ne=xzQrn?FO=PHMBbI<=-*)+ zv<3T6nlt1mfu=hzv;cZfj@p^t3e-J0>STHw0Qcl*Hq+aIwI@eiOz!~99`K%+J_87Q z0KQ}TOn~dj(Gg4!FqlDd)XnsR*k%_G(`NxqPmbm>Ju+~%938{-fQCUImXKJS7Y+e@ z9`HbzKIfS)AV~iztei>yCnRJFZKMCmE;8kBdV;8!e*0RnbVc^cbLGVW&)1mWLkTGd zid_ZX+EyI*?c6BmgI1%s3_Yneiklmt)+pn+0cwrn;|8cTN+~x$tx?Lk0cwp>%MDO# znw!9iVdmPJ=9U!6(AG4sNRbR}P4mMklA*0>ZcUL4Z4Em`#=YOdzScDFOxYr>iuiXn zbwMZRGez556t}wq`7ad{?Bad+ptU=PorR>2Hv-*;5LKDc8gE4MFBe8zywRp!#lG0% zjdt}irgg*{9qL@B&4@Qo4c`|^qn9TbQz)TYX zegpRF6EYLXy?+&ku~OnqGShZ5|0*mmONq@eQ@2jhw($Pk(ogTl2b!}+V+mw9fPD>P zK!7y0PW{+|t%?`eZy`@!029u@!F(7o1?+5|?sLUjK|&G7ejAB8&EFJj8;T1)0MVW5 z-v{)G#WbB0r8FY!l7$|Z9GeYO=TU6jjALoAgOlBMX774@33)$LGm9r)EvfIe(6Kdr zBCrR$N#~EOvjis2@i@cx0WQZQsY3{hiS@`SST@I^*AAm@%0J+duH+J!Y#Y^iSPL0P z3mb)q6#YiqFCN1HP9U-!HUd0vSs)?pBdqG-n5u!M zM)*RtA@9c=4T}X23E&7CP0gcstcgerhRXCr1e~(2uScjGr)prswx}g-trB9%{Vlr=rDQtCFmvS zjkz>;cNt1KWvp=uL8*FoB{SE>o?H^S&PU@o>UWY6*IGAa_(fFvA$BaaZH9Wp@^m&p1%A7Hdph!3qPcW&V zqz3eH#Zz{Cq0T$*(2>s`e_EPn0lAVzD3EObM8S-|Ze@0o7&}1S-gk!SKQZn&A)}M}7GfV-1_QC7v zWpZR0I5T4Sje3bv>9aE+gC&y$8iyP!;Q6@3%e(+^Gn|xYb1?{8%rQ)g3=9+A!8b5W zS~$W6!};!f7tCq}&iAnDQ zg8V2-L4Jgr5*ln8^ vQL3Sm>EKQ!shJVY!rkznQI>^r%C>nabd}kIw}d;=d47u zD3utpaz8lQ!*|GXJeo0@yfr!xq*G|rio>((6S5cuU_@(V0AOv-m=1hvu%PIRF}^xl zNzS&=h@FaVQ2Q*HzeC9f;Cn)$Sq)63pg;2h-VHSIz5F$}Heez!y3gN-2?(0}z|2P% zCb;Eg)QiIa;F{AE?M>0H&>ToR+7rwyXwy0{3j!9Wbzv4{PxCZPbLe z9%*91+lfK5T42gQDD~j;oD`n`hd$rgJeBi_Xd{d_QWMJO#LpO8qD_Er=>H_nMmn(? z3zB0GmDeZppf$$dY`@7@*kn;gWeam1g{!G+g?^Kr_nV>~1)szw3w;45%SJQkZMK2o zjS?M+(Gkk;p!C!*<*U=t=vhb%)N%lCBl1ff+GI3TenlDW_YuM0J^4hJHaS;6Z-RE= z2;E<(O?Ini`1NVk+6yCJLrO=tIKiRbuu$7Q@^yljY=v3dJaP^7^`B$kW-ioT8rkOE z4CqOi71Y3mG%e$kSNg{_Pxe45XtsL*!-O70^W@{OcdDF4G2l_clM-7INtTWsBo)7A z_n?1ar;c3<%#4UGoRi>r?S8Zq2!i$Fl0&~pKNp%%cPJ!(WSejz}y|K{<49tKz*+IHj%RJa0b^$Z*sFc5MT zK*O$pTV>)^p1fqg1UrrN>zQ*U{x?r6eWyN97res!X{#M2Uk+?x(m-v9?ld*@h7tZT z`>9?|1Y2_?IU1wRvHmv}d+gDZqcmSYd{xse9Qe?LU_y{xdC>cLP@eo6o44LYM6I3e z&=FFPwURY}{!M7U7%bzS zD_nr`cd|sG#D#kaVC9LmMQG%t=f5ce45_370I#UZfG;(sfh-O+9ll{-(50 zND}Zb+4bg$iQG$Mzt+LO0I=4OMB8^(ZpRQ?!Pa7}i&>)VV6ugNwy_@E%X)Fr$29BQ zmXS{qZ$To#(Q%^&;Y(K&@|hhj1LPl`+=*k*K2y7PCQ_~(owNf?OW_Gn zAs|YCAdLlWuzDI2Y=$QEnL2^Utvw1_EMQTDN@r-fm6VyGd3+qGM?IpS7v7`ih~j(1 zqhcwCHfd>7?rBl33IzfCFa?Szy>RLGUu*9@mn1C}&+okF`+aYI(0MNV*_XA~T6?Xv z*Io_gsb4~hz;ljdry9$I;rKoaZ?JYM% zsmf_oYBq^5UmfZVU?@&>ekt!@ z61_p!WWQ)AT`4eaYmRkB61gq0@635Bq9F5FStdVut3031^HgJdkZ6cL!UK`piB~MB z)$UL1X!QNj*Ue^#Ny33ehq->M$|wK4f5_Mzyq(7_ed&>o!$-@u9pRtKt%ZrET6Sjc zD?Ugew?CiM{rTx2(Hs86eNdD$tphN z-$A?bcZ84dw`4w7oy{+?b%datmB8KXkK5Q)Iv%kPE?aZz=DX!TBlP}-O{eT;qFkYg z;v*3t-=~72-^7086E@=cDm8B1I~u$)L-wveNY)Vqkb2!5gu_`c38iAD3c+|T^-Zu< zjXp<=OQ$kzi7?jKMS=P*CbAl~fV zei`Mih`0BC8O6fv(y|Snd5n0*^{J+N{r(r(9qbsSqG_ndf|CQ&CfWW^k>9n`+UdnK zUtV?tJ+8acu`N5>;|ZS3BHSOT#X1_#$@TS4J15g9#U@Z@f?Q1EVv<};;bMxGYww-b zE>C9jWVTR(18-6cf}c>41qhdS^ph(cQ0(}Kc>fPTpDoz{X4%Oor%}fR^{I&$>~a#& z@)TD^9|h6}q*}IlOa4qPtka5r$=bWAM?ng%HuzzNgV8J@Eo;-~D|A=6^%iCCVDI)T z(c8wRu%V=aF|vi;-g`v}zBu;@d~pLs%fp?|FY=BTm6-Slzb3Ktl$B7d7UWU*Yud-+(=F#8Hj>?_bc#2FUzR(y z>z?b$nB~cEJi_^(Dvz0*Bgahsm&E{Lue~JVo^>4;v`|@tIH1fg<5(*}3P;OQD!OR) z?glR~GbFXM63?1j{6TSC@f@9L{f9VV<`*%(4l(|l_G=>; zm{)gP{<&l2zfsDMo)BYPenV!OwkCuj7fSKbCVA&-)Fwq>$azJmx;=5MKq*y9H%s3k^Zl42AzDJg_O6Tq{Y z6KyNy*9{v_ zgQ_rXw?Prq zoWA1Qb2OSx?Th0yo!a-!!wSz;FaJ-}Bxks;v;2Hyzt;mGsuBENKP!H(e>L*q@bl-=P&Wxq7kz?P;)%LUMiRVWr-B)e-oqPQW<`?Z=UehK7#+@!mN5l`)nu2j zL|;FY=23D)wV{2v6 zOf~~x;It(EWwCF{yQ5^t=7sUO8Uo0De|B_N@JLD?KbUNJ zlzC$TNEXJE)N{sE7E<3!B7AP&J6RZaUorqkMT8F4^JpsRK2O9WIQ#5WALON|J+2n_ zdT+-cAw|-&;14E~i{JDr3+XyBQ-j?%^f2Sn@A~4T1b%s4!CyLpdy)@7hYHa~z-V+1 zT6p+{uKdw>TBH-neZ|j`ly_s(9kQW#Uou;aqxb%&MVy|*9aFi?+?~w6h*op7e}{Xq zT%WJ>x2{hf?dp*8zck%d`xeHBsc=#jwWOC^!@|apUOW*2bnj&C@96K^ME3cq$)?|V zy^r8;fuChZ@S>M%l(7{~jdyyt4<@!gk%B^X*Ckc>45Wy$@E!u$wsp(4Z# z8@WS4Kf8gu2`rNMN^wW_fzM1r7At&a3U`yph@0+CHr)@=Hol!){}Ot3ZL;N|(+cV1 zYtoZb>XA`MKNxSm=QVE;%kYKX#eHTUxxW@C#5%9(lr3a-zU-B*mKRPd9R6Awv^a?H zuWI!ng%%J^wnUjYYu!ZoE_fU+mVEey6s|B^*ZW6y)nwn8>gC>|T$W_76#WA`+Z5_+ zz9(TUb1j_dNd*rwvHsRal1EO;Zs!A;LsG_)b|v%2mU}Z#``I>jm3!Z_7XW812G^$7 z@f#0tzsy#pk+k-%?3#G4UpSrup#3)EL~%rlyaf8$8XtD0>=W^{;%JdDiI_*|os12<(h~4E=%o=m^Riy+`|_ zYo57Z-p4Ect`(a(;>zSk_&nlWs)-b~1KyG~jI^s|D|S~rWCzIWiGGhxiLxsh7nXF0 z)|>4EGdJz+mk7 zC|d1lNbZ|_Y7+e;jVL&dcZC9;2l5+9;iSMYWUi@_v{c)gd4SljZbFeO|J={-B? zxB{dKC&v?8A5Q__+(r;ARX82e#2*%ZC!~2#SJR_q()=tWcy(iYs^xL$6W;O$^tl%m z!@!_5Ud|}d=M3oc^b&o}prO-C^f?3iJiSDpGoa7Yl|E00K4(Cm_oZhgo9^o>e9@7o z--6BQw8GWL)6&(Ae)?l6#?ekB`+FUgwhNWAGy~@WoY$MCgE9{+cv*~9KHcpqjK5dt zbS%D0>|!aEd3mv>i>SO8g5$AEgZ{4IA)yB#Ds(!QIq-7-Mj4qt@dL*k^aNTP`94L4 zll_GE$-eKy8+R{AH;RLcOTXpF%r}z=uy2tG1iE1&wf@L znRTwln2_JO=tATBRy^9#&%S#@mUzphKMG}LcT7!B$*zI}y;7TQ4c4cEzAkjghc^lh zzmUpjYBCS{TL=B4?MEbMQ~KgNf?)|MZjevKr5KDSHaA^SR>#;8RIKtScrOJSN;`>u z?Y3kfJH9*|!d6^A4VD6+{iy4hlKcvqgR~F-F*Sxj>r>N@StxD-iqBO;@n8eR)EEI_ z`dACT7ZrTZMUwTw@L%O0dA;pWS{MGZ!qK;(mS|$>eHdds=xbMUHykp%iJ@Yd{M`;c z&&Juuf88$J>%M3+zivFs#9qjsCtnH&iTcrGm$FW<_H2qr@6)pInpN#xh10i1CsE$$ zWnTWTsOnw8s;I5Jp8?Uf;~Tjxx`uaRe<++nJulM}6sYJ=6lC#$-L8po-tvT( zdoR5V9`6bUDv)x2;ne>CJ_uKSqPS6K_Q}#Gn{+s<1t);}`=#(7Y~hW?7fj*e_nYs* zW%GYCCZz_XUEB0WVGxl+`G)GpP z-)&3@+OV8DY1-yzckXj-ym%<~ZJFI{6c1ZiB7-U66|rDpEE9!e!;@pd{=q4+)#6bA z-IPtMn2dwpi6=j9ANYFMMZjc*VR+H>xw{yaIFAH79A2SMj0;Z)nmfW79GyxMC~y@W?kCmEZ^>(1 zK)=Dq5wjZmih63|;x+6UZcI<{HG%X})kiwQu^j>FrH9rqnAwQv%-X6%x~bG(IWJ-3gJ5?!Ena1r0dM5E7b&`Y7U7mxGkf_h+cRza zlb%U#g5c=@4ta9SC(ky{1a=)B?bmM7rMaY3XC^ZqPJ7_#qIQw70^jiTSnx@p+YgC- zB3{Ib+#?;LQmvmZxjDATSsoEFQdnY-kP23xl%4St6Bim0>q?~{)+hKs{lbZwsM4!Zd-BmdMcNI2D zbV*R@0)|tiPYUEC5x+|MBpVIrlb@DH2>*2n@i$Rr@}=lY@=%h6qD;zR4vhVxAE96C z>6YKhY>`p@J{)Xrl0k-tRLqy%I_?Wk=D2xgba2^mewbfMG4PWEm+}GU4UqN;X?Ot6 zhoS>a%=hw`vp5z5ML>+r6BTb>s_%J((P zJNXA#r@#ZVu_Csyc&asqOY~z%gc53{Jr#aaT06CHcwRm_wb1sj@{8J1cUocGiJvHp zJ51PZdny=A)jpOPqe;Tw5FIeMR|<(*Mt)T?H^cPLM8I2eA!8uRotNvTlwbHVYQ?=i zTSWaYj`9mv*3KxLIf`^WCvvj;a~S_>BWLAoPT(ajJvD$36}f*m#ITisKFQf{ug2wCcH~O z1p`=xkhF>=sIN|*oZQD(>o}ybTJAna9T(lllgD_{&-LT-bjC(~?_K&hzxVU>_mp_% zLhs2{T>p`0d?C-Dy!S%y^Znid?OXiTGaKWV6_O&PZ$&};g;99Ixuy*i?oma$ z8g|DLz1f_c(pFTAz*M89NKzb^7e*`i$!EU@dfy*Jq-7;eO1s zy?9oy&z9)3dY&OJcOTBP^n$SaaPHCDyBp;G^I>-b_hhy1)`XNZ!|q1z$8bME-cRS; zF!y7*KThudA?!Ym`+d1bSY4k!Hte3n{W$I?%l#o?_hjz(<9>?V6QyAahwF&JBfF%? zeQ@+M8~wGhIzeoC;Ol1VCb|mYAz<6BU$;HF40@G6MwhoGj-?Pep&%3jARJ{sRU(~`hodJ*ZF zduLkgA532g_V>=T$Um5#4f6NmjI6jnnEoWV-#gQy{$ToKP``Jk#r(naN5K5vnHKQ} z(~Tg0?@WvLgX#Bx_q{VM+7FVdtbI!FbjAAFC9I!Yf%S6*>kY;V*3W(itmjp>>LdP_8C)x3W42V)X%+pJYc2r)Igd-hCf2t?mR#INwrEw!VjNnKD=!8qf@B8oB_z^trxs^Al;5XT7Fm_M^|9#LWdOw^*v zRSr-B(<-*4)va!F`etBY;+Ef9h9};knUK>G9-}@CBBD03`&wm6_ssl7?*HD za_$CS^Q|Y#;ZndM`xbJ#h;^TiBbTtt92aY|f$l5Xd)r$<;5#Joh@{vs!&>PwDGjtw zkqjhj+duxH72^6ScnL=Ef#z5uF^R8vHvKw(WrNA4vB1AW@<~W;2;S8%Z@5}M^Beq? zF3k!BBtH|`O(-ydcay-_3xjSVLbCbFgq6Trzcx0CaeZB-Om; z07B*~JS5ECO!1cNE&S_UcOTEg?2ow4_buEz(04AXg})~OQ}F7*vmHtLodTwK*Iz1= zv8%8s2Mz2kyG_H}Y$DG(v1(Ls41c*y$_$BHLl&Y0?#Tx{DnRXzh>(GGm@)~tpdX} z4~I0(H}u7X)|se|XgzoK(R(I6E2Hr8A`beY#*yM|`(yGf_d|Im&;NYOJp3ysOMORhL5;# zDH!x0lr7oQ4BZ#*T*ns*MeSSk**zs-;eW~CQQ?26ed<`YP)?UY8d&{;tyN@==R{Iy z)=ZZuZ5KB-csXej`7LR^>EZXVzSSDw0+YSBWP-fU${EYg$d$x$Bm&lV(J(O)G&I(qr|FV70@L8H!tP>!-*0asP&b)l6uslaZYr<9F zUcz|QJnXU@e(j8ZD# z>*j^HQUvf}=g!J1Al+%#$u;{O@;xp@)qEVN*ze&)72lsJ-wVV3rNbZicxMefoN}9@ z@9EPX`dOpTEr0KhHX9V`kQu06Qi;x@7C|NQ>r=_&wjciAy~} zw@-K?fqb$%zm#rq^S9{Z*`4##|CrsmFw@a&;519AG>=${H0bd?U)9{ zI+EK?8)1v|ta(uzJu>t!z4~R(bEv9Vj#?h^1LgBxP7OZ6di{VN-5)Fd!PPJQ={aWS z&R2F8?@{}-`KDO!;95BO&G1UH$J+o#tAcIWjn}peWX#gsMqChWgt#DfISHO#5f=!! zWkpUdmdD@o+$%lzH<&ObW<16BXuE~Po8cAZcKS^_+e+d5<$0}`6>?LBR;i$OJ;yP?4quXLht(%<0odUWa~80 z(hV9YZJcGT?*jl(TDMS|jgO+JncZ|i+p*q~new`zHV!hg`*ZL(t6jB|9Y?`$yEYdv z8@6T*UMc8_s)P|ntb&h92hd5oxJUlq6bo76wTyk0F;Vh|KA|T~c15+>eIXZ_G%OFtUP9?qwfw*!gm`i--RR5OKlwtlTZ?Ny?8ehQ2bZN zue8E8mdR(qI)~YzAr!)h<+5tsfp}!1WitUN7|eAm9P7^n75f4y$}+FL_Hs$7FuO*N z%#YD#lrI^)kG`P;Xm?GT036#K3@58q&Ivj5FdIvu!w#8TdA8!hB#6ei#7 zW+Yg{=MI70_;yRrnf32(UZOeW_0vG3c%Y+q@W4VStQ*ch{vQSByP2}+6{a8h|J&M= zm>2JIjMv)slq*$???uO@OT4?p4=n!RG{7ch@wW!IJTJcw;DU~nutHtjapv)IN6otfW9zr0&EV*>JGPv=i1zHv7k_K{zGA82=ewlK#~sF7UJm=L;^m6U zELjGP337lX0&#Afjts;f7k$#%CfXRM#5l3tD9IV{_ZBo0%iG0VXHmM$eAyqet3itr zUiz@$MH8v(fC{kG2+w?{_31ZS|DNENwGWq;t?0%w^+X?&DX^6K9l5qxH%{B%C4Oh7 zze`*@sG{w|SUlZae$5ZoX&9k!pJ)L{WH73Z%oH}>BSP*&oH)|wK6ao{#qE_$)0t1K zWLo?^;)-%}JGO7?IL%UO1exdotWm{Z75}4nTk+qEKePA|j*8Bu8Ji;l82^v`L;hMJ zQ;XdFbEP+8XWGCs*==LIC12wm544OzjR0|lc07yX-jW>eG#iOIn9^fV6ArY)2h{K(LmQ{RgW~7k) zE6bZL}xXmA%3+{Gk!F~wbUyNg-w zVzyjxx}aVDNyriN4tc__Z{MV9Ge;uKWj8fsx6SmHY>@S|Amgn;#9i#y_V0Y=!lhC} zZIOLB>rWR>o6VzC4O|M7E4sSqqJ+G7+5kz+Glz;$XzAxpmuu2sESr+`h^@!H)nOp5kWA4lhjz+DNK z2^B3>_7AWKRO&|V-={0S(q=j^p-5n)Aw9fGdMM{thQXz&qK1lgJFtCG4@c~;XIvvd z=G=WU;RTZvw(`qNlZPX!#nc;?&7&l6#4IDUMf;wy!M>A#nsG;;Y54l8fxcMGE% zq5g@xDu3I^<&WQ0`FSIk|Lm^H%R%oE`Xf6yZr03rUH^IEi16cF8+pG(#Z}*^2rYV( zmAr%(z@^M|lvL>_quEFXT2G*HoGawevYb677^;^x4PSTQC^)^8#huAoG2>G?vG{W* zzgH=*D_plKdh{T&W?4U0&J*noqceDE?$?&|19LB`b>;h0hTQKxvwNhZ3gA#BmJz7e6CuG!}1{BpT@l zd11<=!Z~$pSQ57k+)l8Wi;FgHI8>`~X2($-k&C_S#lJ&0PBd0OCnMYzN)wL5!&4Tp zGb5ow9?-8iuiRs{XEu>>fUU;Xx!Kau-5-OJZ2QPtX-phn*bW@1Igru# zi`VG$(LdEsWb-Gut$~s&7!j2%lYNDb-djG(&)S~J{0leH{T(YEt}*pXy=(o6|6yuD z7ke3B5I>m5z7QSVgHZjHTB;wrQQ=IoiJ*;G_CHvsLMHKAY2NY@YiCS*;S_7!^>S-; zDPS8)p}Bid+Fi5*-2@EXMH9hOL0P?#HrJl#2b@v@aEiI6et>I4{uvW|1IPYoJekEM zNWnmR9c*Q1uTN~NJ?~cNMlw>j{2`lr!}_!@Q#>G97Dx8jjkN8N;%Y9Ia zRxfd)Q3&Ccmbkv?9+o4!9^%7$65p`6RSwB`cZTU zkIVAqI~j(Dwrz9`XKj%{e>zAEo*&aLwG+rK+E&>g?!{1Lz>fi7U&H01+bLgJ+Yn2D zjz#`a{|`1l9Ww?~D!e@=l(oW^B}*x8!ab7U#la(-UrsC$tnu=P%Y52Brj}pcq@Nti zvs6KEmW#;i96eHVHdeC?j+ax^*uyI7_3|I%FzJ|ESK_fqd@4+98nTlxCn_tt@|-v?sg?~5t~2{4#Yp_yIdPp z_~Qr9tPmr8B??K@DZ6*-&$N@&KO zSl!;YX-|L}%#x8#%=XefwTtLba83?ZX}_&Kk(kS6wU_;bnPp*YMHYSe57|`B}|orb9I0^+Pah8@u!a zdV~%KGxoj>G%SnBA0uts@x3d+YZ54da|Pmbf_*N%+~0^e(JEyh$hGgbf=;Ar{4*T=s$qHl?9$ea&Uncn+n#$V^9T8^gco*$((cVVo~e<_a43*v z*_v87C$UbOe|K=b116_^kzL1sSIQ_Oa`i@LUi{_WExbM{-@-Rz#qGtd6?8j?d@S3=V4eSF>)(lLCZ&iimG@f+f z^}-=p*S2S$xwhpY;#mk^FvjNKnwo)5{j7QgSLcznhWM-#T*ZF4IFlI9$hL9m&$Z!b z%DtEW9nJJy+2+`fm;WjcoH1Aoes*5v>}rC#%bTd_E~lc(7G))u(=-{#kVJW`P0w_s zMP(ty)ZTCVA9U7e+6kc(GpA#{{Gd{aol|t#%J1ZZebjbVGSoS=s;E*9+AM7wlSX{g zYM7(Dc;x6=w}fFwvTXT<1ndYuEG^nD5E#04-32B3?xCanaZzHi=z+I-@UxN ztW0isUN^NEVcb(jPTE*uBp@FSfm1?7Ku` zv`w+);J7>09Mkms!CwKd8Wkv6-(q2}vmzjn+%_sa1PEv1;q+M0 z87r=^^H}_~4$w`LrKJsw-qDpB35^R5iFh>l+Ys6WFy%jq|3DTU1RBm+L5DO3DeDXk#Gocv#`5(f09Zo z+${Q~VvEYdxWrRJlOJ;Qbx#cB7!!n*s zTpm_VkD9ZI$!(`6k_scciJH#tU1tyiTePinLa+`z^pAK*StKCSK^+C*jvY%m@ zmG;^wIp}$Qg`PKsohGnwR<(R)M%n1)J_2U79pmNila<7ZMMj(=CJcOyn4Ag*FE@`x z$nZ8!VOj?I9i9#0Z}@r3p7j=6CiA>qlGU41gMv-c#vKzg_`*?v5^Nn{g~bfMUJ4Uj@o>a>}UhX?g zb}BT!MFxOfg-fddC?=||!h(3J<#ocw%VI&a1_A){cxhN#A2R=C@QdyQ51l>NB6Gzi zm|{yLNexPTsS#s6Gg|UdP(>lxa<`XTz^LW8A~QQ^=|6p-7zN5a>MMU2SUv6Q-!U%_ zGLSNVX(JC*oIbnd<37YPvmTY?qOn#cdX*0?9+WevGcvqy?K*fAoX9aOCaaoZoh|L+ zkA}bf05%dKdAxr{aXntH!?AKuC9{tpAdd_a4>LYKsO=>tt(+~Rhc^`Abv3b;49!?^ z6x~;pkLqYsSk}aKj>TF_!=%bM4vBzD#0Plr|^2i%>`DuX=s7`JaaE2joohr@mC- z%2=v(rHJ&YV5M+Uj{C_1Rv>w1i3+)>mj;GAC!}zH=j|l-c8XjO5k?+%yN9#%LibmB zJX`MA#cJP;pMo46ix)p&_>3&hM9x)!yM@)6G*?hpN$koz?24hpoaS9G%SqeV^aX9> zGIvxEl}Z4*?3O%r_YsaeR1$EN6~8jPACeJi9$Zn~9f~Kx_fw&+?gaVt^5dmC6)IdE z)&1@YUN-S3`Hn3_R_DLLTjHxO(^A=C;y2RXuv|+_2D-jkiFu6IfeDcSvuhI113M_{Nr^n;^z7&}QjwDn zZ6Q56Ad7?O95FeEsNiC1VTxvI#UtTo+Bw7jto%Eav1vMQ%aCMucOGneSC+(RL{Vs- z^CC3~f{2KyvMbbip6zYfOD_LBt5OLjhj{tpbS+d^R>Oq2B)kGHY`-aX4TFmWJ8^My z9e*%GH|kiaU(f2(;*&xt)%2X*ywDGSF63IJe3hMzRMrgCQ;VZ6;1{`e(nnwrF`7Ba zLKM|Suw*Mu`+hLbfGHwWNbxIsN&64&DUb8dV8D`*WlbM_ZvCKw!noX3>(k*Es8GcK< z5#Fdo&1lw&7flq4m&GM;s55mF>K&LsrR5&wNpT>!d z{CeZv`PcDePta~Ah}zW=oIpoAIT(d)@pL-KeCfWc7^uW2%4{*o;ifBuDGxatr22xQ zirDld`mEz};jMxqehbm@8ib-$7a|Io&Ubn;Mq`H$dC93@>iDpi`#i(2*z21*qW|Q* z@IO*)H#V4KmG$qZa*@B<2{OcJ86Qq-M8lSFYOoWgOKTKSuHIkaGF5A-f%f{$1((bb zOUfianB=cGFHPp^b3XYY_D|!>$z5IJulUf1&gpEJf5De!OO->ChpR|fI$U%UIe|;rS9{?QIDIlB#{7-TUSmqLcXn5j?)3AqUzUekWaMPji&~Bt~FN2>5>! z?(=*(Rwk~D+}5TSfi)QG(TQZBy!20A8#{_C&S{Qsbf*spCuN6OJ`U_GDMsO1O9;=c zUhYFoftHL!0d{(XSuZ%4M)-`EO1$&SNTnRDI;5BL)pVh_Sog2>+;#;_Wf%g&Znaln zk}=kQ0RdZtXLA1Q6k$_vw1fFa7MS)Srk;upx;~d=5XBNV|E0750x|x?9^`hn7H=NH ziE@p-6e;gg3SNj;K{D%PX0ey97vKmiJ*SQlCgJad%PYE_NaQNa1!@ z#&;Lpasl_BB>yyvYmN7T}R{ST$sLvcu=6#zuESjkmU&^=C$e=S2v#dal%2hc} z)>qz=wLr2ottsJ{=&Fpm`6WAUFE7qSsZitGFsnDwIrLJQC}b7^X-S9vr9QOmlvo?r zOY)gO4Zd;+tcS8?_F(M5V&ChE%VQGeVMG~yrsvezNSA>xW-6-V}?4pZiUNuxF0& zZrmnOIs)_1>0{r6ot1II%Wu+qi}7ajOKo#y5BmccU8QYqJTuh%67DbA6OZ@upT>@* z2hA#c@;@t<6j(kcQr$e${*wZ#f720?p;=t&arW?X|IP(j@MJ=)Y>z<$rO?ZLkv0?m zDSmg%Kv@{cO_Q3dtwJo`RP|H3(R|O!JFfVL@B0$_WSy*p#F8aMN*b$5@cY4Eo`OVFUh{fkz;{21|Hn)*8mKdC#GK4jlK-VY`> z8Yh6vcyq#>SQZ^kn-~zud=_2V5l(AN6guHrKkW0a`z}39EPhKqUi4W2oeF(0VUkO! zPKrAYuo8xFGO_vm_1g%kytbp|qS!S@L<@kc$Sc7rfBg=gKO)b)uS$d@pFmj>&yUy{ z>9HLxm*98sSsq*15jfY`6nIGC3fF^|qMwNhX=mSPcXFQ>&yudcec*8E%1+b4#Vu?lBJncIhzv0LgDW&UYc z8L)0he=ZqT21FZDW`>k0L#CBm;k1UPNGa{N-YHzh4~znmy9q%>2x^s_{eyi-Ud)ni z;RY|fa6MoBPvOi8H!rX7sB%{r?$P;DD16MPG-ZI=6;TsNWHy61_?%dq@Ii-B#^UxpJg}+TU|O;*q8UH zYhvzYy31Dk+3@7DzF>NRJi9NwfUPNaYgNvg{ys4x2(gHdy=~KwUmc*S&=+^B{W0Pf z8F7XFH+#4G->}|Fumf$jeF|drd$B^=PDZ~JJbrf|IM-F$=B49p> zE-x!0lC*gmhdsSt+xWYLD|z|T_^u;7O873GK_bx)T}SeLFkUbC2=7K*JM#B}a<5N2 zrbqZT8K)T((cXoZ8_%~e)~GA19(0j;G_$WD!8xoWm|H&b!Yak77oSgTDKB^W>j24E zCE4Z0snjVFImwSKFwK2e5X9^X7;x@RKOZ(f2ZGybLXGa>fYh+zGx#Xa2-^x1?QBgu3fcuA`foD92(9U4Hei(h7Pi+2c8V{AD5rEZiCWBTa;R!-Q`5 z7FXF#wPtl&!ROliyC2^PBH-(UMBo3r5IJHw(OEM@v{*(~HZVG7F+{kx-h9(&*f(EfK}qXWDvzE9MTVL=iobQf5!QOyL+_&$ zoFkgfKTOU4SN|&PGZ<%vS!E=XwaR&-KC6nXiZlK!$>1-3@LCt?DO6*2_Ofs^HWHI> zBD?KWLNW?fw07EV-ceJJ&J zT3x>HivF#GCwX)+Si9(UNrTZ9eiE}!3xP0gz*{0y5*Tn1f$#f_*f-Gn<=CQz=t^of z{$ft)4G7pevYS!@QUN|J2UabKthL>97vd|r33QRBeM+hsd%kDTZ-MHW|oH5R)qT6M{49qwi|bb~qy&2@eeui!FRGU|9I9 zZM`D4Xnc{AkWL=v!L`j6CJ~~rKhV!qq5DZ{%hpBMc_plYKWG2waru?>BYo_r8Lmb& z&z;5Z$@nlW5gtoD8^nf!c3OWrAh8R8SZr2yUNYy>%q8gy)MDeWxNO0Bmz__vtY&gs zsM%(Uzw$DyHs>{5c&P@%T6y6GmtoYA@K-p&69UU$k-n7Imt8Q&UzxdV{zaEx&@i8O zyeInAip=MZzhL3K%P#O&&exb)>AAd{v^*`wpJ3q>u?aPtf9VC}V_$j6rRjzX7G5MD zxAV?t;;;x234~rVgJSETQnnbyD5O)X;}|-*x&fYQ0aot;G-kf{EdfbEbcF;w-KkzT z;XW|_8;daN=teEHy0~9ewOSo1y~MmTgux06eyn(ZajQ_-|B1f}ezbUVFFhav|7keW zR5&3o#6Tl_Nj#uPOX3$~5te{Hh=Q;sRPKj6QSO4fJDZgsw>?<+`qx@-%+iu-m=&E2EZ6B6MKN)FrGy(QQ2A=#BC_}&li^{z|H z-NPIGF{tRB6O!TOlD~u0AKS?VD`^LVS2{p8V@OP7KYl=Zd@{SDfsZgP%Q?b0=Lj>0 z@m(DsNHBf}XT#sdePD2rnadF9xJihXgsn z)N@Gx+M8%g2SaTPf^LNV=k7m!F0JXb?s_rf%y6Cm=kd<~CI@7uF) ztRw!#vHZUuHcsMGQAEJkIp)LBXyFM*$aG@vdnu*-QB~6uiD6MTCD|B}o`1?WMq~XtR!?U80>4=%UnK zXLw1ym;Z#eSv*Mid#M5Zb41o`S(7PB%f;tif71ukSBF3Rj_Ziung{(A5$@(2p+=_T z0UVG^`13QK3;tM2T~oqv1-$kupol=B`K82Gf@b8X5=}odyTjrjcEH#v4UH4AO))ud zDG)YBXK2N{tGBtb-m3bT>|ymu1W_T9_tTZ;zNLxRJNB+0Jq-9{Y=dqdMG8&4etkXQ z8|~%p5t;PYe2%aGp|1ZZ-L<~yte5*SCG222S~g|=2wW!?|IqvraJP?%7sYfF@K9Tv zSn+k{57AscH+afM=p-kaAQ@uE|C7Eb$tNX85huCuD?S4T+E@c7sXI%S-s+?13K=$w z4+o-1Jys6K`-0t;rB~v@9@m z133kKnTrnP{eB_WxKumEhJf7MY;UF*zSDEfq?+`#!g5pLmso(1ZLWcrwztb}Q`2@b zClJ;BQCy>INfMZBTHDp~7w`H3*$J%rDH0V<$(>BP9b-;@8A!L6M?^oyA!q zBhA7q5I?CYsis#uoBIeCm?H92x5XvK!)i2tODepIJQqa-I2qwU=LD)@cXo+PNV4$R z`i|ZV8GA_)EG(M%i6rrx=e9`$07j^`sK_}4X@{2FM^oyUnVD3e0+fQbr zlNj*JFF|~sKmUTu#E&yThg+VO2(h{|+FkE2SMeJen|BTV@`j5pvC(C_C-}=v*xJjG zd%Gw3%Ti`wdjL&SGI}&2g)-iO23+e>f5Tro0y7Z?krkeA7!cQ9LD0phb+7BbfRG?{j{jM7S zC>cKq9ID1YDiQ9J-FBdtQ?Qr#Ln0uyZ6%Ay*TJJDed&kU0fEgp)gd%YuR>UDVP^ng zRd{2Cuqr?e7mD)x&T9QO_5|Q2pai{Lhg3Go?cWXQyDCi;f}$NuUi>A@dOs6QUQ!t1 z5!UjL9DO;AH{n>4-eIAn74P~E{>^UR-^+bLFFds`dL65xEhR$ih7dRGLAU>HSht73 zx>og(ivH?pP589cL+*y#7*=1Qhj_Vr<1*7u7g=y%Ne{{X8*gNsL*Wn|qD+Q*J4L_w zz{vGJsPz`Cj#F9hPhGvr6)Obsm4XDwX(Gq1<~q@HjmW``Kvl_%oSf1h5pjhL)_1Z8 z%kf8CJw?uK-y}%ulb0mD*U3HOjwZ=QS<<~Px{M0Vx{}1NRYL2;6BZnzQkjpX<)pR@ zRcmt{R!%d#AxC(VlY1JEe!H^nr}YRh=a*GJ%}r%^Mpap3RFz**Ve}gRSUl?rzf>oS zf^=8LBMV0UPZ(392a$rR^cgRACy&hFC6Dq`Y~vvT*!^aepWh<_RnNH5u$~I}Imc%T z$Ezy7?x??$%7ycG0rnzhCE%RMUW0s}dx`!5qIg!; z&FE>xwH|?$CE8n1L;8WHpnn4!121!(q^m;AvUtP&N9ni8-~qL2J9!oTCR3+xr20r) zRkhuBz=syuClD?_B0gkB!iT;2MAru|_lAD0`kd^y3XdZ(-^Gm`u1XOZj7rBF?N7BH zN1iyV$aN@=iXx}@J*pB1?~7#5(%`qOONVRq{A1T8t{PdPZu}l_td+$OO})>{oeS2< z@HHQw+WM_d+@UWncM~R-!3r~iV%Cv+0GGEa`}lP9GPRcRMf4?0ha=VBPhkfng^TJp z)pR(d{u`?5H~8;rA=O%4O=ox^6!1|NwC29zA&!npgyZE>QryzPs1h9*JIG%cu+V{* zdmkugX~E0M(&gyk&}bBQu3keAUhZWkUTETF(ni;XCt#g^PAKB(3W^v4fJn%`dLGUC zD)Y#d&f}=^Jbsg12?3|%dSRm2v$6AdH7^|gSJ01ajXL_-s^6Y!=|^nw!Kj4jp}~Vu z8{H_a_vpQ+U>|_1(UJ%b(fj0e>AaQE*I$bE;i>Xz;ihk}F`~1m@F%<#OkX${^zN7S zf4B~daRvXno6iu6{X+Lt5S7fni10f|p)&4K|J(Rukj!^5yOES}gI=$MLk>Do4iNf- zE+4_4qhon};nF>-e_{L3x>v|P->&QafxOO=^^i<>=GdyeDc&v)9Ud0WUk4o9I>8y+*6bco>5!6BhWKUroQ=gPMz4UD z)T--JbPHEX*C}MPk_pG!TSOncjSiKpIP5Z2t6T0~)UKtJ^jpdK;N`|J1*ZO;)Gub7 z{p6qbR~8rLLVA~Kd8MQ{h!vvj8fblRw4&m2sbHlVgG?8Mk4`GJEBZ7+;(uex{jn&% zHvhl;lQ3AaRhr%#k5b_?HlKSk&}4;w<+!tP8&lu1?B@DplRJvi+7-Nz?0G ze$Bsi;5xb1VzsA3;^=`w^9M;S11HDj1$Hw~t5r_L+|BLUB`QJt;Q|aMPup=~np$`c z`_E@;O#?kCSE)3(tpEf~$z5F+%Sv~f5)|q~xAO&b6 zv5et6J58%|uL`Hr{wj8B@KFVn*%RO6EfF{QaBK-SOV>`Dgs7-v%1m?PVJy;lGY*tz zH-^@5I;knW+)*fN?1z&QG;vPiTupK6__<%Z9`N|&sKyb~%YRAaZv&m^4_q%@E|?O` z>{f4_;@G7KRU)OPZwuqu?T0S-31{tf|Li+QG}L5tAFU5_*QcLkyMsGYl9*yCVmCu$7V2U@C)-%3$d1_=-F|r06fy9Siawmyu13t` z#E3~E^sbi8mt*anwkMWL#Aden)WAc1O_5qI;i!|{S&E6#YqAe=RRd@t`EE?iw%X`( zT<@9KlL)5KTY3|G!iZG=LWR2#d$Q&6vSlM7q?`~`{I$$-v;)Cdpz%NV&+#`CpURyN ztWLvv6Wtdl{>l_be#??&JSL{GEJRGci9ZBeTPOGZ+eZsm$cgIZhXe*{dC)893a8ny zv-(lETv(Z_w+U;r^V8nu2c|KJpf@Zw-a1UbW5GyM3lu%^>!#5iG`b;8npkb{nxk=G zQ&fkKS9dHk#nGpFefi<9+$p-r>f$0tY-S3#9d?S&)cxwBfl{Wi4?+~8+)gs5VJ5UQ zWH}wvje;v$tk|iM4CLIiISpgu=z+~RKTJFCl4H{i#? zvxckXe2v+| zg11B>(#t6tFZUc*?j+4$r9$jiv-Bhlj^X5Zv=+ewcqI-yxREKsn4lQxkBR-idx)2X z^wkPMUQXz56Cc+^$8lBCM-g)UiAbh?;he^K%cXX_M#R&xf4j}2=J>h&Eq+t%abjyz zzZk7j+|&UF+(GA2c9$eH$lLl-pfy3}raPJdGN3Zbd7as;HBmkH2wlY!9llXf@orn? zn&MvaPGT1NLD4+i{UDvBXM4(6gnkh%>>-@&X56$YTsvk}pS^JbKW)_Uc~D>FQHG7& z+hZ1~z<@Ft9+C|14o@cC<4=WH`!|ixZmdn92#@FNn{t4F?JdI^Qcb8|hJ;hKn=A<@ z!+khXCz$1jw}>p$5rUNyZ;{%7)RI0K#9IB44ZQa!!X-cAQ8M_s)Sej7JD|8zu#uOy z@RZAOT;41N0)0}-6+!YOD$Z^@-ODv%qs?yn0GWj9(Z&r()V8e*U~`)zU0Jj^>Vj@W@Qj1hwJ7i%{rfMoW+)br<80ZIzCO% z;oxjiDrH_Q4wlhCvBpekX|m{?jEr+tN7Tv|4~U?9llAfouF9!R!GYqzuKf~7^h4qm zr5lpr^o0OCIeKLeMTebbdZ4RmGq2sbWdb3tHu9yb%Hh|mAf~j5QRoODtPSH5)w8mX zYLQt!858y2A>N5I>mi*ESa_OT)idjbA=R-3o<0p6_1`(5Dj%1E&zfMlh4Ia3AAZvo zKRB6m)-&t8+*UT)uqfBRiR(MdT{84s{=>rf4`ok0z{}MjFZ!W9Nwvk1w_i&o`j8!9 z!u_)OyB5x>ZE9n%f+Uf7d0>(H#i_;r~WK>C^fBH5VPL(w>JZ%C3NpNo|D+cRN zV^{Fw+bGYlm+>R^|Mw?)m-KOMIe4N~xwp6E8$1)sJbYXTn9FgFrQ-s}tll7}u@*nW zdFq<7_zRK`%#unFkcNj%Ki? zu|B))2=B&8)Eo3Kqn?^g~XOjdyR^x&MX;;X%!5(Gntb}Ud$H+|InB#hW~2=Z43P04yG>6jb5iiI8)U{nEaOZowC^r5oCO0~q% zlR-QSpy;ErYa<<@_C4%~l>D#n$j{2N7Q)`AhBGIKYiv8{^F5@GMEIMV0nFlO1=|a! z)+T}*<(}v#Y~Xw=F47KyECwQ3)Ucm0XBwo%Z+XbewSk+hM{p#^<6W@L?k~0;#@g-W zrtT#lNR+vIGn?(?755i87ye}LOGm-V@<*;m4YOvA{H=lzB-}#~O3D9v5MHD^H`*f^ zP}0b>7DbWufKsJQd$_ogkQ4LHj{`D0Pz@@Z41Xg~B%*_0efeOnKj*RhlMAo1s8fPT zdbYKP?3SNvN}Ru)|3^bi<3V z4u8&*%NuyO;(h!BrIkb?ZAOXE4`vZc9F9q;N(SNRahSkV5&9e?)G4s^7Cp>P$UAp8 zSiR_qp@1d+9aB`jUhi^!!<6@K*0<;rWuz&7uhex#00j)IENoE7`v5-b0Mwl&SSlAtj_LiLo1Fy?B%A*w~kEbL14d;YA}MNr-t3J?2co- z+zrGg&+hoRm&O>Ph3n;f7q-*5-+D$Jiy$XAmkJVK-NFni z(NzK@npJT>pa{n4mPgZ5;BuJR2GSo6KlNtIr~b0&*p6_GC8t@^HUSe zmxa#iR-V(}+&bf;4^^x)^{8()Cql}?%d zRUE{2hr(X|Qvhyck|?Rr(Fz)J-8KFwmFwaN{hccx7zC%kW-0Ltp8{aYF#MLM(#PQK zci~d#Ip}vstWWnf9PJj{ROZUx^MgmsP}0%GamKR^@CsAPQ?~c@4*QU{)0m!q2X*j0fS*Iinm8g3gZ+4+0B7 z|0Y60^x2RQe&O4Kq|raiOj}u->7O9eZw2mABEL0YA{JrYZ(Y*M59fj7+=y3iiv8k- zl$b$N0d_{*VAZQvOIz4R`>On*!_n2=NTRT5!qtKk*@dwWc=?};j#`+7KjKps{^_Ft zerfF{9Ex-Rd?tLVgZ(oC`EYLwc^A{!aMI%tuq9-IgYs|7{vHlXD)X`0XCv5ea_uiy z;fbZ7%PLj`eD7o+SH?c>h$ekj`=|I+%2SO@t*R6dk@zx#fw{#|> zx{Ve}cw1?g$$teOa;0k#!G(_BQD|R*fl1kMRZ<+JY{kiv6tO3!3JeQF#tCs1be~|>g#P0A>>q0rQ$AZSMyb!% zI|Ht)95r#Ye9rXDwD@I3!(mcn^yAIUQSfwGtH@D=lx^^@!Xy%JAH(+yT*O7#u&lwwmpoE$gzwfvrPu zKs!V%9Qwo=NNwNmFTw+#G(3=1{62s2YUzN&6M5Q>T{dq&?tOE0cKfm3H&-=0%(?Ah zx=Q-AN+FlTW@V&kE-y!T#`1zVT6}2Y?2=7cf|voz8$ex>Z7oB_$pneeKB8f#;_gv zTWwYBvOzyH-VCo~>h(1Yz+?g0UJ|9OROsdY*9*kA7;L^LdP~h=GO3FP#Ly__7M(M3 zZHqn+a+GH97s^hx>c44>KlxL6jQa__?sk0BWR46ZMb6abqHRo}=?4g>4Bg9b6-TjQ zJjToIU=)>nM)v$1eL4BS%k3u;)UL&7p|3k=z<%g5uaC-LCi&YT@MEAoRE13+yc@+< znmlP~hDVmDyO25s@7;seF|%v=!$C<`O8of>Jb9)n&g=jslnAD!Tm zB$58YJIvDo71a4#N8aPB>?`(Zsm==d@L^T-s)U4(W^QwR&TblKzuhg$M{7!8CXv92 z$dkppTuKztHOldgbi>HpCHgqsh-L`PEl=5# z#@9n!uJL0eqJRPepvR*cMiTA7tQnc(*wr(`$x(Qknd^_H2cn0#b2vIG`oc4Er}Dq8 zGMWrZN4HX)jX!ELrbIXKsO^|cvr6MMsnWRoMqlEK@RT>B0o9gOD{?&HU-XgkzGz(W zf4bKZi2W}AjK9O%C4UE;Sai@;ZV!@HPh#Afo!3&nk1K`CgWThcPHs1i#H) zO@W`NIX))=wQ$RBeo3X2X8g>|8R}%XzodcZSj~z)hA>jx$tEN*oC~gB#(O^y?}%Lo zqD+Q+`{7b`@tmlBP95P~qGVkEBfd?ny}pkhv@*RF3`hq5EVUwq#7q0^*DKp=x&9_z z$Y%8^Y*uegj$YBj{jkkyy7rVCO0F*}at8x9*$$RGg^9(_%SMKaBYcP1y8D`L-DO~2ReUg|U3b~~^jocRx87qHt#RLTmkEiwuTpb=9&^{XRT=jH!54dFXcoqMl`Pl;%> z_=VAR?9sd}d2hYkT@b55nY?8DNQB?NnNmDq1Luou;QYJXdU+9+6T#-_-zj6{iJ zs_e)uHWr=5V$n%|Nv%1?KY^vNzUqv&mW*lzcTJTm;(&t5(;96C#7;!7%V}Tx))vp; zHfN{}1l7S1TG*cxyH3O2*pgm81sbcKU(yPO1nBqj*9jYP zj)hfmi`x!e@YRun7Hc&+WpU(=A;ABQN!4-S1Cx*@x26rMav zK%ZWXJ;Cq`84x9ER!dB=;4`#bY)Cn7|2zK7`kdW7rDAc0U6uTn%SduOLsCE( z`3Z~61pHmcsnF)--zSTzN^IubmX>TgY{9)FAW>-L-SNi}hi6c5&?raLD6leMcpA{kIu z#ln-{w0YtR{$J$O&-=35#-{7N-}DuFAA4F(P1asM_M|*>m${Gi!!XtdD_5`n%9~$R z-bj2(E9wx`x0gD+T&s%02;d@nOYarGN~2DX@QJE3Vi~Sl zM@~?YMb72ku#@GYPkvKpWH;0$M^lvObmGTBeEOn!b+a-WV zH8Q*TEdIfy8InHyxBN-|kYw-(DMW$?&gg$>Jm)L3&*R_n*F-?toz3l4Y=QXFoX^D5 zGw>(0_g;#o@ta0mBOj6qwye>|D%AM{?_3_jQnq^nqUf1W`0?JnDgL zj~%6i4-BTEI&UhnwcAb!gRk}witK9qM9}k{@>&e6g?>v+q5Z@!;aun!aPchFYCBiDihy8qF8$Ky2-GDL$6+rC_(l9&4r#H0?B8)A;c`Epx%j*l7o1N+ zGM9H;M(kTT_jRF0zxBZjjh8$Bic3r&G3NA+`3(!so8OR`zd{1Y^O+v|V^4@C#NR7ykc zPtP9)4~abwqCe}5WWa{aBLo86MhQRs@XDLOnF=P5)6<^t0WmVIgp{>8e?aS#0|jzH zKe$wc;h+F)Vj5J~*?=6zWkWi)WhaMh2c}KZvIEnm$nQ#7PZ+)|Uh>D~?DFNT^5w$v zrC331S+Ru3pLU0C$n8M;IQj8|HICl|=VClLNy=f+CbR9;~>2%wF66{-+kK2!wzUU`qKm35b)J{NhRC zCUMsK$@BqtNw0!UTfF{hah43R_k30HtR!Gcl=b}k=^logZ8YaNn8XaW^dpkr&h9!Y z`Qo_jTeX=xVf;ezAp!hag&Gm=e#gH%yW_&Ln9*e<%zR0fI33Q12v8k4zBF>0onSv_>$ZRdV*9oeu4isW%)NlK^oKrUCAjS7 z2|^3OA1k;QE2!P&;gzj)O}RzW>r!2EL4DcH@l-f{R%htfB^Gbj!zQ^4z!(X&a)WqX z+NX==_!8kDUyrg=0ik(KWt8qQD3|VwB|o23JKg& z`x~&wjJ{~Ytv~(gPg_=9+vVM!z%K^(zF_7oRJ8b~&s|;i&*%*9O>EteSiD2VMLhd( zNuSi!x1sgbsw+L_M*OKesm{B)-J0JMYFAuad!&gpnq1 zRUx(tFvaCG9ut%dR`YmKb1Ha@TnMSc`2Nn;8L_Jmk2cafIWsPO9sjC4^a{V%XIq$+ z%yXLQ;XKGL6`lr!6Y(x$ZU<{qO^^8W@}k#e0unM==`W;O1~X032Ov~84uzxiq-SAW zO@@iVo492?Sxc#p<4t{|TGlR#k;>tbWFgT|e8TM~@U+p)LFwDWOW*zuPN3gj@tA(K z@xrA>gL;b>Ktur6^rT-ni{NkbcSgTakzp<4F5?69l`PC4`2MV&(F^k4B7_My;N>o( zCO=po&bvuRKZo1a6WHvFXZA13xm4EGc27xg;N28zq9xq`b4i& zO;7oSb9r>Ci2+Z?_;c|alEGWbDiCz0&w^8^%wW02jhfFmoG$xg-6_d6kqRY{<>xps za65R}ncLvyU*jSb+?(wmm1*dpW5u8J;_#E6g;caA+cE>@^E(GA#*&gO<_h)8GW~!eQ$uvGYiPxjL3= zc|IAOJHgA{NqPKE?~FpyO!cLn!# zHLXtezcIS=q9=tAyIR<5{SX4HLR)Gh?2Hl}zRZ_`>4hssb+kO~6%M0ff|2(s|DD6e zN87c@Lff{UYl#JRznQh1I5kjD=F7}j;mbp2?9bi}uTwoK9eTxH?Q=x3F#dA#HxBk( zS%*dEI`c7JKU^@GUOvW!%ZNoQnEy9$SIPqcm_w&;lBMV0iwBe{OZ zX@$er%e!l5rGiHh9H3jJ{k8DyErw@n{u(^jO@5ZPwXLVcuCB<>()I`st|{ebVV*P% zOETDzlH>(7sisG}3ZH?)2D! z9(f^u;r!VH+2`acMiT?m=E~*PwKbr7@T!-8nqP8B!<(l0i(imJCIl<4Z9c10;eqAqm+)kVsJC>k>jB(LiFdAwd))2|^m8 z)R&f4tys0CzO?*WOKr6kd;zpt(c0G5R`ID-Qq*E=6|2?%_spERdvIb@3IB{r5ruH?h|%cz zWTFjn71|(p%}?*{ijy`{4p#<$xM>>3YF7Lfz0`2w?kFE1_S(sRcd(py2%EG1ch@|E-k`2C^!}I z7sz-V2)JWcac~ogjT)``kR)IJ7CjjKT=B!2;(yR?#yf|o-wnonQ)hQQliK_1-l?-` zV{|IYv}%AU8LF|Rf;3HgEP_4vgS@h@s%TpO1vokL6w+i^Y7*zoK$TUXDO0MPhTUx^ zZKC=Ts)VQiLvY0zlzD|4qo~4u4^7EhH^i4Tn4&7rawt1|2#lh;GdkK z=M#)Vn{W?)9tu4tHU7M-BZ3<)t;AMw#CZl@QyE--2h|WK?XK_*x3Yf{n#O3Jc5lh8 zfTeb$?H8=vjdGGkOy^@0j4l<}REQ)~fxtbKmY{0y7yklrd&TMujxZOCobV&DVu7J0 zH6nmFZgFNlRe|@HqcM)m{QWe%{(HqV$W)1QK2E{gszaab%v>GZKt~xMAG0gbU&}#0 zR`z0W1O=jKWhXLnQ~RIkL3Osmw3B{gGBUfOzuM18m5EoOq*wONH-%zgj`FXFGxkL5{GA8^vlDHRAqE#ctqtid_-$t5E!~=UMQp zhm#Avhx5~d8)$h5m2b_ClhU%=uzPu6ENK1u3r-@q{5;fO$}DI+k_xi6yVazuz8d89 zWvK&SRdu8n`eYyqQT*qp_D{Sp+<)b6r0)Zg2ObF=d;S4x98k719gP8X&Y~LjQwhwW z1eUHWVu`l2{|SD~8`!A%SD<->V;*TBp)9zm38x`oEFrl3Z)!!gx)qiK3LnBEFrYB- z6z+5VTY`4TY&aSW{cR~K!hJe)DY*Q4Pz*eZKf3%X3nin6wJM`UyN9YsWtOQ|A4A4h zQTPJR^?OeYLAoPz9 z!2iVJU+DWU4SWE>Fzm1mt3yB8Hn0OLN9_U+^77^(sGI#d^UBfLXwc($ z(O3N87p_j3WMCR{(DW~P4VQ{r%c-jAS9rjhn&Z6~0_EumDq6jNGo$t7KH&Ipd!R|N zEQPzoJ0Iv=sa%LUaGpZDATJsqZ`kK>!R9|zRx?&ZEL5QRD@5g4 zLB8f1yw{4ncwOq5bOvB>#b=NUa0hb_!5RLq7jJvBxcl{#;_lasb(Z$sp9_laf?-0!75YbX(OZ=h?!U1MceZ#`lEVGrw9?*&EZji))eT&tM(!gT zIE+lZm#nn#?W>|F);Vws*?{$AuCgthDl{xycuqFj3q;?04&>)Y&%vJOo3kNT@Y?Uw zGaK;|*yxeyxS-hJ9yJ?!OKMaj9~PEr8v3xY9*V=$5u;rP7W}TX_MHRm$O!F+iXX-e zei`imc};HDmriKFnHReOuqdSy8u1q4HxzJr)<9TgWf6GZoI|Wh7#4KJEV{ShCu4yZ zLE1{R8HPlMb}d=rMTs8nmZ-dzJXDm7{SmiFD9h4hd`J?C50!1r|(1^bUrukIAlk~fn-IO`O-I3pYN zg`eqUUSubI&@;U|Qk6q9EUOc$?!!O_=HtF86s!bNz`&t?{yan`2F0K)JZndI!i{9m ztzp{A4y8=Z*^)X$DP<0nG6m&F+nw=a=VT4cgS4^w!4QyaXX?29)nz9B{;C~nq1n!F z!Lm&G#IOj;D2hUGLwLmU=T}beTw3>D`J5rqFNgc?-3SrF6YhNwU(rJ*oVzAE8|OSi zpsCujeXFMSK}Tk|?kNn&q6k)2VD4>@5wV^o`qGnvt2Z^B%V2-sd(A z9M|(?^oOA*yZ`-B`+YmVtL+}yz7`F2D5ZTJWq<5w=dvBBDYui+sClXiIHjTrcvcKI z(%Ymkihaa`P%aInm+LM=8hk=u*{)*T55wKPi-q0LNo70wIAw6@7<9%3_6sY&S%z&B zXy}3NMWV{}E%#2Pg#Ly#Pz2@Cw7#a%Ys=71UK3n)9ZXF1YeKl#Qs!mger4~1%FaT0%oh;ouK(4DZJ1G2x%99^F0n!2O`t zb{V*vi^IK}(50qvHXPObxo{t5Y_33lg@PMe zQJNN~6|KA+laG&PVVE_m0%M;qR^Vb9&R)hlv8MEwZd80Lz;io9EMO6f=zB9db%?Zz zZtj4PxUSJTQ4C~PZ`o{ADW#*K0&D`3g}`RE{YW0iz~~*c=`H9 za1Qt0OGSYiQ)^K8395kB5XoE7BVv6)HA8|)sIw^N*NIsR985bX_M*JqWYK5pmJ1;$M>8miF$V{w}70XmQ5VWVIeoL^|L)ovH&?_k-hMP;seoKV?mc-d_ zNz8srV)k2N?6<_&Z;7$r64MiwPp_;E@k|EWwST! z7={x~)q;4c=diM%a2gsyi;*1P?W^&8GX|tg4#!QbA){JO`?m&OQWa_!MS^i)vIFkF zwWHL1j7X0L72k>LzV+h?>b}uA(WYLo=8-W(5ANZLeQaFNd2m9 z14Ra+RKpa!cU38(Ti2E*u6BezZ+leaH8ls9n+>1do z*&0Gi2y>U*B1&VEp-FaKUf_FEvwAmmznZcxH987g%5Q{HR0B$pq7@ZCzlgQ*PeunY z`?7PL>L2&1)9Z;r>bjKnlR_JDjQTHjZuR-wewErX6;KGB;f^(6bR6KovG`*&5}SYd z2&&PqSdQ!Ib<&!(6;yDb3Y_Po&dbL8jxm-)su;S(LoW_y^MG2lP|6Vf-(7;fd&{^}HU>H?*_7>b%6q)>;#oyWLd(V~ke-6Q;rq_oTFCq)G z!YNOvVI_6cOSt#4Y^uCVwFhLo-S7Gv+~NOfke*zYvVguf!wn+pFx{N3>hF>&U4H{; zKue2i?SZ zPxbea55Xor>3vbJZ=j0pi>MHEhtgknP=WqwO$A=>w-Itu)eo;W1E&5q3cy;QbN`Zc zswkqSM&x*9pJ@qJ_Fc9E-IDE)1Fx%f)TdGS%f2#@>_Q8#l9Ksu`*C1Jwb4d=XXAS- zzH{)s4J5fMOJ1aUq^7SX3zN|8Bp#VtMgM)HyYL)*jek(lV62*a2f&0h|=up)d!A%zr@BR?=1#SLG952I*r1-fzaeo?I1}W^3Djd~Osl5ZV z#Tz0EVN^p#2YVJ!{fX_U{xGqbH=`EOS;|Wy_(qWO0%!zfqYlr)Bm-VovpG6PIe8e$K{% z*9PSb3f~Sc|DMY3`&712_B@E}(GB~`!hf|Nv$KBQ>WaRl7-%yqk#L-S18&hd;g>+3 zm!jKgHi(y@;Z!`ef(&g5Mu(%x-2RKiw!meurJZ;Cbq9Pyn(vAGhM*gW)o$Vb^<*gF zl*g!4l4QnzRrKn*XW&7MuvYXxtZv4})ZqCBK98|jvkpO)g)TstxB}uiX$kt z!ljT6lbjX3lhM4Y22@dZlyZUB{96qtUi&;ALUSknr85w7DJE7w44;B^q$Fyob*y&9@tl%;= z2u6*$E#9FdN^cDc?`%vTb!K6UHj(=YAThZmCti@#1riwHvp5^)uaH8w2dL9L0^N3< zu5CMtFQ)emT!M9$i88dFLrw_s>z%L(@slnFegxKLJF#FfPz)O`hB;&*(a-ImF2E0y zQ_?6>EX3M-dc6(&0}U)~R-@xo>va86Szc-1>@2jrz+7A32wa8xu2o}|eH+LGp#P&V zh?Ov8 z>wJ_%hIQa%xhqGfNfYfvQ>7D$)z6SpOyVhtwwY?JZ79ton^X#rHaTxKjQ8sh-tRvo z%F;TY<-p{`7TV~=MTO+3GIF5#kUg#MD%e0NWd?*An5)cD_c{evwTMqq^mWB-_mbqq zJA24pD|%!8F{ctU6UAM>P)3SaQ7<%P2769}zO|tqL;2sQ-sy)}*;$gIPK2SJ2SZ(? z4OLCcz*@s6{j-90^T&D4%Kp(`s4RRPuOS1s;;yBg@Wf=Cn9pMq!Fw0Gu0-=OxSS3P zQyz;dDdnTAj644a^|P|)H|TzF`E=i2-+;Z+o_V%c>hME5rWk8eRqykHYS~a( zWcH#+P;xi=Lz2{XqYd$HRHrnVd9EgZd1P|iRDK`!d4Ifp+Mc}ie2!k95xKF*eQ+v~;$q9Gffb@#s&yT8#dm7f=lTs^aaSj$&V!aD! zX{e#HZ&o(#IPa*zQr74heQBlr#qSoQJ+x?nN@w>6!=iPi!Jlp_>tFNYD{$>-M=zRD ze9i9VU=Xc9FaOB*%4c^)gD@_xT#B&{d3Ct&?6m$%aSSWAEA}FqLToJlTex?6P1~0d z5ycmMCKg%88cg7=cmOO*dnRW_f4uX1p|?WMtNJszp+~hjFv);fb+Ea=1=U`EZrKVh$|Kt^ld}gP_LW_FX;u{ViA$f`W577*FE{ zO=aN|!R~YbG^J9Bx%+T$TTMmbQ^B5>A?!78bm4Ds`HlG7S6JE~f##r|nHbmV{$yCR zGWgR^O8am3)i&{(Pn6d3!+lG&ayCIZQ*$Z`cPQm7sR>?7Lpha&&rvkdr7@lzKMZbI znpxEI5a}pdzY~qsI2MqTS+vbIkDnELJb3MWcn&fJd+x*q^7ECl{(H4xSO#(JbpVU6 z`H-Xw_FRL%SekcRtm$$%BwPe{j=8Je>RjX{P0XpqYUn#--NoOsdHyN5?CW?~%|UHR z)vcFHVfS-T>@I~{R*z6`9o-i-4akiw*bB`f27A5$<5opsHSFOQZ4Z}VdU63WP|ZF2 zvnmwr4n(Ww16$AIqLxOnW8_OWm>LkJnhP9wf%<*DuOyk#+D_vUK{XT=-)b47AJMI2 zo}5FBJ8wo52z}+V*L4M#(@J;0sG*xTAL9_HkAfR!WcGZ6&yDJNZZ>3#Fc_f?`!u z56pwc_59@Y996V2{6}p}G*G(ml&3b~!_H$yk`WW>5fDIndbgOKi;ZPfaM@FIQ#$5^ z?247@?#InYCCBaQc1=0i1C8JMwr#Hb4ex&QY#Bt5+fiK{(cw>4Pq9RriOncXi`zCw87$+b$xOoHlHmDAR zo4CRlQYGdY&2%^BI(j)W-`(jwf>)sN5=dI^v!xQJ z*yjd&UH~eW{8aQlu9~79Sf@{;nRn6s;xjKS_))e*?ffBvN zzN<5_F11pvxHz=3Fr0-;DBvheWKnk#Ys|OtC>z=;y90~H(fm{Y5G;7bXfck{MZY0U zEpJ5UMp19Z>o8$eo3i}J3U_rpQ`tKerB08k;BBN=z-*^>Em`bEt5w062D5-1)!Ca% zuE1;>IG$6WzCN?LxCp|c9=#mXYoXxH#i$0WP*$sQHWy(^t%y$ispg)N@v~rr$f|QL ze2nxR3y=^CbINm~Lqi)ui%!PuA?@!f-=~PMb_!d5wHEvI8QPGuq4x=@pD>^t9i6>1 z7ti&j@^KfJ&~X>%#~pVuRULPMc?BGgK`SM4uqUnk*S$NaCcv;kDF*cWyuPlPD0*;8 zZl->HC8%8C9mTsLWmn%L?X_FidVCg$g!iryAu z(*96PREl^Rv(q{-eiPb+o%H443oU{tW}>r|f+fro%Cm5W97xehKpTsO8{tVX9)tA| z(Wbs1ug9&v0%e-?Hsz&6$xX=UG@`Re=w`Hpn9!^1P6^kgUGo8X^o~Q{D?Qu`MAsRE zfRZsyr{hCh?blPqq&B*7eL)T4!V=_qNlyE>cH*VcJz&GJ6MNNQ#){BtlromD9jhpT z6jHg1)rj#1Vd;aK6uwSy=I`qFN{{pc?dZ@@dmQ3nz9=8fWZgPg^r{d)sKuX(lx}T* z*3|tmdsORq{ak;AB*N1dUL3PMN>6Nk(DWJ<<8U2TnQbT@v9i3gzwD6i-G_91&OYi* z>xY&OVQN-sWL9R^6*TiYDGduzXh$R#mi>vUz>{|MPfMjT*|?F`$zb90bq@fiy;S$n z{kkV<%J*cXX z4I^6Ew*XS|TXs_=xa=8S<w}_@vUA{j=?kWar|<&Z!j>%UimAV*=c4TtfUpsAV-ZWiF{GR5)fn(&ZJ~+mYwl8| zIaNMrUte2J_dl@a^P`W0rH{h>%)-owUST${7?l^5=ir9sC7a8az#$`ld^S1*6dRl( zvIP4Ccr9=7CA|Nfi(qhhE>(=YrcgJLsk4Gi=kjZ<8|vPXGw@3lx4y6V#MF#NqPmH; z{haK9^H5>Rb|%$JN%)m3GUG1}ja7-FI;08(dov2Lb*8rp8Q`q^3fW%wz5XM69~c2y z$Oc^D?6Gs2o7!Y=eO`%*I+On`dGN-n!eh)nP z`EmTv*tV8P9gcm8*3bR4C$&88_zUY>Tbo-WjSJ^BlpRGRSKsPeDvpd1dK$ywER6 z7HNTOk;2w`&b7R8$S-IIXRp+EMu?(*0ZzzKr?XUafHahEZbn;c8>4L%9c3!WIQQk+ ztv{E##;K!a8s|o8Tj#fva88X$9m#8w?*Qgs5`ml|Db+|>B@1XBQel6!wO8UuZs!?^Ye{0grcIWR$d@Carh#{w!d#BLy9nQ%_$bl_v| zxAAX${a^TBrhyrdhZ=R|_(bqI8=vX;5JvatL%->pf{T6{?iJ%R6Q2@%!uU|I=_dgr zI&|s0D!!&?Ot9%m4&p~LRPx8fL-$N@Jx9FH$A{wjG)oJ<&@!C?0z5)9iuxkt}3GCM1)as0(^`N$>>bHlty#k=-T|2dL~;p za*}OPNJeMu*3gsvk{mVokX*(#ahddalAmby)?UbNNG^(l`W; z?7ZC2xZH8M)OH%dj8d+c;iYtDrW`Z;&@|frp9y><-}@|o6PC-@0f8C&rS=>Jq9fa& zaD@I+7}cp1C|(Lg*F_fyC+jbT-Ne__hNM8>>(rI!y-MHbWMp=yrp_7mSVme|`o;7$ zHN7Px?J?XUo-Ys$0<8<6K-dm-<$2@yo3M}g+QdUxCO;#w(Tqtw6fibQ@T+9(Oo7d2 z?DGPPGL|Z^l}WH$8I!tRp9FiHu|ovE7n5LbGIki#O{8xYVkKQq&B(kqwKyZIJ5ZjH zeN{$Q$zvIr#hWwIDl@XX1J|Zj4a>-y%uod~n{-sf&)-PT7t7~UF9JD`;*2y9Q`^3Y zX`}Q#DI@dx)JYjx*99hJWcLr5l##RQkm8KoYljwR6m%b2no*Vd>adIgAjKIupa3PF zn3R!Lo}Rig>5a+h%}Md{bc%Zi$31=T;(k6UtI6r9osJu>xbqSBT+YDxxTbWkA{}2F zD27&tEY(Uv!ltI51C6URf^0TExAJpO;QCYaRi06lIvt{wBOdeU)Zpry^aXFWA=IILX6m5oCJe`rIkZS|0V8f$9`Y=B?nVy4gx>L^| zmXS6&y#{~7>7^=cU$S{U&Ob6IoonQJ{mGIm;6 zF0fUMsd`V>@mJ_NKDC;@r=_Phpq8&83%(4$C*qmMId1Y?>e4Q^)qc61oL=l-mr}W< z=ZA3FxXV0WmXUcKmEC@-msU~Pz4nmOjNI;_7ifd>E284`Qan@2&wqf(P5jB9FVE;o zNrin=g$5_!^C?RwIaVUkEG{`H`y`Jk``wB1sCuv6m!~p8o;57b zdhu+6PPIJOAa2@{r$olX)&SJY&9V3VhcrEspkG*`OK8<)tB!9==Zd&52}0 z2&R0H4bSA~roqpcd`vF;^o(uLH|70Ge&%bqHqXesOD*x0H8oCIpr^EL<>yzJ=i}2> zZ>McH)9)#5S;N5$L8i@={fqZ9ZKZhLl>Hmv$4uIi>jO=`z_}@j<)b{E>}eg#qx@IQ z=OgdAY)nD@`faOlpxrqV&%Vab=HXh`lMSdL%hQqDsvaG3INk6(#XF`uw1HC}M2lB7 zF)DHYRHnNW`9}3lLOPV6NPWyI5mVDsm&KP6Jf4NmmCTR&samcmcm_?3U!&3RENc0Ts_sLt9lGj}{vp=|u1`%} zO)Xd#ZF=BJWP$U3S^8Xvlb?Y<2v3k6AX`FPrz#^CDak=!AsZ59L844ZL{0ZgNjDZ8 zPEY+l-1_FHpFu0N`;cpgtP1p}W`gyt98ab)96cuR08JzyoC<$u?1^;)UzMPn@{H{% zfvZy~NeL}r)pjHM7!p)0^*96aAAL)BH8hV(GSWJ6Yc${gkn^46OWtoOO8srp*hkD?v{jMn) zs{?^oha?r0x_ruC`Td&@z#>SUsrA_|KB1jh?R>#Pd|P zR`c`UrA9M!yGL6?V%|w^+vVwj$;opO?cge~-p%nmM(IqQ>qitTM6nE*g68zwq<@Fk zpn{YGHkCX;ayzccpYd1%d1mx{cq{-dFVa&d(|$~}F&nb={QYElCix#`-|$vif?X#| z!ZcL2f!_^HYD6W*E;G5Toe7;-WhEI;)u6jGDa+FIQz7GQ=0^)*6~CBH%3;%o!KQts zP?}aVeYL1x6MS1NTS_z5rvy$@?mEG@sWfGS=XM@|8=!pFz70(;^q9#_p{}9+XBwC1 zSA;I*7)5zTODfu(+32@|gBpYJityY->bN6(j>`%^GgAirfoKp?X;ZA z9`RhoJbPgT#t!ztvz%=I<2~>!1<&ow^IX&qhG#;XP1T=MGB&29E=*KlIGyyD!(}LI z?_{HLnfgjnzfht0buzzEd#69Dv{L__lwYyRkFCt_OK7Z{bna1i8&d+GO|CoTHz+?w za@k%3+t~}A$m7(&$U_`Lf*ZIp)3;}62gBxI~!PtLC;aB*^W zVO6g@$ns4GFO}w4y`l{H2ESg>_WK&gO)v7(b$}ixT%c-zQv9t<*MF&BRF%F6f2X83 z;%|96#;4OJrO(FSaQbZYmrezXg3sX(!i`4fvG~j3h|2xw(F!dET?5m&o{ObFSs9`^l>1O3q1l8vl)!UT1`=ll&^pAJK0YJ4tez|CjD&iNYKlM* zH7Y5=uens;gZ$=f=COWHekqn;RT*mosV^jTA$p8#J@fm$$g2dIN@QZ5E{3IAnY89*aK+Y3vVTbAG8bOsEGu zrli*iJ5;_l_h|jx)xstc>X}%6mZMS)G$e0tO(8q$#HZ^En&(_@-!Q-Aez7X`ouuYb znx6VihdE=^Hr9?Q&B#I*S~Wu{?vFTbI+f~E%hK%BHzg~7#1Uq(Eot1v>1WFa{J2Zh zd}QZwI^DEoRK%S;-LrM~D@i#{eI#kzlhUUojk`R3Hlll%vE1`?sZvH581QhZTQ(o~* zEBQf&bWnKj6TB z;=ngJ@Si&H2Oap&9Qe;2_(Kl-VF&&T2d-w)6Yd4PM-ngs0^UXkzR7_<>cAg!;Ey}- zCmi@@2foFDZ*|~i);0ciK#!otgZLHjewBa`5b&OM;LkYlUpw$;9r!i}{+t7U-huzd zfxqCuf9t@1=fHpOz+ZIW$`dEt3wSRjU<3rbKRfW39r$(!{;C82ivxenfxqs+-*Dgq z4*YKp{7nb`mIMF01K;Jq|KY&@>A?Txz~6J=?>q3_4*cH^{6h!+kpusa15a9g!LHPX z=7eVgUMf|42_fLA+CK??h=YEp16M8mI6forD^=8|UE*%QJIujnSOR`E^D)m)j^i^t zfu3#$yu%$hom!a~0$$L8o7I}}&jj@BO+1KS0o{sAg45BHi6P(}>A=;9cftb!?c)PYZS;N=cH z?7*iua9Uv%AIPJocz07TSq0ex33z5jxw)&q10J1UnivA!bO(Np1E1l*>ByMG5b(}* z;B-)MVhDIO4*UWKexU=u*nwZ-z-K$~S_eMIfzNf|^$vW#18;EPmpbsv95|h7o)`k& zLI>XLz%O^;tq$DmScs21;I%vGI~;hY1HZz7FLB^kIq;*E#U(9r)KA_ze#HCI^1A1OJ8tU*o{P<-l)o;I}#OZ#(d{4*U)W zey0P!%YoB*K8YdVeb0fbnYn}q0^U6i`uiOC{SN$x4&3Y}ijO+r{m4Q8V+Z~d2fo39 zKj^^KtFPmQ!LNY#kc0kV2mVV3{)hwL6(}BP3!2h0rpA3ZhiB*`pqd;p+5l9QYR<_=yfY$AO>Zz)x}Dr#kR44*WC+9&+Gn z_BFu}F`nR{AM3!!JMaPreue{|;K0vx;9qgzMGm~!ftNV&QU^ZSftNe*3I{&Lfmb?k z+BK9I(64vkRStZH1E-b6i2?n32Y#LduW{h#JMaq~_(cx<5(iE%7EcTTuhxOjao}pT zNdlvQH_t&o-+?ze@Jk)I*#RFPb--KTpl^2IEe^cZfwwvEb_c%5fpO+g9C&OTRT>5Q-46P74*VVme!m0%K?1%`wMY}^Ykr{c z#BtyUn7&H1%P9@I=Q}bbS0)J8y2qM0PNjRA-6^~T)qm>O%)iD*^o8!hCF?h%Ykv3sJQu$*=aTDP=Erfj$P9IiA!GR1C@ zjbOY$@ryll4C84Qu3Lqfm(Y?p>#FUYIEGKPa3R;tKpY zrN@8(AP}shaNxWV$+{cx zPZ^89f%O&f0RIYjpL5`Lt)|HWYBzo2BLR;W&|9|x-q99f_#ETF6U#3VVts{!o)?x| zcLUyW7NUO!yle-4yaONQz)x`CqaFAc9r%e3{7Viz(O(f^z;PmPz(4IRo*mX{!~^^* zpmrT4-U@hMP6UAjyhMLUgaI$nA8I_&A8I_&A8I_&A8Pz``br2GZ%M!i2zZJ9Q{##L zQ{&_5D(_!lOEKmy(w4&3FRCpzfQbl_ic;Ac7TA_rdVz$ZEI5(i%Dz{?!? zWCvdEz{3vQZar(VfH%cKKh=TLZmPr(@TMh#K(Ic2R_$<*E{fe z4t%}?Z*bs^4%}}2YqEfMnS-8o?+a35K z2j1bpJ01992Y!VEU*f>8bl_Jx@TCr%RtqPFfY+4>0ttB6IPhf-yxW2IIPm2T{8|UT z!hx@J;Jps~s}8)+fvcDSv;NN!Ow>$8)4*U)W{v8K?rvtysf#2=Gzw5xi=fKxF@b5eDdlK*o zhhj~Fx8BD;%UAOi{v#g`@YObjKj7o(e06#n@!8;kH5-SGlvnMjXs{9qAwp)_@h2Pj<50|@F?$bA2c&#!&_^L%x$!ngT&Dqp2#5Pc$Eukhy+=zrtD zi-W}H1)tvJ;|7KQE&-pIN%SxJ_#u3C4{-cX2y_-uGJFfbQDUE$;WPR(gum?bLAI)} zLg6M?aW*64?*LE6|MSR*QQm7zg)=euYPrJS@NskQ?Z1F0*5W_%lAz@xmk ze0)A%J*DtnKK=w><&GfwfBLww^CiHKPmRrMq%p-e2=`+1Tw%svRroc=47_Z{cLPr* z|1t+Y;>hIkL>Mn(zC-zYy~20%uh?1f?*Ttv%?_|6zi|B{?xbYzO15c*U?GAh>3hXFvn9t{a z<{wq~;XeL%#{Z!3ppUmQKJjSc^BEt%f$=*P9@`IfFXKaxNiOGb2Y#XhKMVNrc&jb5 z^~=|-4*Gk6kMfR4S9@~F(D|7s-!b^Srw{ZODf06ivef%!QHv|7H z)@Pa(*>s*Xg>Aqy^<~`O-#hS^9r&0Nlk@3t;7c8NzXN{;xRQUU7Sq&&zXLu>>`S_w zQxW`9ay+c?8NPnZO!*xS{ND;c*Qf7h{$)ADKM`N8@EV_fJ=1^Uz!#oGd@l6q7c>2X z4m|Z_qQAtaZ(#a4z?0?U65z*svGq9xO#d4P{VNXqUEmaN3qQ}<;9YPE;j#Tq)7bN_ zQh011)7SX9ryO|Nsl=zjPuB{jpXI>6tMJ%9CZmV+FH?GB>wipo8-S1UE=!RAHwtg| zQTYa3)m!@zZ@ML;^%7MSG__X_cjGw7KEjgd7fRFMzefm5dt@nrnPst_v zB|g33f1bjZ`uL@Mb+5v&@$p&A|6_&6_8F;jp>glhP;xm}0w3kA^!b>b3GXSq-^b0_ z%9TjSDDQe7r}LF5JOeyaU&j4SKRr1<)q!8^xIresi-|XXNrTA+K zU*qHJ`0DdxlgpV0e3W;KPfzC~Q~0ri{vikcm;)a+j`)Au=l_&u?@e;xS19}rpPtS} zrjRy1x%@{v@EiwT0DP2}$bYlK@ABiNGn6TuhJrat>{l`^#Wn~2Q-$B-^D*?tqTw-0 z>|-)`x5DrD>D771i1%TIn_AHG9%G7eXpm!kz^6C(dWFaKC7BVHtO-OP+kf=2N|om= zb>OclJhuOc&K0K6Ju$idw>t1M&P+~!fdg*`KFWL8PuH1zb>vqFkL_2YGlVJB0Z&#Q zuT%7~{YrYB5YBm4xGDXfXLg=UJu5k%D}ZC1!Iy{51g7x3gFdY&IiGUiqr7K)KA+>O zZz+76kJGuo6y7fKygR(uI!SaVRj4dZ&VL#3QQmKTK6C~!h2JXtMIWbgd?|c+67i3% zljLN1w*bfZfKN~7^is$yA^c?@zlQ6bWeR`Q$LUO63jY9phZkGVY4~@R5}(+)+^{ohKWzW zPcNOf8=+k{Z>O57@7gZ4d*uEG#862r2p7@S0?vvS9olF ztie-I!QJ7-*3%mMuTywz{jI^DP=x_RX3FGerPnIv4XD7$M1bmctqR&U2cM4uNDO|6vB-ZLYQ+)qh;ivla zbp9xX3#KRMf3*YO3j7W)wtl!pv+)Y62-m9z3Cdgh0pi- zn>_k9aC6P1>g#bu-{{kSiEsX0;jw)s=Gmh!pm<~ZN{(mxvlPC-=VR#SD!kdpi<$oW z3UBdo<2T+0Zk}aQ^_6vDa{N@_$9t_lADD*NfzUmT$G&u3gE|k zvDMY6wp4gd;fsC#M*d?iPR=JE`0?HnpC0N};cE(C>fM*U>n)KGM?M*4P=TZD|}+*V5ueE;xJaoaW}XXklx8WNv-5wy`OcJHM%UPHj^p z+T2*tadvfXBs6wz{k+=trf8(2wYH_DzO~})>PRTRF49^*zrHgPZLMvLwpDbLsn9s1 zYU<2LbwQ+Y#?+a)kui;Jt+iu9`Qu_yjpKO6wzWj+n(;E(`ni!gwQcp|TkD(Z@m;oP zOiOKRbWCXcn7ZbLZPAw2=9V#eh55vxIyycQsq5?vg+h6Frm-&47Hw@@IKQHm|A^0%ThQ#CQ2wTQeHWIQgLM@a&{y%u47^Cg8H_y z*nOduLLHq>a$ReEZM33u;@+s+1=4q2{*53!}B2D#>M44ON#m z#3eJ&8&g@5Kc4=ME2O_6{i9$k{U}toL%HMBosj+&%GbXXMJUAgPS;>aedQ^Jp}Ye9 zOFx&V`RD1!^YjCG`f+q#DeluXn6Dqm=U;NgHa0JGn?_k#d~Bg{^__L~E%cBnfra(0t<9~G#)b2m@#oU| zIwZT=jRa8ywfCqpz6t=a`iKu%O)p-$eQt=rO%g|6BoLiHo zg_ldp;dJ8QD)#Y=L%D5r%`Nb5Em7?<_eMg+U&vS;9k)muK%%FHH>qoHZ6nJeThUqL zh$J^o4`Y=c5DipRU5p==#EiEs+Dy%ggA`$C97kB&)>hw2e)eERWRzFi6g@~$@Gl6GY!2+PJVC z-GzhVrb79wy4t$S+M@LbD^;QKI+|$nd@5LVs{a#9kg0EyH%0footr1Mb)cDt_MUmn z^!B?Ey$?w_0I}^u+V(kDLZSKfaCGSX!l6?GDq0v_+=Avd+H`ws3WHDL{|+fibIFLf zQ$Bt2Z(`Kp-Bc*p@}K7MXv8%ACZnzLdr($N@gXj~ZS zXl{*j^hw5Q#y7Urk&%^kTpBa6m=O)SClo5wevL$l%)uzn+}hTI)jIYYMQshuXdR(7CJL+2xP9h7qrJ}kK2er|_>O|V4lRc0b#{EY0E$Ulqn`A758=)XST{>$_ zYyG@2k;wec&InriZOscYjuBlPS(J;6nRy;}Z3h(*4cqyg3jHw^HJX=f?4&fV0vS}) zrMh;Q*|0D)E^;8!!VLGFRa|eJQ|K#YAJQ1d$EZ+(`>j36q->CiOU5g4lw`0S){rUX z^_>{%j?8IluDi_9^*OzzJsMe1zkrEkZFL}vDmP7)Z#{@@dhR@^Xbx&GWvs3%>Y5kK zX+6ytOPE^YBTkyRjHIMOUGtF-8?*Jm|_UFQgOD);up7 z;cneQ%oo!?#wK7ua{g`tsj7*E@`MeIP~Bybx`xXl^Dqlb5j#tQYxX5^3|x1oNL>f2WfIp* zN>WN)vc>6nkYXj{<<{2z+S#WzarT?>-Zd8o&z?Mp(})Ji{s1seG*`?+eOjx0ufnD#oi<6HvF$Y+0GG9fwpgH;B6 z;rHmY_gXheEy$1Kz$j=BaU6In%`+|FHjM2!W{CDYfEOz=`#b)8kVo|L%v@q@mb9h0 z1>H_s*+Q#BW_cZTZPY@+mu_7o=s7Q6k1Ol7TY622UM{5;FpTB3Oti+Tc44$Fl&eY9 zu;BhRd_uWs`CuHZskW}ZY{3FFY!)c_7GR}Wq^+X`OSPi&sExCK?DN|?u###wt$OY*SW`UX8pp05^bx3#FrYBQ$ND#?&oB3sdcW#M}9WJ22`Pp`U+%xkKh zuUB9v8-#-=Q-dXH^e!QJ@v|nPZ0zIO?L1oKjzLK@i=y>tD$#mZUbKxldRliIQEenO zjHr7?BC=3xZ3iB0ZmpePKMspk8m~Z8DCWck<=(GBbQSu&=MY!$g$xBEeF38G?b5K z?7YUNCRj2p87w;+!*=r*wyT{7*nqIGxpe_HNT``oTAE#j7HRc3Jh%Wu$Y`9>NMByA zKhjsfaDKEwFSTatO)#2$)L21XZBt!)6IHTv%=)C{8w`@Favx(moo3Wgt0UjrE^EV{ zg@&YDVeApi&=4_3Jm=5?>JHZiiA&3{uA_P^{jY+bKnV-c&Imk;h34}sW>Pzy90+d6 zY7rYsW`=M}tV~TZ*%KO%dAfyd^N>psbU7Aa<-w$}YSRe3M+Y{7koeA>Bpp;`%bg@0 zv`8A(A$lKp9;|qm{y+Om5 z-t;wuO%A%;nicZ?V3YQ+v1C_A^IK{gTPqeUP&-D*2fI{F_k^(f!K0%3Q+dp(N@_-N zd+U^>w9&;SsoDgS%(P8v4?rvxsNo#?n1g~hCrM)i_0Q>%NsVYm(@HF~FBYikE~dzY zq+={{K6Yj{P%T9pddQ!E$24xfn3AmUvPGZTm^q!QWsIRGmihgP8NT4Z6f=4Rd(~Vc zc~lZ-phKdasMo!g?oCDiKs z)NszH$>&cW9&U2iL(ZMJWolB}*=%w?N6OW;D0TisSBlz?~oh~O^c(_0f6JT-2V3kZu5bN9OYOyJRdM34X zv{4|bx=+uQV(>E#X_9moLIq9D&6l;)#{4GgUXq*Ji;lxSS&UI9^<1$kIC(nu%?LyJ zwR5p&aY1bztq`1BubMA|R(b-{vhi(^miC2pdtPf88fSFagdK;fqKI`n2j`v9b)q2} z)89D|#VAxDSw_%to_~PUmy~f?sGxBn^@C}%3&siB+AvHu_yUrr%zhzO=;}cPUc^2_ zjUXiNa1B1v(0HvnHEi+UiIE538W%34orBb;+;a*CT?Y0k!h@8#T*a6Hg~6stvO7o; zv+19Mj?m!EEH9+Z491O4DVn0%t1H$?bWunZ06YE}7>HKKqo89z$FeLc%c~DTq9l*) zlM8o>wDip*OOMGxVMqzc+6`worMk>m7^g)}RIW%dW4Ae*XIPq~OvJZRl(X%*iC zA}9uXsF`6r&Vk^mD-yOhvFFg5A#|OrQaHCcg4R^y{Dq3e*a)%kSC^0DBc+mWla7s) z?eAhQ>L(@fnfvBfO7huf$r%lrj==a(h(_@bZVYV)JqGG1AKWywAM_Y%5yM`Z)jsd@ zE~8az)b^d_Z-^A@V&uqz=$D7~esx-Cyc&>@TMKl_wHBeo&7#ZIDb5j#!45Fz@$nG) z1Qs>D;O_YiHZr5JJ@+pM8w*vTb7>Qr!#S$q094q#6)<`Ak-w6O)QusEcJ>3^etKasD`r9!>xcTAAb><(N%& zSn!}V&7KRL7EHlkcCcdMy_ag{S;k@90EX;8?L4>;j+R+Gr`|L$%&hQ%H$K+6d$4rS zI_Islem_ZSB-RcZ{1iNE-JXF@?&b!aDn8yq9Spp(P}45m)U{c>$L zv)UM)zaX4i_Ws)A_)|*I?ZEyST4Pu{r*Tn;RwUKY41!v0st$uv4;!9I_TKVBdW-|q z$HlW3q=u{MN!tfp#_`)Dk>Qji(!JWP5Es*+n8fQdFBFL^TF{tOr}i>^%A`G{V-On_ zVtkDf59XMKZ)yLP$Si%smfMo6dk?C0nMlH7Z>)|JC21e*#Kj3M?}S?i$_^43W5`Fz zZ#1#z{MnC@2BDh+&s!~*YiY;O`=Z9yXnU<*Az_U&1-ZzVDK`2wf6m>Ar=xsB-QttSS*k?8?>QCu6` zyxEKB>Fp^7|E}OqZ(A|Ac~cJYSt$6JH`x%Mp9=cJi4cMC2L*nWz<(z2l>(RPHE(bs zK0g=qPYC*j0>?}4RiN8a&d)PWd>#_?;{`pvwa%osTF^f%=r0twOz&j^m+3X{KeF|+ z^^lmHGT#4Toakk|e-pTj_hW&}c!%=)R_u6>7r4}ak-&c;(pxQXsppjfmv(ZSz$N|N z0{^<;KaAg#LUKy_e8%l^aRuXG;eCjY$*(sL!w&@FBjwr6IMFW>`Fj+#z<(+5e>?D@{GK0@NAgb>xa5C=z$N`D0+;mVhf`{GdS$x4k`cpS6mm`$ zc(KsW6#|#}^=rmY20Q78-*M2N6^z9z`II~G#r)D2($7R8&z}V@`DA`Z^S9+W?6a|W zB_DckIt82mi2~m!^fN}_(hlnxx8q$V=wO8!+*8|e@92FTW|X`79Io-tg%b^rs5`^wu}S z|5$-b{h#5$UHRgo$Ls1;u=RGi!0D~(MxL(;T;|Jn1TN{@1TN{>J*fPZ{#>S)-ePFt z9nE|wzitw^Nf+TVzb+N@Hw*f2FmC6gdA}#&vK)O+&`bZYukz;zd8C|py_5C&g{m&trQ(UHH?9r!B7$!=vk0k2(C!7fLpJlgopOmFkKh}+31 z65a%(bX?DI(1#ee`5XUWa^PdRKC`IPW`#|ru_0v|2nm45OR zf&WU-OF8cr_&I|A(*iesnDq0Ez~>5jDZlg&QvMP_FZDTvanh&M+gBa*Ul;UJ|GyNt z)Wc$7Z&Gh}3;Y_9F7t+LN^g(A&HGzPPN}ztgq=%0oA+fCAE{6C24%vfJ^We7Bjf$6 zz@`4*61dd=Fvv`S_{(&SbKoNsbz*tRcHqkxCq0}e^mDd@-c^oFyu?SgTj)0h`j+{7 zfkHJd{r?iiDZSFqcMDwVXK%{a^CDfNMZB`TB+J)t1-&d^-xv7*hVmu#_En)DSsuS8 z(kt`jUV+Pe`L)2MetLy{N`3xB;ERQRej)Iy1^zhWWDioGzY@6A|8E2zS?**xl6E4? zk&O3Wf{!eB{}H&ftD_+^1+qh#uE`F3jH32Dy4?YurafQCIPv*|&_l7ne=l(J=5nH! z{e@N$udHXUaNrHxmLNULa^1l=@t6Jjs|Ef?AG> zHSFW(@^2p2@^SM%U{fy`KF06MbWyyu%*WV?p|58=o4*a-$iGKhxM`o|Sor1q`&0{W z=ij*&zLQ{PvT*a>^im6djemzNyny31^^wuTM8>Nudecvy zY2ml=?-~maGau7FH2fphf_ikYCr`&;`%tpKP7cbKBoy>@+lLz5XC7(qO{852R{?7Gy^VLqZX3d8A*G{w=D>6XNA}7hZJGkEMhn&{v!vcHol)F6Rep1TN*dSm3)wIl4*Ul8>y{HVXO& z1-<0+lE6O@^nVe!lA= zRN(&*>6Ly`#(Nw40m=p%lQi|?cZ7eC{kS_xcm#?@#yiWA@1~tk^eNDl;eQh`L9lV@ zH)OuJ^z&WKCPAOyVVu%+g-F)}g8on;&+l1&qF*BDZvYJil2g*(EpVyN#~CL+R|-DA z6ZDc#fEXhXyivZJi@<-#^nl{Zwe&wS-{pE6neQVUdi#OV$NyoRzUX841cm*}c#mV8XlZQ0(0@tb zbkD?FA^6C6XA4~BZ>Qk1Oz`g#xa9vG!AJ7{e*%~Cza{V^aBbwzBE=xkmy{>UIK@dH zL;pQNFZuse(02>@&A5T#WAyW?;3MTfO0>fz|5F$zK0Si}=>n&FhX1*OkL15X;FA9> zg3ofn|4xBR{!a)#lK=Yxm;4VG?Fxx6bl~4};7j|g1y?-023!(S7) z)SGNaNq-CRR3KTl44;=6m-8>%asL&@M-VZB zq5lixa{gsI?wfX)oPQyFC(~!+nu6i;cg9C+*vJ3Lc#eg?&-kepei17`&cAF2%|_Nk zzC~~JBj;a;eht&h`4_@z?FEG*^*1Je3*)60ZpN3x7TyBeqEM;7{PZ5f{XIGVvK=(X zF+S6xpUZsY{0q^4iRtD13*o0QJ{#8*NbK$SoW}TETvIUk>5MmM*vH2+-elnu7;mxg zvlx$BcnRa37GBQyl@>mg@h%IW&UlZ7S2MoS!p->IDht1m=~r8Lgz=j!ypHiT7CxWx zTP^%l&aa~wCv#l|WgEZuWe2`O;L@MmBXH@5w+j3-qMm(T;M+yK{}Q-t&u?O!?BR8M zjGX@#^t%L~<2ZekF6qa{IPfza_!@x+g#1rA@JtdAf#Q|)MGpKj#%X-=bAtb3L4TCM z*9%}&UWCd9r#8EzRQ8jaY(6$D$(AMc#i}B zzQCp3z9MjG=R-vMLDElf;2#QH*0V!Jz5g=u&e(H?z+Lt1U!iZg?}GGC*-!XQEO#1# z2nMIV0fpiE%g1kJ`b-O7%lHTjzl-rK3tz|hNDDXf(AgGl?0B?=pUQTYW8n`n|5Gje zVa9VUd?Vxe7XCQn1s1-R%g;m$f12rwEPNZ|r564I<6#Sbk?~3k{}ba?7QUVFnHK&U z<24q(gYkLZpND|{3FI&EWCirZPda|`RTOq-JI`NTKI4- zKV24{$#{>2k6?VIg=aCo%ECu7zS_dG8NbQGM>D?0!gCnE)xu9@e65A&GJcnZ=QF;} z!V4I`&%!4%zTU#kKG+8=yp-u5wD2(F4_kO8;~Oo!it)!Sd?w>tExd;Dr!Cy<6WC_q zvzh({3!lsQix%F%_@6AiiSg|g-op5679M4MhlO`C{-%Xr$@ne{?_&I23-4ikw}qSW z`j0GpIF~Pv{kQSwtC`Ob3%`l+Gz(wD_;3rqmGMjqU(2`|Z#41V#dwxQzmD;d7JeV& z*%rQ@@zECk0OL6p{vhL~-D>1{nDJbTek0@g7XCQn1s1-QakK8s@PC@|B8z?-; zVt&r1r!_MaY+Rl*Ao=`3v>PR!LJXLXY+qG6@NWxTw!1b7T=FsPMiO@=(rDUOyP2MF z`WSz7G?z2FEyqtn0+;=W8iC7p-4cOI`fh>CcHLyeM}gvPg+NBmPK9b2Nlt@*n{k`| zH3xn?=P&gyjz(S>KBqBm>){+>4^j{F1uoNdgM&Kk4Vd#yW$ayF!zv)lee9SsYo6lE8xsZHrame$1 z#%(^oa`5@Bz@>iVIsvI4xsFBZ`CL*w0)1tHr_oy-<92#4XWW+aM!`p>_cnn`Ie+Eg zZ`Rk@{67?YB>!VXxs!Hvg1}{YEEKpb*Vig7Xgx?d-w?Ren<;lBmZUfSnQ%EC@|>`L zNk54aia_*|zg&kY>1hoH1v}m!3tY~3{8`|VKh2pMK2mRa!mgx#<_lcXHw#?q`Bcqb z$w_OBja|(axa_~1b>DWnUKjL|j~qvmd`x?Z_(*($L;rHUuGG&1f?nd!3S9Cx^Ko{( zaz0Mx;{>69iO(0fjQ4VZ%Y3O7`WY$oZ1zvt`ZV*BRIa}u=uP{9qM?uRho;>{d}O(k z>z}1P$ofU5%gn>t@!rY$wBvn3=vl`571o2z=WNDpJ}r#f@?S4-skb`>F6F1SvJ~ui z|IIjk(Z}eGcv7(AJ%w?bkEwTTJ{LRqTqkfT=e+`#en8e2(yl&F0G2>x=M^8tZN`o{z==|>B{E#*Ihaa*5e-L69$8N1`kA7v_F#AWjFB9Y#2W+4*RpXR}_2WRdbbB=|^qo)EZ{ z=XJ)3N1sUV+X9#TGkLuOrAzWZTHuoZm5duXjXqx#^wO?Q8V1G)c6tjLH+)RKU&y#E z&k~E?#CuqJa{ixZ+~z-lahv}P2cJ0(K0OXT*9lzu?HdIy_4y-#OMCvgz-7H~@^GDA zl3%t5@&qpFHMO>>_weI$qTJFw(huS9vA0robEl%&p*ug5d4<=l^z$k+^_T`$3yh8o%}VH*XHw0flEGj2wd(1 zlKTy%pWGqnrN7-JaLLE)7bAHjAKA`#`Ai>T-DQ|X!TH`C}Bbfv$1Jj}pw3!lq; zGA(=?(~q$5nT%&y_(sM@T6mQCXIpqDJn6D|Bo#)~Z6<90x)g}=+?C~V=o8LzbPyIB4z3*XK0&b09Rn7+os)0qAu3m?w- zYzxn1e6EF$V7$S?H*&m97XCQnEf&6&@u-D=#Q0c&)7Z6XM{Q%A%EgH&I|l#6ftzt= zoBjyl2mXp{!)J^GH{&YAN1hW>O#lKtMxRQ~M>#Gk<@^TI)0dp5drIJv{tbak`nl}a z>9!olkn_|Mm;Ey7f9_{KB)dF+{^tUxdr#v-!K|C3c%{EJ>*ENQesa5zQ~I}m3S9cP zG|}#p^v4KX(w`u3mp}XuWZEeFEPkrIB0Qh#2{vmVH~xA!5hIWeh~A6?W)g^CaI;=k z`a_~0NdySe9}-@`xb%mF|B2>x&HSFU(q;P~B{pI7^89&v+-()_y7M{)W zNPkH3Jj}TChlIb#xb%mF-^Y3`!ZigWzp3X+HSFUL@b9pNKgho;E!?a-t+Mc3mS?7g zk6>K-Ly~hV(@B3wxUuuueBa1#{LWkpe}R8DSa=S{+hpOVGTvh0t66VR3pe^~;C!QO z%@KZ&+DH^sb_@JBj8k+pW^Vjj4aZOP^1L-U{w&)?OIR+Vm*u@%;Ih2;30#(6*!P)d5Ip~Yo-xIy87nTZK z`t#cbF8%qx(!cT$bGp35pt;F5yoXni(%royZ?_AED>(U2XvAn!JJgdQ1&<7kbJwM*Ppuzv6 z!G|Y92C&Ha%wsq&Z@UJ6T!Vk1!OufL%6JGE5o^-f3bYHo^Kh>^$b3&-w#~R2!?Y#4uq8blro&pm+BbK?V9S%wrs<(m-SEFhrU6474>rpLU<7Y)Gb2z(UcFlErb_Q{~V6_ z!XomYP2&`wZ=l^I8h7}7199;lpWVo%KOgZPUz&v9NqW*Hyo2%|CE?;dz6=TfijEVR z5?)67`FsO)itBHDzJYiF`OPWilTLW9gnvc(yCi%!;RO;d-s3BjaPxp`v(1)p@g5(a zZ*c$f`3B;{$ZsW5J}HEkN%(NWDraV^Hmc556XYFgp2zqcS`tr>PMXto=W=H zNch*3|5^$EYKRFuB;o5x|2hdzBD?D)d>9?)Hb}UQ@TVkPJm=pf;o>>}jS_xzk_mK6 zxQ%qaD&Z$k`W^`v{@)_u;yM4V5-y(ee_z7IbN<^Td@R}BF5wdh-yz{CG7Kw0)LI+e4fC+H--6R8f@Si9nQ?> zWR}ku8W%DDe=$8bF`Unf_;*?PJelA3=jqA3alF_M^o(M?tmjQ{=qFQN2h5-#*tNO%RMuafX8!o3piB|ISE;=3&k z65c@RS4j8@!W$*Lk?>{-7uQu7@&hKlB@fq{s_>U|-e=fqo{LIty z_xd^hfF}K)2*=@g1 zg%y{jEFb>dg?K&|?ecp3BTLWizRPg#&jV@RE&Kmy!coihOy>y<=Q?v(K3r!J!@167 z4Cn3VA)4RGdY&R2ZQj82Y-Bjs^9jp`>*-@S_s{4g$QTy1%k=~q&eK1`aGu^p^LII) zx$Jrl&nL)mp3gLz|6-YN7476&!e#&5#?p5%|NM&K+&|BhTgpf1;m?zB z{o?wP?1%e@L1AE#%k>Y!<#K(^(%;C+wTI!nTqm;YRJ>d@gv)jhWY?p3c{3Q!`^#L0 z^Yn`d$NcfxX5pV&hI5@avV6GCXBf`&{|n0p-{}zfzr%2z|2Hfjp8u)rIvCG?0^yhk z_p|sNTf}+(Zk7+v{~4Nq%Js;vBXPSq?0OFOb1lPp`d$q_i2V*MPk+%7ARHE1&utp~ zRGKKu>2oxAfZ@FT-=e|$7|wMDkL=gU^LdfsJpE@3=jl&6sy`o|K1+iy(BNH!i+UIB zZ3|1!?e5m#tw;Ck;pulVoa;Q5PDo_`pF=q6S;gA_WQOzh>0$Zs_SwSH<8Ob6a=paT zbDe{Z>DSM7PSN1MVE7O=Pq>5OJfGid@FgSEcH1@h*BX5MvFdzE8U8&uPWWLd!@16P zH260f+)XEtay`~-@NF7=7sL7dcIV;d~zZ8;0}p9(24q|0x>$QVo8) z27gt9zo)_TPf+VA(%?60@D~ZkzH%#T|F5(3qgcB&t(s#$p6lPu(&0YL2k{AXe5Gko z2*-PSxX|G`gg;36(BUG4|Bi4PCPVlmgi|*S;g1te%_M}2d4}Dv-mmj%N}nd-&k>$3 z;hP8_CE@5JTr$icWLNkxQ^Ge>K3NhzoE$Sz!r!IzP6_`T;kgoiCC$%V68;ILFOcxh z2rrcIJj!Rbgm=+AwMfEuQ9cVK{9D3HB>YFh%Ow0L%D+Ow53rj+m4pu^+$-US5+0E7 z!wGMY@S_M{A>ktkZ@KXq1DdDFR-XY=Q{Ct&!|C!D!R!jJJ%I8iA zKb!DQ2|thUH4;9F@U;?t0pSlx_=SY8lkn+;ub1$dgl~}WiwS>9!sij*CE=G5zEQ## z65cK0<%GW~;fo3Hk?ka_*#KN*d=iZ- zGX4g``8@e=4ClwM&lr9N#KrObP|TR@^5cFg!})Rc1j11+KVF=|((~iRJR^5=yv29h zgJPlr}!8@mjCI`E@Y313UwnG*gGZD&dN zI@+En;bL5HO8A%L|6B=wind)6-bLF5626hP3nlz(%73T?4c-9aTXqNErX}eXz z#eK$=5-#pDc1XCm&$vp$#eK%r5}rci?41%mobXNwPbGYfgpVYAt%TbNe@Md92wx}R z>4dMBaB=^4gM^FkzdR-3;(6&V2`?i5Z5st#uxvB__m7A9w7p%zr_r`(zasyO2p8>F;ByEU?N{JG^zhI>Y(A z>r#e~hGT`$BkCXR;%~bM{9cxx&&Nc2#`GK)^(f<%jnQtg&9t)e;6C&Z;$?&<5kcU> z&%-2KwEGkZ@1pJD626kQQzg8Swns|%7}~Z=_;}h*lkgR^oi5?$(e@|_pG4ak5`F<~ zXG-{mw4Ej4qP{0e_)OY%O8CXJoh#wuyvQZtm(g~CgfFD+LJ2RY?b#B(n6`@~yoR7hI6n{iIm40jDs8W!5cB8r`NtW~=jSgl zoS&zBz;NClcQKrwH`TEIaT4o~{QD$4AKssM|NRrohxgNeYjE*C3YM3r=fA_n$E(}X zS+HPwj{il2<8SKWg269Yz5J8m7#04kCTWGCw!zy3+dSg`*5)v|NC|Rf$%g5UrRV2Co%t7l#Y*+ zh>Q0#`8bI<);%tKoJ4#q;e4D#ywpq{_S_xfVm{%d{a8%I*VA^cgxAtGA15)rpKv}- zA}+=qK29Qj1*PZXB;r>S&c{i_n+WIQB;wZ+UP7VJAEfOv3BQ51DDRFI z6IgmNPRRLhVCl11dU1Xrrx(vpBJN=6i&?#M|6?2%OwV!rO?F(+4;M54<8Kz@g6Vm^ z;IrAd$oP30Jdbe9KO5qrexKH){|m!oX;(i`dMpO6D`3TCe-sD{2E4r;!f^ik;72kX zpD7hOk7GFZ+er-H&C*X{I8T2O!@1o{7|zpQ#&Dj$_#QRx{)X8V&jlmS^J!rDaJ-S> z+&}FM=Q?j;IQI|#t~Jm9*DO8P&wodf>;FAV&-IAkm&DyXz4(1e#CdvptkP%;cS4^M z^_T|faKZHFvUVtrzlh^pPNbiJiD5w;+qS^ZH_*s-)xgGqi7fr+EIof8^BWD$zjw{^ zITeM#f&s_r@dN|MdsRZGIFH2i_?xE!uZK7;GA@3f0dbrwiuA8idhEZs4F5OF=USG( z6ElEC&VMLX4B}k>6NJm-PXj%VD&w!Q=T!Olu$kdJ|92VA+q3w6Ow1q0C{fL zyjkDVv$alD!Gk@2@#{`@%m1;hDqmX9a=I6Hxri?^%u z8P1Qh{JJ7PPAy>R`EheO!})RZIl?jE$K@AUdVX9M^EbI3ds%uu4jjnpmzRsbAIIB2 zo+IOe`SWt!YoI26F{`hm8D7NjWDPE^Ct?0PJ)akG`~sE__8rl#Dm6IoFFc=5SbC06 z*5FMV{A9w>-FeW)gr0Kdf9{`$H8}rH5I!z1w2?Qce0r8a*DCUR-BJJ!0;J`qJ?qEQlAg^ae<{F8@lFp66fA zaGw7{hV%UKSu&MB7qj$YKk6)FIL}9?vzn#nI%^rubz1dM&$vV3%Y zNFqnb^~lrvSw37R$9X=y9(g{^)VI(i&*#?+w=+EfW;cW3JpU|)x3GMi48ND*T<0qc z=Q@AGaIRB~b(poC<J$*-`T*Td_V+vWLZG5w7!A1A}_VK~?M7Q?yD2N=$Eu4A}PC->WpEIrr1 zh2dN$*W+UPA7tqZ8U6=`moS{?Q^D}tSb8tR-)49N!+*>0MutDaaPCi^rX4O~>A62^ z8E$9!dl}CCscVOeS$fLG=+_HjL;U`PjCa#{nv6R|foKPg4}XBQT_j}qrJC{Fua7NpT_L+`t`H)jV%3AhIcT$jp3aPZ)Ny8hLO;n zF+9NVE{1>3@E(R2GkhDvzhihG!yjWf!8Y{s0#+|6Ed6|j+Zir?V;7+ehF`+cI~k7W zr(!8&_*|x^M1u<+>a50pw20wS;6ex2kLgP&Js30(@?1=Q@ zK30~LPZ1`7#cBLE#|O-(m2j7YZy>x-!gml}B;hIKyAla^5?&$U;@IYu@J>qKAmQDF zH%fRP;jI#Gr#cpXMcG(hye5UqYBMm}o8bq-J0*Mr;cF#)2jK)8`P4}m?nAp*kw)CM z<3CssqD#)kcBb*)#FHqFfs5fo8NPtw;#vVh!k?HweL}-X*=+nb^G~5T2Eq@Ro<2cg z>=pNG5Es`LaK~0-ubIzL6vtpE!&4b@X834^zt8XthW9aC zJX4IjhoC@MFc576w{saj9sycJf5P2a0)$Y^B@jQG;o@2f;u9I(No^Q$@oX~gPR0vk zupoXp{-Y(0;Z6ZUcqYSh7@o^;Ophxr;{6ZII@dtVe{PmOkKy7u4UyhS`&P2_qVM3Y zH4MLy(qiyF!wVRmLid|6fAI`8?k-?B?h}jno)u!^*=pR^C8cjf5Ek+Kt(acC^MSbd z{Q|`2B0$SX8Y~bO&o<*O@jI=E&qsikY?fY(6}YQ};h26Mr4KN?m@o{kWOxa~#dprp zE~f9Ked0Tvh~wHrxcF`^VjjXU_<`kL&Tw%bO{6cRed%<*g1ERwjk_ESUrcE+;J?R* z=|w&ZSbFh}1E%*dTs(V@_zH$&dMARgi0>Ao9>hidYgl?8CZy$IhKpxHaTos%7^Zh3 z2+LNM9&wTXPKJwX{sw^#9;in=tBLqQ48Pn+X#TS^9Mg;ZGbOx)IO2DHF#oFv!{8#8 zUOc0Ucm=~Ty~tnu?v2Q&1QWy3!O}OGknw*b!&?~s8pD6V@F5488<>A9!w+G28^d!M zjvR4bF^%CXS^AX>H_}r(zJ=kKK7}~1GW>d$&sz+~^x{}6zVC~9cd+z_(IfzIOfQbL z3mASAOYdPgrWeQB)eK+7(%-{yOmC-sI~jf}OaC8+WBN4OH}YUJf;v|dhQY}U$MhMr z&&hC1?2G8>rmv)Z-3IHrG;_C3V#wJiM(hCj&gq(jUN z)c+8}GZ_9mhBq>N9mDTrxX^;Tvko;AVg8SqQR9Cn!#6N|J;R@5_@5b$<$amOBtKAquDGkguhyBNNm;mKgIC3 z8U6ypQGW&LPdUO&g!yk}>5pMJre8(rOBntxOJB)wOn*P6?_l`*Ed4JTj_JkobK4pI zH^d3#cb2}H;U6=+o#B{IJ{p3hi{U#=$oT&f!!f7y zGZE51Go!};;~0+V#d8v64ByGpS2G;bzd?G|F#Mk^{SJorG5kx0V?Ow-4=&<6ez^HB z12O;Q(8(m?n7)M0Lsl~UE0+EihGY6`DE&5u?_%jcWjLn)HKk9d2Q1L8c*YoM4u)fT z@mzZY!;vGdt6#%#OfSB(-OcbH02j*}49E21IrWjLW(v$(oI7LmWQJqzJQtpNjLAg1Ni6+|49D~zliezYAI#EkVE7>nf0p5x&)oe@dpj7O z!qR7rF!!S#e2+;iISj{q#CcZ*!;fO=mogmF|C#KrV|Xe{{{+J^edzb+jx`ma9$XuT zn%jpk9Md~#9$3Wi5iEZq^F+KI3M3)bP;EPXD+#kDd_SHy7fEh)tBWVn;%vxVW4 z7@l+zvP`@9+)-#5?O$FUa4)ot_6K}sSRrCQPnCOgz|#=0jV^Ns+_upR{eGJPjIOJx zs$Al!T0XjX-t=(`Yis?1@nxQXyRynL&hITQt*xsGc*=?wy8WIBWgf_{c6r`1qFQG} z8q4;1ipky>ug6zaTmS!0Xy^6~(4WR@2DJc~RH z#Q~qYGT_gz2i!5fyt1YYaDTw<3lvvX1|pRXjJd=XGo!Ai9t-NJDa(V}#%k@aym%H+ zWhkLV8Y(k6e7*EA^`~4nY0E(T^;_k&f>@{-O&K zTESytvYgn$kDhM&NVPDQ=Jb)Wk)xg&|*8Xj44U+!n*Qu z=-9^OBC!*Ty%|hwQOAcB6(<-GbG>*@F!bgUTg(izn2YPGy@@TL%1}a!HfD@jG%*P- zt*r@E*3@|tTFj_M6Ix_PCN)}j=@Ngyli(WF8B1&tCzwSH)Gop!Y$=?KCA2~vd$AW; zP;tIEft@c_R(q?8y?FXICWD`-71#URIG@Ko%9FUfyxcL7WlNk1tHtRb{>F@llj2Ho z9*PC_RC{UyZk)g8*T=JbakXi+z?SRJ;aKE>8Ih;T1M}d#nNw#4vIEP#p5n@y@>=<9 zHO}=KgK4Y9-*?}~AS&WQin=Qeh?aqOP;Lfx_|PS){%aX~Zyo#Y4b!l3{lsdiE%%C_ zSjeAfXJE=Sp{&yHtu>EDmaETl$+$I5`TCoLW1lZ3(jlmIVkX|` z0F*Y{oM2!vixj5Yf$-0Sf8+*OG$pu(W0l#cP9hEk6g zXT#zKPqxSBtMwTZLHM`WQyQrC<TnKC=KzXs7>8UJm6jHp z(u(0OS(T@Mz7dDaWoOK;sBw%hrWQ)s&)~awHQ?q7e6a9jEjpE z`Nqq;;aTs^v2h$5LL(sDuk*Q!7gp7lF2SqhidH@VR%KUG6OE^3x>RD!DdO&J!%als0y|A5?6a#lfGJf+z%fJbd1i@9w!xjGWIU0 zy|5XFTvaus9Y(B5R#Zp4PSuPH+H(HZPXfcLH6DIeWEdA0EAo{~|5HzdW5`XXoNM^h8g;_2&2lJpNrzci%RiqoiRYF&#l3^p!{LXveLeJZ|Z% z;emqK+P+>nv!IMz3e&8 zXfjY1cn@?|4s0lDWI!!Plv_Jb(_M=Sn{rMbgHOkfEmqzFR?ML-W*VV34ws3;^ylSG z@Oc6izS{akTz=n+DY;~HZ6UGclZ}eW^Ekr;^h60h`V9}Xglk_mbLwnOCC5zGSZ6~K zJ!X&Bd-YGBD|(RGhJRW{8dVnBZsY_sUcF*(IY;P@L(_@0m)QOh&7NGw_;nJimiN|E z6nRVvJ)9z8D0ztKq6y zzyl7$8^QkN@Ip;PF}zEHj|CRvdn9?)(HxaHyV1*>X_nb|v=*K?)fYFGk=SBp(bZ+~ z8i8jz;A;bVg^qDX3TmV7ni!r3-}n5Zm%(D~W>TvXPsrBCx%DXWk6s3Aej01mgD8Re zT^Tk|>~rqyrm;hD))zVF?*Bpyoco#c^-LJ_9GS(_ipwjjs$g)$4_o9-&n_-rR8v=6 z+R)&bP+VM7>#KIdPJDJ5$A-dLnZ>il1F;(B#hLPyY2eI8uRx29FssyERa#dC;~IQO zhu%^xG)6c$J1V9@4*I4i>OmmUhUr2;=!G=atP*HC?hYS|?{m1J;Z?i+OZ<6-6&2Ku z<4`bd-jQeU%zNXZqAUHzdnVPM>V^1$qk7%3aB*JV?BZGD@UIXi6mTGPU^9Ut!GltZ z@@M0<6r5?m4nFIjol!j70lT6;Q#`O*qF3&|&ur)|2=ETNDdKcA;v6Rt78762&=qrR z1_S%blDJl{upCkDm| zTj3{e= zLz@-I^tvm3`PJ3N^FO2tMXT4Jnq3SE7ZxfTP1rooC<9*L)|J7y_#LJ1i893B z;9g3(5XOv!in%>p_8eP0sS+-P&~(09o`>|;rKLRfq9wx5a4&Tcd|;#kzXyqT4e)LV z$eKncAYxoIzazOU>gmW>oPxo9hrNz~11n-*y#bfYVmcMW8xuz1XTtR>>44T>kujD1 zCz`ZU(lHq|?rOMG1}CDP1~1%*#BWFXGZE}>2kN67wFQfH95;gzrHmNeEuGG1mcy4@ z)mIxc%(riiYiL!|X9eH{9M8iYjxpv{A-IkSFLdRX;{6Nb`W1azwG=&A3L|Qj)C~Ts zmHsdJ73Yf9J^R1n*qs+qMyxJs|8*5ajRy9fq1)Uj5+MmH*cz=-c+;Zp~&3h ztv`$FFZQ`>7R9}qH74R*k}(>1m%ijO)4V+(-%d1Ut8qQ3{3QEv_JL!9 zS)0Zs?tylIb>s0aJ>6)ntf|583*!~XfvS9Qk2hA+aV|Mc(PFw}Z)pGu&p6JiX8+EduL+r+*&kidN!7czs2H@GalT5yN~#rD%EbUru2msg^S@H>)xN1PQ2;8G_Zsk zkAJI^+&)mP&YIcyxqE!fhU4w(EcnqN`1suAo;-YSA>w9a#EG-DcBIKYZjOu0Ke~S` z9Z4My`dTDhpz+7~5@1B$an?R2!#wC2zbj=N`S7xEypMT%H?o(Swp0)Lvc%bGj`60` z;LVeoVu-?bpW-{sQ5%SNDQGffo0&Qj@7hEqiKl zU!U?ALm$2~f7s4=_%)^r%89d^_%e%niTUdJz7|$tF!80tiDwypvoHF9xUc04GnM#~ zImVb{J)ZKy7kbs5FOGdA(q7`rNZ%=ktN)2FU%0KrmrZmBxXxAW_6dzAN_^QI^iku`RmB0QL6ynGmsEVeSblIk;lt`) z3@5(S;s@0DPi!Q-#2TXmP+IW;vi=`YNqk|IHWOb~(X9G^@wFH~C6xI7yBEU)P-+@H zSgG;1pYW&J2cYD8H=g*?JE*PU3uVUJ$uT?uwXa7cwao!2EB$~dJVXmOz7k)#jtF}L zP)4}91}87#H&Wq;eFvbNN}B^v)(K%{72ks2`;EGNZoF!v176yJ`qj2D7Ym~UP}=Y| z71JyF`&_k3n*&f*Itb8x=m9ye)0*7N#o2xKuhOXbMtAH}D7=!>RsDJA&ibZw1F-X>YU$8wy!5eL5?O zC-)`WSTz3BFUeY$y)Tv`N+PNzQ9oH5rFa8jKBCMPnu6l{EKwz7PyyeW3Iq( zJG!PKEbYA(`>(P8)Sp_{RI4y=!GDT=kT@qQjP08ze^Lt-eQus;mhix1nI{167dkB6 z!*xWw&5$?2U+k@`DGkUjgr7uoSHbLMpG{hNqB_r!RapbSXy?UWtS_#Hmq*=;JRof^ z4#>u5_UVnHnQ%?OcyqEo4{j^ZE?$;5#si;CGS09<9XDPj;}16Lbcc-?@iHtPL@{3& z5ieW}s08g(zcHyWrp1bewa*iF#l<1`@|B;yo3_mOjoB!z$$UzQJ`Wh}LwS=k=^0%9 z?Voz{HD-roT72#|u)KI#hHW$q|M-PT+vu9wfM@iS>2uCB?*5Z4PepOL z556T}8@o30^h0NdoAz_6#S(Y_(cl7-vYl(!4FvAdlmd;7WgX^{CW%gRt3Mo0)G|p z(^&ic6=0&>icr^nHz@d>7WnTIpSRy%SkS*i!Ed#||4PAcv%t4OT3opP>n!kxDfsOc z_^As1^%nSP3jPfi_!$a*hXwvb;`8zIMhpBx1%I^#J{~J@8D$1G9KY|e(0;M3xN!cj zE%2WrK5st{0VevL2zC9hTfu+S0)GqfQ_Nx*GU zzs3T8n1cTs3;a|C|2_-+GzI^D3;Yb?^ZI+qg8!Wg`+u>(FHrE;TF_sl;6Gr2U#2KO zwrSCCM5yaO0fqf{Ebto@{H+%FD;50rEbvz=_zzm}-x>w~0}J-oDfrtg@SjrfKeWK_ zR`5Tvz~4fA-hXgR6YWNXy7seOVgF+b{5}Q$6AS$B75tqR_(@biK7M{~fj?Zq|EC4M zUBU0Oz#paH<1vNcP^hcFECqj;1%9rA|D6SXp@RRt1^xmB|3?e_3I!jJsRV~Yo&N#~ z{vZqdMg@OA3;dM|{tyfN)e8Or7Wiuv{DUp<*D3foCm}c#>iqwdf`6z5ez$_3Y=OUp z_Bf9YJuOO;GbrJ->E47 z=@$48DeRwNf&Y}k{+Sl|-3t4oE%3K0_-9$*?@;jZoGjMyW4EIG4h#Gt2SkovV=VAf z6#R)6_#+kk^DXex6?{A=jn#jd3Vx0SzEi=UVu4?v;7_%{FH-RFoI2L>mnrzuEbzSw z{tOHJ6$*Z#1%9i7e~|_LDg}S01%9W3Kg$CDAq9W71^xyFe~tzIMg{+33;Z4hAFs*8 z+Wy{G@Gr5z-=W~ov%vpK!Jlt|Z#yt@{9IsxKaBW%{&A@V{z&2{nKF#)ua{Zirz!Zw z7WktSe76ODrh>oF0)L`{UuuD$tKj1`!C2dGfr9U`z@M$)ms{X3Q1B})@XHkZS1g?W zS1I_5E!Ynz_)9GCS19<^7WmByevJkGN(J9*fxk+@f6IdZ?^N)YTCl%H!S`9^EBNPF;4e_{FIS8oc93tLJsW5t4L z`7#PNFwdXLcL3KYzbQAAwa&hj%vKeJFS*Yq`|oZI-=`_RZ2u?_uhQR0eAzFu{T2EGpZ-3I;!w{u1Jk zXIzZR_Wz^d-x{O++Jn^gJBc5y{N%+RugoPUU~w38v$t zjsL&a@DC@xRDBWs&khe*sO;N`f0C4eT>rOd_>*F^fAAq{`-Q|mH;VlR4gdNW?SHA^ zcM$)WDE8fls`Wn@qy5)3{B^{a`>X8#jAXU_M`E=9u!i3iqx};>kgEMW7o+{(X!t$E zk2e3X!^=-9`&(kP|ColqEk^q}&_Px9x5sGzc@4jh_;edC)C%SLe;W9z`Ey34*>c1@ z8RySiAr}~~jYZ%SV1lF4zbi)lYc+hE-Lw-;|GmIh>31pgzXw^$`VWQ&v{m{KAp53@ z{{M1+`niUmLVP&9ge|iFuLQnIe~Ci>-ykPhf3L>=2z!{>(1xtP@){SBl)gZS8fK7_ce|F0VRYwbjo0$KkhN2&F%BmT`2U)Dbx_$vKt75cYBUb6mI zH1=~(lnm3RtbfMQYW;=84@d-A|AoL;>EEi*{||-!7c}-a{wy~AxiAn6f}{sXI(vve zL&9bK=L27*KM7y~ac093HERr1C>2QEn=@N%qi^_vY59WJDOBy}K~4E({&tIe zNv7>QIL}nsUl*hQvVpIv|8)xg?S_KO{=1Is%l_LHqyIkA=>IlG|D6lxxvKK(__F_= z((rBRW-Xu1D;wf+`}-sCRsP$p=s!Ow{C6gt=c)9cP4*@85$9iPHGC)W8>I|n{r3W2 zr9TBoj38 zJe1qdl^VX2_)mw^Bic^`@KyS~q`!pt=>G#0`g?(I_@B~=;KvyCe=GP>!D8jFI8p6C z+v%o~hlL;t<@&1!zN-8^RDOQ^9I7aPpT_?0$i8GgqW_egq}IQV_+LmF$ol`H;dh=P z5ouF$vn>baNl>ha`IF%Lq-_OV{gW69Q@v;9Lp=dwVWM4jhEkDyF!s&6?f_250k2Ly&#OG--F7xNX zJWW;qD>Zz%{$ADaJBa^)BtWje7lE(x-`XnE(puu9|56qH%YfrF>X-eOJ=!Ej^Is?N z<@1NB#Fykp`0off&Y=Are=FJyTZh@Tz#|gyb@{b_CNGC#>e}hH7 zSt^m6&GxB=ZzucF{I?zWD*vrh`0r;5|BZuj9?K;AZ&{4~YbU*?)83 zIHRh+#u)uq2z-_QQff>~E~+YQfA~$7B-$3o<@ID=_TSqv`tJl7=T-XOjnRMY`^f*! zB474@HH@<={o7*ne+BSW{x4Gaf3(8?Z;*Z2|KqdFii+0%b6}iQ=|7wJRNbKf)AD8g zKJrgJ%bI=J|G(1kouvOIE*9eQ_?;!piQZ};v=Yg-P{}QVI2I6D?%T?6>B$(%65#{ln*8jSR zFV7z`h%d>Hn1ANOaR%+{_-mvLr2<#FyK}cH%c27@mRP3G_nXtID6`HFHd*gjjz3rkgzfag%-7 z{|j=3h44_;`8y52g!oIt=@G}T2Q>Qaq@UN{42AyBHTE~hsDB>xbF4qP{M(2>6?d{l zZhv!tKLqwWSsIKMlKu|D(f>0Q`k&C)A9aD0A#KY3PlXG-D*YM6Z<4Z+^&bIzmHus{ zpUrJ=>LaCfBI6>Q(QlOlQ5$F!#Jz*pLdF6SmXa^qVShX z*~tEX68I|rdr5x-@v;5PSLjcMaYCj4vl#U^Y50A_Ulv9GRlry2-$DAjnEuNY`ajj! zFBcUj*~hZ-<+5|t<&TxWM#J}#{b^E%lk4wSz*m)jtpu+jL%-$431nEncd{?pG_`)@~#`tQ~7`-mT{|J)6HmH%CJrl-1?{v`_ihdR~z%L|Ao z1&~G9((2qd{+k-Um+a#=oB1Nw-|N6vl|KnT)(T5E3C8wUt0;d;j#~fg(+zsWKS_>l zlZM|z{G0X*&qCJ!EbvwOd+=kiu=Eif_4^e1YbL4nFPuq4DUkJlq2YUpAMN_VXTVqK z@4}DO!jek%QGcC6|H8>?{b$c2q7<09_JbQVd?)ecdA02SM}e=>zm@ch!wBkcQ0TYi zs`dL~)L*ILHxfUZ|I2`{(r;fL>HjMf`ZsFqUpTwp$2=zc|I9pf`3s4^7;N%I_J2C? zRr<3?e+iM%|5qvWw`%M^Ifq;AkIVYM(D1v6KewN1#AN-SY4ooq{TakZ{nse;yI`J* zE|S~n(HEP<2Z%2M;Z70GCBA(A(M5d06QNxGccSn+qKsdgfv>8+Zbkj!yH4`_IUnYU zSQc4-;XI)@Je2jn5{3VQa1>=D*WV`KtMsSi%X+Zz{@<$5p9=}lgna&=y1<|t@28nD z^FP|+%lW`p+4qut{N^<-*nX~4*ng7j%l>O7`zE{pzwEyg^40$DAbyG@SoYr)8h&R< zzfB&Ks>7B7^Gw8K{enMgf6k7)etj_TRsP$JFT2CCjSQmyZczB|HjVvPJ>ho6mh8X7 zVV-{DTS$ohZK z=d&-%k9sQS|=__$vP=U2R%|?qw|4epV~=f2XnEUCBhV zsI0$Zn%e(8#2-17ks&JkKL~u4{zB3(zJrPS?@;JJ8s@3!BDw$V^oQFOTeALA4Zn~0 zFAE}tvi{3}uhPGx$+X1%kH4RhMEQt*agWCSlL5&vZOZy5&rp}Yi}>O@j3PH#|9QYy z>Cb33E%EaY{QkVG{~e9}?ec{mjsDq%YW;o0e+?6Iz{xAFg*o)Nqdx(D+*%$f9{yz%%D*dU~nwBz%i2CvS>#}~2#{NfF35(&O ztp5WIzmNFQ^uMdo?^5W;?|;ksr^0y}x=8N7gB!zji!E9IY7IYy`1c(om}V&Z|7PH; z{NF(O`Sr(#75d-N*nhk&+^*P?^?TqvNmc$X;y;f&*&^#N0lrFqpThrmEl&3T#~S<1 zL1vUiW&LhAPg3dcApWly7o)QN1;AJ7x6{PYMSN`kk1F*4MPol>rDT{kW&QbZo}|(* z_&-Y7$og}EuhL&Z`ZJjR#})b?)7T%~E*aM7uYmI;rGDanE-IY(vi?%wtMsoX{e1rZ zghKxzaDu6_fBdbn>3>$kw-f(d%$zN<{-=Pi(r*u%HNBO%*nXZ;=wDQ%)_>V;%qWY> z?dK&8zl8WtM>&3N1iniDZqnb!^gpA}f7~T%{m08U&M6;R{~a2>o%pjPg6#iWfv?iP zW2H&NIVUdY|K}9?4~Fw(Od^l}fx8S^#6L-n&8Oiv68}@OFEWz#R|8+Azwvt0QV9`J zKc0(=?vzUSD;oQY<$;gV%laqGSC`*Q{11dd;>-HS0AHnl8|hD>^H0=|b2*Wn(0@DG zm(TwT*O~@9$*u^{7GG}B*zdd9ENK_Df3*Ly!v43K^7oN_ZVThG|J-n%k5w$UAHm1( z+wev9-vZ#P{I~8l(~^*Z`d?G%e^O)rfCstN{O+K{nwCvx&G7sVA4w@|H<{gLTCRD)4r1$9Qtpw!v6ng%HRBmXMx}BhwbM*h5jWaYX5ETicSBQ8h#(~ zuQ6qWGL!q?PT;HjpZ=gptYG^8rqEyMR_pgYA2Jyhk>uDu*YF#Oe?*k=V+Zh6`a6DW zTH1y?VL|_YsL)@!P_2KJeBs2*CSv@4LBsDP{;N^iPZ#i2`n~HwFf1u%VCdhj(0@#+ zT7T8+Bv=Y4yAXQ0hVLbQ8~INVq&FYBKGe3kx;^`@na157@)pU)Kfe@*t~<4@5CChwte^M)-B-KDW#@}y~B z{Eigb->I;_KV0VqIAZ=VWE;2AA2)OD-)_<@wK>?;3tlKqfjipV-!qwr6q z_9OC<{nrG1mH)iYnUX+MJ_h+WXX#V?AV}IR7(=hknE`|Lo z$i6&(b@qx9hljHNzKg9u`v=J|ZOZ&bq| zFh$H<`_UyDei!loO!fss_Fp;hRsKuIAG?Hw&!6^F=zmUQ|0;ahUa`pfGnS~!-$?va zdw3?Y{xg8D(%*qUwh7CQgH1mAAKR$x|69nuT>q<2G4*dX>7oB}{dZ{WH_#8@^7H>B zh5fI|zTAJjr^e<#ca_?If`7UsSoYrn;H&)C`l;zZJIO%*9jws*XN~>a&xlR`Y1L}| zoy4CJMSmLbRr=R{X6oNz21frsRH1(**_Z3T?<`Y4zO%#^NsjGWjs1?#O~d^A$v795 z+uu%2`A0bm@#h>E?gY90Tn>Dd{#Me@ub+%k=>J$_|0r?cG2A>( zp~IHT>eS`86aO8_4YK}AfUnY@g+KNSOC#~o|7R)mzofCh`y$COsh0Jhw@j_ycv%lP zcbhVZ9eMvD8~7^y8xAyyE@GnoF$(>^(b&HmU$#>$vi=k5)%rV$kH6W<7uo+KfUnYT zOEQTaL`MDN6#9c2`_C1{rhh*e;4q~;|L!6F;V6zRvi=`6`a4L!IDbI>SqlBt8v7qD zh)w@T8h#(~#rdx&f~^04fUoj@#X+Y3Q;CTB&r#^lU#|Aw?n`6S|AK~ZyUgTY9cBFK z0=`OrBkAY!pYs&@$6l`1--s`pDHg~gYB_$vK{3jMhX{YS4*>+f6~oBmZ%_%}t-e*^GU`d2ITPf_UK z?@G1)G1al@Z_)6b#K+&f~F@G-4u%?#}>F+t$!Qw@i));BI~aOzDmEB z^sgfssJ~F5|L+?6Ki0*je?g;KzipYxKU~U2);|~cD*g6kv*3LE$7hjb|G%iQe|WuQ zn4Bp4Kld87emn7xC7uXm{pSN;r9Vrd|6+yyM>X~*#;D)%bG3da@!u7~DU|h(0=`Or zA?fGi|0N3j_h{^oXo$`KCp4+`+li0geC3O*e+2MV`d5?w5+Y;!U!c%`gT{W^a>+2| z16hPE!EBKIGl-A+ixv8>(AeJ)qyDco{4U~e-!HrXvj6|3 z(Vw1T61$lGg$n(PTTK7S*Pqs0Y5HIEf1v_>#TO6o5p!}7;ycKG2jS>HoD0e0$GaN) zU1a|VDPOt#KN27BP4Hza@#XZwzDWCxMt{R$rvEZ1A?jbG(0|e|)c!MGHU;jf!Vraa zX?q^=W&P<_nf{Nae-7|f{$H!mkDt^QTNV1N z75aB+^f!|IoGAKTFhHQEW&d{*KTF~Z{|R_9@Kyd#I^1kOC6o}`k5{4pcCs(`Kik!2 z{m&MLD6~u4do=osh#yV=w;KHw3jKbC{<2ne`|l+CaCvxj<3xr_`?b7z|i7)GKC4MyjKL~u4{*)sk z+Yi1HE$ctvI<@{TvVV!BSJv+(zO3JlFPp;>P5%<$tMq#n`tg-oS^v8l{Uv0-$WYP$ z&)y$3Vv~dF{=0$rqMij!*caR90bixRhxEHBA+{fUB~tK3zJJiz?;-nkVTeM(7w|(G z`>Dgt`seoXSxCVb_TSam?<4zyFYF1v*nUf6zl7|srG!}iCWU>+O11y9er~p(R$+)j z+5RZttNfpIq*;EtjBDJ#!dD6fUzGn2jr}gNpB2Uats479_+#0ybPylQkFRve_D8g< z%fFlKyNE9W!57;{0$)}B9b|tkv)`t$zf5D_*%X`qmul>H93AO@d?iNc7ykcPW51j1 zNAv$Sjs0z@k^XO2*q?sAdi=9Bo8=!a98IA-pL&A$^7xlZd{JJJjl8`c_^SHz9%Jek ze!}+Cq0m3$2DN@W*@w$hVT(O%%VxWo__F@a81-Kde3kxIh5nlr`iDUWK~Kx}*T!i7 zK;WzFcPi}PqOgC1#{Rk(?O&&{zd>OiUr7=5FY5Kk8`b6SBKzCSW*Dk9x&BgsuPT2J z+3x|HxM2JFrNaJQWM7^?cK#x^_J80_>h{+aBY&xezb!`odm8>%#7E!oMc&T4S*?F} zjQsV)m)o!HTGM~_DE0Sy;H&DdbEMh-X&PqKU#Ft}#;;PhAA755*vktKal5qb0KUq; z{dm*&gBYDc=sVZ&ntwR5Z zTh#U68l(Lqfv>9nK81aJB}V8M{+melGeiL?>>&H&CEWC?sTp_W5noDX+eCaB7kq)w zBfjK*TQ~6=P7*22Q0N!v98LL?=*Dx;a5E*gpWi9Ue;DjGYf9v3hFiy(=n}}EFS35z zmbGJgCtdhYnPsvcfkdk7&j-P7mHk2*km}+6HonOA>nm&g0e4NQ$3MFEEW6#F0jpTd zxcPs4W~Kp;8Trhahppf}Nw)1Rq{%E`PnFB%+oJP!P8@m62`(xTX z_;&%U7@q?F@Uan$=fl4XDLxfK{Pr{a*`~q2=@g#dWWfU)lu!Q1n2p3Yk6v8r!<89t@isLQM3W`@k zh_@i&&$a~qRZ+Ye!WxR#Lg=OVQV8*u5&YTw@Gn4dyp4mmV&Kn)w*>IAI>zzx?&TD} z0>Tv($IF&@=?VUfOF)ejzXn1)r9d2~);PVucnkc)L*2cwu7MT)j6)X=-*>@!H(_lM zUI%L@toINWgb;^m__JYmyPo1VK-fX?8zH=j;;SIMh2pnCxEj{mVZDQ}`yjj@R($64 zL0EfX-3jYIVf_MD__O^M{yhZi?_m8ste?R84_H5i^)p!E&xT#+53oK8>v~xGVEq!- zf5Z9}tng=h4E{Y%@eL3@LGeFB_%y6twEZlE&%wHpwqJm76UASIup8EwVSR1rTDuLzDM!*A^abT{|&+qD83EC4=Mf;gny^_ zb_hSF__ZNm ztAn=3KsXjwoT8!a@eodcHJi52hVUF%&!z42AUvPqIS@{wcrJu_6rTd2i{ckTI2G1u zv^^cd85F+=!kHAG4dEP$&xNpv;`q$Ye2QNR;bjyrfzVCyQV7c^UJl_RidRConBq$y ztfF`ggtZi33ZakU0SN10t*7k<2$#cp1#Pc@@Jd*(rtL-uuYt9Rwwobrq4>2Bwo?2$ z2!pV;)Ascc-azpiA-oCJRkVEzgtt zzA^~H!LSa2^#H;Sgb?4;#{EMfJQ&tPX!}qIlPP`}g!nw{aN0f+!lPitcdU_n421Z+ z{z%$B4#MMM#cK$-|3nB+f;A1+QwTd1!gN^iJvB@-8p5++b1PMe3Zh+D14m44HP~>;h!jc zio&NU?4s~F3O7=?iNbCQU#9R?3SXzNhr-PiZlUlk3g4#i9SZ+S;ky*RN8$fa_yL6< zQuucYKc?^#3jaaj4hlb|@G}Z`Qut2_`zZVug;g1yV zp>WXt&{1e{1rKxu8D;p|XZD=@wy$Qn+J0~~?Mx|i1&5rR4oO{YxoJs`E?3L0 zx+7gJn*%AX_H!|Z9r!Q#1gEXww2xd(-zK}--gLDMPpi*zHGMb86}-|GD0j8ISC{7s z0>8{PR^)bR(xxFN*y`rFnl`4)zcgpT^T{VPV^(133s>7Gj?G5KuC^ClZFx2jkp^Lk ztL@!_wolAG!I5d0eeZqACp022C;9OqX{}He!ml@ym3Pd-lC^!er!Zy19$5O4pPf9c zY4@POf%Cy+F4zn1=L#04y3RQgbEyLxAGm_fr1^Wcm7Dw9KA6Afqw>*0U(TGI*#+&3 zQs&G8|D+bQovLtAa`UZ_7g%+*eVyO-A5(DCZg9>EuD0h~Z9@$IfQW^zmd^{?w$)wk zYMTWPNdYz7O?8XFJ*nuPoJ&D%BPv9F;r;>r=$^?S{j-9$f0BEKgM0Sty}twel4on3 zoC0Qgf0=xOEu!Aq{?WV1^p#QGoVhs{V;PO|RfH9;$f*D1=9fT5LHjsVlMl_L?ce!r zTiRaBO@92F96XD+PqF_+po^9Apc1=zllH76>%xI0Y z=#Mu)`uaIMhzCv$1~Y)s^o=w5+E+36;GA?<^1Ux7|NLp#a=p3Dbx==!TVA>==udJc zKMt<@sO{5&wl8wQqdO);?KYirSl|d()1T}pBXCeII3};9tL|7Jq+rUAAn}e7kg&f# z(c?v-hMC-g*F?bU6{gp7F3Tx?K0lae3pR{u*;9Ami_TG?+~#`GXT*FDQ+lUSdv+$lcHsP`tmEqbUT=2y((awVNlX9B620`yl zZaEXhY=(d39ZgrH{80CiD>&KQ8!SrdeIM(U3cYqva?7iba9Ybt$t~YP#1)*Hf}Y54 z`ztuZ$g%B}-UmYEcLnFCnmsvq-8*d*szBZDw(AD&O3U!PXK+palx%py|!>$>` zU62rV2lh8pLvz9Ug`6OP5$)ZIK>y-u*%LSz#+W@NNrwOb{e1sEjJeu}-|A}H?P{w} zf))Dc+|;lXj;^pxo4oCMaY_;9BXC#KwWuIT#xV^puHbFBzwOJWFJb(h1V*Po8<_-# zr=%x8J}I@iD>?6VSJQKLM_=m=+mO&^5QGY6^DfE)#zKh?wA8k~aDppn=z%d5YQ>d- z#|9XLp$)cy$s16L(a%NpHpssqXyC~$U9fl7wBSW4`N5o|{NU}_ZC$5r-8IE+Pi|>K zZNd7A{9u0SwDx(auBJ_cTDvSVF?w&u58l$zg$W+$c0M<;=UF&&zjylcpQgI#TJ z1a9bk%N3kqcV*8=Pj0D&&bVpH@;Yj`-hWgTpTz0`u> z6#KN`JSg_eq=M`&qiUKTg`HU5X~AH+;fJ@u-Gf|BT|->$!;Z=~leyYvR0OWf&wgWB zgR3;@ns1Eaq``Jz6!o9{wwX!!ZIe>-gLpuoV!?3^Tyk*g;J|MoZQXmWQd>SWfdaGY zO{cvMDfR=WZ8Gaij8B-3%4fC{P*Qh&|M-dfvBD^?z|eworep<%prdlkE~Ck+HbN3tlQR_x9@*BAFSq;uOZ}k-%BSrQaE}@qPkyS=MzBA$%}7`F zi8GabVl4HEGeUjBJpS;0@iU`eonXhXbjnCZj%M^o=>AP4$KJ@gMeSQ-7} z;-A_-T8$!3!Xk$HhbtQf92mNqe+xUI8T})rAp2$i!K{D4 z&Oj}Ifk|e`6g?!=KYBNt^S+37FOG|fuJagmorgu&f&LcJFI?x;NA!#3;Hlo1pHyW%cK$w``_|Duwx6Jq*7EZO^*SnBgoaou1-)_M5>4Z7=6%zjXD8uitf*Zq9EX z(t*vu6}+Io491}r^G|-fFr{^FgR+2zo^;UTwBQd+Zx5yaKjja3eiCh4%scwqOZX8^ z-j8QRVP_3+*4Xr6O5I$jXdGBl3r_2DJ-ZtYug}6(3T-ugJ18*6=WqIUaNWr+m|{G; zT7t zXOzzc0~3}nyYI@Mfhtp;ByPAN&eY#N&UJE7W)sSQrkgU{eW*cH4Gz?tCvR%5fR11GYEkBu=8sxOJU0knsG z;xBajD@%+00bga!qO;E~o>p913lD?%>PiFln!2hgdrfV?zRX=!S%%Jp2zrUr||FVXyStPrkhFH2Zn>Kt-kh%=7$}mwVDrllH>#sK&^}?(;0Ft8)A7o(8Ya z?}1nuG$@_^LeV4kGAE^nw+0+_r#bQnwF=*UFIpR ztaevfV8MN?N~kPw&Xwr%3VkLZ-B|W!r{3*{T#WW0l1G%ctkSGNa0gT=)SuaWN-Nwx zcPThS5JkJHErkXmmk1KgP~q5UB?0+hr`lWP2|zpWLDTa=VPYRM1P z#KMB%Anbn0|G4wJCNI6?e;B!{rk-NYCvpkCYoaLx)*9X9OEq;VN^m++Dr?(iGFz#^GV2%Um0d6BQS z&O6GEqln*bsHW~{&QN8&`N;_$!T01cQ57CAt#(N@xT|2|0?K z{B}1O!$#t+s;aGrmIMz9ni=KhU64OLkCh+?+~V~FjLdQ9HtVU>U4!(6pw#QFs)QVj zc8O&>GqP;hQ}g zslgZ=PT*)!;qh1c!NKUC2z%fjJ3M*m3z(VVfk$1VqiwQ%mA9|dXu1OIV?S9?3LOfL zHj~B3CPu0LiuTuey|q3(CM{fUFPt$ezsPRP5ESZRA`tK`H;$Ht9$%H6oQKbn!T}lE z6fS1}^m<^(3AKuoPCp3_=tj#hOYc@>PZ=or=kFu`jM(`(fdKYLqurLm6SCl{8W;|6 zaIAD!U5<{bt@Q`aJ{u0nr4_}{66&e~{)y+AqxERpWO2Zv;Tw*K)Ylq9@Sb|{)8+Y%WK)3-w=_|i# zCS}+*O)7vB$Z(N#A5s`WtATs+;QV&AaeinRas?01ZCx-lrS~}-+?Q+n;Tb2$z%vi3 zjei<9N}ngsnx|{QE8&tkp0Zs5mkQw?VgE^73*7CPoI)pXP|Q5gH`xv$IB#-#FfXHR zGL*qg-wv1c+m3Lx7rG#`3fQ0JYKOIL7ThV>m^A;==Z$-sACL|ans-gi^V_B`vOb-H zr|5eI9eOBaI(YuQ$B;PU#`p-+yf8bJq*$Y#X zTi|<1a4mN*wCyCw8`}14Xxnp)_TqR?PF^<~lR`f;l0!VNb+*ypvi|y$x|=zUU?=Xq z51!AS0ypkj@P56~63x^3;&k)2&ntCfdoMH7w-~ralgxgl z?kKZ=1oMi_3zvE3m09Xn;{J<#eeM4@y-?}tu5;jO>geFm_METah_Y-{(>Fr{rzZdL z+4gmY4}ToA>=?s`fx}x~syhWr*ch-Ix8vY=V_x6&rZ~Es&3{~vj(+doaHGz^;Re7E z(|2Ga;>tFpg~hOsS9AZD>>E!~1m_mP^}67NDJ?Grd{82|zC6VqIHu{-L5){5z%Am% zsRiw2*QEw+bz`&hY=ML4JG#tgVw|9VGTi3r8j_#A6G!L3S+1rRpqWj!2i`?)(1z`7 zmfX&IH;DEFJE48yec;Jv`!b%kF@1yo|J(J2+D}cezQob>^(OrMQ(b0oaJvf{)6ksc zRb5Tr3|f|+hu4df|JdDrjnSrd56Vft_1SCi%Rn|rlAF|Bx4+qL&Vf4tW124i{*bx@ z9bL%UflVy@-T|~PM;Eli!GXW`zGU|QYd*2TcviQm_lJaU`@d6vqTU*f`Zun3ht*%!KGxs=@A=2jz9oO%p6K@e-(wHv zTQKCp93D=TeuZ}x0>{C`A<4Y0&~_IhVb4Pr1n=(xEWbTBZ8e$G4wJP$J+CidUC&Y5A)57xk= zIq)!KZmt$xW{qX{W*z_2uN|yI~{f9AZ2Hvn)5K@u{>-umF-Sg1{J= z^RvyIlA8|)D8CJ4wOtHPM&!b?VsJ=xbcqKA>HO4H+6PYqWWs|qe?Xzh&GX^hL2-me z-OVoC*VKewFdwqvnKc6n$7i7_aH$JUTid2)xY}OsJp>L)=6)zP6s0G*WftVso86J$ zv`IX#V|X`|Bi*0t&+q7vliFVP-CGcR6lK6uPng55$@oN%fdq!SvZvyc3zPAQp60Yv za05KjgU|N$rosKyQaA@TOJI00`Pyx;2V5{D6;f@1xY4vfeam>rt{d`)M?ODwfLJV@ z@jOtD+#c}pMzcL!Y_^BF{q4ck_I7`hmrK}_oL1V$ zNk&QW+#TD=zj_a%^9yPpQz5TVCBLnxWPfBOV>R_IGRqrtyILdKmA?aI7*EULd_AI_ zVA~Mwq&w73UNYKAA5=58lhZ%|R0Ugb{L;6V$ngWm4r3s}0i>Y4A|<)`8qs245P1Z$ zHp-X$cvnv23b;Oz+}s6NtgYrXBQ1?4ov;xaO)g-qX1>vC8ezAse>@ohpq26D_j_$G z{rX$*jyK|Xbidhta2!yKH~r;k$-)%M zqmtBq@YGa{H~){lw}FqUIurkA^2YFbI|fnm(ZDkT(6`2s#a~gUAx;C`>Oq|bwF;hoO91Tug`hTbDp=eaR9ynepEewBmDda@y%a{pTCB0{wn;$ zwR(uAQ_#SvSnhUpMtzHycuot%yklynjR+i&F^U6n>|hN&UoCXx|BU$&9?@avXvKf|{H*x@F+X1{ znxDkL`6+O_t`h$0Tf$#$TLRC^nL7h^7uHD~?7EeK+fB8n~%Q9Nk;`{vxYJyxi2LJxYJP#B>P#S|p!6yf zBWa7E9-FITL`0TtH$x97wm`ElTqSwCY0nHL5sDQ`(t+?GQ%}qmJxf@<57%$c->%jw z0@nO6`ST(9Q!ecq>X*jC)uL9veJ`3yDL4N#{GQ|MOHo58#Zl6=rJX^XLzUtm>Dhwd zQh!IN^u=>!Z_8Ixa-#zc zSC=h$Vi88I2jnZPQo95XSe^SzExRj`?O1$j9P`~ReTm$dgRzEd$`&7&pE-MlWgoD% z9GIFLvr*EP%!pGimX*EeU9U%;LqkM;nj$)+h?=ZmSU+Ohxp@smQ=_*Y;>#Nz;aOZy6mb; z17G;U7tH2q%{&4h|5V_txuW-mYVBO52y!thDq4eVpdPH~HeQNq&^*y@{S-RG1)aGL>FxWIjns{RV+YF(`eBWF%$Pv+B2se=x-r#j^P&u}+_* z#uxi=R;CMQjYV0Y6K>~6FkfIZANxDrlaQ4wbF9UFawl*{@Q$m zb5~SHF&zd$fD5p(R#mL)uOb?cyjoClITJ0K4Ms-JZmiRob943c6dQq>K2JKcH$PJ7 z-^l2@jm*)KM+o=GrqnC-Tiv~6^yy%y)M;uzl$McEOLZJ;_7taj2 zPjd>^c*CsSQomQ)$HK6;V8wtff|m~%c0MaS;t)ou%M_+CEvzQMWR08#o;RJN!GCDR zd|P*vQZO|y8p{dQGL+h~KEK?n&(Y%pyYR^46Yd`$>ymracwiUIlG&w2fm5p zKER`e(X(Or200O^K|jD-JKhp8?HByb35KZ53QTSv{Mec3*bqG|E7Z7hh&;)3&Z({e z%18T9p0e0t>U{hJXlnRMJ?6pI0%HJN<$rgi(aihC(LJh8^(VhV6oH%uD{{zR2p+zq z^L^hxK6um@vcWaM;MQO{UiNm$E~E!W{0&(4K0zZf`wyUzrMudBGXQC{l7M{}tB_rj zFIhB%XPNdnfO1b$b&Vuhxkck8Qm5V%7_S1N0!1Y1rprE!F>lK3n?PI!(V7HsBsl=OLi zI*pnmW%F@VP~JS%1hIn0_WE}_cvEEZ?lljb+|xIWC4ONwtO|DPrv)?A!XVgZcD_?) zcJ`GB0d&JZf&n8SVtF>i@MI8?gjfh7Uj;_!S7zsnWoB?weyool8)B8o3mPW!fq15D zn8*jWs{kJepG_G4xwEm)d@S`R!Nwq(&1UW6s@`-TsQ!nNDcuLIzg~xesiPZ8QihKQ z#i0oE?Dx!qUdb)06dcDC$sg7bav}+hSAA}>ci;)5bN@-P`n9oI7QT#TX-h9WoAi#~ z#nOks#K%$OlY+*ZW2M5{N6gN* zN|c#b?HVYT?=iZSmR&HFqJaW9{$#Oci)K_Q<@uB6O|t@CrE7PN2Uzwt)A>QQKt5}D zj9SA+HYy{ubge89U#^3H3dLVZuaD9P_w!&W6*qHV9BtZ6y4xjtLxJ8Wo#sgTFC={h z@i997Jrz%{4@o(%5@{$&9wRC?4a`!CxP;w{3B>I+YEE47(;z(C^rj3-%ohFgo z7dgXAEloN$LdQO*W6YMkt0DG#8rEEd9LV-V)nR`QlmqQ8(02b;8Mp71DpOlzf)X11PAC`!4 zB20UmVnsxOa}7G#4)1mH88jt@Iy8G4Lz2I{5&tfBsjlBST@{f#Mm_AOb!wqRN!34Z z3>2?RQZ&8wCe2dJ6fk^|hn^~Lck~c>w`}M33#x4OC!V{67CjTUPcfZ3LGPt4nlRFD zg|N{$oey=3keg!8`PmVLO=LLTuJLFjmBmu062_Ay(;)PL-W}q0-X9WwZ)d!Z4p-s+ z>%{K{1Lsx#pCHa(2aL7fKk1yf9~v(xf1nQ{_C{5!-$QZeBA@Bj3OwME#IzToUI<09 z1B3SDF}PU4m&G7|MJVoq41vN0r;Dqi%D;P@D!sB-aY*5S?~AjwnaH8)90mL&Wfky~-D_m0uvvhi?jYUAP#Qm(xpS&3 zg?4WN&r)S&j4V7y^PsU)$_g|Y8N)L1^K`~=gU(pppHWYFT<|gOeVXmA)(^*-r5VlH z4bApLt-yfzg`veQ&X7n&a)Jcsd0i1df-tMs;Uu7+WGAPPxj-*se(;g%zZ)X7qJBgD zR-xB(6N62W%}c79BHNZ6-Q*-k!GZ5AYiby07@2m8#P7+aP0r}=HrH>LPdL09nF{c9 zQ^V*R&p?JWQLHTxqh#%BO@J@{5SgfH>vy^RQ~43)5*!| z{6b$6k@d-s6?e$}1Z~xL|B}sai;C#-;*qB6*3=_*b3nW*p zzf>N$se-uRPcR=SruLv|KdODXbIkbsC1Z4v+cIBPP zv9k5py&ejZf+L%f_j&E3#knt5TIrXAZZm~(7EKQI*K?0KwtwsD%!3-9DikBY$4~7m z&T1h%gyH3p`tNPI!FfYjZWvm7t#CdYXt(hs)1vF~{|c^u(-REn>Gml6|2+GJbO&4` z*@}h7_AZ+RjZA3Q&@YrGanG(`!Ec?X6}~!3f`Ez#kg`vLvj?{KALS#^s(Bcj39*-O z)L!qEfFroU#u9qHioHSpI+_z2Q+{rsh3#_S&sTn6$aJfg?pi^P0T{lW1aF^&-d9Ax zy5hD98ji{#68x(wkU&`KvFsOwokFxmqCD#aB2|~vFoL+nzh7}_vXnhjlZDkYgw&1t zgqx6HVr{}ftKZy&syq_O%B3*L5wBaCKK2OuIUx2rQs!v_O3KSMnyM56b0pBJ8ladx zdj8BDBP_XcXU>rxfPGBmF)+d0pCi4c4cHjUQ8;)t=kYMdMb~TJ#L7a+voIbcqE&DZW6y$W2Zvvzva73vLCgl z&r+yFuyH915uY4zfW|XNM&|pnb32oXuyf6qh~0gkELPLFYmcdH!hnP lM+zv!DF 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

OCK0+WNK6x03KmvPF3L%xEVGw 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

    {UTW|C2UqaSJGc>*Z2^@itHL6lD*j?#E23B3 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%0A;~ieyCXI1ZzcPLvFYq$A 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/posix_api.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/posix_api.o new file mode 100644 index 0000000000000000000000000000000000000000..1643540245e1abc115d8a85b1eafb6f49857d3e0 GIT binary patch literal 291984 zcmeFa3w%`7^)G%VGm}h0;0%a3Skytsnuw3Y(qA)zFk=$f2hT|4Wh_{T5DW?=!WoDU zBrr3O)8o{%_0?*twGSV))wY@fD&zqP_~KO&K?L!YVN_5Q5)|_Pu6_2IOaR;7+xxr! z`}y2EpPcN+*^jl?UTf{O*M6L(rRtaro6RnXpG_Ji*{ndC+psZ}L<;cufb?9(pE4-z zvv{7vL;kg-?i%5L5$;RE|1#XQ!oLn~lkhjgZ4v%f zxa);~1Kc*@Z-={4_&33QMfhKZ`?0*@chm3T(txeCuHJouAF<6l7duZCNUr&NT; zz#WT65#bQrYlXiI?sdXH5$+`6p91%K;lBay4~2gk+#B&s7vULjD};Y0+*!gu8}7}* zKL_qDc;<@mJh=0PzXtAY!oLu%Cj5)wE*AdV;oc$qcfnmE{7d213IB4q5#f))U4f@w zgntaz5dM4M#)bc0xDCSpGq^t&{`=uRAp8%({e|#94EGV?|25o4h5t8j9~b`L!Tr7P zKLPhi;eQ(LABF!ma8-2W2(BDj9x9|3oy@Q;E!TKI!-uNM9ixTV5B7A_P1ad58@ z{t(=2g})5$b;3Up?j+%#0{431zX9$Kg?}2{8-;&5+!=Uo65(0GtrYIf!mSeSEyBH3 zxbuWNU$`~Gy-m0ag{uj7k#H9a_jcjlA>6x!yF|E4g}Y3+5#h#!yHdEia1G(ch5HlX zHVF4;!o5$p4+!@m;r>FnzZCAn!hJ-zzY^}F!u_pqe=po8;HLkAlY^5K{hP@X75yuH zhyEsueBxq8mb|uzMnXw3a(${lp-s?Rnh%^8-4<5-8}2SG+&x=9FUpIN*ZTF(cv36H z*+?-+es+(oRWTes7H2la|GJ{*`oi1woh-86HTA~ewBU`ctGe+^e%2tL7m#LOW|cP) zl{5Y8?lL!je@JdF&W&{1w5+ME@_8koHN(z~G7lSZCRHDHGkq^J0^6*jTh5jpw*4}Z<{qd)_14U2TjOy9ut z7N$FVi;EDpX*aRhr>ed$dd37k1;9>elh1<+R z^>(HMexOA!2IvP=fjedl^r2_#=oU&!Z4EPfRg!?P2nRQ=;*8xNW7 z4NjpJPFD1POl11&Xk%Hg2C~AYqwOT5v?o7t@zmvpN7 zK@+}sxsCag@(Pl4%usy{ZOawd+9}6~snEnSvx&hUwa#u>)=gTB9Q_^sqh$Hs2s|ua z;&TJBivA&M2ZpGsHbem%4xg60Y}9$PD9=9BV%AG|X*IpZB%e#so0$G~;gJ+v#x$Qx zHHQ0`e~-NKc4Si`8{90?Y76;4lcN(rNUDC6=TDR(0K66MX0c6j^alvFWk`w3c`VTf zb@z0Xpc;$ZYWz|H4dk4nKgH1Y0Lf-yu_kRP)xsiQ4+?*%#^?G1EZ�lomFvAq=iX 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 u%nm5h~*A+a9AO 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/regex_debug.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/regex_debug.o new file mode 100644 index 0000000000000000000000000000000000000000..aa8857b20d673b96862722291e75a532c88c27ef GIT binary patch literal 952 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 BsM`Pl literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/static_mutex.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/static_mutex.o new file mode 100644 index 0000000000000000000000000000000000000000..d5f9e5b46dbfc616080225db1d238add70ea193f GIT binary patch literal 2936 zcmbVM%}*0i5TCLj1xfjcCMFoI#u!cHW!peS<3|w+94aCoA<@IyE?Y|ISK2KW4nmZJ zs0TDL9=zzy|AWM{@$6NjH;oq(O>k!WCi_^ogfPkOoB6$&-@G?(-djr~N1FlxUn16*ky#X|$NbKD6Hj=F}TY0#lquBt)1YbcuL)5$$J-=pl; zsXb!X@uPF{$}|Fgcm{Fe(PaRi>-z@y7l}_wf6m*62jjIg2Oc+qIvt=taU#E2Z55hSdO-xNp8>(YL$;Co&TQCZ2`sWga+U9OK=*2-2cC9qv>5c4TJ1tMLkfCC6Tx5XtZw*q3p zG!3g}S|!`S@SFvBLKsE?V!z`OW-*_)3dmh3+LjobnC-)kG?!$&l{GTuR37OT%Ef9) zuKw`Ddkm%X@k(3*e6Ksvrh3wOlJFQtoz8Mk?a=1);QAuuNEa(|?8T9|;?m~fseIZW zNPzOwx$%0qPtPMp`8E7h`KlUq0 fws-C1{z*Dskdt(8{PMRU?w5Z@g3mk&Jtq7Eso+uC literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/usinstances.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/usinstances.o new file mode 100644 index 0000000000000000000000000000000000000000..81832ec580713b61ceab4c780b3757be99fa1ce3 GIT binary patch literal 952 zcmbW0%}&EG41nEj{2jR=aVe*P#G({!k>G$LO=B0tZ4c0vN+8s3A}J~tcpYAkCjh%m z)U4?aV9Bxl*^Z;6{aoDN4T1oy1aJ#&WGO)9Kv`o6N3ajDoX>B<^How7x(sJ*%J@W- zbrgL>g7GPf_(hWluXrT5;MeW8o=0Ow@crW@5Da@yMtsm$j(oU-@9p3tpO@;nP&zKs zOtEyc0buGq*KvYYzc%*CdOE8#u*X=(z!If^rRzM;3S`AvXKeYfn&4LHi$CSh&iCRu+Ex~{yRi#VSt#joB3lK_LB@ToIcpP4jCxCNe zD{hi5J<0yx{e0)M?Br`Qd+0b07<1qrs>o1)ZwvYb_TdQj0jA^eoqM?mvRG#Bhztqs zv#f}`Pmd8gBp$sg7u*5$7-jUf+P2}THa+ww_G!PFp(i?iRkch4-5L{bsOC z#FNOEGT|>WCE3q>oB@bVl zt#%=2SfuU@Ut+`jji?H&XDr}3&WhD<$}d)%Q@#EIQx0+LT7QkTYEO#8HeUzKhUlCA zMn@L2Q{U{s@=cvV$LQ40uGW}NoR~zd^?DVzeSNvk|Iw=M=m3XOWv8X!Kh)me)s0Sc Io{@V0e+=(6AOHXW literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/wc_regex_traits.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/wc_regex_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..bcd095b2e502a43bcbf1077ba2d66b90f7b3b5df GIT binary patch literal 19112 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/winstances.o b/external/bin.v2/libs/regex/build/gcc-5.4.0/release/link-static/threading-multi/winstances.o new file mode 100644 index 0000000000000000000000000000000000000000..178b93e81d00a2aaa4d75263aa12b0dde00bedef GIT binary patch literal 524808 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Π$Cu&W}kQG4MD)%maC+w6b|(oF0DQPZ7? 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/system/build/gcc-13/release/link-static/threading-multi/libboost_system.a b/external/bin.v2/libs/system/build/gcc-13/release/link-static/threading-multi/libboost_system.a new file mode 100644 index 0000000000000000000000000000000000000000..c7fc03be9eb8c41a130058aded5231036e803cb0 GIT binary patch literal 16286 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 HY5V^L;$6;T literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/system/build/gcc-5.4.0/release/link-static/threading-multi/error_code.o b/external/bin.v2/libs/system/build/gcc-5.4.0/release/link-static/threading-multi/error_code.o new file mode 100644 index 0000000000000000000000000000000000000000..ab8af07719227be3005645cadab9c0be10a47418 GIT binary patch literal 20520 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 BnJoYS literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/system/build/gcc-5.4.0/release/link-static/threading-multi/libboost_system.a b/external/bin.v2/libs/system/build/gcc-5.4.0/release/link-static/threading-multi/libboost_system.a new file mode 100644 index 0000000000000000000000000000000000000000..da53ab748352403b2dcbe7ab5374e28b691025ed GIT binary patch literal 21182 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 Xyrxi95OJIVOnfUu!J{Mnj;!;)^Pp)> literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/compiler_log_formatter.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/compiler_log_formatter.o new file mode 100644 index 0000000000000000000000000000000000000000..4f542f1536d6a7f266bbc153174dffbcf7871556 GIT binary patch literal 24160 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 W@~F2T=Cpk6A6TZf7}hDLZ~s42bQ>oC literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/cpp_main.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/cpp_main.o new file mode 100644 index 0000000000000000000000000000000000000000..34e7685e0e63289c1f0f38756975a801a4c4f68d GIT binary patch literal 18040 zcmc&*4RBo5b$+WKTQ)|k8Ypg@gf%S0Kd|gdvMt$#NS4-qi)C9#GXLahy}PoutadlM zZ~X%%Xd=nOb}dj7I`sf;oiuIe3`x_FVOnUx;9?U>7-OI?fd(fHKZ?WP&_Wz0pq_Kz zIlD(s?-|2@bK$*v?|0ANJ@?%E-a9Mb7VcVGP1kWPwfk+_CtLkwJ)OjOHePSc7W<2)FEm&Lfu5|W~i6L zh2?*}Uwr?-#6ZA%-l%IowEw__94}qnpqI8U&`ay;iZ4zbofxRFPoTU>lr%BmJ+IS} zZ}01++Zyz-Df0|9V9_1$o;Qqa$lrcd`{wq(Nb&dj_+^M~F238V7oXEde%&9}OEnkb zJoRFy|C-SLH*s7a+wUFC!;%cQXx`DeH8}b>$7rk+xxr5FHsTzTYy+s@mJm@oqit}W%;Ab-?ijdk0OQM`jmI{V3nq|-M-7;@Td>_p7!VhxS^Ih>_v*RHWUZy+KcIiNbxHRx{A$y%jnWMINVjtHt5CI^>GlU zkDrMUPOVNacEeRiq$z)0@qj+|mU-5{OhGyBeJorza>C;sJrhhCd)YghfLbr9xjghI zC}UhLuwHyyNhtn|TRO-o0cqQtdg=b^<48L8mUr|7OlbI4bl+-dc^@fs=*3qp<;6o} z#4i70T(#PA*N5F%dTI7lciqFvH)O$@nHK1!u+rL9`p#n1x?${>-qF7TUG2lW{7Nqf zX!ky1`a!d0v|iQ>OC8sjSqtwS8wM_Y*Q=XXT77x(3d5(50uo0=1b>3F?o-& z4dUnxH5@6`_#c_8c-n&cY88;)(SHOYpqM)BedPG$z0j$|_t<;pExKhwWV~y+c5J@d zw`hkxvfl&YZeH(wFxb}8XdY7=V6qx~Tj4J$6`>!8-kbdP@4=0{c;L>Nc6=9?rTDgG z$KBAG2u)2s0BjX`WADKh1`Ek1eSBW<*g~rNoYsUc?Exh8 zUg*b@b1cKA4o_Ayv>O^zM<(~p?{k!H(&#vjFTDk003F+XMT^+LrguwzlQV1uIyGZ)t(Z`M|9G^Nx;V{_?&oRYR=8 z607L>!CZ5$wU_Gdsj)l=71d~I?AESR#ptN2^8f7%jR&Z0@v*+u7311h&p#7OZ84$<~f0re@4 zhwy=3J~R)3mlPZ+g&Q`M5_Nbyx9P=Q{vhygSn?X4USl5uOIPbr@94W~ZqgX<*egn2 zW!qM~WF69YFYAL4A~P0Bn2y0x9-ag=K2MH=nNN@>n#vURiC7e+)#RAB_2NNl9(r>( z>>t&6_(_l}qSl(deYM|5<+R$0t*e;wH$+B0@OpROsSHc`gZjAXZwO%slA2Dyiic1Z zJm@<8ZSaWgD!y(FDzMat6tCi7%fXr|2$Md4i(WGQL6X3dUVZZg*shaTKp@awD@&<7 z9}4YkA{gc=Y;5;FSmW2n!Lr*y`LR93qMioc(OcL9lV61v91!1Nz|sKjvV3vuE{hQb zZNMjH8<0;1;g-&5bC*K#C33k;&X-G=g5N63_r()tB4#GyEMiA2ku{T<^kQuZaFg5}*<2!@2hPmx2-~TcY`7%*dO$WP0l=m}MH8g&3Ob8^~pbeCa|e5S>y7ELAN z78^}v03;^jJ~QJ>rjuq8#&1se5<3#Hf|4+l0W_1t_t&X=!k$Zine!*gn%t$KTgzPu2i>yrvd_AJ*1>f0p)mEw+!FX0M{kL70aAk#2;!cd&Nj_P&hF&ePe!S-b@S`DhQnjNgdI* z7QoYnnaG>11=Ap7n`6;bYD+YBQ_x5bWmA!4_#}dy&Hv2Nr6-%fis=(D%t&%$sL@#0 zwP{Uzmtkx)LZRicY}OcxCesGeCURlh99cdu;7YN8=oBLx+1P71y6=-|x9LAs2g1YH z@w>CkzpkTWm2dIpEf9MJU#Kb26bN3jqM*8sUu$d*1e=!-tXSZqNyEovEnMq1Zic<2 z?MIAv6Mm~=@!Z^_d3H2-7S5YpHvvW<&*#;Mrr~QR7Q}+8rD?ONMy!+Cr~?aP*Ql1I zm$4LKl6ROe{C38IymzUVrp=)mvHKjbein7RS21zF~J&d;Nlu>h^kH z)phj?0BEnT<9T^*?(R~vo_!BeFXXxF&_P*P{;NjQ;D1e9TivDtM8~%bG{uH9*TPFvzm@~B&*SWGvzc`t$CebSZns~^xP2MEZUkeiPwY!Z|ju zTkYW8Nkw1rdYt%{!9sboi>YVjV6gLbg)b@F*;1xJ`BIxT@H?Qd0=+C3V}MJwwve0C z>S}Gtv_5t&2FH2?j=2adBMM(;b>QAtZlOIDoZ+969Omcx%2_CXS=pZ^GeBJ}{J`*& zK(A@c&8VjRMB(RF0BRjk_@y)O7l~fDMbW%M@_jarpA$Xi)?|5|@FodD`xxPCZTNA* zueRauDtv)9Xv5zpe4h=s4#IP_>uvZfb;zBoZMWg`0Ovg+hn4_-zSyUH=5AIvpVF26 zl68@@-37nX1^4AszA`LV2R^ho^1UR>O4C^jM?<+&h*$@6%1pjei-n62>fMJbK#>*AG zzl<||QPE#i#)H)QcZGkcj5Gaj0Oxjj5F7kH9Ds&qT=%KJUUxQzw|ypZLsIVPdtIMC zpVO%K4>aFUXlnw$5L1w;$c1~>_nNKd&TPU+rUx>g#k#IYrnhBoO8kKqHz@UfdS7{+ z)8wAMpjjDD=Cc_{JKz@VHJcOZcq$U>HAA7;U^Hi#xoFbNM`Gb{4`5AJZU?d#xkPj* z(r5Gqjd1S@BaqDJqJbbt=)3AuKOVwT?CEn1s-?L!hO)V>kYq{349Y*L{6M&SZ8F*2 z9SbLWLq;H$NyX99$YFLA*8MtqE_spOViG`AB@x}+%{VLU5)YHwv6vT3=@PU{4L zb8>kM4@%fwE%A)8JsD4=!!ghiPjy?nF|@)k%)wk{JE)68Ix25zk({9>V}r%2tU%F} z%-XbeZEqO1X#1M3uz|tcn`wf~ttel-wnMHLVL2lFpVQ~6@ zGw9@jspb6aY56a!wF5ua2gm(# z!{UP&YK7RNrAXluBGYGR_-w$R96<8MUUMZHw<8n^HOij_oEEM(iccAo7=wq439&IW zqzxs8V%eRaOjIZcvMNtE%;lN(~WLPZVQEQ z>ZxcxZT=MtAB73}up-OOmL~{P49!O3Jec+isl}4CWJ~?wX)>pzltAgB= zmFI;Y;8fX9IDWq4S3BcX^nr`?_!Y%?m~f0krhkU;rGTvz_)mo#{97!h|Amm#BJf`eyj9>|KnFm<`Qo=3%eheC z__tY%Hw%1~z`F@YJ68+*2EwuO2|O<3NIUUQZLrww`CEZYd)^T^W;fZ+b14Cb_Ta_% zYQj;zw7-XN6t_swbAA))W&Df@dKo|W3BA$}-xGSJ{r@WDoGx^7`KF7UmxSI61^s^u`mn%X6S$lgpU?Jroe=Udi^lV+MgyUs{c>Jj!m+~a8q=Ta zLVtn4*9!Veg`C9#UnS_J-mt*e3HmFA9O+MfF4*ml2|2oulNPwN^A>@(3;Mrs!M`W) zHG=+!0+(_4g1{q!UOsoO5I8?~?DIOW8i=4Ez8)@KmllCb`@01$?Zn>$v7j7jC;vGK z;&R{J;X?n{0+;rDN8nO^Kgh*`^5yeujQoQYUJ>fIK^qHpzpPr;t&`e_w^19bJ=C_- zPYAq?+E~q_Htv@VaIruCh;XzMe{Eo#VE9c?)4JhmAb@{|Kzt)%vN{?4m6DL!C!_EE znDl(+OE#2$HC#^i^Rou&c^v7lLVya>*yZ?W9C4)Sr#|j|EQoJXE$fDR9}D969?Npu zpp6A_TuZhC_c9j7yREKT3yEh5zlLh0$2I2CPYssiqrO~6w1*4pXL`ojUdH=rz(+OX zLF#jbcprB}jd+jfa})8)xdXM2+UOhFY6{_B6cNYR<-&eL94{_6P=j%vC;N|aAJL84 z=y_gyZFo2J@3-Oo)ZcHzS>N*l$M+>Jv(W)i&>s0)_U8qTV-rXO`Rz1kATp|?>n28;x7Klg9s213g&ua<@l=DcZ zkX0*l$PAgxtwHXJ6a@@s5rL9AZ4Qd$j$)EQwf66 zV&IGB%tE%zC_dBOOb!#j(hCYeC(N^)IzAbjWvkHPl1H%Yc2VHUGgG=PXLWM1Gl*x% zJLSa1Nfmu^DZEM!3y{h{_L0Y7IX+<`kmCokg&aNQRZuDd4tc*Bj>9nhXg23`q0M#E zl{)2Z;kS#Sp+p)sAN);jA^?BfcZo`7Qh#f@5Xj~-knA;ax1ec>L1Q2nh1_FcYc2z^ z|7nyL;85mw2q~|PI{ci$Z+m<$@mbBa8$X{*k{`eCn2&2Wem<8aKfbRpAJ=aD{5<9N zCbS=)=gh~o8-E;Vu}J;+{=+iy#6aQY~e?~GxoAopQ!^CfMzczS=#mM`Z#n5!Pt33!Ur}+;DERuer z#Q4L%u4Vlke@6gATV{kCZCv?n17tJS|0jSs=|4*PgUAF0^)H0WuKy@tsK3hQ03YdJ z1Y@%JWCz-qFGPOMPw}u${PuWb{Y;1dP*~Y-)89aUYAfx>-&L5O{nttQ?e_PRe&mtG zZcpCD{^3)!KkZ_Fn}hv}z!1Cr-*&Nog7ov>+wmOi_CMuf|9z)u{}V3uXC3VKJJ|n@ zi~ajaKd&F#@8bs5O|b4DVn+NNKSlck!0!}4`yA}Y{HWdkJ6XTYF6~SU7_{Nc&#=k* z8KC+w>G$E}py2+)Ba!(zes`08sHT-+(*OK4RMUL6{x@ChzoyR6Cv7vF8I(F6l<-^9ca8k{P-;|%k9L^`gn}{T>p;v?dQ+L zNAR<}{{w!f`02(6GZdaD&L3UEdKnMG^U*1O_nxBuWx(&Gf6zfcJ|pe=(=Ph=oudAv zi~eB;{ml;g?p@r#bX&DBGG~<&-n!XU{ysr;ml&WZ{QDamq+EZ~& zX->nDha;b_PsjPAI6lVLAK~*EeD>iyh2zt4F5vhKoC`Vb$GM2(GjX29@pJfGjB^Rc z=kj?T&gXLc6MX(8&gXHwl+R^2&*%68oXa^Lzt0HE1>Y2Mwh!szz?GW$N$ zenOF&@%#JA$K)B_I|6y#ebJo3Q-<~R-mxIf?An{w-DhQ)fO!9oq@*^a%Ur;yQ!qvT=sq^FY4y` zxEYLDx!J*3O>T~T(9C~X-2FHu%@Ro+9h{Q&;-+ao9ZCxcDMKCHoBl~u}nG~NFPjlxlKh8^Xja1@_uKc;8QuGA9(fG`q6o_g1@E@`San(*9*-@BE?4lD*aiA$yN$|G9tc(9n=svd_AxvShav z8j3;HeAo_-JDx!+BLbQj-%P3T+{5`p1TtQP20*X4xtsT3ISe` zP>a#9QhJ}++pTE#m*-}yng#NlJE^_tIy%F<^*Y4Nt`cPNf-EZ!1z~n=$^v6lPC(h# ziKhJ?B`AUp|X1%owz{{DtzLGiMfu~#3tsVV?t@GE;3}VJyO}*@IfP3av$>Xq|)%ypNA3w`|V2mug>*i_-Q$6 zSO)SC=)F1%T9>29vq|F~x@qoLBO5cO{7BhMNu!qdbA1Cp1;0jBo=`5-yU|he$xz7= z@3o)7y^wu0WIu=YwldA>X3Sp4z)&<~*B=R%JQVaUd?;u?sO%PsWN zM05$-yEVG8L&vBb&Hu1z50LNmbc2PtUs)E}G6wH0yBDQk3`~U3yHxBF)X=h@t7sI& z%1T^6sS)Y_$q{hq>9Y#pa{+%J6zIASg>@pa)85$o3A!36epBcRs=cCpqWT`M;r8FD z_f4p@=z9B$|E@%NyFUPRs3VR|Fzx&GkYczyw-5UJR97DAokoI{&Yf3g8KGE5Hp-2) zyNkw2_t1~_Eyu;s-0oqLrK%;X3dI%`#w(067KS|gGjoY~*|HFqy>lvCo|x;hnkr`h zuAM`%1wN=VaCB%WWWS(1Y`BB_Aa!uM!1r=-m8$j>ZKtwqR{x7{z>@Z#VZHuW4wF&; z=Iy3Bgo5;T_fiB!tMg?)|0!6A8xU1hbWTjCVD;s@cIFIbA%noVo%T&~H+tH`>^BO#{-)Mv*lr{l?vDvmAS`4{N= zL=|J${kiLa#;_9keb64Lw4XHX-*Y{Pb5$9loT*CRzd%{k?WG^kUg~(LQ=Z(vD<4G@ zCgws^`{%w+jtc+0MM-}KwVze>_YK>{srNkiryR%ia&qe}-xG?h&0cEuPN!TX&#cQa zLiRIetQu7=?gyN#tR}Hul))`ju9x+Ppsh-mF#4Q;Z09+Z)5-Xbc>CRh8QhS>sN+=E!H=Uqh+XM3dlwX%CHuYIUjSX)Whon~Cw4lfzko8Q{|De;#@3pl7|Ofn zZ&qKq-G9itJCKDzX7nd!EPxKZG~1k~j1p}(V^@J}$QoQw|*%{5%pl^W~w32R;ny zxIKpZ17|iC3m2L_f3Q|L#!-3v1&tk59y?SXKPd8OT`2UkPH`FQu!ULlD}#5T9~;*9 zaC8vY!PvRE!LIwVLnY5y^|~2V(?-sp%XCXpo6g&_QI!I0ooK!@VZMQtxCeP!M50~p z+5vma1x4IG!}dU{x8((2rmM-z0l@7T)sfrD#Ey%X+51fUFJ(VNb%wjId&|j3xqXwOJ1_7%>0+kt~W9^RG_Ey-Z56!pZtf+w1acgqYH5}%{r~zd&k1G z^5Xev(b)jftqB0mPcJWCoF2_JOMYj4Ae8^S*>!X%S{<95TVC?A_0gV(t*K@9qk}y> z@7R+Dy66v_+tH`=JPZSv&*oBYhQ}}`qYKVjN`QiQ=SEQF*b4g$PAN0r$7pnbo#8U}yl@964# zp2A(|Ft9=SU?;B79H4!%?+=!|WsOOwErZ{5%BvSE6aI(wf`(}?0Qr6rn~gYT3(tq_ zx1EGB$~^kcfgHuYo7fv>$uGU#^8ujs%?ria^D0YTL$)zWR{1<#$&W?B6j^0Hi1qZ@ z`=cMJ%zw>46x@R0=g>9Y8{R~{#|4;nZk|wXAKZQLjDdb&&dBu%#8i4rA_gKzp*({f zVR-(o>J!f?%hY<$mKXY!*TuV??%c-!aHYZm*ew4asDmdk-obl&PQXM0{z++vR~3}4 zJ1O6d-d5GdhI+rByNhV{LN9NAx4O_by_33g@4-!_w^}Q*{=>;b{UJ>Z|%;#1vK6h4m6tHtNZBZVY6h9 zxBD^-OSroV!N;@9w>9MEP)eT?t=!E68q5P{&nq1>zs@Ag3h0*EZ`mlDu>1z zk~K-U=kfVVD5eGkAykP{JvBxW^i0#pKB1WEFe`fwM?X9;2ASjfTp3%R1JK+34G>kv zTJnOit9_Lv2QhDg&-{++#zf2%m8v~`(J3K&;7(9>hVtJqOLkv%qIoAd3l1zV?7sR( z_5(eA8*fFU55C!h-)`Ii)2k7!{}=v;{f9%C@mBeVy!oNrD#a2IkD4$N{GUKKrj0Ly z{eMA0ETbusfrIeJc>By_d=rZ$^U1}{SjR|pow*{^J+;z)qcVRWxCP_Ap=+)wM1+*z zJg%G+-GrWAIgQy{gL;p;-n$VMqZ}1u8BKwx-C0m-#x60bOUyhpw7_W`zykFcb#Ezp zcBiLagM6;c&Bkv7EqH9stwOXpw-CQpZmBnaWp0%>zae*(H@`Wz&6|H)ZYOw9_kIX zg7$0i;m>|Fq-cd>YPd$L0`9ihwCAxCiDvh&C@3_*Xm-YfVPGDp(7sm2P>V45u`aAc z%MP!_LQ`eQ>rPXr-S$P{wl5vSZGWuX_WL3Guf&#CFQVVou2FKow|hU-4aK6cPIROY z$4lXCXDDZTNjqB(JDYd=HY8UL=iPP{XBoUkfU91&+CL?#4FZYRm)fon5LX-(N+&$!u?C!<55m8 zYLCzEuRlT_f4?l1fu)cgA4mS#bh;*GQ`626-4ZytyQO&phskYs1XU>y4}r_5q~sV_ zWRS+e-kviclv2?Gf*1>XskUU`9&n6kA3z0oO?N>~*K@z}cbGzk8P>YC8Ff~3cy&Wv zxPDzjc!dga5|tE#@l{z4MAv)cclmjf>)MQ6qjE5TM)9kh^zLMID3()wQ|CF%Hq4x7Os`vQOmArFXlt(BWK6Fy zHd>MPb;k61qoEEQBSy(a|7>G=V~bH-ym4mX*?#(OOkW*oT^F(1HyIn&G+7bcUv1Pi z*VeB!@{s-2ExtS`;+sl8(=Yc;-v|w-=I0yJr$^S;HXGBeCaXDOMAp^TcK{NVY;IQ#T+VyIZ==^NHK>{#fEPaH`H)mqQqE@76vm_5l7LlI1_nQZ@5oO z97eimc5n@IlDSBoL8GE@yx#Ew7geHA+3L#vfqJz-*8@YCurA2z>Q9Rno3RWrU$vG% z_n`w!F_9=vGGiYCXvXGalB!yg=)9q&S@CSShHX&{xgD!Gd5T@BD$Wm_>F?mTP?7QQ zG-*bW1*c_IDR&H0sd0?ME}=I`usR;>IH`5I!F^5=7B=|P_>CXLW8a9!z8H_)5Rdif z*uX}#LPJAoUcdUd3owlpLJT83`T=I3L0 z-Wi|8pns;P4Kqv{OkamIv<7Uy9<*O&$HQm`-D}qo?}qc}5oELoqovH;Z3{4tq=68s z)q<>jndul8fz@#P@d-5bInLa2FAWiXGkB_LKTA&*xZ2nmLGHF~@S={Gp6e)~gWq&y zCvqH=?Ex*VsTzePH8tj<$#`KxzUVn#Zvc-Jd1&|-@gQTLQ+UHqHpD&CRyXx&n8s0x zrr8&(xzTL0Fy-f~=+OCDf*G5YOV7t(9U7ZEBS1XC^mf-E4Go(1cu%6+B?rCTXAv7c zU{>6`lN{N!+II@wwavAiGN=vh*ajjAH!tp;_&0zLro~))V19ySm zdk5Ta+c@o- z;a+;SSFQ4JZ;q;ym;tMbgomwo`re23C4-Hl3}V_V09^{BT#Ejh7ONQ!fO-#Zp}YTs z<#opRYLtP!7ZX+C=y^rLh$C8x^{J7w1Ef@I?Hbk$WPrsD{x$9&)2W#8kYJTA1fRZN^Rt z#nxy29MMi{X0isck*gHz+!fjPP%lnx_k}@we`RcSUS+Hm^GGz)f595d6J(;v&J%LA zw@B%Q`Q#}f%%So0zNG)E51Dsi#BmJ`JMakq>hEEZ<=fz#<39|x(eH-rw@SMYM^_W4 zPddxY#K~zYAonc)!##bbH~4(WYhv~GzPylq>1U{9V~$l4vN0cfi(LY3Ybdq~23q4oMzQz^%JIk~vZ|IFDYFAB zkO$1)kt*OH8lVRns@(j48>mN|uuE`;P$xL{H+w6xoTt`7`?t;(o30mfRClll#tp?j zg<13ZJkx$96q{?t7Q?z?)zjO(70gWgzoD%vn#4^HRC8fPJgUGJi9_ZmApV+bCYn@H zIyX1L)DbMXVkbyqx%4yPWQWkZy$Fh+Puq4D&X|a!hmLpLYO9>Hu9G0-4i=J$wW#kQ z4fd9qC70${*hk`Y?pTEj#oF@B7_Cd~t}J;GCVZ3{s>w>F%;BvY$iQip`7Z{ypa-MH zTUwaLg~|gKZx2B;`&nF}FYnrvW0>B+UejCtdq^CpL5g_!n_bsn<6`%Jfz*tJeNG|b z5iJ&z?U!ls7?y<+YBBi(+9HtrT722K6G`>5G1l4okvDp>jOy~Zzt0)S2zwyEKI=)5 zUo&PRzisfKeW8*8)4T9DoL>~3*s6m3o?0^J+NFr%gx4J$7O2|19hCno zbBv%j@C1&1D*rGUbasN{Z{+2}yChzrm9bE41I8lQeSzhRP^<+L8*FKz<(!=^}|a0by`a$N#75ZK&G{l znhd}} zh?`394V6gC&82tyJY3ih?Zy)mVu|$GmAw_kL3>ZI>&YWQdk(f4#Woirwt3DG?5qss z?@N0*nE!Iu(?_7F_u4ijLfn7Ye!Xj7R%Pt8xs~>5#U+on9~@YQTVQ8DTxQRSS=n!v z+15#K4x9(ne%Sj{EBoz6Lf#&j4uneJ9m3+-bu=@Y(-5&R3G&bGXbac3Mq8{%Ll{%7 zNZ=ik8=Sr*ikVc{!t|;nYK58EtoqvK<~pp>_`^->+M0ultNr0Q(UxdOq#>|$(cwUeUI2Q%hrOAn=ZIwO+@PKPORs*g6gksur%VJ}3Onin#1|j<6r) zIot-B;iT3{rrpd@+K03&A?-$QC~dI!=!{NJFJUMNdfpvhf2A^RYQaCaM{7&Oy$)+s zELbqtm$$4Az8CfRXBNyXD4aegsxFJJE}B(PI4hrF#Xl3jG+L$6X~p7Y2IhEugk|8M zFxfd7X;&;Y(l%zNojP$`)($91Y3Mx(3gexV!U{RAM!Sd;9hw&vB(@?6*38(4`Alg$ zIj-I;K%9otpJl9;&ZcKodi8iuR@sEOK517}g_O4AzDyLSYMn#4$Rz~f%g6)e)0pqc zz9D^yC+GT%pvTvndA=ua`5lHr$R;efOAsV3Kv$6dwqPr5QU(1yFR_z zlhd0~;qh(HEcfJXCEdE9TUEwmP^%D7nb65pI%P5MT<~*rs_GiMb>5+6{Gid37xEM?@f0udl$svX^i-Li z6{rQKXN~D;Gd&wkp~Vu959Nh&LjkF>Ilz3MO5}UKXJ=-5*mFzf1)g1*H8__6xOluy zS}}p%Lz<|Z$uORvw6M$e^rfDhtr-hFzOKv)6luU?E`?E0y2zOi`a&)$ipo_F3+D}YzB`i=CzvY81%S- z+6KuBDdTN#Rr)uQ*5rx_=|^#6;fOXFH{i6z6(epeq`I%#f0qBOwneh`Bq(%Pm41(t zAJkNtpYjQY4?HdANB*PS$FnM-{U@0>GR+qFs-jW(cG*znTeV>oo}J@2L*{}JxiB4> z{mkzxahW^EOQ9rlB6pZi!Okw30ctk`iS6bh&#H`jsGoxxu8b~JeacGaH!UtRF`wio zAEyQs;n%6kR`si#$5rXSfw;g3ameE=@OY5rJ*aJla@tPydTWMBK1)5|?)1cFhQ=eA ztiuk9<1jo`U71@mwv$RUb~wQI&!&5*OBbqEpDvPzXW%%Q#!E@302#)~NfTuldIXbr zJHt375#Xx~Zs)a}d6+OMbIWlAzXN&}aWGK%bc`L&> za|E~q25!pDMf%D)UxQP+;6wgI;Wiwp`FvE-xPLN?JU3)K!+dtJ9yFGs zFbmgdqFl%qD0~h$>7(_?bztLpg`aFZ$^DDAe=+!xo`)F!7Sn%=@tw-)c)WyrG?qw1 zx$k7ZD`I*&Wf;l}1!5RWz&Bms2l(z66n?T%#foTso?(0y18R(fG?SqR$z8?yFV*c7 zaHT)%6JY*dWxSLJscP(ldoO4{Oh>!yDO5rp@!83P|Gf@ue2MWkYH$&ra!$r`jIWyL z0BQ_@=p5)pd`ds);A(7u=oXFBi=YV9CsVM{E)ac{*SXgC%_(rA$}rRuHz$Gk%`j$& ztKn#dL2qj(hJDPxZ<2#k|3TrSuowBy`Oc+5{Q!j+>_Ya}LE}FLPV`^m8`OqVc%1QK z<~z-S)o+GDZ;U5~M%b79MEeJ|lN7$J@H36en9mLeHXdPm?Vo2e{vvS0n95hfr&kzf z^T%%-VVuS#GQ7q36bT}puF89AyngB1;}}0%1ALyyIQ0QCOk#Y21Q9=p@ue>OG{%E2 zdTrU**E5Gv4UJXENU8!b=#x+=ZXV_(m5VVEjrKzKHRwUHAozU+cmzWPF8V7yfC+f8oM=8UM8l{}0Bs z|LfadWc(2g@cFBZ|K5dvi}Am@@LL%_=)!-*_-iiwr;O8M9vOblxO)Jxm+{lMp6WEe zVEjxM{t)BzR78eH7%z0;e_(u$3x7)C!FYeIc|FItPXm1Z8}pg#;`0jAyU2|<6n>VP zYsz~=j7yB-V^q68)tK+%KY{U(3!lXJaujS>$;!(E`~-~CR`E@>{sCJQrl3EE={sR> z3VJ4UQ40FYn0_bIYya{z^96FtXgjYpH-OnB;&Iq1^zH_ zD#u+Ye+pZ;Nqa2?{m~S78XBBranCedvy`#>f30%kHi4bW~^mF6T zMI8H;!so?toi-0$$Q0ufalDRW*DL&!aU8{@!mGe_+W1XGPDcftVwA?AYdQ7}g_p%~ z&Bq8|%#ZN+VPsLbBD7?FStuM{9QKF&CF;4PdV8R$CA?AX`Bo1v3&TmCTOOO6zliqg zM>;yxL(T<7fu`f7FQ{+D4*X-P>=NRCCn2FCe_MN`t+qYFuSm2sgz0sGV`lQ0Hal*H z0sl;TGlQgtTWZ%uj-A2dS9lawix)I@_M>!0Q_$5`Nf)P3wlRdfnk4D8J+67bsBzX;U_7T5X*ZCL{R$ z{vx?sJ6KmRF>{*Kzl zNSHQ-H@A@&GqZol1wuuI3I6mC7t5Rkc6dAJ z*x9VMio;9mP%9!4>=rrh>JzB8X0_EewFehf&knQA#Ez5rCYT`YxhYP)>1Hvulnn3Q z(HnKpUZLKirHV91>MehV6|4@1Nn|rRvLGZ9Z~uBPzvg=dDg`x^rGx3e=@w*Abzec@EM1*{X*QBy3Le z&vg3hdgt}3;3D+Rv}dm*u?a~!@>O*4t$)LfM+#l!Ae$>PMgi+V4X4H^x$T`sJt-2g zI6Z{#h}MOJPNoa$+uDqR(1Jqx@zYNc{mi1D+4M7qe$JtvV*0^br}!;VQAO@o^nR59 zuc#7`l6XcS)@`GIW#J5krG#=I20)kGgaD|D(y^_cBV=@Q>C4$ zQq5GUW~x*(om7hFER}YaN;}KRmr6U!$(}-HJBXs6tte-!RDQ*Cw)3kv&sLmgE6O>F zW{#qt<8Yom?1G}3iI=@U*~Z4vZv52SF3V@j=3nnlecyLiCRf9~N%ouu?0ao*-6U0h z?<|whF}`z4=xQu*A^lpJo%kf3@mRnj;uiV1SGH zu(hczqSiLvhZX`I!1~s;kpKofMwoVw*RKuNuUQ+WcX^HS3k%vKjRlyHZ`>Gei?nyN zw%}c0Yg2eVCez$GELpg)8dLF_viYF^Sj6Xi!&NFte^^ZK7t>5Pus$%0;v~DJ4R0e` zjU?V^ZHu%R?U7on(uA8jTI(^$>gcGiZD~{>eQ&|2Z$=Rs;bko}T@NpfbVTKn$3Lw+ z%L|oTH8fWV?;1A7@XX-dY2ZoPy0sk^#=6FacKWCTtlA9Y{jZh~N-%1!huJO6SJ$mG z)ogX>V_B$21@1BZ`ft|Lfa^-If;vXGL2Yu!5sU zO;8y=--egU-Aiz@G)cG)TC4@(+9q-i*Fr)G-i*L3Dh&Nv+c$-qLD~_h8$njAm}n}z zMA2Fw5X?lOB#z9EHMc8FHn*#-4pNVcNn9YXzJ_W+%Z7FMtyw;D9{KKe@HCE%OZlhy zJhZ@4Rc*K~vKoti^|e<08b;b9%4zs2f{My_X@TqCV!B>53w4H?@TQiINV}eAhS9$S zXcnpJ5bCC?L-7owDxjLJi?moY#~+4ij;~%A0{y>@fv8at1`@MzWhG3Qa~(YpErRw5&He z)Vhx0tUep)E73fT;8FBXnL9eZbiAv{SgWdpvD6AmVBI=2_0*#MFV@u*ql6JxwKa2H zExplo{A+Y0+tb9Rd(N@i?sJm0-6PiE#42F*LTb^QHU^fUZATl{(9s%R11G{)kemh& z9p%O*3wEigX3caP?4I1HhB`PJqUDQWFD zp*IGR8Lj7g!u*(;zZ;X@1XCx?!n-CVv8;+vZXHd>EH3RH@B0ie!6^SkE%?cCE}!X< z`fMEd%7zO1$ujMOxkBJAh*Q9JWaCO4nx1GV5WX3Q#=l4)0^wKT(0DrU`yjb<1Wupm zr$F?y=Tg(_{dPo8PxCcSpHHOV)`vc$pmEykuIZZv-YM|Uroi<+dg8x9(5pAPaZUOZ z3;dwqBkgkn5hBouwr*&B=wm(E+^xU*>pqaD`K)0334V&vOT;};H2wH929P5oG|HEKNR#8xTodz3EUL;et`!C{;~FK4C8LOgMxmM zpnqH7A%Tw>j|&8{TO|(7-y`tF0zXmUO9Xy~z@?o(Ch#gjKSSUb2>cv@FBSNC0#f9Z#h3VLbhrv)zUJRops=a&RtF615& zxU|2a-j{L8QQALC;L^{t1upHMBXDVdpTMR4^8_yKUnp>C|6+kl`&4T8{$fEtC~#RW&ihJ^JueaTM+H5#0a~tKy^r9~Oa5~OF8P!R zT=J=8-0fE#f?l>u&U+|M-zD3h{}lAH{kdJ>vi`Cn;PalW==)yIhD8COtd}RA?3taL)DDck-xgosYL4o*u1xK8}z;_D#*8-RJ zd?W=vC~#Zw8O!_cN$zz5Uo7yO1b)51Wq$uC@aqNrX?Q<^0@*W+L+7hR;Hw0_ka5yy ztH75E{Oba5W1NOHG-ucR?-KlL1^#Qn=Nke)?L=H4ke(#_<8*loMiQ#uNrE?m?9)P-yM z-7Z|y?_-?kzKcWSPrK-~KMc5VO@GLR=aP~Lue)%q&x{=BK3z+HXl7jJSM&L73i<^f zcKB#|txp%@#9!8TdT)gS;j+H}7vogE77oqlRe{U)bJ8gwLLfdHaA^AP@OlyHLqh|N z|1kp>2pXT_TpCY!oe1&i#-ZuIDB8*YBk-?tJEQqf8%?2`{Y~SacVOc{3Vebn7t&MH z(|b=8G@o0YOJlkVKf?IwYzIwG--Dn)eKZBPedwA3ojY;p{GNt51;Vezp>b^|!lj+_ za81F@r&OUM`OsK`f}0PGJtz=ibpcl+}z0+;?g#5nQk#G(10!sSW0 z)bk91%lw`z@b3veH3FA>E)uxpQzvlAr-|`&@FtyfyVN3Zx_2&*!}NQ|nqKGYiWK}m zBXFtbmjo{L`I^9`{@)e2r2k0@T>WKT&Xc6ypMw53Deym}!08VmQ6QU1{^T2t?nFL)$GCK8uJEh<+OmP2Wo(0^zb9roM&(;n(5N^t%W|AY9sWzd{`y8xYs@ z4>C^lF@ZnAIOVBU;C~W0rJ=Tu!duQs*?@4(Uw;RM_z-MX_MX&8R+l8OYe02TNd`cM)Fg@ug$92mDp9t>hd^HH1`Vft861cR(O)gy9?Hev! z^ZA|&*S7l~#_3x6q4rOmFWny;67BkWff?F>A zWjhLVYQ&-GrwDo}_iRB=(Pl1q{XHb&FXhVTJ2JoL2|lu1mZp%a*P-b)9XE}~4??Y= zmvWl~F6HX)K+^5iICOry1ij2}FXMEgL(_jo&`Y^r61bH6HOA>wCHUMX=%w6y1U*Gp zvcv5a^iuAx1TN)1Ecj60t@W4Br=;A2f}WxwZt(QCE8XS$W(v9TIaiaAdlHWWiI0@) z6XQc-dF}`BgD_3d%lu9kxXkY?!RJ#*uk%|W=%w5X1U<>shEp3^LwqJSNY}jolgt?QZD|8kqX2|%Kf3>Bipfk0;e?E4!?HcbdSQbg8y~6*7SdK z(QEt-7q0ox_rWMoo}^qK<8+e!8vQL$3Pk^X9Gd@61x`_o?-4kq3Gw{l;{vCuaxu4$ z#V%ZrZ^~V`9>-L<@LQSBN*8`R<7-^F9=BO8Tt8p$bm6~XKHFWm?k8?^;eTTK{fyJ; z2f{v+5vM@-=WuAdok<|VSvY8nt?`)zBDm@2I5pD&oaP{!{$d9nLBBl(epKL+k5BNI`g|n?PTvotKze=^ht@}bL&B~9BB~?^gnt=_ zrf(n+!A*a!1CPMvJ{IX$jY1!}Zutd)?*vaR_b!2V3;ezm_~}A_X&+V--@?N;OmOU^ zjEF!ujis|0!$>N-eJp1`Sn(4mkcL?6|l zI1|1_T>Cgq?!rSBh0GE-yOKgofsf-jomL85=bfN7f%DKrA>_jpi1&CEbAG5zqd@os z6?1-c{UUs$z<8(ksebG5`Y6Qh%qzbb%ASPGbsuk|xG^rNH?Sfx6o! zaFVf$ujTxRc%P)G4dYHhPx?$_e7C@fUgLihIPrgy#}j(KLl_ZEV3)kPr zy3K{_?_)h6@O($4`u&Z-NuOfAmo?UjkUlh4(4j`)XKN5={OL*+wElhU)PE8<@n7MP z8M$1^iJtuPe8#5>oal8uHw8{<^mnQ*5IE6yGoKp;PW->b_}2tZ^fdRN@H2rEfBk)_ z`vp$)y3L)){;2iW-*Y`t;6%S42Zcg`>oO;Nv%smo93T*(N8rTgA%)`m$pWW*>F>Y( zT;N2%kn8hr1)k6^7j$e|XVumj1$d3jIj_;N_DFMW0XDo_MnOZZRcjQ~b#xdCD2Tr- zp?4O$x4(;bdtE8svkltn(-$sbTD|vu`}Mz+GUEN$e--;2^DS7sgvy>b>}c+v$=#`;Jb{%%uk9o`HPR3oaz`|o%3erPg{ z-ZT5D_g@nXhtD7k8%}-FC)y^VxRr!XiEs5B>!qGiy^tvsQ139s-?;lFVL(BcAmXr1x{W|n;)fm-xJ#?dlk73a`z~P1q`dm_?58&$zwao>``s4_{O0|yO znKuerTCGR{{$Am9^}!Op##ciN=$lt~3!fT8aYhe&j!^vV3ciuJz*_bHJ6XX0?{?`QdLzIUEMsSIPWOTMnZ&RzV; zMNU7~#UOi%Lm{8p5#qN00;Er7|07$R^xDp(|3`7S^?y8teBUVLKaxUz_O&DB=OvL} z0p-a=?(#2W`IkFv;=fvdN<-liPVX-NU7Y?`E`z)6w;cD0q?DM6kjMIOV}WEpdXA&z zYrD2+`L6QoBx57!zpLV0jV!+=E#H-X*L6+`A7_;0(=#)-{6D6Uzw={Gdj0oOoU4)Y zf0si3ftZuRv^GoL<{WC)4uvbsf?t(?9!qhr(n+ zvi~P>==7TJ<1F9pKYc9!T28M|J{{rnIt;Lq>2GquYdJcZmanhZAbm3ZS0vHD42g7l z&3DX%x1L#kC;i8rQ~X!k zPoKZd>Ei?(!8g;B2AxjdyaVacgc`2q(9zeRKW^E?qI53(;ylSYFU6@9hdVu*pAmg0rRZElzlM?j c5$CLb-S#8)?!K33&CfY0{*3&|;7n?4PqE!q#SX*)5T1D%UF)FyD)$;#7XSwsta zoaa2}InP<{Ifu*3eB;s_j&ws^4&xVwL;qmU_E|BsNZ>`r!HxkALeIrb&+~C#pu!ib z=SAx2SI_C{S*e~g)U!%GXR2qldd^bM*?89Bu2;Y3sAmnH4Y+@)e$U0T5qFdNJrBV$R-Rk!uJQw4>822R#yA;pMa4*3f!F@IER@^IbUxS!?>@)y$biWxUa)~J?}K4* zR^i+5{EZ6#7SA;*d^?_ZsPH{_-mAj*;dwvq2XH^Au(f#pQHB46=bu%09i9)X@L%xU zpu&%<=SDoAP~kT9+=S<572cwrTk+hc!rRqz2cA1sc$a!UiRa%`_$l@LJD⪚iuJe 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𣰛>xofBlpBWV;UCS{4X*LOi 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 Vs-w={UiuRuN8z_rKb_qA{{#KC*;)Vq literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_prg_exec_monitor.a b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_prg_exec_monitor.a new file mode 100644 index 0000000000000000000000000000000000000000..e3a76cafdee34eba4dcf53e938e95bddbb681170 GIT binary patch literal 114866 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 z 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 I*EsqA1y~~AkpKVy literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_test_exec_monitor.a b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/libboost_test_exec_monitor.a new file mode 100644 index 0000000000000000000000000000000000000000..0482275a3ae39733aa5f33e69d80270ba90b2af5 GIT binary patch literal 1519178 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 z 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

    roa<4So>qX%k?Tvk;*&{FPsOJZ-%s%X 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%0D8UUsZq;jEA6{ab}|{`o00 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%0A#elWMhR~c_$1&{5`J3X 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%0D?KF3WP|jokn5 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/logged_expectations.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/logged_expectations.o new file mode 100644 index 0000000000000000000000000000000000000000..53784aa09f46432940ee3853c4afe690e51ca8fd GIT binary patch literal 128728 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 z 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 Je^_k({{Zsl1JVEh literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/plain_report_formatter.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/plain_report_formatter.o new file mode 100644 index 0000000000000000000000000000000000000000..030b4da533692366e5947ffa740cd7d5b34e53b9 GIT binary patch literal 21192 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 K$u=?D`Tq~^WAt?Z literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/results_collector.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/results_collector.o new file mode 100644 index 0000000000000000000000000000000000000000..f854a6d0822770feebe78a3fc037dabb9f5a23da GIT binary patch literal 47120 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/results_reporter.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/results_reporter.o new file mode 100644 index 0000000000000000000000000000000000000000..418a7a0948409f2d1a1f416878c2679fc89976a3 GIT binary patch literal 15584 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/test_main.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/test_main.o new file mode 100644 index 0000000000000000000000000000000000000000..698c9dc95cef79aca943b485d935022f90e82b1c GIT binary patch literal 26464 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 V@jKf^K0+@ZpQkvWP9&%N{{!b@y^jC@ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/test_tools.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/test_tools.o new file mode 100644 index 0000000000000000000000000000000000000000..640346b84db1fb5e5f3562ca1ef9837866a11fc3 GIT binary patch literal 92880 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_log.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_log.o new file mode 100644 index 0000000000000000000000000000000000000000..14c6aa05d974537f9a21c582851e4084f6c13cec GIT binary patch literal 49096 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_parameters.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/unit_test_parameters.o new file mode 100644 index 0000000000000000000000000000000000000000..9467fa6a7f9edc62fb32ef06e27ec6c578b272d0 GIT binary patch literal 719792 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

    dJ+W|jKRo`!??VYOLoTODxRW}_;^qwQN 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 z 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 IrK|k^1G_=Tx85 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/xml_log_formatter.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/xml_log_formatter.o new file mode 100644 index 0000000000000000000000000000000000000000..c52a379fa4f2c62807d4176ca73a0963185e324b GIT binary patch literal 33544 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 Mt8+w3vYr3`12m2Yi~s-t literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/xml_report_formatter.o b/external/bin.v2/libs/test/build/gcc-13/release/link-static/threading-multi/xml_report_formatter.o new file mode 100644 index 0000000000000000000000000000000000000000..8d07d79a65cf9d13f12405fbda975b9810653d48 GIT binary patch literal 23064 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/cpp_main.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/cpp_main.o new file mode 100644 index 0000000000000000000000000000000000000000..bfaee54a24018c030de3ed30581a2e7af83c607f GIT binary patch literal 19256 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 ={bUw{~vMqH&A1Ya&W9?>uS(bF>qU)7 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/exception_safety.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/exception_safety.o new file mode 100644 index 0000000000000000000000000000000000000000..46715e73469dcd36558ad3e254d324a643ac2062 GIT binary patch literal 108448 zcmd?S3w%_?`8R&TvJe5;2&iejZPM6=S~1HtL0S`%g|o6~B%oN)C4_}ULK2e=prWQG zQMPLoEw;9`idCysTkWqF@g9(yw~DA0@6=jLj2Eh{;;p>jXU@#-vwO~vT`qn9zyEta z*>m}xXP$Xx=9y=nnKPNW%paW6FDuJs$Ro@6fsv&i*wtH^KuZN)YMhsKP8Ojx_|3!8Ic9TX9{2-wOPq5?hMvGI@U? zt{34K!|y7IU5x8;{4SBtm*RREe(&S=fyCNy{SkgY!|w+CNdC+5YsYUDe%IqiSO1%6lJcQt<3;78am@cSixzryb({0Li(-!1svir;PcJ%!)X_&tl?pYbD_ z+wuF2y#Fn(cgg#^alJ?0{|?vR%lmtAy-(i%0oVVL_kYCoe*D(p_khG6#PuP0{|K&+ z;`cay-S|=5>+oAI?>FGOQQmLHb&I@z4%e;tZNu*c{9eTGCH($^-*)_7!S7Z4h~Jy| zy(RB=;QCj2|2JIUk@xT7`Vahi@Ow{UAK|)7-hYhiC-VN^xPB_{cjNjweqYMxuW9PJw#py$?Fh#Jyc#j@|q*B!{l|iydEyEN62fgynaJokCNA;<@H#3 zJx*TplAr4<@Ho~4a)0uc|A>DPnTCR5%@FCkk=XVS|zWuaBaIR$7o$rWyYq? zHlrV#(Jwbm&B-#mmR6db-I24+=x4o$d5)_v3^TgfjFsjP>M>8Q^e*`jkGXhk{ij*- zpU6q($!B?+N5-ZWnqB=%&2>Bao33)Nxw+Jf_>G-(0tf5bzNjf{Q+bYY&L>YSSXp*f z*_napXJxa>X3nZY^k)0}=6o~O|M)@?q@tkM*KKxH6pS^y>I){A(U}F_Xs}?28LcQl zR22o|=`M%v#?f7F@Z{wMUQfqkNLpEJVEgVYPe-21Fg%x!=?6oyyPv1yDZFam?P~p7 zp#3th;pynWbF89ZNN2aF^VI&3vuhlQ`_MOp0B`wy@02~7jeAS@n9Gd55{NDJn$fpR zm$~ytfn1|hy_6vl6H@z@2msPTb+0%NW$%665Tnp&E$$6l`5cQBsS2-KXn`v(QdwCfN=K+y!RhT=ywEMP1~t=+PR{XdvkGR;9um0J$TZvzQJ|TJ zYlAB8OMF`qU#2o%{-q299bL8)Hm3d0mX`KBsJPkQ94V>_DyHpC2i}N0Te)CmqCU?u zyADS|7!OioVn+W?_Lq!rAo^8RS@hqsjA4am2V;j4p=b|c-=|wlYI4?hXe+85po>U>#8B~@b(uujMU>RQco;0J& z3yMsuE+JEQnlW<+GIqNOkEWJfns9DWSy@rTbEKPjwH^rh3MGrMi#ep7hMB$!2VJ zb}%+K$8=r1(~RCIg#o%cI0wgpwGA zGTWCmWi2_DY?znc&%c$ zTxAuzEU#!!AhyJd^zPkFwnBjv5=joyU$R^f3-fjRUJJBeT8M~G8b}cb3uahuIVC2C zp3k5=Z*PgLr_7K3sA9$Pf*B%Di3j=7UFGDEo{2c0FiX~Zu6T6-S=KY9CvCNx@T4Ck zPuk0h<_zgcKcJG%g#>f2k?JR@^quELOXTTjCh3)97=2T?iOI=EzQ(mA(7vh2Dw@tP z%ww?Ywt_Z#9lNoB>I0uOYn$iSfR);7s;{L41;3EGpsB&#T)24ugH|W&|uas z((jzOy*Eqd6y$h1K0qGCTtd$$;?{F{1d$6pe@*GR*?uwU`Tdkz@dUmnWff{IJXLe^ zx4Kvo_O|xo%w2!KRP8@_qC-Rh@ODHkIKZ%VkP+3muf2JrzBFlaV z#coiS%=ApDLO+taWS;hNkkBw6C)3p^84ClD=0I#r7o zC6ol+a3~3lRqkC$xVfOh=xQl?(DJW7Qax}p>(!k#ACN1*&&ur}T;%&13ML2AvYzOf zB6@~O801e<_ptZTgrKSKdfd#w@}&E=$rd$;fwihgjkNCp7|=}h6IGE4xysT{(ZmY< z?5d(hb_%T53#6X6IjN^;1itY(&ud!}j=?~|UQ+n4y@xK@d+5&HXjeymVzz(jF{5(| zW_zwY9od9Oj2!-p?x-nU@98|3?&0!o5eoJphFmuF|E3XW-RsZBzg+oyZp=5I4^lmDp zPIiar6S0o=vy{I-+CW_>HpEBn$!erSxF@r~ZIyUzrIF{za0mY+IC7WSz8gjP1hxBf zmsVIMNuLT(lH}sF!sETM;7%|_BO;11H@O%oJ`|&;a~v#H51ptDEcR_v)z`$R!CcB= zq9l>-6W3RR(N7a)H3uX}C6V-AO&+w_Gh^u+@>lY%{h>C{<58jsM7&Mf77- z!zX$XR*%Ee@$@GoY7o7V3rpd-TuhHL5OvMst)&Xob2cd8u?<+!A(BA3)AJV63+#v$ zN~-leZZZ0#l<#`cAu4$}awv5nWVxa*Ayq;tVb>W@!c~?McAZhGUIQX^FuR~JxToM| z*DMT3*!WTZMD{vK6T2$o0c4z2=s>G3XHzhG+lU>4nMKERj`$!`P&Av$ax6vcIZ+JM zh!G<*b~gI7)j2)i0M`3nFStHZ&<0jiZJ|fOl0;>-0z|hHJ%#J}J84H(Yo!{2?HK@T z(|ddGt-ZGhDSLlGnwSt%Rj7n`(d|9wBI2IebgCnitts zgmkizPT!{h#dI1&r%`k|lU|%bry!lC(&=z|kwYgMo$47trz|>sMQ=Z&)5moBfKEH< z^fx-aNvBun^dg;}qtjD#+DNBvIz3FMHFWv|o$jI29d!CNoqk298|d^CI$cetD4l3v zvga~7T|}o=IyKRWMu2)2(5aeEbLeyyoo3K!I-N{9mDA}5bSk0KSUR0Vr|;r~k(^Q^ z;a||$ruo?2cUgz^iRnl0-$|MhJFC!)o$kdzjr!WuQ9z%aecfWrGrH9rxy4+!yT9qV zcN3YLxowxBT6KPt)HgPjI{BrZRhvsa*KaKKtg*U`r5ztcvg4j)tYx;@b+KucWLJ5m z8Jp%cV^xLb=JMHy2i>>wCUK3H!<>}Y#x5@2Tz<4b;u3EzA3?yT@=~K~YF4xytwD-h zo(>W^HhC+0GZAm|AoOA)XVV9+kIeS>p!HRSy-z3dqrE&ALz3?mtwkze5g<(LDv@fK zVr#sLKFxVLS5hi}w1G0pGRJcK%d=+ku8!`=ZJQ?VLM~Jl#%BC0T9w=Tpc+5(?Rk_q z3vIH-%}>Om5xuxL*tMv*?GkiP#2|4nc0A##YREw`n8_S?62&mh^9xFGHyd~L7#u@8 zgr{Z5GK>M!a1vQ}^zy9wk9$*b5-nCm0R};dfZBkRH%;`WlB{nV@lh}bM~`?g+##!9d0y<-W9Uz-Y=x zmWGJ2QWN8&JxgI;R$BcH`lf4TUi7VV;-jeveI)wS@zg-{FIF=CP4)F_46M?yWl}w* z(arcUziI@sH~Dk2Hv2_|+3Xhsh@1UZecJ5zTDdAyzu8|Xo}+#Y5&A3f8KKB}o@H$I zixI-j{z*v1o=yHzAeG|fX1}bqepzj4u+U#Cl4qr{WPRj3bqB-m=~xUoMStA0#x-eT zA1&b7%M$%e5GywnHcfl?2Q~^wy(=FOP+6qEA{6<^qDfNnvQ&P z`p6H1C7(uqxRQJdN_^aNLYh%s8?vD?KiWX~#Jnde&-N$4@C8rj#YhaIHLZ^|zE8o? z*X{RpgKZ%Cdg~o#=ckeHluh&-tv8zOA7=Twdq+_Hg)6Y!O&>9`N+(WowYHfhn_7GQ z9o?SJdFV8mT^$8p#2M^*M2tSsfYhCoS2*bYKI>N8ua)=Y(&dnKK@D61We zjzq3FrgD)uKGEiYnczUS4F_?cTU#7iA)dO?|q(3TIGsh!O;;+i4dkjP%HbZ>}vFR44HmP zw)&KJY-*sJXd}Qned3NPJbvPVia8+n%_eNvnOxrpO3qb$l--E z3SmTCW^8#uB|2_7!IICEA%I#^!UAw!s3#D+v40UBNn5*Rx7E3vNPj+;#s3GuB3Wc_TaP6JR_}! zWq-@N#;)-^c5>FI(OqTHkIO#$YjpRz_grNqe<}0$x3qs$)V{N*!gKG-lMY#WeCM8u z=vGe$jrIAqefAkD`Y-^WZ7nO=ur#~lNl(Y!qC_WIa<%gB!UCwXDH zJRLLzEk6E+?C)PNX(GN)AiyNAr{io~1MM5K0wpiDzTGnoPx3pSu#2ttQvDbw&^GWf zJZpxp5WTzgJ)fhfSJLn(RE(+%9C1+?GJ&vHXi4$u40U=nLdtio@cAy0K3{TM8TS$1 z5~OlGF3~-(*8owQQfooaa_CGvy}_=Ute#ekK+5|4+184Z9iGc)Q9-o#X8E&TEQ@|h z`fCsQ;a*I*QBZK8?%B@ORt62#z^Uz)?SQf(%P&ZzpyM7WJMBT zdJg4L1>h@nRTQ9yM!jRIYuSO=fIXF7GX{^2Yzev2gkxO(WT;r%DTe3j(YOH_6n_ss z91{`L{WwasKHDLhRDbjds~VsdR7AIwwf9g>@O$ok1vR12-}z)kbi1d6<_UoJXa6iK>88rC zomGY_Wc=Ae2iV|=%wf+OR8LV!Ao$Uq&XvYZlbGo7LpWs09w1=JQ;~; z$u4VOpGA)tAs$F2D9Y}8mYFyv;;0=$R6oC<0P5dn$T7RFu&tdd`>EqpWN18&ch6O8^oy2A+;0ycTbI zzKuKhAIgJULD?1khZ+4F^W#wd(us@fvl+Vt#X4{g_2R91($U@ep1Kz*6L)=DkD~!2 zFh1wpC(QOQvRX$d%PmCceNI z<$N0T{a+4t%h@<*gR`1X6O4&2Q<>FSqDim8nD~GkZ{%862fJEVnq7}JK~mXMkn>;E z#2R8qH4eqP$$tZ+_Jdybmi%|d%8xeLJk9oEmo=%Ta~T*SL*dZ)+vw_9)k$&4QVPZv zx6S?`#@W?Wj55zUzcr=i5fH~NKALg@2{&VZqD(ZqMqEZcV4Bqyh(>Zy<)?XJOAjmT zszgO?T?q-J{u`oIM~mVSotfn6H=iLHDbsJP`lH6;sB0xM2Wp;ZeDJnx(-hUS8ekQ^ z>SM}|)u#d#0~XNJK+F%lD@{zi`5O{6J$4Bu-t18mZysL;X#!nWS_5FVi8q&3CMMos zc))4~1JNU?3WAn*0%rTJ>!$vU|@i zDi3Ss4YkXZCgHusr`~uvFGaFw`VCorviEq8`8Vt0^)Gnxv?9!@f;R}AX}!UW&RT6o zr{5W=oZk6lWQ-Y`g%DYuMvvN_RWWGF9_^XiD?RQ_=Wu+}xigiX&U_L6m0e zz(NHJa`8zIV?$%j*oXo%ikz59FR9!F0n8X~FcM0Q80MPc2Dvknre9PRq9EaWmgBy5 zS9|%zRjKl6Kzgx(tD=K>&O^EbO)BLGp}BnctVNXXrpyp)U=KMTX6cT6K~p zBxBescGl69MKE`B5nEubvS*m`ZH|1-T(_rxz;o~J6f!jLKRNFsvsW}CqiS~nY$0NXHgup8YWxG#zM zgOe>|_Zie6R&}%(&%`}@_GIX0O4)fwYtO-W@qRWM?qvC>Us^oD(@6um7z3m}{x{>VA_HVEf9ya{r}$h_vcC1N!IJ7+&#La8TZFlQpJ&D} z51g6FuaMGUY#z)c=0N`z4*~f7mYu|i8giLC6_#bA-eba2!ZVDUN>m|XE6GKK%jje+ zmlsHL37TYkNq%Iq!5oofFcFamphmZZ#e{!JMstc~Gz*bRIGtdl<|=wRe~dJd!5kuT z07}zyJq%UcUYgODVL$(9p4?Id9iT=J))PUX)o7)o;XBRfB{xK7U~~low`4%4uQa1W zae-+)4T?N{HLfrc(?NI|Y{c~YaD|DOz7|(hROnFqCRmAuJNCrRo=Z zt-@{~B-W>`JVLx6}_9J#WES0Eq(sra8hv=Wp6P9|-$K$4C z-G6BC{4*03w0(GAR)hX)Ct)>2n_kxT16U2}-v!mINuff%ZI<1*L~A$Xr*r%dN_#Q> z=Y#$OX~p&A$?VleDCC# zhT&Lj8ICz96fztqnK86%Q6DZa92cMnTVXgZfZ=Eb;RP@ptuP!Hz;Lv}a9jY_VjYae zw8BkgyO96W3Nfl5z2ILxi-ZXw7wnu=6JoVzsNq|CpRz0oK6+{9TnD4O94rZBhq*_X z!PJ49n=SO^lP3gh%&VU7tq(7&tEsN{)>OAdCVE>MTbpab-pGYbVegXa`qr?wrm?kt zzPF(<;++@v)-^=J%}veWNO-=ty2Tr*ZeAFU7{;iR<~269L{5r?ajIL~RDV)+KT61f-A&#Q|df`$|4gKzWVx`w)zNL>x0 ztF2yA*VqhEz4WGrBCTuiMry+d6s~C%oSLd5wO%VV2GY|~R}*T9G}kpOoH#KwJyg@! zfTz|P@NccJ7pXw1>gKBe@+v!FGFR|_mGL`^;9x(S(OpR~rp8CD;$=^ye4n9z3YAAH z{r*0SPeO`0t_S*=xd8a&mCBv`8PTFxy$13@2MTiwSKRtqWq+TyatR~ zpaKeh2yeNxE{jc~zPEpr+k4lZJ!m7uLH~J4JaS?<58RU@MxU)P2HxQ#-Io{(Y2PCL zdu7O;Ev<)&|0;Ux99Y%dJv+{MLO2_e87{u=q~hIg{c=h_#%sIEXWJY*^z@695=~O= zTlnNMNTkl7JPFbCW>3ej1^0)^*EGA@9bHW`c5&R(L`SPBUO2-oIm_|!uiWlsA|b-b zM35vO6F68T`s8M`|8T`p^k2#?4>PVju>a>I7l(m=b2X!1S3Pb*dXdWb2OCTixx{PD z-i}_3o&)|52p=aQ0syFa<-EMw#>?=%wzOvgj09A8=nx1r!*yMj zabK1Y4QZke&-B4LB$QgHG)fC`puf#$aesual@&+(2BdN)I^5E~Fz|UhWr8Dm2cZmHAFf_xOdMp) zY>dE%A%_CQMv8x6AZKz;bKm4P-pz9V!EM~(M#TWO&NX+~7O&CS&wY#6c-7_J<~45a z@BWw9_+x+fM_%JE{oOa_8SnLX|18h=qQCpPJmYG&yDQJQYJhu1p7Hwu?)E%m{Q&oW zyvCmgxIgzAZx3+4pJ&`P(EX1*jx+Wg;(jB~xOtF!d!Dgoko$!^L)^c~Gk$xh`<6W8lSAECeara$Q1=7*#`>Y| z|H(Jr80!9AzR~7!-?_bRXP^%3spk27vO(*4|V#=}RtA3n}_CD;9|*LXMAeY4l- zIO-2s$gIzgcCR_k`28{NoyQn|I1c6aW3R}=Jz0m&OV=A^T|eETa;W4sbvC)hzcN{fuAtnGk1z-d8lQk?K@B~+_>-+A@ zvy7FN?ajIbZ$%`>T%F~UkA-pbPUJK>o-m#MGXt}!Bj1KgO5bf`OLEnGvOw&- z95voRQ%<69(tI!czmys>0~m4Rn|tqrf!Mh~<)k+YeWUj$0r+NW0F!7jkM*sd3*aiy zP&-`X*-#a0Y6ZQ;{NXt?BEG$cW@@Zd(T%ylRprHbX z9l<0g`1GcUNkf=13cMKA1(}cUQ}hy3Qp#&73?|rNSY3p{O|80Vq8k9qtWX^VZFshF zqN@s#f^*k2OsK=>`&o$152n*0?o5&y+-08q!@64e7|(C3yl5H?SP2#stg8ybVp3Uh z(D=O8L?P4a6y`%}L>YMV(b)rYsTc$Zgb>rtPf$X`<%v_pU3wOPltz0X4jBm zs9v5c4#h)Y^M+kWo3djR(u|!-A#ab8QfdCA^oA-4ALqwA|Lx-f(>*XD5b;y$I4;m6fctfR*y za@iW36(Z@RpwVx2@O#4gWm|9T@=f6Kg=k1PFr&;jHZ-lq->0-Hw!}3({?pFi7v2<0 zdi=|L;}5F*W#jfUfBGn2-+1WX1+C#wy!_KG3YkCSWu+Y75~&Z(Yh4g(ZJ@q;xH)iI zRb)aaRI_ZE&*vM*N8v#gsHuwhd^NSz&7nwhbzP(-P~)$v#>wwbR~hW(GscRf#v1Dn z^r2QVyn}ry2{$)4Hp4nBAQN#uJ~A{?YC^v8wyLjDE?y`2J?T|H^f&3y$1m-hs350R z6@`2m38WE8#K~ph_w=$~DNg?n9J|SN!twt=QvZLI#GO{L9q@ANi*NUVig#*x`9yEw zta+^skyh`xQDa9HojAT#Jozs5jUQDsc9gGZr1io(y2v-aXnau#N>Kch6s}np%`mc- z>dZK+W~vg0o&<-(OQ;t47V=g|D)7@D0vAphvu~Rs~SpWt#l#lqRODql!3n_ zildai(E9>Ha7@KdW zpTJv+Ypr~DJiQa)<_sE|J!Nni-cwxL<$D*s$3fWp5|bB!8IpiwBOI{86pZAXB(X^p zfk78=8BC zt753Py??(e2Mx_dxXDAa%dn=CNXHh*^AJ4KL4019Scm}7UqL+DiAN(CR1D2Qd{YLW zt!_n_91)>mWD=$#!!VQwYGJw4aW8_4{OgA#S?Re!@>IG)VLD_X>GbQFlrU80J5n&> z^Ni%9i+hBuh$?R4Q<#DUflZQF4P8-2*FgN-t6lz~-mdNXtNVAkuNp9; zePF*wM&AQa*PB>Iur~KF=G0|3wvJDD*L-g;+cQOl%xxjWy>;v4h{7C3- zMO=5yp{4z%qBP2Fnp-xw-vYb<>6B!ZE*o3~wn|TahI^I9tNNK_$B-wmV~dmRm=|=l zQpj2rCSkXNLqQhCHXr?rda_&=AkA5!GPs&_ zsLO?PUPU@|g&Xm=4{#kXl_+j7NQuZ^tdj9B?TT4|E-w1$z-1Wt>kY zW9nd%^BEbA*78q;6K%uPp>r>dOG)vNu6`xyeIQQIBc8Zjnu>@{q=+u1SSAm4`TC8r z!WPT2I(e^Q2UA!fp*h$!pTd%yHx9xHM;)CKd5P+9UR*|D5a_+;s1W+_Pe;GrWwmm) zkS?Rzh7sU0=4tR64L)Ckhc);D4Zcu=i=45&bBWzOY%t_sWCww`#10_#S1x0*9TfBp z8oW`1H)-$-G%8hn`szfgl;q`@!N;LA1mB^q3K#I|=Xv6G4o zM)|hcK_D*UM;iQc4c@N7J2ZHw2ERgsU#Y=YXz-{8k7@9$H2BpT{2C2@tp>kNgR35G z@@tpa$tD@2Czsgy#tFZ{4hs5TXmHU-v%PbPop5Y0;=RcZ0&y9uHTW$W{8kNqn+CsK zga1Z@-)X~P<}nVCz>jAXF5|cCDRJu(JNhJ^)t$?@TiqsIU1HatBuG5CjNjQoATF^p zko}d*xYrH}`ujBaA2hh=LE7HAj6d2i0$gGjBKs?s*qO))f4~k3J`ZZ}hcx&j8vIcW z{L{>o*1WCsQPE)D*%2B#i}{csuowu3-iVuvyNE0?j` z4hs6uHTahr{3{LqwFY9J9d+;u!zm1;Qy2Q?D_6S_YKn*?p z>!JN{8G|&q8u?BR<1%Q@jQwyKG_l5hxC~mg$$q$uVH%tkwXh#9gLZbaA1;IbAK8Am zj9d-=4Gm8J*l9mp#?c!5SPf49$ZkJe2JI|oKU_w>1~1Uy$7}HKXz)S}{#^}DJK5O} zmvN#7r=9NXhs!9^;ItE-{csudZ};}YWvDMJ$?sgocny8A2A`Xz)@EK3Rj) zXoLN58MJes{csuTt5NbhmvO3wKB&Q`YjD~L(0;g#(=~Xd2B)0^?T5>lp~0&(IPElO zKU~Ia4Nj}qBp(*?nlU;VHbR2(H6xgUhb4Y`3cg6<=cV8mNW3ToUn=n-DL8GkV8A~S z7xu1Q;%I(If(nGCElEZKQHkWDfr70|7i;ThQPxq zsA0S<@I!3)AsDkajKMbiB!M4l!)FV8s13hL;2s;^E$|#0zDwZv0FrVPzS@!y$L|x&FD`z1vdN|fq%z_6W}t=61kW9(q+?fivoU5DyevO zk!R#^z|V0&Dc;oDVv)iB(a;an;HkAs@v-Xzy@6k(;bYemi$2u~Si#{hY53Un$Kqqx z9}BnZkA>Uy$HIrv#df&jU-pw>KOM@S&!E-hEH#E3ipNY_A9HpT@ zT7w^>!BefOMdmWZ*HK#-m*KTx1i-J;;Q1Q-TN>P6ABoUq9Iv7Owg%VL-$D)jNDcm7 z4Ss?K|DFaZk3 z6UU2$v+)yC;@%;IC&r7s5`P@@PI68FeZFCjw?pEUGQ85~mj(VCiDCk*yc-19---XX zfDdEyOfHr5vo!SA0ncaOB~=fqTj2M^<5l%y0J;|W>^q~vPZRikHu|3m{C{ltKLmb% z99JHOi7tv$x;ixYA2j%S;8>5r#{XMjj#VP!xbh4-1pZJQR}#Mn+)17h=o&fUGd1`{ z8oUd5zVT>0-apB^k2UnWf#7A`O1I2LGi7zXv$g_g&Ip z(_CIU-T{7#kr= z@;eQ_4tSoC7(Z8h-qp~5LAWwHEP{dGbdGlf@O<`N71<(=8iD^c&O!CeZ`JU51b80% zKBdz5sfNBE3^i84iSt)IrSAa0#Yl{At9(97;EC~VRbHLIseHFe!U>Y&g-(%`R3KBbZm&Ap~$_%Y7% z1T}cO2LGuBe@%nGufY#F)>)o_29Ij+ZVlcaisY34gEjaW!1LL6bJZSQE$|PlOvG9F zV-E;?R~+9U73DauRgODk!O~oDIznD&d9DSXXC%Husd~3T;EC^03jajliSJMf|8|}; z|8q4smUME=pLc)@Jx96G(I(D@aacadnfQ*jL*m~D?v&40Xz*VHC;pWvH#(%68ZSzG zYf8LX7)m4hxso2ur8q`OyiMZq`T{)P_(W1+uD-n63EWA}+yZC(hrsjMJcOS~K6h*I zuLS;iJlvBcK{carC2;Q7YqMw6sd>8kiP;a|u3&&jfGF9A;Zvr^^* z&1l&w5rG{E5O(v~Ze>PsiyeSbTCuThBDlo{qbL-(n=b3oAK47kJ{k zu)_U_&ncf51J7ggPv9 z=BwmM`VxUB=Bp_B^8}uluOija__4qf^Hr36SOZ*zm8`{OhX(&r@JY;XIY|Z@g_}G! zzeVLwwZIeeTc94|SSj$t{1!$3xWMz``G7}pd@S(9{1!!jd=bT4V56Tc@Z;mSqK^qY zF~4P^reu|)|E z)}kc7(V?lq(dfR6Y`fN7VSw&gKtdyMX0`Uq2Gunu%&fgD3DlWMXi8d zgB8$61gh7FRb^FAO)A z%&(4AhZfW~F7?9(F+<|CdQsfua=N5d!hA*Iu?4#>MEr{riO>h|i2w^|M}=B0rar`I z5u$otV>2v$dO^mEAfmdhu{u|AQ!_TZsEb%SH?y{(I3(NPi~`Cq zEP*yltjjSQVUqZa!(LG+pMS4~MKai}o5cv2eh zB2szjb)7zCN);TPnProMezJe_>nqb~-31Hf3-+Y}*7AN8nS`NS%Y~<5mFtmgma+b9Hii+|f&Wo@48E?Y&vz?X|2{v%_SY-qc49nB(_TR}c zK`j$4K~-Z3b`q*)-Cl-U|beqizlRXfB7iiW1sl21!QZgTNl<^$)Z&i;~mYo>Wk`ZB~ZD6 z2XJ9aX&g{b_Q~(H>KODPv6?0pdey9^DGk$j+E}ALoZJi@jHD&mwSy5sl3`R4OkhJ0 zv|eVYi5BYIYtP<4VSZgpQzH#iST>85MTxb7C@rCj-NMvpfOe@;3O|#VqAdB%@jIyW}Cf)&wE3fKF?q}a@oLF92Qcn*x`Vyl&$y7dSq)3; z8s>*)z`b7_rr2s5#>2w@H@=F&>T7PIoeYgRFqNv7))N;$JEpRHp8K9KC zJJKxF*#Nw*qL9C8e5jK8p7r1cHR?kTP%h!>W(;a!+$;cPz%PP5b0}O$DVI;WUIZqLU$X%;h6soCR6rz2#h|((9J{(b> z4<=tIENMmDt zOGzY>Xn`q}Vu^d{`})RXht&DlR5e0gz8J|OXO<5DCW(o`!EqtgYSbXB;g5(F%@?0m z#kRa7PeM5&kt4CT+mvFoz_@G&eEA2Yf?b@ zIS1JMmc~#m_E@V27r`0HSXL)AlIxiogRodeYMUFEf{TX7n1;G~p?|_@O6YBB zT#U{?zJ*){uCeJ+r&+Pb$o=)?moPT2Gj4u(Uh6{NSaHFCbZ8ztl0`!DGC8&uj%4g8wRLWnYr;91WxL<^kprf)R0*t{2 z!Ey7#3+o#E2~FC2Krv#DV6vi9Fbp-RjzGB_ChXI3glg7B{4|h|$e4J?(H9cp;8Us9 zQ!KY~1jP96D)gSdWMT(pk?6{4HI@|dogGH=ogJL|FIFjyZCP5~gkch4*`=QKop>h$ zm~Q4-V+EA!W5NydWg;^bn?`wRP(LDJ|BS_p4Qw!3({$m!*KZG)A$**ZBEiL6InxzA8~kLwH&0M}FtJRI-4!e>;!ADBRYR2!qEBYYBSd`^VqzeRH~)LtM93jqSm~Bv<98Uw7R>2LY=49)8rb?I zd4!T#PD?`NaVUY(Z-X*RZzjz|qGy|Kdw2jVD*EbbTpBy^(9S*qxQA4iq0oMD8}Utu z*WdUw8mi^<{HKdSY}kaj!GK2#`?nbSrx}PwCBYDONrIyo6A!^zOpIpF(}aaoN#ocK zUG_|d6wn~1e9GTnhQ0*DgEk(8SyQ5!6*e&LraDNzpM6=>9pN6+w})ic_#h9sB_&Wc z{rJ>CE_FfK2m$Z&*;b5Y8Am-pGP*jhN|XDS-Oas7AOC;O7UcK@(FM;(Es9bIz)n0U8#7-zojW z2{rZP#nf0$_Ov)2zJTfq_1oc(wzl94R&`A{!Z!iKsKMf<)`psh*yf9h6#*36)I!m= zCGbx(E@57otljM(YZ8|dd?cx#hcT2QNbEzeTs6Je9u0|^58Ela*^YT6s+I8U@d-Fm zQ!6VPyiWP7KEWn>p?$QkPP?*Mg&^lMCim1dvmfERjfU?AM;^`_K8~P3@C5*_aUgg(dDJ#Zkb;?2s+SlqJ7K@nI8O2$18_w@1{HBx^}M2IlX zOm=`xP)W*K-8cNC*b}Ah;EgAWDZ$Iu8*yrF>_jRX`>4!GvZX_tl1;u)XvtztJ|&q| z5kz%P<8>jC_fA47@-(@}w=`w7pbvp~kaS~7jHNrN zhf_M@d!aJx(1!vzH>7c;Jy=ebDwu=Ef1gHJU*6T+}mGSBPECrT_y%` z`x+Xb&=L+WYFx0uUym-mHEEy<$o#ryJdY8R2u^PbH!Q{=9?E;)hTlaTm`+2(h6`{F z_+Vfc&l6J*v|eagd_@~R!a1={m{7LM(kWJ z5>O}q-OgAbZ|L7%oAKXxU&;Mc8yJ2r!_|Lk_QU(f@l*8bKM0A>j~TsMp_%ZXFFT)!y5W4HT1VIJjV3%VGaJ027im; zzhHd+C2^AfY5el>qhr_r>#A_2C&x$}%M=(lGCqZjp7Kc1pCWO>e#PjgFg`ai{7i=5 z%<#DkU(N6qiKohW9mAht@;t+Eo?covkq(mc7RGNf6MsvNSyNFK8An7=SHRGkUIvM-3(^t-Rs#%w;(DyB12E^7C2zR6ax)J-6pS)8IETK7VF>?$*#h%y2Hx zddBBD#^*Uk&*do{0wNqFKlfv&OPtDu(>F4l`>{(HpKgRv`OwbjIiG77&gK6pIl>DZK{!B*yB%`m<&@W>+_gk)DIG3l3 z@#lWaFEsStp%4NG$-fmpCI9gfr+j#X>Hio;zk$)0GI}o0T!wQ$c`3s={gsUWM#g`Y zhW@t<=lSyh!#V%Q82?R-|I-@!F&+@%p!|6XKb1c-C7!D1=P-I+FKRXPKV~?u7uPaA z-7Mal7(GwdT@2^-g4RQ&gXHJ+;xR_g`MjsWzabZuNv#)S8P55fCh^pKYt+y$Vf4Hn zwQK0FW%Rrr-K3%aBg46#tYbKre+%Q!>(NUZ`d&uA8F{VrWVeR?(8H)yEIY&HIf~(2 zo_vW@esaA%Nkd=7=+`5Rl4q`l{^tzm`ty5+b9uHh{ycx)(9r*f(erwA+%U=oD<3%j zZ%drg%k9h<4gCy;b30SVaL)f~#-Gb`uZDgNqvv+%2@U;rhV$}$m*HHV4;X)5zF%nQ zPml|trPi;Y#8d536{F|+Iafn}0mHfcmoc2ne+A>u<^PF>zMJ8^|M+^CA{ml&L@;|1*-_YP+Y4D1}6Y@XG+TSx7&ifa2 z4CnM0Gn~`^SmKmk(iLSNe!=J;WAWa>@W&b6&2Y|tv&6p(-rNs=TZ8|b;oPtGU>#*T zNJh^82#FJa?zf-7=z0HcG^6MJh!PDxo8i1aQpfo7eqXo5DL=R3r}A?nqvw9qV7c%x zrHhwW5yQJ#K36e(9m6kRIHzC5a8Ca_iIbeqGdUk(^t@iY&FHr=`j0g9WpV+$)ba{S zJXIeSF`SqCwHiLF89gueKQVeW8BXg=(?R$ehRRWjG(l z>tcNPINmBo&&Tn8DRIglK8|-Q`y8%+7U zmEpMz=XzMcaNaIV)Zk%;zrgrE#_+!~e51ru<*Yak0^%S!-)8gyhX0M>RT}&gi4%W5 zUi~L8033vK`?k$Xs1+|Cj~bX~;Y9xqi#J!|BZj)T&>j?w>$;kgO~@e?Oz2&G3y3U%+rKX9L4& z?^cyROBl}W&lM6+)t{d;oa@i;86U1cpD>)~!+GCMJJF|h|yq>inL_9#QVQ82(d+ z^ZG*T<*&)#{CPdy#OQfFeOBU>E?!SxVtjZ# zomfQN?e%n_#3^2`&kc;8*V8K*&gqv!SL14hs5(Z3iyuSYrKNP0_tUXPBIILXiJ(YG1S z(>0Cp;q}NpUa%Ls%bO+lQYpoZE-hj1RXDzhyX2@1YFuVC6eP z;v^^6lOHgg>s158I~ku_Bu@Fs^kJPv{91-{JJ0Ls97#`dzQO2KdQ;_B?K|OI{*zg}Tux<| zD4%)0y(a024^OWfGSERd{ZE-H-$NO`nBgNNPW*X#k778_pKmcfJReFK&f_&1&f~3Q zIM27)4Cm#}^PlVIcNsmer-x7`;GlGU3L2FU++Y2S;mYqNdro<$=#`!j#_g)?P6_^; z&-Xz`2gSRa@t-bGi#NB!GbK*+w41bw_Z*3nJhwBvM&cyTZx}9N1CVirdSF+=zr;zk zAKCI9;h)nf<=7kjR~gd(M?;^5#5u{chtaF|1oflLNI3}CrOTBey<0<1|MRHi;Q2O? z(aY&4BL4?5Tz&=-cz=egWRU#2d>G8=Rs2LhfZ^%zIh4`w4z@H-e@$#D8UtB%D<6ZPI~m@}=MxV>*f5>nz!$S<`{D*4zH!^z8 zU-@9fn)9E_=sEu!4gW4i&-tIpaL&J);hg_44gaecJ?B4@;hg_GhI9UhYxt|a6|%wL z{4ZgAIRB#=pF#?RgGi5Ic#%LY{8)w;GyFJ)monVTaFgMA46kH(KEr1-{96p4%kTn* z*E0NghBq<%+YDdE@b563=QD4Qau_}J3)I2$`D%uHB>_RaUEul2`Sbj2V0=m$pKBP- z<)r?OI=GzFKT-#ma}~qAl7JvCXCcGe89kT(HHMcmdM=O2@aq_TCBv_0_*{l_KD7+L zlF>IY{7r`Q^8E?J+Zg>%87^U=|MzL|dWL&t08*U+Dlo39pGCOp)6r{{4}=dUKpv_; zPPiI#rdKLmgsU+G!aL}MgK#xQN6$CV2?ycoTM0eiLnj=BtG*;Xchd<6;p$rkJ-H2*gpqaIZkDQ!&Hy8LoUJ;#0tIW!njt zQ{=>3)#egj$mmtuL^$SB(YHJEa3eFQ-(9AR8EckwC1|c81GO&Em!T3|G1# zUJzp(bdjG5#k2DH30F3OUYyM6>m*OYD;YkK0C}9va5Yv#ubLQ6^p%pngW>912EAI% zaCs|2Ji>7L9;%Ml89rHoxb9+j1;hKx0bF`Lh2gmjS9OP8e~;m(GWt@6t1&TpJ%{0^ zG5Tc;S9w6MZ(#TgMt=*#s~G+a!->9IzT3g@Ga3B|8VJEb>76a^tdq&`A2NJ7!8U2F{uV(mGh7-Nw^G*s*@95ag@UR7mbCw)9;l8dM-%8b7Uh>oPrlgJjn2f#X_8G8BY95CH(~qr*w^wVIE=l5{c1eJHu6*Ncj5< zS7Ypi7Z0Sfl_rXJ$2Y~JQO0nJ_f=_wmNQ)BgKPvk8BX--o6}l`6Mdze-=NlMA&h== zCB8F-zD?q4ofe{9j-NW_%5ot5QU&5#$8eHI^^I3Cyp7ST^-_or(F>t)S(`$ybmbX_ zw-dcQUSc@$QGKVc7*27ll<9KIa#r!GF^fuu)4REaRs?4=ocPbBmpIxO-f2PN+|6)7 zI?{UiB*TeMo8+^b;RJ2{o<*NE$hs0n^tVX*LWT=^`61fJaH79Y($8l&K{>MVT+DEy ze_GP7X80Ar&keM%r863Yt-f=0=K{Wb=(Gc8EK^Uqb4R*<+X1 zR!1n#cp^yDzR4-M4ym&ifK_YtmXJ^(u>fJ8>tv^U+&2!ZWMY@) z#i^2H7A%u!ePVCs1=tX(rPf~V`gk3~WfJjd5wY6G*`{&&n4JS=67~4Re$+DIwr!*{ zD1i*PWh5jvRlr{2w9LEQ9uO5@sC>Lu>hs8HJ2jm(&~g!5=%gDZBj%~J?O~L>Gm+dv zHXcbPN5K*@lF}F7jh=9J(|5N-Q7ow>4nTZa%%(QeTm!_GULdx`1(FXoE$3SNaZs0`w+1` zv-R>|$Ut*SbO&@}DLR3%qh+5oSQXdD9c9gCy>S$oH&le9jA@0$dq3u&a- zDfW2KeT!Kx>%XtDCk5X}39MZL_E`cRTqA*fa}BH7B)O-S8tX{Y=d3G72hM_2%Q?O& zirR8GlNI^*lE4GNcVP`S3td(dZiaFTQ<6 zOaz?31YA_t)PxPa_Cv%Bxb35ms-JXVgzSr3CPI!+7>Jtc)`hiJS%-YsjwxKzD*7*R z3V-^gzAtR;Vylsk1Gs0N)>Iy}xRPpr!gd~v_;jt&L5r)8v`t_mRCU;}F4RQZLXMW( z(=2VSZi0Pj#;zwgV+#$jkKly)buHL-B&=}>RZ{kswM}wq)g79&{oI3QTupsrgFQL_ zh4`Er?*BrxsacB#ef-!^Vni@*Pn4^3z%n>BW)&yvcsMomvX8VMjeQD-eU-!VZuduy zWDff(ht*5oA32ga*yK>|w@no?a_)5I&Y=!x&ey5(96+&Cv*dt!y%}~j_Ot$Jn^cE# zI3Q7FR5S-9#!O3VeYG2t}De?cLv$iKzaoTH{y)`>NvyB$*DX zO0Dlf(;BN7*~del9Lh`0Z*9jn`8%C&H10u>;&Fiy*P~Bgf$NBzOqU!XIa8F zb`5p)V`&@Ubff3=wm9}_*FJ~#VL$jBAerpeXWwLUtmyV{D7J4e_V}$D%3M|FFb?T2 z4$YVsLJuk&s9b_w8=I=@ngi3YBlP*STVqkEDqJ6~iTGL~fvPbf+SaiiDjL9he-(BV z2jnlN4aJ)=g}`4a_IH%*LJinRQc$Ff&SU%G|3Z`pBcSBzZus5$~@6l(>%O;J3zV1Cr z=KwaotRYVRw9-e0?ls)rVoCbKoqi;?V755=nD){~RB42^#mMqtFXL@}M4Ud8OykE_ z^!!z5&s1H^ zB-g;9omYg;t=?V&Fx|2>F?$KtN0rs&pOTVAnt8*KCKJ8&Pm=+&zsUDrmeW4wZ5J{JNuXT$I`v{XA8L7Q_r-AFKNNY z>H2U)bd8EazSJQZ44u%}T6IGWKJfaBBeh`~T)=;E;Qu$k@_;jRk}-L*G?zz=`{`v# zGhialRA+rmVyw_VzQr-+X$492Pb$trXJrBJ`}AQ?`fw=}ztF;E%R)`z=9b0=49Z3> z3@s@#M%6SfUL0;fVKp>H!lS01HtR%`WX&SkdkEKt7SPD8F=}CRBYJfEeXJdm{QuC3 zVX3?sBCm7se`}NRlmD(5zv{vV9m3Q9$)_7${f{S)pVmQ1H~f5u_-TETbi=Ex4tyZA%0qSKi%*<9pb0; zSkevul|%e1G6=8M$m01=I+bqxYCQ`cp4M4PH@sK=-|zQW{n?R0{s(1v9zU%&mTvsB z9m3z4LHPL&;qS>Hyjrh=>)&59NWWUwgQtIE2Jx?SkpC|kgul@t{M#AGf2R!3+do=& zDBbc~>k$828HC^95Pnw%;kU~0^56Z1{ipRy)0Ka_LwH*EFx~Jw9Kw@LNH_dWhw!u> zW4hsYIfSS6RnrZ>+aWxyN1kqYL$1TZ^PkphO*eeDLwEx+r5irSAv~?~nr?Wt4i1;U ze+J>b4)N2vvFXNN=n$UPvrIR9kwbV|hc?~t#SY=AO-eU>sY7^Lr#9X2rbBpI!z11B zl@8%)ecN=y&vpn;>m#Ncey&4!S{FCn@U;%%b213ugBT zb$HVazrrCr`K0NFU+EB@e4=#2-{26Q)_+Vl{A!2rv>tG};qP<^|8559zt16jZU*tM zbqG)ECZ;QYw?lYZe>mOnTO7iZPoHl1tq$R7pMiA4Z+8ekKZEc)9Kzq4LHL~x;h)PO z{4R&^)Tc@}{kt8)Kbb*z6%lVgpUNP7wiJ|yU!6ht9Eb4lWDq{rAw2D?kZ%5Y9m02J z5WdhM{EZoeFLDU~X$Iko9m3Q81rm;5b>p|C4&iUgAiP?akC*?=8HBHNi2rvPgrDsY zp7y^4vX$2v6%zriS;TPX{<@EmS-jO_FdLU*rdz4k9kiw>k(T1e zkHTlIr$RXZFb9!@0IBlGmBio1mExD?LZXK8@Wl9S(hbq_gV+<#)bQOhyoyhSNqzR= zg-Acz7JjJk9HaXbGO>o*-og({VUU`CH{m^nm&>Qcskck{zlbB&jgnvG!|wn)#lMX& z9?E#6%Kvvw_#HC5ichgfm463bIF*0p=T-<+&Q$&j0V#e8_W*a2e`lKV(^}h3;djaK zsp(CXpT=~Y!hf7*{O@bR8X~utwCj8_y<8Rf3uS_%k zUu(k8NHhLdHR0#V@OYhcq}IPfuzu_RDedfI>zvI%&`rZOWu1 zTF~J5k#@6zFlvJJqt*AF^Pb%^zkT1_({PgRJ@@W?=J%ZUo_pt`?Od&XnHA={`dK_)Kkhg9T4eop8~l$Af6RZ? z;Kw5K7t;64YUAG@ncr{l^~n6H!5@jtf7#$0k@*+X6RI};lacvFgKtLWZ!`EmN9G?g z_?GZ=dUQ0re(?AD@-?Q=u@~KwPI>+DDD6YLx0`?cF=^z#9qE5Peb25||I7xLljgsi zc+J0}_&-h$iT?ck!dm`Z$#)jhKk@tfRs?=tv&r2h`X|Cr+cJ;ncok>3;PpQD>%X!S2d`Y#|}tAA7R zA5r{EMt)zU|F;dkBz$;J4vL@g{`V2X|E&1u8KTDTf1ai#p1;o-`I{pBUpM$6;S&xI z8eTtNHT=8fjb~9<_UHGi=zkIY1+{kktC9X+PT~6lckZHpnRspf42gePc=rDh_0fM^ z^6{RJr^TNiJ8V4Guq~pSzi8v1G{%qo)(hnE`dv5pmgFxDWvP$#J4n1%zlPM$KTmS~ z_7acv`$g^Tz-N5^@-c%i2#=o&;rO>2d~am_34<>QkK@Js zC3KS@ZT{RDng5W%mm~8J8~lBd`8gVp=06mfzscZ-BlBN0_)28{Qo0$F=D#g6ziRMR z;qhf89{{&5q~C4ja3M?Q(j7runZIKHQi4$bbC;d7Qt0G5CVy z4}t*J?{(s}`i)Bc%EI&c*PuS0f43}lW5W9FjjZ26;lq19bL4Z8^~*2O>mSSi;H)4WBqdGWtfp8tQK9@c-> zHTwAX_6Z0J(8=6u@MFT$<*B3L`Fp_Nj~e;DZvH{LuGRe;!Y}tb$`bSE5USO(GH}c<#^#6{*w}ju2;=j%CZz|{CUlsrTM*gagL$Ivk@t;El=3|1_zr64_ z!NXwv&l~;&@=Q|}p6h>x`dI%yBmcoj|2+mjBz$j*|4!ny`7A3V zZwbf#+(-ZXb-MqqTLgp!&i~^EUlX2d7B=)hO1xJ8b+bvBT2Wy3{|EKa|8pyJ|0i!1 z5Ekfv*x;+e?*ShDUm#xduZVv*|KC>pbMMmqyFUTJvWoss8GK&&Z@|N#|Kr4K{%6I% zE)Z9@M)`us42`nB8Lh6i9f z=D%j-Cl|Z?mhha|B>0zW(Eqc;0V6FXPA8 z--+bY$5R~*$G>8wJO2ECo5HqEc--IT`+ct=UORr>;-8ltxqkB$|31k_|FY!2+Xu-q zf%R`0{@Ww{w;KKfivOjG|IZBnn&kI@FZ!P|{7*&tpEdlqEB==&{=HOS+ML1qw>w4@1J^{K=La=I5z@5S%|>C0?69+ytV=a?;+3?>i zJdPLre{J};Cp%^3C6E0VD*m&(_4-#N|2ptZVEu!_WBo@X{Z|vO)j!WCE49!+r}z&V z{&mTxUw5>mV=a^Uq2WIv{5sgb3)X)?yyjmP|FZ1Q^|H&N=Tn%{%tY7^e z{rXuFK5hOlBwq8ci+@q_*ngSgKOp(&Uy=M9!595^8UACD{yPl+t}c?L7Wyw&{2PXU zGqV2K_v-b}-r0`Nq}Bg2;bcHRnqYjS@%qygJ`4MI!FrB(t^Q5%53fJnivOVGWBoICxuDNOUIOc{ z82)A9)8@|!!#{foSEY0Q->CQ(-e+9@C7+(&J6h7QmdQLUJl20y__X>D6R*{OK>Wk{ zuTuQ?8UA(2_vgRYM*n&5*XK{yryY@Y{hv*|=D%J1%M#4j&ozpFS@LoI6eRy1;r$}< z9a$bX{A-c^M-Bf8#hW*YA|%qp#=vFxC;T)vw4ecB%Q}$Mx$`@&}Fl zvy$KKgJg;MUo`Tol3x~%^ZC83=l%Hi82QQF4ou76Y2>$*{Pjxy2_wHK`AzZn3-9mO zUo!Gbmr)qCA$ecM3TGxC!wX66@^{GCSrmdN}kjQom{f3uSRJ0rgqnSavAZz}n{O8zpsKy#(=_#cz} ziX1<`!1=d`cg)%aQP*-XpjF^C4XRzt3N(}Ts`0t1^4moV>Puxo$nLRPI&wh z;n5e@-*|`ohPCf3e@hCV4F^koT>ohbkK@Jl(w}=xF{554&Xsg~#ol z^V|0c4G8vc i{=AOvynp^nj;ag)1=>-2{$M>VzqQ-(Yv2H2{{I120H;F$ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/execution_monitor.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/execution_monitor.o new file mode 100644 index 0000000000000000000000000000000000000000..c8d9592e4b484970f3e3e8020eeff99a4af1ae34 GIT binary patch literal 41304 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 E0sn1{j{pDw literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/framework.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/framework.o new file mode 100644 index 0000000000000000000000000000000000000000..195bde5725dcc745e3043da408220cf726bda657 GIT binary patch literal 179128 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 VR{Ysd6=~6-%#V-aT9JKv{l5N)qFGjrd^ z?aZ#xlYM*d{k`)$=iHBX-#u^l?##%>_O>>`(k8AKjTWOqynIEYo|e_L7!+x#`#ES| z2p94$f@?X|FNX5-RKEnuOR0VtlwY9w3Mk`LUkT+Zs$ULe7hLG}O2XDa`6a3+sZ3G1 zj>`2^ZlJQ4%4?uR=^xu(`}e3>d*9suPC94KE&AeWK+W1vS8wX*J=aMccU$_v-^{ti z*l@2j@BNc`NYuvqJj!iCI zF$5Zir0us+``)AOkI6j2=KiBGvnK6I4RcOvn}={{f!l+HymQh%efsp$72r{7pE~I2 zAKKLwdm+Y3<{`JMV^i%#^Uz={^_p2bVICjq>cFAGj>gEvSXYN^nziHP;W}QSOa^5{=A4XKa%I@qw@tN0 zU8Kak+HVwU?G)&H3bhkd9y@jF@Z@10r`o697%h1LSJ_Fp#NnkY(t_@%{t>$EjXO;B zCv5muNkeKw-apo;W9?ZquVAU8N&{{M_2=8>{>TYm5)O#&W7yOqfAr>|n_((GGLH{; zV7M<0$6!t`Iwl6~;+1Z^GENz;3n;p_JGP0o*;v~p=Pv0u3}cSZF7A&g?Oq`< z+~-g};}sHv?L>;9V7E|R)qT$Z*_VKej z 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_prg_exec_monitor.a b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_prg_exec_monitor.a new file mode 100644 index 0000000000000000000000000000000000000000..583bbed2362c4134a89af0f1645d8c7b80b63875 GIT binary patch literal 124684 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_test_exec_monitor.a b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/libboost_test_exec_monitor.a new file mode 100644 index 0000000000000000000000000000000000000000..3ee781482b55ea51ebb49037dce3d9e62140a159 GIT binary patch literal 1827470 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

  1. } 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

    A47fYsKmZdz#-TP#;5 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


    1VLs>;6$_z%Jh8~N|;$K^4-QGfQLMtt}H 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

    dmQWWi=F+KwSdL zD$GtZc@TGFS$T4!db%k_IY!_Yq@TaoA}|Ur41c4HTPA(!Ky&Y*$400|H5fm{=O5%z zQ}-V#C8WR;0hd!+`aa6Y-i;QIkdF@0%sgm;g7>is^4Snk=;IM10DU}y^$3kU;8E+a zi^@7k>qrp?0z!&3O0fAj1?l7;rNKe`?NDos~gxER6BY{#(<>l>gyvyt{igIXnLE8BX zZfHI+T6f>Od2vSN)8;1$xu7SI-nVG|lt|h*GWwEGySCXd)bE+z{WW zT5C`nA5>9FK?XVOYNH*^mgB}ykaiBc%C$2^xwn1vO_t(nUzNBzS?3v@*VV89Nwu^o zPG?Yid*f?SJ73UvvDSt;ENiEww~l$oQMET9iZo@LS_uw%>(w2>M9aa|iwEvL!qJzZ zt*Xp4PfZP)!-ZQF>v4lY9$t1-4{3``g{x7Xu{b5&ko>}9r*i)U4v~k{mb5VV$j2|D zpW=;_BHA0LA&kh{qeP`0*qnzo*o`lsr*iYxe^zh*Yo|!|Ukv1VMw8}-gMz~m_-AYX0My@lKQ~^J1 z0#!W^6i7ESqlF@2UX6{h&TI{J$%xP})Q2^Ul6Xy%chnPD&Lc#}P(RkRq~m#Vgop1i z8WmbnHH;>wKL~9E>LD=H!kWe+**L-jE3Ss2KCEG(**CAy-SGp1bk-2x9$V(Ql4qf% z{_P&$VH2!Fs2^$?OTnHP;o((7r9(Ykr zm7k-nIQr5fl!b763)A>Tg;PCc)Y1-5OYa>9*207U_El={OaH`F)8SL4KHjJZuHZEd zieM2{TM<7ETD5iYMOSIHZ^|4qmK;7+>f?+ps&uKtCz?KPs|Fd{pnfM+Mb0+n%{$RN zF_JA9DP<5he(-U!yzsF74so?+@o zppa@|&qygBky}`+TeJ8UjFd94kMJpG2MWcqyjY5JQfqao)Y2xsoc#AW<3Pl{Pn+&; zuWwD4IBrPwc)yLZ-5rAm-NIv{^!AWUJT1AR_*FMy2*B?z4-abBbcvi|VD*Y%vrZ;U33>LE%U20bzOpE)R z=pHHUaHhsZ^J%41T;Ua!cTc!&GLf7pqDD?KW z=gEMi)ln!}orLt{ifpX-d*(p4zpv1frPz+w-Ut~3g;G1+F4;@p9SJ(Uq_4YFPM5P* znb1H%&|+lM~Aa0FD&Xy_b+jnM3dXRxHKj4xn4TZt6f|w6*YFrXjq(%$0O(%={2b8pPk^5X^lt;60{jEOuLnNstS8J6HlZJm0ek}RxfF1;>qd#Qm}Ows zQ$UY){T}d3fd4Ciqg~rdzw#H_wF}^A*B*eQU1tN1`d=(@UH_FpkNQ6bIO_il;Hdv- z@(F+VXViaFz)}CL07w0^fL{)NyBct$e;jb+-@1WNN9comP5~VGTm?Atc^7bulZhL; z{L#-dC9eCq1oY_V{|7kw`RjnApKk#i{k#Hj)c-!f(cZ+EVEqq~xUPQ&=u!WEz)}B& zfTRA)0Z09>1041LG2p2G4%Bw>hvN;)_XNO^{&c{R|C@kgIsRATx*ztWwuL_|7yU3E zaP&hn;OK`Qz|jwRz){bW07tuC0vz@Ko5Xefx1l=4A6@_507v~l1vu*81vu(I7jV=+ z4LIumAmCVzTW;#=iS#XiBmYYQM?c&saorD30X>%E?*T_YyaG7-VcX4IJ<$)l0FHX@ z0XW)qHsGlL#S+)`UkUW6|6_oo{?7o8`j6f`SpQ7{NBy?~9QFSS;Hdvu64&*=8R${} zdjLoMe*rk^|2E+0{|^91{ny#TwHNg-0RAGyq#BRS+0vy)yLu$fcHubZ44_B5E&?3K zIadOXcKsM|wCksUqh0p^j&{8OIO_j~#C83*+RC*T_5U>BsQ>v2oa&MEkF84X0N4b9o9Ob?XILd9=&h`)U=e}nJ|A#)) zCC-0d0p*@G(4PqOR|5S_8vR^3F1!`!p9A^_0RJ7}Z)tosljDz#wioI;^P|lrzO}?z z|8=R4Q0>N!fMa}40374tXpR3|Id1!+hWAMPhrkERZZXjR)Ih)fPPRTQcLy4as(P`f#8v#LdfEW=SWhPbj`ehlorC%BEpf$v z87n}a{WW~K#3yUGs_(~YxT^2n66eP^h5CLn;Aeup-v%7(#WjGVe;xxI+lN0%T-mi+ z#>2L|2=knFX^q4uNL=^-Oo@-9$2JH3(+2u)0sjjrmQ^{P1N2(}pNoM0BA~z0Kz|d^ zv#wu|<#MNnE4eEr&ieBlLE%qn^m8SjXC=;m9t`dLs~WxH^Cr-51^nOD=oSBe1N|Yu zfAp>-kUp&E*1%^IiE}yr9_Y6QoOM|0iR*ED0r0`Ny$o>HRq1mT@W;5l0dS1lRe)o;KLR+$;Y)xc{ht6w`oBwD z#jWzgyFia|yTk5wxheVuvRpo?;UCC+?!Fp6TGDrFcwXYiNSyz~^37=UE97{lpy5jH z*&4n|(qE|IO74{sXSrDJ*GrtseS4_Cw*Vh3_qzaRUP_;z0e>v_UjdHgwHk1Yhc^L7 z`gbL+%0=1rZ=lC=Tz@PnM<3P^{6G!gOX3*~FH3yB z#Q9Gw-;zfEfgB%xS;LjwOErA7Y$vbRa3%LPiL+cR-@7HQm+vazgXQ}$;LJ(6>#3HWY+Uj=v*;JntO_#XlIj{xs6 z;0pjBO|n(FoTTBc{3CsqYWM_+pRVDDN&GSmpC$2oB+h^C1aWdd(4$>X1J2JVJ>Ql% zW60-yphv%Lyf+cjhy9Fv#z|b~lK^@wmkEF)pA!sx<^esH`$E8x&-V>{E(CgvtLp$q zK93mqJO%U^w|@W}`K*bg2oaqb5X+}Ler+JO)DgVO;9 z9dPu+cQroBpBDo?_6t{P^vVy{0zLMdHv^9S=KX-Tf}T$T|7+HF{k9tDZvpyu0N)Sr z&GxbV$8JRZx0SdUpFp|n40saaWKZC80PsH$aO6J)@E-uZ1vt{r104Nx65u$VIaA^s zhu4CCRsnt;;LihoJ>dTW{06|cWyjEm`6FJCIQw%q@Xtb^NB)-?=zj$CsOLil`X_)M z?ftufe)eZsd%KTn1U*j%{L_GMxvxu)?ZB=E{9AzIIBnK`!F-N0;I9LY@$er5e#m&2 zKk9!R;8@?k3OMrro&moQaE!wn0mpiJm&7?vZiM*x1<+$XeF<=^r|$rcdj3b^T+G{V z?6w2z?{E8oajd7CNu1*o>*=QeNB-jh$9g&kaIANI5@&mF0(+MO{$s%J2K*<0KW)HU z8*IB+|FICChe({|BL9U3{35_n&$fiipZ7MXac>&%&j9{+z_DKZ+kh`fy8N+TG^AV{ z`5a`x9|0W8>-PqH_ePgL>VFX6STDK&M?Wt%;NJxt<6$}ASTAmpIG5MWQ0{jDJ=Tk7 z0LOaqI^gJswda-Vk>mRHaI|GjV_XHg4#le6h{VW514B*(FTqAMz56Ain z{ttcb1$tbcea%4s2GHaB(Lv2NKb`+1iL*GQU#!uqb)qi;J+2d-1vst~-K_CZ>pKr= zxLV)&74SI{>fLVv$9NmnV%x>~qd!|D&i38{@s$KY6%KsZnd7Ywm-<$pK*+n7KwAY+ynk81MZ0vz&&vS_`SeqCEzUk z1L>dlG+g;%%)z#vzBtiv<%hjAT=`*^#95{%P5}QS#LqRr=Vze*8o<#HqYrWQL_h2c z_8m|1%tKrHIWerz;xJ2T*AMOVH zYM6h$0QkjFUtWL0S^=StBqk;Zmp#LG*`&)^xOJbHm`TiT|F97<@+HHMC)7K?{ZwEN;ZyYai z=Kl-e-vcMu8ysre#dg?@pOt{Kt}A5RzNg_TZpTcw?Nafq;&yutS8=K-W(fFS8KTP!)+R_{IE*Hl^@=cxbBB7XW4c!j_p+vaBL5c zmH0TK-(eHit}_9DY-1O{6ZjziRX~5-rY`*-4fL-A{qaD*+mW{Ztd9lwQGlNSctPU2 zz264--Bq-wpNde+=~J z0euGO9|F7w@b!*%^~?gki^O$(+JL?n=x+l031IJo66ZL43gYB#z%fqNJI2puGS8;NVhO0QaRKr!A+^FFyP9Byx>w!h)8L;n;Mk6x3plo8D**pB@L35s%U&w|@ScV%KaBajttacl^vVz0Yq;{mUK+0a z&?#}|;ThKfj(MuWO~X7x3QzpA_J%(=zFY6E$4h5i`A;#&~OzeV@|O3^tBrruHs}b4Oel}DRGwRX*U4J`f|0# zXTve{Aboyug7|Xs#tMH#!`1rrQwIDW8m{;>r)~bMC!R-fs{tR|9ZbK>fNz)yrvE44 zxQ@S|$E8R7Ap`#9Y%u+;27H^|VEU5`_*Djc{dvKBS`GL)2K=uEykmYa|1}2ui#eNK z#jT2mQzXvi`zF-)(}DhXP+u-J;8z3AycGZIfj{n-cuS*SD(AmrPxR_}n#7YDzRQL- z-N71u3Ja&t@fyCDq(4!^RsLt8hA)+TzOUh{q&`<@xT3#S!<9a*3v9iZEzTbgl{l9R z=5tO2dYr$U3^>kTP6Zt2FB=qGxmaILGvI3s_%#E;d|ol&hn^Hnf29Hcg8`pZ4CeDi z1OBW5Zz=`z`K|#^l!NJi1^5jcyZMSg0FLGRCy8_Uu7-N_9?;`?5gQGGjKoTR{+O-U*7;e2Y}qm z07w4U0FL{6k}|1!YQ4>tmidfpCr2k>73IO_QT;OL*<81NkzyZ%A_uL2zPxe@R$f?c-&j`}eIuK`E7F9ME!dkt{(+q;0Hy~i(c?Lz%~0bc_8F900%AC&kwVuyLrGl2eau9tn5`%4-hbDE9=3b9rI@stokM2K|=;j{f;7@M#CRKLGlPfL{eTmg6me zqg^WiZwGzu103yo9B}mK3kH0zrLI5GuBCvZKBocR4R(D4aMb4MqrK~X$@R|^&~rn;(cYr~NBy&aquk{Gv-z`s z@EnphiR=CQ!4l{3vgIDKi`1gV8B-y z@aGKp-wpWsU$*_J`)#a-t97^iHGH(3FB~Ru_A}03PSWVrd}krh=fBp^h&q29wafnp&G9Cd(Q+uCqbOd0UYDuOMv4z>U$c0 z<)520e6E~N-K*g}5`Px>qyN|W$|&(sb}9ZFNSw%Vm4BYl@MSX2U(oR75`P!?WBl)Nn%6&y|EDC*{z3nL$v}Uqf&OZZUitre zphy4T3po1!WsQ&W|GzX``TxJb=WF2q4ZddEJDR@G|N8-s{{P)NEoCEy#HPBBm;9E+Z^*km5ACwz~-Xs_K%#9$|#0T|1J^~+<8-?B^7x{EY zkZaOT;H56X=~ zZ<34cLmA{w9c6#?erL7;m&=~MaUJTp5cr$o%A_ayXK@5RC^rhdNiOnP3UZa-*gsza z+(f?v_zmgz0DK1npRWLpA-(GspmNQJ_GO+;3#)8*oAU8 z1^i6lL;ov2?9a0T@NtBn4ftnlauIL1p4e)@4>RDs23$_x1%I5EjRpGiK_69LcpAnw zj2>eX9wX@$uJ*}T8m{J#a{0p9_oDV|oubjJeK@CU_!ueoI~uO``Fu~q)%!%tG+gbI zxm?4QUDs&1dSB@#iL(z5qQX}F$n6s6ay%IDdnC^O!SlH82ORzRONldv=W#s=^uLFB z?z4dNGio2y8i}($cn<1cfFAYv2jIx(J&Ei3tRn}$Y}X5*<e@nH4f0wJqQ%cW1zn zeou+(a>oJviy$`vI6t#Y$~_2hlsg4*q@ONvU2Z4PzXWnW4>&)wRLboI9Od=_j`V{P z*X1q+`agi&uL91`%$0J_0vzRjA8@3`UfPg z%Y6*!`3wV9zkUrkKeLOJ`x4+N_cg$g{_hgk<-P;-e+0Sz0i2&v>kcX(rPu4N7@!Y- zA^naL*X51{`d2{irvc|@R?EC%3UIXd0Kk!clEihn9YFso$ejf^KeIy0oeMb1%>a({ z3nZ?~Edu>(Aa@Di{EW)4ehqMx`)$CH{#=RcaxVb-KY`rK0Ox0xN_%er9Od2$IMUxO zab4~zp#L+-eHd_lX0DX`8^BTS?*T{pS0t{>eFNzK0&>;8ll(J3bD)$vN)C(|N4XmU zj`UkdT$j5&(7z6HcLkiE*+t6T2XK_z065aON?ezF2++R)at{TZpZS1(XiR*ID2Kv8&-17nFXI4nL%K=BZ*8-08 zH%nZXdneHU9pv5zI6t#Y%6$}Yl>0Q`NWWU*y4;t6{!Nhk9^n4~d@p7|9~I|HpOl8H z^OPn5{uc1*0i6F=`BR;2KEX9*O@P@c#uq%73a{mP&dqQ~oIYG>NaPzUjC3fRD0U(Jzy9DWGRPm&?B= z0scPlQTi%ADUYKG14;K5 z&@&&kk78Xp&SLui03Wq4Tk%oju@ulVA4N9_@c#mz9>AGijVIMTvx@%|Np~vHk0PBN z{{YT>=E}cs)^H{7=YX#Rd|m>a`7D)xzoFr$$-n;>aE>LV&yI4Qs`Otb>Gsy}dnU6d8fbKjRZ z&o?J+?D}C{`hWhgUD*C_1h^+u+X&B(Cf|Q1ZD&!?%_ADh+Rt_~RNrLE_JA zxax=gsNvHj{Tmvt=-<}xeI@<-8a`d(>ynN9(e2t$;_M&XZ?L(<#}WQd;;H<$9q_?; z-UV>xrQ&K2;E(bA8IArrS-$%Nj{KVeXVPVoo^|Grvg;CwAFkooN_@74D?Ud{oXJqn zQvt_)m8S!a`zQHbNd7P%%qyNFaiynKh`(gO50sb(K z`%arR{z@+AB>AKCQF5mOAN1!;z)^0K&Bn1;#s4QHuIoS6faAJGl=VlXkFws1^ikHQ zkUq+K9MX3~JFssAd!wue`y+VKf82F<qxkc$;LkG*?cVpH-Mbt3UkUgw6|1^SWfPo6`m{>9`^nNAb) zg8P8JL)y!I0`?1S;2#`UARnG1D7lsLk;8W}{<$CcY#u@GgFr7|Q+CEPkI3i0BENOJ zx(ztmh37`rga2c7*8j;m^MAU|{P7%>TKOO2?OD)2O1%9J=y!nlL_T`}j_;RYTt(qC z*1%^Uz)kh>1<fibiS(v<4eE*gLM!k`KBjhF=|7sDLwZ&3#u45HdZPYF zf1p7w@+ku!lYg*WkiTi4`Ba146D6*fi#)Etm&bU>K!1aQKhA6ZwvpSPo(}XlPgMJ$ z*q`r$AFhz}jQ=m-cN+NI5A^Q={YW0?>uIBlk3<&aQtI^Jko$;y{kq~jDOT~g49#5kDCFGai#W!j-%hd0(KoN=@~x*@P5G8 zquiSE&!rM)xwwDwM}VXMe+)S04Y0k%eUgU&J>oMBxZ1DC`XIf0?OW7e#8n#~z%hUI z9N?Iz`UBvYH^cf~&Hm&`P>xu?rU8zAsFmEwz#rw-ihnhBJqYoclX~jq`xOIzwgJa> z1N|wFv-0)(=m(rXjs$&hJ~$Hed3uDE7tY5=f`9OwqU~gSj-zkX6ZhM5tgCj?6wj9$ z;`}6ubN_<#)>92Q#`(_Bo}->vz9T`;-3)qSy%-64@|v>hPtl*)o{R)N@t!8s6WigD zpl6hNG+>DHO8W~_{ZfA5`i1=n)}tupJ`(hdQr|~{o>A)iNYFD%J^HZp+(*_6HI7p4 zQX|xteWATN6mX1ldA*ESci0yCee8E|Jdf++$mcu2AIImIS44W1=iz>n_ueS|nAD4*;D1<`2^!2>6x)wef=h-%H~B+`)i10DcJIDsRL5kq?&p zB%mJ)e9+#c0dF_p$RE$^+XCqEygm~>zMqTqQQpt(0K1~dMfz&w9szR4N_*M=$bVmh zAMkx)^c(sa{eXU}hukR!JymLNlMbgh4Cn#67 zhpN3*^DosN>iCZ(A00nS;#^)P{i|93s>W|o;8PnfWK+L*ICE@LFe;;q#y3MRqGMD+^L`s z`Ul&+DE>E%x3OHX9l&uZ#%HDNz=P2#QaOyMC{PR(b z!zlR{dEB)aS7ZBj9mFTr-*E|XFV_3hiw%4*PNL+C zK8_QAoJ8r5K1y-22h4LZKacAOAIFJ5PO!d@h5B1feqf5BUPqayN2%|Nfj^Gxz6|=K zUFQRicH#U2`%TmQ;ujzn>3=J6y?uMhfScwWj{|=k4`6$^Hn#s4fnDe~Q-0topf~v; zN`3#o94FO`uWmB<|8|M%9}Q@lm# zPsf7(*e>CG6WgT;l3pKQ%>q8?x1)g`{ifDm^!$LDzlYfsW&ZMixgLGoANk)~ue3iJ z3-SDMy|CBOu$^2R$01Srm;cM{#>eB6@OI;)+Mh-lpMO~GVU%^HksPS8IA>d^s~~R{f7GtTY(<;8PvG=!dgPto?ia;&<8GkG z_i!JUxUT1+vK(0-oNvy7@-=8wYZC-K4ky_bOhr_0}Ueb~SJVLoGkf0ICMd$HWp zfFu9;5@$Xe0Uxyv&T^5@$-oEO!><93?csTVV|%F9N7xQ*53i8)jAMIvJ@CQyP_+-N zC))K3NzZm|40b&Re9*4n0gmnJ%Yb9N?Jnyn%f60)gZiHcd^QC> zc+MX3!E+Lj&$od;*6T+A$M*|FK#@&s*K&x%Gue^!;V=I85&nZdmr9)JvA$dfIJOU} z{_1?51bX!I<3fs^KP*z8rRw!bpg;N_+wIN3Z;E$F zK|j0&IQn4=X|K-b69zxvc_~*wxqMyvN9Tj>66*6~Nw3H4y})O4@EgWI`t9$)2mSUA z@Yw?R{1@nv53WO@pLa3%t<~UvJl_)IXBx=GI5`b)tVgec{#%m%QrxJ&YPgEScLC=z zQ2556Kl0xZaO`&u1RUv?8}J7V`1TM#$meqgT;2b|@qqMa80fDD{A!59p8<~J^Tz>4 zd!Lawe{BVE^16nr`Om+A560W(l0esA-6z8Mk3i3|AG}`!@t*BCxjsUHaDnN55hFfO<9<;(RjTNU!esVl$BcDL{|$a0cKQ z532yja(q_edO5xi^xp@2cYwG(5Aarq^KGcyW!Q{5M8lPzrvuLatMKC`uG`xOIQr+i zfMcAT2RO#n&444Hy8y>H!Ex`l5YIU7Wn9@?>A3e}{`N%CG%r}&{j(#q59dRD`5fSU zR=kRT%;RC+uMg-EKSkmkzL*ch`3vR)zXyCU{x1X^<9|QEaa^tPZ`^KR-s50N&p75) zRQa-=m^XM{(sO;seql7UOPIG;=an&kJU4P4v{$I78do#@?cnF{8t8uja_<28M*;sS z;J=kP+r|IxEBl*2Yq-jvya{~n1U{Sd!}Q_DQGb;uVg2s{`eT6}+qaVe$M=^{1w0LW zP6r&{Q~r*`SuXnjLZHXT-Jwa!V4|{ifOn{`nIiSG5BQS91Rc_@lkc z0Y`h)_=@FXIo>Jh`D+J|`+$b4{PPpQALXtA9Ob?xah8km_8#!x5#-`Ml8h^Rw}kqO za`yrpg78R1@?pQ-x3Sw_JOli(UwFxY{{!%c!9Q)#K46{==S|2T=S_&OH1HV% zaftL=8}Qi@XM0f}oTnfk%tIpnl7Y`ShzF!^G~lNh@b4J#-y87P4EP}sKd2AR#}WU! zq}Tm(hXLP;=H~p->8DDZ-NgT@@xbvCXLcxez5)M{fj^!%i*c*Qy*mF6lE)t%|GW(g z9OL#&64&)t>ypgpF^KcyHF`CVC;@-8_nUy@cpLMpj{|?)XLaVrZau|y2ONLC4E#~< zUjWDP&%S`)19EZy0P1rT(4*WQz|lWBz<&k&e_+5bG~l?-j{H{ueH46WNzZZn4Cu3) zY-jZH#k>&ee>u=2ejDIV0e^L$xXvH*rN}1<^&0Iu3vi@Y_w6!&#P0_G{1)`t4E(@% zqN%uLzwn2@p9lPYf!g&5`TQGj?3cHMb{qM87W{+sy?|rC-v@ji1%1@`lk4g40bdGy zUI6?Y;Dh?y5A-Nkt!J?xQ0`NbUYGkj;Dd72ypziX?KREo4+DQ*4EoQMIO~J+!S4W$ z^YMp)56)+Q4fHr4|CfPYl`qT1`FH~S`3KPRAn*_SNX^F&*YHi{#*ia{&&$B4U*haH z)PE4@*8u%bfganX-vEyD$`=4%3Vd+>g7Zo>e_?%a-i>)$oOiFs#?y!Cj|Bdk0FLeR zHh^RMjQL)i&!!|jfAPPnpPgaAkC8a*gMK&xaGYP`{tfg)8R$`;rGTUU)x1fxenJUkrSr#QC!u zyZypPDbA;WT_YjRcY|`lILC8_AGX6QG|pcKK2hTQ4WP$3|102nobw)2{zQrMzX6{p zasGFpuO`k<20l^Z{8tbUAEh`y6zr;1oG-VFU&P@*z|SuNem=n5Lr{`xJDdl=w2PUw{QIO31@S)U1VS+?po?*TqI-)V&T>5CxuYKb!sXHaa{39z|Vqs_%z@+t~f~Ix*w(*@QZ*C?!&nr=yw6To&zY78-^k8an_27Et>vp%?wViMr!=N#bZheg1DH_-nAphrJk4mj$+ z0&vvlKEQDt_z>VY4tyVQbxEXMqk3R_bWe`740DqRD+L=wLF7Su#LVb3WIMa>=eGUS8EU&`=N4b|XbNVoU zoTtAoP#gbW&~sP7vHhGb@p1Hxc{W_1dLQ^;J_qIA0{l_#O2CnRU1*09-x2T+KrZHI zkY4S>XFvQK=<~n_>8~{4_X7Sd@Ocq%oX5Rpz}32y?#~1lIDPmF<77L5+Ig5!o4V~Y z=HIZq&I9^&fFAQdxc^qYFUI~s{oj#%7{~rXl?&^S`J%DXUdA!6qVo279HPDFQXi`N zor%&9O#dGES9_gE)59V`ly#V#O z1o)#Lo&`Rr&kI10`K4DR&R?j{Ux5$m^FH9H&rXmhM7euNT=#=oPuJx(03VclB;eRS z<9Zp!RRQR+ef|X5$saD?|3bO%DNq|<590Yq!0!S2uLF+t;#`Tdz3)P~Uky0kdw8pX z&(DA!?>*c^#y|Uw|9wQ#ncf%M8QKTzztp-s`vLoR%$Fj)+PAFJPXPYAg1zm4p^nlrOe3c&}U|*oEb;{J?z1 z0H1FF{h8pOYXL|7ZK#%36^26+h3BX_N^JE7(PD0*-RG z0vzLHZ@{shjsqO&v3{XHpRv{P>61X*P){r6vr83xCWAgvFE`+8JAXB==P=@b)%z9dTgSVkpBd*qNVOaD47eIM>hvoO^!VP#3Mem>%X>(I zF5)N`ag$tZ&vAUauk;(YCx{@(Q$5A?T%_Lv^w}TeJ_7i7z^74J^M~z1d^r8{ zSD(+oKJ2l2B+RM~O0AJG2=`j-O$$9Yg2 z;O{`(B98QX0sT*a9&xqbkK-J1weL>HPlbAc^uILVTQdXt=zKnJz%Mi4e>UJr$m^m$ zrx@_Z3^?Z)gY-PnfZt)jH-P*h>eFSwFEikO0373C1IWMa1LZqb;#|!9uj;>#Gtl<} zj^jy{Z)A7l`1#8~kMln1PO;DAD=<#pmz_x;9=D$Xc#lAB9PdH?mc&^u-YQ5Z}@&X#=A50C)Yy$cL)4Nzy}z(w2SeY>s*OrehvXWmM@^lS?h_puOj`ydx7o&e@=(Eer@1VehlF2LB1An^L=e8kL~w=hP=eb zg8Uv3*BOB0zHSZRmq5JeX9wsR2l5YsJeKdHAb%#v4~B6K%Xbvul_1{;cpcz#3|z*G z57xI=LH;&qFK+>k?fO5U2lL-gCQSTT^M457I9}j;g18TMXj)B5 z5AK5n0Ur(ZAqF_^KU`|yGH;LWmRX113iuBJzgMB>5s?28$nR>@b6Jh#uhoW}c@9&C zjpb;L^Ag8>q`}aR4g~$?^Li1kjK2IIdwnM;dWRJ^0)l&u?Q~ zy}93Og?iGP`@ItI^Z)z3^czC|-|waKfc;(^>PZaRsjA<50{Ro|_nrh?r{DVt$mgTq zI{@?-vfsmeZcqJQJJgfj-0zixpa0+Q{eQown(rl{p6K*@&p>~I{oc<2*Xj431^ImR zd*1^6h3xk*pWJ@$CKz{coj4EhOQF0T0Q@q*kA`_Eu2anSjO6@tCdgj`>o{DO{ZE1S zgY^r}SBC+PdMW@%e@*}#*Fkt*2-o|#Z;bi5)5yb-;&)tsy$<=o_5S-HkL&%v0*>qb z{{VgkKe#CqpZ^R+>;QH}9fMZ;90LS)n zGvL^tV4kr*G4mVv&|C(&*vG()k zIS}bj2l#V7*u{C;C4ghU`XS(WzTJFYAnhI`o`IU@aLngNvfbhNcJq7L636E(IKJSy zck{WA^#3orX7pbN?HB96+1{l*&d<&EE^(Zno96(fKXV{IUn=zPV)V~a&rKk2_8StP z3-~RDyws0*Gw=J7|9mjy?M0Bsyy19(d3zV+F>mI@iPA3S2haWDx$%==96|Ye6!-%M zF5|r!;#~^(_}wz)^)~3iJbwW=+Wjx+`7Y=;_y48cb3y;NWT4_l{)XeG`JTGO@%@z3 z40)M8`D?ZKC4bHYJveTj2ROFhM!>P1#sJ55odg`^X9A9PvHe~TdBFCI{a9~qzkg-6 zUmU-%{o?rLrTxx>d}8~(74WY@`@Id~#rAsQPY?Y9N; zfbAEbYxm~%`!{C$#q$i0F4qva{@n-GkGPII7;s$2;d2UH$4xZk zj}-d<4()dy=)rZ9`5uIn$Nl6-K@aXHo8J+W%MV+!`(|>c{=@~;_s>A)>cLA>k zJs$v$?Y$Y=7uMU$3|!j9dTWl4(k|B9C7=iE?bCo`z1?8ovfSrF`ECLEn*qmrkC-#`zxFZ2AW)Q|Z*!)Py(hW+Oy25!yg z6@X(tZvY(gc_-lL=VAkw`N8**mjiwR7WceeD6LEP5j{K20>OTr_^at;`LOr8E9{s5U9OX|+SxxspZ$N)L z#lWRMc+bODz_EYW&FJ@JeZc+}&nIJli|>bG|A5bzv45BW{p}|(zgh(SE!O{sL4FI= z^A&*Oy%TFd54JD72LQ*NGi9LSN9G6fVBU)&{~7zqt3V#}@Lj+$5BUB9=HYpe$9O*h z9Q&&s6#d==1#Z5NAp4C+px;P9e>)BGxd8NF-W~-U{ls^J^l;4&TZm)S3w?Xrv_k(=AaB~2`j-Q4xRtW2((??+d(rc( zPkNs7NzV&D>3Pv7JwNwJ&&xjP`K3>Ke&v&%-}t2GRiE^{?vtK3eA4q1Cj>a^c}bxs0`jP565yz3l|s*hAdh+`1CDxrq0loGRGMO^AC_mJ#B!ap4Sw5J_UKyQx7=mS) z_Z0G~`Ooh_9{b64fTN!(J@11&>iIq3s7Ez#`~y?|1E&0kO!*B8c~u@h0(s2Cdcbw^ zuu&nevimW}qusv(j&@agHi10q`4iwedj1absON8h>*(1G@?P|OrqIKUt4pEhAAsw` z^##adT&jAaDz7aHJ%0pT$DevA=x+aO_wA132ne#rq}5 zoAzaY`(MCy^z2}M+(-zc9&X-tQt094ZD-JfdHWH>g?Z}(@;dQ;4dgN2T>wWts`A|x zee-XM?h?ghAxo_#Fj{O@$tA-u44Mm^W2_G7#i-;{7(rW4zx2Tu0CTAdh;uc{@;{hnu&9K#xw|ia}l{ z-a|kh<2@K~)T8Q84h4A~Ke_$h;h-P=JPdI3Q`Mgw0rIGaTfRpr^l;1fXwajRx1k`f z6Ynt~kMRxzTt`m;8mE9JQN4w2{>)35o$gAuoKpyR00=SOd zq(WY0cN)l}-FCor>~<*RRdz20d9*tNa2>ld74j;(SAaa)y&Q0~tI{(Iyw`E`lM%`PkL_iNzZ(r^xWx_o&`SXxyL6x3l)0q104Ge z)i`*+LjD1PoBasx^Dkn`Kgg8-zCvELkF*%%ab5oxn4jSO`8$APepLE@pwRyi;Hdvy zg??4P{V?b;^DUoiJPJ7GAN@!9AA&sQ0ddq*3Vx!Vec`z_>iH(%#YWi-Mi#RgI8Z-eLWs2}%#Q2)!I2lf8~aMXkK1od14@~CGv;OJ+E!cTne ziTb|)J*a;M=t2Frf&382&pVLk62P(CM*;pe$kze>7U1In|1IE{w@(%IC*N`X74lFC zex43~Rs%i;@OuYC`TkFlhf^V5%)@Db>*S#mNB{q+@c$*q59a?9 zz){b?6nY*89QFJY^b|vRJpg`UIj#qJEXNN3M}P1+GS;gNAdmk132@Yd=LAsCb>JuJ zX$Ktj6v23hdYVBV^~?ku_3Wt7^L<60cL6<^=br#R1oFQY@_>1M7jX2akHVjIAdhjq z4>;=CMWLr2{6swy0Y^Q36?(n{@~Ec~aMZJ#LeF_1k9sZw9QE{5=s6$cQBMeP)bkC6 zp8FK#z5?=$<^Ck-9|Gn67RY0{?*sDa51u!``aB5aF|HwiqaHkOfO^gWdDIgG9Q6!P zbVqf)N_DB&wNFmmqOk!&r3o75XkfEAdh+87v#~OVue5Z zfjq`_7~rVqV1=I9Adh;c0gieGEA&J_9`(!s9Q7Qg&~pXIqn-rdsAq^mPZZ=)PY2+r z=SYQ~TNLHK49XG9{c+Gg1j>Ci$YZ(h4f5#EP=!ASgFMD{IN+#fm_pAikVidjfTNxg zg`PObqn^tEM?IwqJvS=yyd3g|dHylz9|C#)706?r_X2tJ2hT-d|8pqFV_Zi9j(RE- zaa|4asOJ*EQBS2p&s2~{J<|b4J;y2ZysB8ol|bGw&-Va61oEtUk6=fTM}Ll2`12cu zKUJUy{rN87I{wT9dGzN*g+ISi_)`gb(4Qi}b^O@@F*#h!9{`?E%(Vx)@e_jB2^k=xjpD#dO$Dem*kN%V@{OJOD9e+Lt zdGzNDg+I@NJo&h= z{u%QJ^-opkzg3~XMxkHcOJ@F{{u|MwL7M=SJqDD+>Y(EqeT|IrHl8$o`E zQ4q4;s@5GJgFKekH41;80(oqALlypf1oArm{2AoYpKBHV`~>9DpQ9B1Yyf#3fBppW z=+E^Ef1Ut&^ygTGKOcg;jz50{dGzN7g+GsjJo>3{m*A4&-(Gc^~A_pIa3EJPPvY&*2Jx-UE3Ze|`t@ z=+CVRe;x*T^ye^zKWjl=$DemW9{ssp;m<=LkNzC0@aJui*YW2akVk*+Q26tGkVk(8 zEBxsMc^!Y=0(tc3E`>i2fIRwhh{B&YL0-q7--0~)bGO2u`#~Q4IauM(8j#oV=M9iY zf4-;i=U$LUe-2Xk^BTzO`13l*qd)g5{P{1~MSqH59#{^wa^~AMlBQqn;^%_W}7@M6%f zYG2DiKj!lpz_C934Df2uuWDb!HL!P0tfG+{u{Kln(Rs#M_qX1tB_|bqb1^gJmR{n`=&1o#AyzZvjWz;6M3HsH4cz5wvs0bc_69e}R{{4T&d0lypYjevg-@U4K~3wVEH zP?YiB5BOlf9{{`(@b3dY7Vw7vp9uKFfF}We6!1BK{|NAffIkNKQotVvd==nN0KOLR zp8&oI@TUMT`da!gGCxlPJ^=7%03QPQvw)8T{5inu0Dl4SCcs|=yaVu`13nk0Qh3SKLC6=;C}>sHQ;{&d_CZQ2D}UKj{)zyYx*xTZ+``R5a53U zyae!103QqZr+`lc{2zcP0skEEIe`BY@P&Z?3-G0Y{|E3@fd3b8bMH>Z`z7G=TaEHZ z;ydh+`eXWk#-v>0I{`ibaP!;il3?zsO8KvW{78^DzX>ko>j3{c$TtDLJK*w8e)%Ky z?*aH+!1n}v5#W0RZk|z;ddzQcNxiRt{5L_~JR2|N_XB)0$bTDfb1f|8_Xm97*QJ%T z{|5p-6mavK*HW$;@Iyep0q{csp91*dfSd0oNPo<4rc3?vK>jF@UkteUtuZOT9Pnd6 zel_3$z}Evl9Plo{%K`6eEcT?IBLE)+copE4fScd)kbaH@{CJR`2>6MBCjmbRaQQ6> z`6K-~1@MJ{*8*;S<3P%v2Do|mwZumQz83V10elnSX8>-#lOpw;3HX5B1t5MTeiq>7 z8DNRm13nVu&jGv+@bdtV0e(K<<~zAk|91di1M(LFz6J0g;De3Dywno{ybka%;2nTR z0ACFFWWd(|9tC_0;8Ot~yoYc^{78SyZ+pqV*8v^}`3}G@0emswZGf)afIk5E zF92T&_$z?_3h-Y6z7g=>0RAc9s{!x7ZzgZA0lpvLuLE8Q_#1$q1o)ePPXxRZ@R@+W z4fq1U%{@u!;WEJA1Nr9w{~h4#0Dm9wEr9<4@B!b<p-wb#k;{l9p@1Fr)0(ckTRe*mE_-w%c z3HSoQ{{{F1fd3otwSaF0ybJLE0ba9Tro2*vfBLUQ69L~*250;v0XM(VCjaSjz;_1u zM*x@dD-As>0PhR(8v)-9@J|8%I^aXTl~yPr`K#E7Z9L%SH+iLG2=F~XPY2*q-W+G= z0=^f>-vRjEfG+`D%A0ytTJVX|8S&Ez_%}h%`+%F@FqQIMfJ=E(f8TG*e@*8=;uBMU zD=HcUxcLon`A>%ezCYNl0sKI~&j7p_@EG6+1Ktk!A%M>Z{7}H}1>F2LtMqdP;O4Ur ziN6f^5uj%S;70-eH^7Gi-fxi9md@KS!1n?C7{JQ_4*-5V;H7|10K5$F2;k*_&jx%1 z;5P$a3HTDgj|KcGz>fob4dBNE{x0Ar0Nw?7HQ@gR{3O5!?w`r$DS#gYcn#nq0Y4S+ zTEI^Od?MhZ0gnQHI^gpF9}D;rz{dgp6yWB!CS^pM0Y3}m`y7yo*ZfAXL6Gmx&rXs0lyOPA%L6TDwP^)0KW$0Cjx#g;4=Zg9`I`cp9APJGi1HKR7^8qgb{7%5D0KW_H2Efg4yh?)?0)7w3 zcL2T+@cDq>2l%~!-w*h5z#jnoMZg~fd>!D60sj-=4*_0ua4K!7`t~s3y8`|Q;DZ7G zA>h@3F9Ccs;Ew^`1o-2CHv_&D@Hv1#3HV~b%`*csqQ?M#3glk_{As}70DL*%n*jeA z;GYBjEa3eQ$>j4nz=s0<0^p+ne-ZGr0DlSa7~rb_ZwLHkz~=$}OTh02{1w2L0sd>i z*8sj6@OJ@!74R;=UkAMZ;7oqr1bjche+zgu;1Vu2{;k1+ml*gIz~2EqmjJ#N@P&ZC z2l#Tp*8$!M`0oLKAMif_-tW*%ydMC*58xjHUIMs;tBrrF0(=9=PXzoUz@vamd1Je& zXc^!eLH;?wrF?nX?V=5U{{`fW4$H)~3GiJ3mwHY$^b7|4?;w9P;8Om4L%sv>%^-gj z;8K2uA-@{%&p`eyz@_}{hWu8*yFh;D!_xv1lJZLo`8vSA0QvI)m-6oz@{0kN;{A6@ z|HET|OZlyad?(;i-aI$+KHyS*j~&v4K10&KOIi8LJV&xS;8OlzL%s}fDZhT_H2-+O zrF@wo9|K&3jsd_@MVA>2KZ{gj{y8Fz@?ux(pT|Qe02JE`PZXB z{s_RO{3t_yBH%}Zd=l_u0AB)l0Pv>(m-@#V`nLi;9OR3KW&A7$d?Mf@0G|zb72sp=c3z@>a&!MT@C_V$`3K*>j0PXb;k3Fm<3;C;BzeaW&>Yr z!K;mZ|CJVeo`J8k;Oh;1iv>5I2MjPKX3|IbYnHJuUjq14$WImEGTv$<-VVT}p7n;F zs{ohsNke`q;3;`yKlB;ErTk(;em&q)zSY?O`WSF2|GXjJzd{I!A1Nz;nTP%N16<0l zHRP)Sm-79KB}tqW0bI)e*^qAq{4&VTQot_G~adqfJ^;{ z81vy(fPWwK3^*a9=OMtC050`UG{&u`0GIm582U?2%;JCl#fB1XT1h(0?u9Qhu2szZCElApZ>DQvO9lz7udM z-C={MUd#0l3s- zo^#y_xcLr<^knCnj6YJ|daOr2!m1()-0hjVycTM9>fWHR*%maK4;CBNq^_b^k zHvs-7$o~y+DR17LH>fskU-~G2&6}0}`=NkK`H8!w@v(q+g8mM`-v<0Dz@;AZ9PKNB zuLb!x0GIOS-GT#7P1~0~z6bLA11{y4n0^8-ImK6}`R4#GQs&>sR^%D-ahUkLankbekpDLXKEO^1VG4;vvaB@a#WOTT;vMC;%9&L)W)P@booC2t-yfGecOI9>R zlA&lUP~O%W49DABl98rhW2h}MqA4O=i_fT?meI{*ps_J&?udl25N(bG05owJloXUf#0MltH*_5VAks9fQ@FmjiNg~qL8gFT83nt^W z(Gds)O4FVjj)&`$fk1dlC=pC1LeXTKXwdZ`@jvksD2uiQqaxyHC>Fgm(uDQb zh_Jwh-GtugOB@bb+&E>aOY!z(YkM*{DV}H+U63yhyR_grm@3huivD9-B$kIbw3K@e zAyAs`d-4{BwgESx#C)kf4qDte74^j_2QBDS_BazLlk=3OpgCrWzA&pFx3oQ{A=SMq zx9(wuckh`(3&W|#T9)-JafX@fqOmkXmIu0;7|z9bImi-cn2GYtWQp6&WM(W?Vt_Fw z2Nhy&7i$cKrxinEs|)9BvJyE z=KNxGW38AOl?MaE6Um^M(it{N%bOyTLhZ3+a9SwV9udxlvsbD(XbZFqCECsI4EzC`pnmce@)$+qvl_f!Gk#9|xDyStu$J@7FZ_(0FPfcH0OT}!?NCmOJy5m?mu=4RIOwyf2JpWf?P$xl%B z`DorEb2jBRJozlIG|<#84hf~tIGHEYQqTW%E4Db>mwvvk*Kzw}G#?>*8<3phvS`kS z^WJ-3U(3yy(Kt$sV*BOMJ@INlxck{Z>xY018eGS$?qcD~Z~K&EMQU08HR zrQ%p`Bs?{B^eqvZAr9um~Qiv4>p(qL9f`$ABK%+ zii+dyZ4o@!tuwjPKC9K!Py1{EZns4l2uzO1^L?o%UVFB9Kc`9_dll#ICdD)FC2UuP zs}XYVD{fbh4{g<0bDYV4JM|}=?WCAAD&)3Za2f&jzM}NuIdJc7fB6V*yDUPDs@rSY zrVoXx5pM4+X8S(ExO(n$xZd4d^Ah3qTbLR(xmPt@KZ;i)=H6G}u1!nrQ=aUxARn#F?9E<%M42GM(%f zXNY@?Dno5;(aA012w{CyP;^Zd(UxiPsgc_H%3%FTLF*}_UhHH36B>0)pL{_8lUJ4Z z`A<}%W1{3N zwy=qE>5n~8=8<^vPJ@?5TVntrOPOJ6b3d(J|2g28w{4nQV9ulJAOg>U1 zCjDI%bi}5CXE91 zsrtA~oQ8v5QmNWcAlt8tOtAFlD-eww`W%{uMP{%r4j^kdp%-?3Y-0kb580Kau8@Jx`ZC5XfC0pimJ#x>4xIF+nv|j;fE&Zb^hk0$_Mv+8(XOEM?<+i1ULsU zNq!1#ZOi0vZ7F+az6&{2 zdGgHG|9W&!p)ZGznX^qf&09qknw`gqO#AEQH-0J8v0cU2OUqD9z4>q4_1Y5i5KS*F zA0O^r>9wWhTWr0!>}+Gj_SD>D0s0qUFD*r}vfqw+NDtBU((-Y)SH2w;X<-x4OKX96 z2C*F#sfTD>m5;gVCsw>-Q&hE{be^AU==9gu)E2DIzGig#>#Msq>w8gna>L(@$cKo2 z*R+gIe|=SMR`?%6PE&b|%s#dAy@ayDQ`++sqleSi9_yoL%Xy1C^}x+rSLqa7M!lN| zTs%Q`S5U4ExrvH;cHz!#wI)w~ITfgjBHumFsLqS$J=X(K#pKBw&-rmWCzr==M!SUF zeXJ+fbi{*JPZ_tZiL>Xdws#mkmVi5RiU>2$00YA(MLWc2mzqPZt@|6$RwlJ zdD~<8b=3`QOGQ%10DG(yQ_ru;#h8>x21T0^Ul&V;qOsoEN?d!}WBEh`lI1Co?KMd6JdMtgcJ_yi3o)oSOafTe$`5 zI=flUE7g07z;P#4FU1)Zo;-0kc~&n+^_=%)wMXK0v55d{T(|K$?I}29y88iNSuEO? z6nkFcxMFE~&&$~I3fCtC;*;c|gj|+KlWpQdoPXv>GZ@R4y8+y~^mM&#!g~ z^+b&6kTzc;$;_Du<(|tVD%_P55m#e@CG8enKKkZ8ks06eQ0iH8jjSn{tPBO{ksNJ$ zE(cY3P}6* z#yZOGi02X$JxZp!ipQq;YYT*O&)zo*cjZwUKiYytmyf=AZwndUoZ5nU611W%84EVH zPYR05I^yA}@_Qc1Kza9CJrZgb|2UdhuGfauiS$poBD202P^H>G))BwiXtWXd<) z`S9KO(kH*8akgfQkGh|*Dm{{ky9LETOXHHlKuLRBXtF%gH7TAt3s!2J$DE!BwFc80 z)Z+hQ=#v}Lmg<}@BU#a)&9-DHA+E^L@(UyeYD?EW;Q_bJ1_kHGwXXE4lN`f=CUePW>92p zvS()e*_*h&?3+0%_t*RE?GT6OFFpsxv+Hln*;@)e2SzCO*Zb_u4Y!_+ldDf-gWBiF zn1=HhHS8v*m)ivh*wLoHv1TvxeJ({pc@FPW@A{P{XS9mRES_JgePJ`x77I>$!$>LBn?G6lGOa9mQLUFz zFBUYiuT(GYx6U>BmBo>h?=ec#4KJZ&_0Tv0@fKkYwH^b{q20H9*p>}GCPks!&&()H zcu9}AZQWDNH~AjJG}U+s#nl;WZ_#@&=`mp*EEhh=`?r<3>Pj5GfjREmF z4DoWg*k^FD$E;P2e6^)fihkMCDL!9qX~d?iF5;68o;oy>@3DQFYCMLblX|CAxNin# z06CUT_Hs9g8j+J^osiYU999E?SbVa$`6YF7B4Yzx3Cx zN=%ix!Y#|*@W%nzEI`JwOZimFczrF`I6%B++&%RBVA+Sb;kc*!L$H3N!9PcGWJNBs zji)q38_aGfHrd?$pp9a4hw7uqLo9(rq^&jH($p4A#>H#!Sr4b|*NZuy$nejA{Wyi$ ztvGIAG!|?-m2XL}R2^nP+>Lr$ok&+Z^IVGk#4auwGDmmCV@So(UC~F0gH7%Z@Ordm zi;b%9#D`*iANPH*VT&by<)j*C^HC@CXJ>gkZ02X**1Md<{?VxV!~x=xa4g;;4k$La z#>8|)+yu!vYF%4fo}$~{ur7c-s;?}7S!+ua2ed210qq{JY}&+8FOat?==VX^-r}gW zJdNYivyJIof8F{eH6qwsu9{}u05MTMF|sqA*bt8UIFZjUUgo5QEyF&uWy;q zgL=AF5Z-$nfRsz8e3@bujW5A*OUtWK@--o2oXcA=l1A0opQ!CD}k+?bz2&)V2#jP54i zW0a;EFQHgAtt{vJm1DV!Qn0=|kk;)n1v>6~NssvCedv$Cf}9U=BUf|+9bO5+T^?PI;&dPdrO_c-roP~D0LgHj&2_^ zVeNPPNCc_VpFEJN6=}%46InG$9$}mwPfQI2+9Kl0g7hh;Q%c3tY5JR2B|a`jCfb8Gb(TFSRRle}Wm0RPMEuWqV`z9; zBGMWcU!e(w!{V!G;`D>K$U}UiDcTh5K16GK^p##9yH%y@SxYolCcf5|)HRRt3L9oV zQ`3Lyn1-^JX)<-}63@!@%qod)t!j0gl+_eb$Exkbpc3Fq5;Kid`k3(f0)8)Tra<2-!wpUJ*=+ z8$|UQivv|N^$r?b`tIuVf$MNRSaY8t4@O-k)!bgpwNfXF)1umMA)T$S;OXYqg!@e8q zTSgSBeN2nOf~VYcziOqu{?MEGsms~5MX#B3ZP-(SaZl2^qwHVZBQ<+XSWeeHBt~-q zp{hnE-CKyJ77uZlk7aWV6{S7j3QIl(#fxy@D%wXQrJD~CS4 zT4&Ez4z;dAcN%h)lNWbcac|0P!rWW*o=X@C@|j0%Grr_d+nTHVsVC;{DqIeIu6)d{ zQkIc3p9O6lL!E8;QrbL|I_V@&E$U2U0uIc$ye)p1_)1$~Sb+F68gcrEI5;GZ&Wdj@ z=9o@U$8yp{&3r2jTa#Cx6xY2FUs_FH*Q9>k(Y=yt(N##JLak3lkNM(PYF}vlvRjH2C7iX>N^?ESdZkS&GrJyMaBlDU> ztc~i7#)zBa&K94DHr_Ibi~1x#l$q*-YU`_l^23n!w>?t56WP_~)t(|ovkY@xNm$kW z5ik!Q49%{P`7)^yX?I(QwzRe<(=X>3-z5u_iAbjflZnu@Na_P+;`3!erxtDfDylt5 zpRH-cXI$GEYm>KO21?qdgc9=XW>Q|Mp7kv@+c#b9-m`Ssd^7GH!)j(IjCSZ;)tNOT z@v4mBU7#%e9*tS;ee~6hYMbZEaw<=?Pth;M$v%cC2xREnDVq|BwQ|e=LBoo}m0Yly zY270a6uO(rUJh9fV7T_iOMb*x*$SNm4<@}tnw5K4nHN3*{(ItEUaV`_9!`#b?s&byrV-- z0RzOD;|8&7l9JA>L(HX3IK4M8TCRAqL+mjp6xqo5UL_{>O_5|M8mkP4+QbdQEp5{O z5#e~Vc!eucTUS3kD0YXM$#~qTQFvs|xJs*{E#jj_t%-Dc?%4m6zvd;j^VOgCd4uf}E%q*~A zOuW`US`?J1n5C_y;h5akOO~~UqKVPuZ9;qHT%Lu=3$mmR$4_pZv|0WyAZw>m#v9I2mY5j;=phw9;f*x+#~5Ka0=82&lF) zc!t<{5nZ$Bip3_H>1ePe-V{kmSTen>2Sb$3aM3&J6^z@$uqNKPgHH4Ubl#7u-+@K?_lr(0G zrR7bLNul;wQdS;0IWuQ%kwk56g}7fwWU97)M6mue%ag_JJk%a5+0+uoeKDQXQ^n+i z--?_&HH)%jBHCO_uWGb-Hk-t*J9!)-P~IF$hNlGEBJzq1(M`%0D(>>I^cb~`mT^4~ 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

    2d=j(^)?jiOPjB6g!t^@FsU}~y%v*2# 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�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%0AAx@kz8d@s@Mc?h|B$$S1>OeyYw#}M{{|lf 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≧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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/logged_expectations.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/logged_expectations.o new file mode 100644 index 0000000000000000000000000000000000000000..a8d4cf14a5c950202991275ddd250ac0d372f60a GIT binary patch literal 147888 zcmeFa3w%_?`9FM;B@hAGD5!X;1{xK-V1ir{w3squ@trd&)=cN~0Y8#4HY!C#rR*}|9Yg@3j${H_t1+To{=b4#3&z{`_iRkbD{@>U0 z$>yB%JiA4%}-uYenR$sT`e4W0&9_KcF9mP3@-|z5S zrLh}uzENMd<80&iWBiumM>2gEzc_wFa5EG?!fwJZf#0w3dl)~$ZpQC>`27~Y4*UpP zg5NFp{Sv=l;YZl5_*TZ11xUyI*5{MO^Q0l#6B_4R8wZ`aqadN4ybHgN@%se7Px1Q%(zA z0>2~iJ4$0kI3KOAkHvWye#hzi<8eMgUys!1ll6JDK9AAoQhhGd=Tr3gRDC{8pHJ84 z3Vl99pDXpbN}ng{b3mWZ)aSGGd6GV#thoNEo~O^3=ySb3FVN>keQwg{h(0gW=f(Pbg+5=U&)4X4t3F?^ z&ryB8L7#8b=XQOz_4&K{9M|WY^f`gEJf;Qg|5lt^F}-41#ndT*>)s%FD*Y?x<_GN6 zOFrMddrlzU>*!$!5wNQ^mUIT}#DhSqqObU)f9wr3QMEjfxTfIIzC^O2ip+(zzG?-? z*9PoZJ7@!Kodp5=UkJaPDvT9~BS`!kd}*%__*xze*lPmzvR0zCcLeN?#dH-P%@kz_ z*wF}}+<)8pa{tN?b3P1|t+6|n1B!%#_LD*TIs3i2Bm75^C52u6B&Wi^@(_RYrF^={ z^~VO`!vFZk9CxhKzqB*j8M1fzqa*u6mbT8EU>SI9XjvbM@6R#Xv3cOVKK20qTa)ZR zg;bIQ@o(|tgpw<95Zz6(H$FnvMkh=qDjp*hh3tp6;M95wR1w>RD}S^&mr|cc0Yi#g zNO4;q%ioR2NK+wubpfss#-dY#sc|hTi@zspPmy(R(@UEu2;U5E^L038v!#e|IPxzzDk*=ze zR{{wg?=mI&>TMLEQdGqwRPHKPk+P}-Dpeu-9h8g8_WPJ_Lu@<9NjG?|V&4$k;Xtg2 z>PvD3Hb2j>8Q_&*` z#58O7S*LcRhQWFpQ5-URU!MeK)iZz;1p)-kJa_Etlic5rY1#K zg3htGDDKK!cg%x&0%bcQ!OHl3%W)mF*9YyL6>XntgZw-cg*#Z}kHImUMLrx9r1@YO zLT+eThlpdE`GfJ{!e7n6p+A8h*+w&K2WwiWNd_yB;d_ynodMuB7l z3x8}Uo`&q&2Vo@&VQjYs;?o`s#9K@QsoKp95slaB|x`+!?y?8cKJ~TbW`HL@ln>u=g^47Qhdl9{IQL!iw+VTk`ya- zETvmiOyaKPSxwi$wsjEcHB*xk9pwNYMfIX!>$%zJtLam=e#3-(%GmW23b=)Z(NDH~ z%-kDU;6y9szKz2BY-DKZ!Tu;!ZkEP_QQNNE$T?6I2@opV?vM5ZIIbX4 zP0@Ar_aDXe0P#jnL-(ZR-9X#goIu$!s%eoEz^H3&TK!25-wFQdeH?$3hLj;?w$Qzz z>KU~EiRPACMBRBv9)p0?Ig2k_0<>f^w5ZjmTM1vlo&tNql`dqz9VrbJG}z z7bHL0MJiq04mJUmEhU=`E6OCQHvxOvije*9ko}?IgGQVmqEDFYLUr7|IT<8IPI~=O zYB7{1wF+aa5lLEdll?h{U8Fvp4~W4ZeHCg&Z!kGTN)^%;Fc4p=1#5+1OIWbaGX-l+ zz6ilmX@bE>PZrkzG;EC!A!NTBvQa`(N}>p;62zG*Ifxpac&fmu0uU(M7&+9~x6%TC z^Z+VqoRT#yZ;Ntf3fLRF*KX~mPuUX7euG49|< zWys#q)vL51atiSemaS`fFWB~EPN?i5E?P%(*se`!x{Y?W>@SE~euzE>o8^Z-bmzh- z2nH5?+N+k3iAmlKBaQps?Nuv;1x)5DxXNmekBtHVE%b9=W!MLIV**+a6=85Do z#6%U%mAn7=h-%d#$=_1$s!@X0R`R6x30iAn%`l~=oG(dBYO;Wek!sPBZ@fp>$_j!N z3}MT#f1E@^IQ#OeSUTe9x>wbVcSe~_k7|g~M;Ha8f|C)*1FO6Lch>KA2LR=-M zncF4Q|8S4Twjd8fc8oF^-6N`9t`V7k<;47GXM3yxkNnZ=`jP2EO>5hbZA?bixRj(r zLqru)mt@fE!H*u~Ky$teF)m9K5OLW@FmZ#4|7~mhE1$}FDp0ls7Nrn~ogljcD`o$q z!hQ}~sA$`rgKFxJK7i2_ZqVHS4Fjz-HAg%B(f<}u8DEPs_>Y!92J9`N_=#ksAzwZi zu8%Fie z0edGZQ8f$I!Lr%00Nrg+BTSG?2f<7x7)^@AlVWhD%jvL>7Osh6hC?y^lH7p3o(63u zb0`1}*#fc7$iPQ&vwMesO?7_T$7HWCl4@PeIq#2M+6NJ2A9Hh#--1{TQ!X8Q%keu= zlPGgjid3pI`ZRgWT1;?-L$0hqS~$P-*aixx6d)%%DV5nq+A4eF9h-9RexjY6riYzE}JJ1D>97#sZp3ZXLWrO3clI>W}R5%wbL>BN;q5hk`D z=gVCGQI(cO!>bEv$a@42dHt~n>_Wy^w;ZKUwV5auqjVwGxxaqA8ifXIpU!VN3PtBd zqnv>lG8F_8?8tHFv+B?!mQqf@vQa+!S0Y{>n8GB*2GIjm;+W+=i!!wcg>4w(K`iOT zW~r)?9JLan6l5gCMaVk0RWY==OXZJ!fS!P^01qfQOVE8Y2H105ka z_M=G-Z8j-dF0{}amA{nXghr8Js^~6VLiuGcCBx~Dt=U_I(H}EK&$Xx}PKFU4lu$C%70KkZWKt4peh0f!fXDO9n?f8=OYaD@5vu=JUS8R zE|vE7#}1|bgkp6t^#kCB=%d{bc=`!-j=&|E+=VOlXT*JJ?uWTt6~`CAu43%$k1m5Y z1MyYlfC%I%|AXU$QdK2>Eh;_+`fZ)?KTL%4K*9DQ)H?tI|HDN1AKbwb*OnWC^qO}q zSX9IR0H;WNGW-v{4l#vH@iYDhRTNUDM0p=Nxci6E#@00F!w$#<=R@)boNU+=3^mxp zVZ0NIF?vJ@q#OGDh!g!NCpz(6mFnjrLr_SDaaoBKJ-ieCox1!2IhK->%AbLv0R z$e;vJDnzTooa`4h6XyS@w$0W3sWFZHW*6duvg{4;3c;Jh5&2_xpxW)83~!EVW}`m@ znJQ1*@xtJ#5JE=IM$J>L>e@K_!~HA!@t9&aG6bVnf2;x*{>MLJ3A9@s9&T#1)!2>L zw4ej7*rfVl#57sNk+veYtdb9t=VJ_t#v)3$j$L9C2s=&IqI>4fls0W)R$9sXxzx0# z@nw5wOcM$w^X^X5f;yjkkt)2s6&|B+kxhnfZ7x8&H=`M(JV`FZKO;yY3>VVT96M$> zs8=p}-?66x+LQE3x+f`MZww9Jro1P_pN5eB8-K*!6ZEa4Ti9@>y76%Tz!0$yB^he($yUqhyf-$m!byqc#t0PS*qdK-+lrg|sjVHRph`QXUgv-ZC zXLUOdv62tG3$D_0l)MOtsKb#*5h-M(REElSMdqn~9efD)pc%mUZ9~g@UC*J*$z^QM zo}Z6H_N%5N0+v*=ksO*3OrD1NwEOwwXBc$D2lT)PX)<844zMvq>_&_A29ho~A%Qj? z{^b~@8a4g}+V-z3NX{lb7$GxUIaRI75d=9ioj4?CYw{SX_nr*WeL-GqlrQK~wjh5; z0pbi#8A>ir@S`7Fn(vR&asX0u*C5l6qw*8LNI!}E4V0~Cf21lgOUdN=qf6LE=^S6W zm=bLNIZby_S};JRW@4HGqn(i;nids;T!O05u%8J{DB;OVxVQ+bpUk7^(knsPvn^MM z64Y{i*MsO5rMr9Pqram-@)g0AoO}kx8c44q{?hegz(yHhvytR9$GHVgcD;r8 z?X_KZ(`XLTi9kQ@`bpO-fO#wp+dzJ%2uRZ8^T%cZ;^sMduDP1KB%6N;WA;|o<BG#ZO7gXT2}V&3YP0#5NPWt`6rh5ZF#aX#+`0Tq zGnimc{-tV%;w$toQTy4W9RL52e@SJM%fCcwPx+T9mnv3~j(X%@qWu1H{Yz++$-AW1 zDEVUxG0bs!msEenbUXIhsq?je2{l>y+`jfNS+P#z(E8fH{wTe+f$X7FtX+P^xK7pSt+kzm)0F`P#qa8d~eYO}qObi+>`wdI zzf_R?+Q0OF-oF&IKc8a%5igYthW}l!ElJH2(+JY#YSP1Po|LF)zbK#Fe?hx9E!v=R zZO693Wg1M}FqoX84A4MThSKkqU@>RK`WtqE%nEL}VF#UYlza&ABMn**i4KY*6t5`& zUA~5bwu&J>elXAigKoHil0nBLdoKKUcxQ!Of5CWV5oS9>y}@I`V0s?(T~)N5#R|nQ zErj@mCA8oX^yHxp#K#W{`mTmsX+a^NVuDf&?8g^};#cMa9>(z6V0rVj#T$UI=CL0!YNv#<>hIh ziq@;)E{`t3Y@V6G((8&6tI279iRr>zlA{+}RM3nM-tQo0crk#qs#gwRMRYZSAW0N5 zpjS^hYl`4MAU`I;Ay3T$7p@6=5iIsn&{|#=$Qq4i?^42sP(~G&#t)dK;%ibQd~vr zHTh7AqE38+Q{%7Nq7_M#rl|~koEBT9D@U&q!7>L@g;}`5I@}K7p_pa6xICok&}d6V z3To(2yWm)H`o$lWbCe@^Zc!e@)w(V_Rv>ajzhaa|y^SJGs6eJj@)9DYyF^DP2-^9L zB9IYvX30RLs)*C-vQm(!qJm{%6{|>tSRk|^wh=h%Yy-Ph=~6`zU$zO4W}Fv@Wv)KD z1MZxYr( zc5I@Fnlh{mUcCiZ@;$VTn4jJS%O;GGmaZn%*8{n1&ZIuj2~h@d8$x?4c>stCzy>|PSt$ZWaz>lHj;v4g+_mZrdf z^QG~bbD7r5$J7#6CW~{i!b}v2rBhb&l&KZE467A-;Lc^37tammvaM=^UOe{$ezA(7 z-5tfujtygbLRAzf9BEdonXvRj6AlBRd0~wd2!p1bmcmyp?3OM;Y{$ITHqL=0t*bfr z{IOr*ZOJ{_$26_Q_9k8d6il+rmdBF2|^bovCJ_or|v=$@cssbp;>D>tJR2RtQ_y4 zT%k!XmKSbbRDS(ZA!!TQv7G{|%N_bM>oUiRb9>-|zKTka_Faf2j;i&bbzJHG=g$wI z@|5-_pRxlX`)w{JSSk~J2NRgOq5-a0j~5ncsTVpqy^3^M($$&ECnn7qO+JEf4jKs(-z^;Db-s{f-U)+?CwY$)eXAl{SpRNZ5#)>A3krPQ2w ztf%5fx-rYPtSS+JJvuYBo{Gtx^;E>)wVvv?yx0SQ($`b{0SoT2o+`N%kF%}Iqj&w$ z`7T+60H z!~YX#`^1l~(h6dC<1JKi@isVKHGnvH<6Cp^$Cl9(ybwiZF21@D)a!cuYDzy;`qaO)Po6vVSG_c$SlI`QG3=sma08dv`Z;^kM@io8T*}OnXs!pV{)fGBmS=Ttbvx; zWv&nY0R~mPK3H{Cqtig9=WjNWbY(Fbn(+EyvYZ&_m=TUzAN&Eblt(zDC~w{CgP$jJ zm^Q+R^J`?zP=uH!x8dzQQ|?^r+&_VfL${|ey8rjBb6>$~&uB7_fwrj0yoJ?`dZY_@ z$y3Qwu_RJ=iP7EOM41pz&`1=9oV10uvFurYl-6U@lGDCa;IZ`0{-mqGd5_p1-N98y ztv97$W}K=x+KQvfU4Qg@$fuC~$t3$V>;-dQIcGF?UQ}l5?g_0xU3q{%O0RNIo=5+L z%n8Edmo6qrcP3&d>28OVBwfhf+I0YzE3-bYlAe_D`_<+}Pbz6ad#yiu3;4n!4($4k zT73N=3q%ezD(Bphpo`?8_~-NkR)NZYzjOL z2NkW2$?FM|RP@@W&1vVNfH%o?!5EBKCfT0`;g?k23SC_F5VxJ37Redl2a#5QxMVXt zw8qX7pu2TwNE@lYV*fpDp)mL8U?QmJmplXJK4dE=OB)M9i+x!VU3z2ZQdzhV#1N>B z2hT)ONb#5g9z@>Ldf+u!l8I%!ZDwR-BT>TvX($U_YWuW0Ry8+f3Th?1QpjG1?f- z$nLZde)b3_uY`J#O~1#QSg5IlxX zD`>JBPgB)$7pkOwZyPl;Ig1t_+y64M#$|RUPjCW;>@5h08b#If z$uwLg5M)zIPJi?ckfrhV$6|m~lCQ*7a)qK!K8ADGBUJ9DO$pea;iZ1e(v@<1_*%gJ zkC>N>77YWOnryimEnlDAc->BSMH5#Q4dXTsuB#M=cM5HKQ&Ue)1?70nCos$axFJc) z2P>eGC=_pwJ<42EoT*JcRC-e@N?ZB{u3JZnIsd}7n(|4*BynYdNxFWtRiD)mKVv@! znh%AZw}YL~Fm0=6HgPCLCi$Zi&{3(NZiO0rB(61EIdBPpp5Q4Z!;RhnO=j$%3d$*x z;}<<}QJxC(A|tlj>mb{O@|jPkGHkt&D4QqD`*zzHqKU?BFgPr=t8&4c#@ z+ly4$p9k&t=PptE>rKP#;NRiI<_-3?=2K7KHJ5RWAHlG-$fUA2TK-ts-a#qTo6gXF zYPee;E5?7gxu3-*dma-Q8y~scDHfa*1fEH(?2dUjVRt=$^bx2_=SgaZq@$IV?w}Y* zH}nQEuA!|ZbV~WcA56O|$6ab$y;ZnDe{ppu&U#zD6-*r?GH~MY5d2i?uG)~H8WRF{ z5>BaY^|s&!`K4O$M2x7xdmB;m<_+8FN|nx#-d1lo%If+UDGpr~J_i!ZHc`OD>Lo;; zSl!4c_7WRsI4LY-zf6;`8)AzoFb-U{>Pzgo!hvEda58fq<~&7u#%XUEA~hTAsR1N5 z*qe$C_GrHb^(LaKQJ5YiT2sqe+}72_z_8caPS6ArRh@XVkIXux2~hD>f>k@0Gt8x) zGek2Ogc%4xZ`1_9L~|q?Vlxfl27WnJb80lGsto10Tu&!6aLTT`=#!?}v!4 zYB}Ab7{V^TXg0|NKW42NY`~tGM6{u5l_o9+#VSOu;z{uA4j_t$N;GyL!(9Og{Lzyz zXr~>xV#nY@x*G$Di7aR{O_IIQ^OncK)V>r6M>m-Lx z+6c^k1o9`ofE)Dod2fa%h^ux`a_f_If5*Fs3J%5X*d>Q7ZSq#lFBl($4vlam{u%ih zj8nIUVtN{Pfw+68fq_UranXf|uY2q}%+5qvS@sqxw(Rgz_7EEr=ot01n~qq8k+WaQ za=~tpl&LKST)x9XdZvAckD`k4rm9nm)V2b{pdZo=?-D8Y6j&}fwR*Ls9~ zu!vt-Y%ords>=97)UOEI>ngC5Dl%(Okw3bDIy`NkVON1qs0z6I635~(>Lj))yN{T( zJUPk!Ao&Y=3-l;t0;kgKiAp2>ZtwqiCj_DWAMx_OQdPD_EcuZ#68V&hICqvR?e}P} zz+=dvMQ`4dL#u0`_G=q|Ry#c)e^&c4R<_;298`A;8?I4G{Lx>+VC%*`WOt#(Eg*R1 zzzW(tkQBuu^W(sa9c;84G&D+_LS@_h(RXoAJH}m3IARv>yV3^LpuzjWYBa6lqwTWE zk@o1M;co@oKF5BQ9ZM+28&5$L0ASVWO@73|r9iba{@8dt1?gZ`1-I&ItH$_J1@TL` zTn0mMR)HZ#CIui4VjHqh*>1C4V_Y|R%mE#9yuiO9zcT*YyiLrQn{^aUvd55M9!?c) zujWy4Wkh8XH=~-7D#z4tSwqAQUO0a9w{%Q>)q(F-6mI z_aytj$wS?xBY7G%zUCbuwOnEN69Mi#ze3%EwvS=+ra?ydB3nN`9_9o|YyJ2{KaVk5 z7v~iFV`K2R6GfT&cHH+i`^@!*xkC9w90N|c{3du)voT%Q^it)mY^{{8B zmSCuv9D$g!*~R4F-l5W(GWGsw6ly}mgNl;xP=w@2^D+Z)vY2GStVoNX!;n(+ke!pZ zSEZPK6SXr~ya?{e>uBvxqB;j9nhL*vWqFQCUIM929)Xmlm6YW32$tUAMJjZkx8;tm zA8Ff>+z!q`8qlMk#3m|azsC|LzXhJ@c9l7>X+T`b796=k4v-}X!KGOZuT8dc zShcCPS=xz2`<89ttsc+BOs9S zh-@S~yQ@mw|&XIiBX_SGC**%^FELEVv5c(#$ERwae0A+ zJi$XmrMxF^Mh2yN($kdl2@W*~YOO)aXDhyfk|B(j~F+Mh-iZ(ncdv~EY zPLfdKp%q+#RmTcV970p)iW8IGx!S;MbNPYOc%UAVtqUX;2VkId^03T(KlQ)Ds{r2En;6@vQ-|BWZx=|=IWENY+vo(*EnEx~wN5EVn7*|-#HAbx zCa%t>UU6mofA-WPeq~QRV$(Rfdc^o#%Ne3ajClht+A~bA7(G|6CQu&>tk__kxRKk~ zbEJi;F?ICRcLdanEtEc_qMS~s;hY5>q&V!V&FRL_h99a0HOW7Ng6*l92yQ#ZFM*nQjSTIFzO9u<(p_$K<71)wqG1goQ@i!lKYNnT{w} zs)+lZij!P{K+gI~@=p8_wguv`ALLbLsZ0yILjv}*T}PzoK_?vHLm`5}p}-=Et*)wVwJr)Shr!5%qUPeSc@AaSZ4$N{fiLHpz2&X)sg zUiSscp04me-XHz_svY*mwq$Xj=Bc*r#UcN%o>J6Y5No5oA(r_ux4S%X_RjsKq@r|Ggq*{D# zTobYF#94crO`qis5K{G9PFaPXmkPdwgR4%z9ea@O;-;xD#vR&--5o24U7V{T2a9)b zgBxGnsp46om=JwHRa`Tl@gR(Cs^;r=VU%=b%G?;ql~vfFIwc5%Ms6n9QCnuFH+FZB z*~1*iCAt3FxT}(y*yKKp*FML6*mSCXCQK&@NomKTAmw<=d=Fq7eOxO0djP6Dd=bL~ z1ulpDs7ZYSW^L+XN+R;4m4vc8RPJfVY$IWbr7A0Vg2Ep=i7M|t7(d;UW*Op%jSvUT zxt4*-MF8e5XrpGrD06Pw$`6p>_+f*ofcRst;lCq>Kl&mC)m^&o+Tr9+DA3ML^Z||Q zZAb$1kuxdhg@FALS%Eg%Qdd_&R28a_Tod7LBa@~pWIOl7@s%4u$q4?X)*Z5Sf)Q<3 z&6&L`c_ceJ()ZncgNuf<@9ynX@_MxIE?4)UeaQdzj=RUR$}?6XJ_XB7D-rwSG0HVo zV<0`k51xkvPl~r>`OMMHX2V^x3XQ$d>N7`bQ{A9_cBA%(2kkMm(iI4{89sX^ZK|6d zEJ2?+QUsiBCLF)5pclYmkKCZ$e~fXlD{}SLg6W<-ig7PHu%{{iwGHnErHOlI!hiiJ zdOYmERz33Q0$zezPKL7)r2_tIDnR7F?wE%Q%!pUOTZ(ExQ{glvhFkb@ZY6(ix`Pnz zZGhSZM@(9tL^qN8M#=p+l2$TNy1m7AxTCQ;Pp)THT`@h0he;?{p1to`OZ7APdw6D4 zBTU{bn_Fydk3WE;3KXI}{tpn<9_J)4MKMqH57-f=f+mlr@=xz`B!7*<0S#g;)?M64 zv5b10G0A==z&qcnaTC4*m8im`3C&hgCpXKtld$e7G<=7%Z3w9u^re40YyKKe`BPu-is9jTwN+dO$No{$nh6+%tno^~H4Sh@r)2Zj8 z>`WT|f&K`b66+%LE!0Qg{s*ac+Gm7Dh)eJk4KH<(Al)!z>sAZ`=r(X47qn zD*wFlajPowSS<-vIJ1j%r`K@aM1H6^yDrcyw4yYj5uidvGZRHLGjR(Ph0#)uYn|;C z1oJvu0x{s#egC+sE8e?^yw&`kf5Fybif?SwqOM? ztiw1=NUS8BCM44KEv4@$-9=BzwzOdSf!%ymBjBzF%Iv#-omPF4E3o9xbV3iOb$`N= zqa%ny#c{`xRQ0hEe368c^W1J)45Z$0Rg)3w6)dXF{wRGO6MZEA&DW7Q@zsh6RyJX+ z5YJq+Ghb>)R`#h(V8hkx|G|`O4N5+&D%s4P&OqCCxB?ke^9EJXr?43(NJEKUc3_q1 zd``;g4DQ^4aV76w9ZtvRYn_fsB zr!}qoNCly(qkMBUb=RP-C$Dn*s>x|ZAC%S2BTN)&N;QwB!)e@AYm(EkQWeeeP90G^bptMo zeX=j8;I>u;g>$W9T(6>*hk0!BH%NeT^+ezl&ZFl13M}9x0PEWO_u&o$brmLnOeb88 zD3Z$w!TPwgQo0SGk}*{kVjoa>k`_PtFsMwoYl=IJuwj>Pjny#C%9(fA_(0XJ# z>t@9tZDP$ABu^ty_v?*%b@OL*OZEx6rM^Bs$R%_OCo`*GPs_Amm;q7Q%_ zEhRoFO*7bF_;eUYN_cVrEp<*)+h*=v89`Y*dwr*jrL}$o`McAl*>QL75rGX^Lzk2;J+^D>RmnUtaZtkpoySq$fI=H~WXEvWv;i zt{auzDLo)E5v%sQdf_W_r%~pip{HrAl#S)DR$vqSSIXh)vrN4+g#pKe5_3&yXfRAtp}43_e))gE@b|>KUco>8K}v zsvarU<1q-Tv5E1WeLDS}@#?*2vDx=lb;CTI$_d*6dkx3hQeZ*VW9b zFRYo>92r;G+|bfgQ(G9hys@@$;jH?W+QOQKmijq`3mPJYvug|M7DQ^B8k=e(wQ~w* zH5W!^HC4HsWrJ11PbxUse-GAmMt@FVIP8#R5^{Km-Th4Nt`0u;`ztFJ9w zFl&CTCbP!RT5xQnu%WSbfd{cB)M*Y=non(x%o#VXx$cVEaOAXMg~vteB89^ZLwydY z;k?!wz5$=QQUw3o_vo9ZN$|fNe^28}y7c+~wtK8MZ+in??gn(Uu7&rx&u*%Qfp`@x zD^@;j<)zviDhK8tgoFg*#mdOEt;2lo7OcSrq|7Xv!9MQPQ4oHPRqc4yicDo6#lhZs zJ`-m?Pvba|#44mp+?yA=7n-MPVG+JTrP!p#M}fAt2Y3ApExOjbNnco`k5*Sc895rM z)3V^3=2*Azgh<58y3Hq>$FS z@7{L)+9ggQDCtZqzF&HM%BIh21A)Z&8JYgd#FeEgPqY$A$}bi^Jx`s~TJ$~xm#?o% z|6lXpYxxY*dSZX{C!D*#Ure31L|fKRPzB;w!ZoWtK^3sa!#AWVw>?mmlkwQ!Vmy39 zuAPMgi7Vk7qRKtqEPPbq5?6wS-qnI%3h9L}mk4_?UhimOi~;;x=ciW>t70lvEPOWQ z4*^KerOf!|$w*y|&D_{Ge`O&o0gM)`5@d|SzhTp6I8IdbP3G}~wGn|Ss2YZQyqHo| zjB|0ks?;7|YUmSqNd+lRR0oi#d3auqRF~tsyMxcau;PNXupK(qt%%f=e0|n$nh1YU z+uP;IvD5?Goim_61e)x-HOE?!!=icAH%DxH@Al6KpzPohxBb(J686_5lQV4Z{IlBE z^z?Pz>Db$SjxTF^x))#KTK(?R#4RR~RG4kN&z5@iY2q&P$i96C>0dTViQki@RubsK zleluGF51J=@!t=oij@A!(?FEDv{#-6qP8zNB8cuCQAP`q=gjj}DSyYPc=o0mqexr^_DE>|Oc?0CWjGvFHj;c@F&J2Qii}>X# z0oak$Yv&gfjGpDDyXLblNu?4NN<~kq;RN^d;x4m$&$iA(JE5S zA3_Dw7tQKhCu_=Uj^6 zaS!xK%8dI$aTL-Su9DksWC3R_Z zPO=A^zSFM!Y1AL&*L(0LT*NeX=dTs^%X#(VXyyyp+I zzTZ0!*J}sBFx~9WyY6u7`vrM-A7Xmo>DC=i= zlW_f1e%_m7tcUk|HRr!$toQfNTRO)2(||l&|KfnWCr4ZF52gSc4$XUXjCJQ>biICf zo;}*S<2bs0^|-vBjkWGR{+1lvJbmJL{C~HY9{g&gO3;8|IFItJ$hH2OtC0NyzN@TT zsds?%<{yza&8i;E*Zuy^W$`Du-Nk0<4M+|`{k_|Va5CA-BMz$?U%RdMC%{@2-#4O_lsido`dqX zon-yE5KP`J%v(}yEg72krxNRTLlNbRMaO{Rmq+_Li>=p=1;yIq@b70M@J}AHeN#;_ z27Lbq$1Cm;Y{gXF;Y1^aA*}s@?)za;)C3sziLm3e&T?XUyH4GzYiQUSu&*raey_8w zvlQJ;^jHRZ_cT=xGo?Zj>oe{hJ4T5=mWNTiHc_nc)Qa1!=nG}^Z_&36sFk_8)p;^y zoAg{lYP}iyvt8d!MQ_?0`x7O@b#G83E1K|VQ9FRtvW_Xx85$kxoU@tKQ^ldgoFeqF z-wtd*>qpG#Vi;d=D~f*@m>^W*GAtNh11;g5SE4C4G}K2A1ng0G5$aXorD#B*{1BRT zgq?wh^C(P!!p!6_xR_@y8tDSSVihV{)QWqh3EIVtI491UN3U4fn0>daz;qJCok}u; zyP{0JvQC~7^xM?jrdA*KTc%*OC0J0f#1sfS)g4q5oB12!W5&0pQSnEIaKH0Jj>N3B zQFpX`mt`scGdis~t)*5AcKKELZ%Frg*PZa9J=ijkmFet%OQ}<3o&6T)XmT0+$Art{?9uGMEvsEzQ`<<++A8@p^IFrFj7bFu z^fs;e(4uBmTWP#cB=xpogcboi4O%xx?w#y=f;TR?=dx&Nl%#*|5zD+m|X0^$rUG`96qb2YOm6yl9js1OkZ~XqrOu9XPrHz zI9zhFnrx_1vkgH?&|Z_&P5H-sLGin*|I)9Rf5}(NANmiM6jKpJg=?s9E{jA=H6GQ7 zsh>!AUTuA2ZBsZB^vcg{J=7w7q)Hl>z zTHA#5M#hH2HH#OQl$4B?vtghL)=Y_%l+?_d1;sSYs*5xSYpSNq!oRAj?pDUk^k=CB zLSFZ!4xh#Tmen>jH8jC`&LtCi2`1kfC^g}dF&U=OBj+$aNgeWF|zU+kZAt zTxfbEkcUVdr<6rr)5F|y{QLU&S_A)=Y5=qTe0$46ptEFQaoHeC>&W_GNyP;aTyXhNGCMsipf^a;)0yR`}fIT zf)PLg@FVoI1NE6O9uVQ2FEA{V;ltPhqMMNgtIvY9X2EXDf<2f8qpu9pA>-Yopfv0i zjlogG2g$cfU(2xl$@hjsVzd^?jg88J1+rilWWgGP{vr$3sj)mo&iVG2 zEZFue*r!=A^Z6smuShFIVzfsZ9TE#=!DeQ`A}*{5d}#X&I!>p56$1)x$gLPKxXo8N zps;zs;K~676$A1)ZSZCBF;JZ>Y6jP7tdOw4fP%K%DWG=BZ_X9fAuip0enb?9n=(%2 zo8qQpB7R&xIQ$hHp2|s~kDgir9hB;4-PHkwss93DmVbdTf9YWuDhK(xAU{lLMV_|h=01Q73Qz`-?51pY;F{T= zF`(ckDx)`08Exy8dn2+Q;m#P4UxAl3yB1qi}5n2NaOZ`F-fdve;3>`9Bree^$Q>Aap745DRKq^o}ZD za=jnFfA8w=`EKr&$h)a`TOZ#&xg&~mFB)OxM*E@}4N^HM$FE(7y$B7dXV`TVcG?Kb zcR>y=E+Gb0{e08=V48?{JkxU?^N7bp&0{Kf6zDSXi^E-V1WXz#k%;qiM-*HOIewfo zq9C^p7iW-U-@!$gB&*e2FYrM!)gPFr`JQj`gLT99d(wbSy?lq}sJelw#C3yg%VILn zIH)|h?apobS!L>(vOAP_EA%rRCHF_R>l=C(i`B$+GeC6{r3ZC$etO+31l@~dEm_+I2O`oIegZ_EGVUG zkq5rm1E)@W9EEW*$E4j!Y1U&-$SUey0b{ z{qT%uKI^Uwi~ygt%me?i2fo|`|A_~FuLpjg2Y$Z?{-6i`QxE*-9{4Xj@Lzi1zw*F; z?SXSIH{+Sl`fUbAfX|{{Z|32%ewPUX@mZ@p@JBuH-+SPzJ@Cgp@JU==Un=%=bRgH<+C=4 zJLl5JJ%8ukT=}fc<}&TSP%`pRDm>7f!c6YeWX0bAaRuyj4*6tYUGe88V-d z9yrCGdHAf+9{3m!ywn3P^T1E>z)$tSPxHV}_rNPW@H0H{N)MbojG2een&^R>S)lYV zKI=>m`m;RnNgnvw9(c6}{%sF@iU&T`1E21JpX-5t#{)ml11E1<=Hat0^uWU&_)HIc zwg+D0f!BKAw8?tr;j`v>;Foyd^&a>F58TWerpN8GXd8*l!)HZ2@P!`uVh{WZ5Bw?* z{2C8jS}8|fpLM+ly_pepXz9vl(Y7&}htImv18?`hX^Xtf!)JZh1CM*)H+kR*4}6IS zP9MBXKU7XNS&P$QOKCo{U!gR4XhsK7Y2eVD{w_W@bBs+^z=hw&_@OxmxbQnQez*%? zuJL1B`289`$%X%d@h0m*7yhuOFLB|kG)`+3%(pXkCjX}sEn z|5fAPapC{a_)Hi6Z;fB#!nZTtlv;0K9>1+|b8pV?Yd-Y`(C1Gy?)LEI<`Ti7IgKv* z{WRX125=J(1{uNB*sT%-~_;5&85rz5aUfZ#P>e*K(ie_ zaLRW0)a+HpBVTIuNctmRYPE$M?~@MbJ6~!wQuCI&2vxaAaOn;mQe!K^Mf(M>yXNVBvRu6i2Z$Ob@-0DH^?hP3FkskCX zd*Guy@X;Rl7!Q1`2VUxdyL&B)%x8`Bpg+X}Kh*>OmIr>C2Y$K-UhaWcc;IJv;Nv~; zN)Nos1E1i5yL)en%$L!NHF(g2&zTee4Ynh=Ye11fnS<|-;I9bQ0uZ3Zh9V1GagCd`TFWD#uue<(^LEw zx^6?Q%QNsfj60(dL%)>qt25{~Fn(niZ>HKmGO86eXR$6GvkR2`W$p&hl+J6Cf*3+-^-xipF}czQy?OQ}m{XaToAxdgx&K$5ZrX z#PS00A(rDW9i}PX_u$j#0Foz@&#{cJN%1e#R}&dum%=CNtJ{DN$#wj7sLp(>AYAw- z0~-I7amU|VsPP{G&z9bSFqlKF%y?&Nyjq8c+2rFlj6bFCtW=BjI`C}#-|@gthhnqQ zUkQAuSRdlkG5wVB=Th;S`tmg6&u8ET7*Y-u>pBem48~u`pkL1Tiy8PkjQ=f#o1X6E zgR;wivj_fr5BwS6L&bUz!~aAKafga^9hF*wn;GAllE?HI)-nF?4E$rp|C@mqA42@M zXW$nz-j%{1)>pp+o-Mz2df;Q>Ldr&ep$Fawe5mzSD&7u#^@0ceOTdR%jvu~V(~mne zd%Qv5#J^M1q1oc&w~W81?=0&aeU$?jz)sJt_(g` zXndyTWcY7m{PPrlBTxAe#OL!2KKEhV)d*Bm+XOq8?@%&V}OwIfu$C;CS4B!A7VN4gTpkRtxWICmzgvU{3g*m^Mi&y2Hem{JseX+^z}x(lqc&f;O1RK zNk4;d3Fzxu4}3mw(&rNN*XW>kaOika<2!W0G5EnpEBfk@ijLlup<^cSZ1G;@fq%~f z|BDBndkpEpng2C<8x1^Lyq7b*GcRoDf5EsjFKqC48F%J|4PJCC#p}!q8+H z{uk)0TY-~)X6got-XEglb>P|fe*%1nddr9DTKT_aoqs}h`q>`%mB5EsGgI=IxbE|y z|2c4$bEb-r-c{n`#O(3*_Q1d4fsX_}#B$aZpcwFx@SuMZ_&s7hK)$9QID+u@RJsfv z25!=*N%?dm@FAA7ZVKICKJI4RSvO_Ec6ji4iRqp7RHzPo^gfCBk4ed6_>?g2tfv~I z=`Us6SvRH4lJ#B2PfhVL>i;Ql!&9^1(`FC+-^|BZXEj6z>QhW|I_s0v;NBPf17b<{S~s0k0EFehFH$}D?>kp@#++RLmy+@S$}2df5*79{>soN8K0Ws zW9Sb*nc|(E!WU?H5{x_RuMGWe#+~(7=W6=%MiC!p{gt8bVBA<8%ep|*A2gcio%L6S zz6E%;eEc=jJL|I0-0<-dx3ic4oS$|ck@n+!J_%CDn+7zGjHT|a^^!~Bg z`AqV_Z}GrC@W3yEz}e)y#RLDV2flw;q&y?L1ycv(anwc zxCpin!N)>q)3~uswe_{MdECMg*!e9o;^dMM{Oys(riR85WuqJhYHzhr>G;qjY%N<= zUFAFy+op{SPYj)NMnxzbK091ea&l@vHQI$ugwV`Nik+=$GoO~F_N~o)R%*7d&GN`> zT$|;Q*~&Ka(HOP4ZRUfr)ONRcW)j!jGCLepJIlGgxl)5~u8atcA5%vE#}@Pd68=Au z@lkxO{*UJCvHZW3{+BXMDTgZMP^Bj`&h({BUpj`6GWDNBm2q4p#T<-7l@v3h672l~ z+LB^sQc}!ZN{X3HNilOMDdy-)ic7O*=gGWTS;Oq++NOoIO_igo7G@<&+pN!%YIIs@ z2uC~#v+a%7gT2Z2uy@*56(wzl)+62(ywzOKg7EHlJqyAc^7SZ)_a1>gVpDN4Z)MoS zFuc8DdYH_8)ZEWAw#4ko4ruAjjFJ2j_oqvbAj<}F`?!HyI{!UvfN2Q7&_;VEu-djX zODcMz^YNprCZ9FsUovAcKH8?|WOtcWyCN)2P@&ss3+ z;@YN?(M}O*Y``{)RoI_Tv{_lU0-Qf(v=Gn5t^^I{!rCzJrCxQ3lM2Z)&2H*FADi*D zuSnJW?gS{|@N?@H)HTnO3G>7ql5G)7S-DKC>9l@N3p05 zLXTomL3$F)9{LnLiFprfdLoVKn)D=U6Q*bJsP0V9;!$C~NIb=4DD?p4oCy=AR80*} ztvCbU@PJjEQ(xVko;$NJBSv9rvsnzIlAeUwLk{+YO@%6gJqn`gMvsE1E_zRbAbnrL z2G5mWQIu@yym-4tdYUY=)y-BEdXQ|A!D*|fG?d|6r*#Xc`w+w}N;h0v{vOG^y*gp1rS(wUmM>N&W9T5&+ym)aKyL~q| zEWnptBbSF47Ne$$q&dA-y=`_+I@zR$6fgOmfs{vRU(=!#H+9~Ek)y(??ARxnz59CE zN}b+~Uza9~6Y6UhAko+>d`#GUIKY&xEIWv!utm&X`1&&gL0HVn~;rqL_6gH##m|n?BvFCdOKDnfaH;Oua ztTB3SQ!Tpl9>zPJUCHQFza3u^rlCegcfK1!m5dc!F2xsw5&gdMF{6?%#7BJcqGndh z#q(6M!X+rvwKXj~>PQtjuKY@mW=Q#E4&_tE=L?OYRgFYBarU>zr!748x95~hiHyPa z__OM3O~v@?l9px#zY5*;s6kQvWv89!UNcm|ZG4YIac82(p_G5i36`EUV}+NUw&o8v z(l-G{YEQ$Wrdf^pW8dogCj2dfv2*I08ymn@q}Ehbxi7VW-dksAAJuNkkg7~yezs~mx;K^V zYbsJbBPuXoaaz7Q{@p7+`>Lx{EMKXv(#q|goaCt{US-=JNK?(ZHtKV|&2k25U48AI z+kMk9ox2B0vWL30fE`Bflgw~kO_;) z8g*}%L8|RV0?WeT$h@Y8MKmP~74SECs?VxXO;qZ`LL=peg|c<#Rr^U}(i(hrEK*xF zdH#HBe(n64#>=fRb*gJF4cE-OG&~nyUL)S!PQsVq6-XslXOsI|ZYPgws%?b#KfI?; zx}j@YAGy zXVp*_#b`-*?lR}LN*A=$*HiDaYGKtVx^@&H!nx-!N=7x;Mo{)^Yc4fYXxTp{H=jfb zpXX$-V460^Qc77nYe5ZqbX8n15GvK96M?c0{q=|1vL^XUi=_u{tvxI`Amgv=gvYnv zidn7vjX^!sE*aC5rQx4vOfw`%9!1sy+f?~KGWr%JM!aYkTvw~OJC z1MS71gt|}{sj7y}$l@nJohLPmCVdYbgz>r`YMiBet5oLemfenE6h0=tpbG6Q$-~aC za{$b5m_x>>+jUuuq$yq94dUG==m{4!i_oJG>|me}XP<>6yL((?>zc!?5uNwl>2{f3 zQ}=SzQ17*Kimcyj-O4DvC1w1n)bs^yY>|ZFDT6<%el|Kn#qem9;DPys<(QTQEzNKi zRw)ycr80Ab!mHtwZ#XqP`opS6W;&r?EU@-%eX+o4BL`7~+zn*6$_ZpKk|A8S-gH?rtY&>} zq+tO#p)c+>NL5v`hg}+(SL+^3Ioa~Xd1X^ph9soaDZ0L-PenRKBvpS@$vV5Fm@4_= zS+naFmXy#4p0X`WJys-RZUa*pp57*gR=6|i-mOuJ)Npl=VD~l(cG8$Ri|mpi+oUx# zDbqX>>2I#fn(UyM-cD1kvrf(3cX!72PNus*u`V)c54I^SB|W1vz2mgJ6Y^vo={cQJ zr>r>X+*=TnmwSyxe|VitktwKqi^U1j%~$b9y=*AXG^jZ6m>e2?h@y7|Mvr=FB?1lGnKgHX*pX%?} zU#{QJ&Bd9X&C&Nia^dEE3lIQTGcl2g391%LCVH^ocaT^l~lLY^Ffn;n0Mp7vxn^w)XBdyl|hLl{HSvL_w}Z~a`!j(j1-??_#J3l&4ZUA)C`OMd zPYpgu<3#@^(qiyS1%9u<)xPa2O&T{i-m-+QKK~H)x<>57fOMULA z6-Xy3&mfJHJb6M7!vy`uLjIEkJ$-}0=wXb;NpHOcpVI`NJ_4^2d}MjJP0&j@etKO%5R z{}+Kv`p5R;=sAD$Mg4tN;Gc=~eynlIU)kOb?CbD(OVFPzaQdc*(c47=m-JT(T+*)= zxRi6Jz$KqS{Tz8DpV0!B^fLr5=@0Gi@R52LFK{W(djgmG|3u&~3O)4N-{CL$EY>)c z|7!e<-fk51I|QHI0+;=qz5^70;v>u90WRE>!%H);Ps0`#HM>F5AuCe#MaJrTsZZ<0R*6_!)Ud37q6K z@>B_&WI7c;I;IHzvR%8^gMPCMuT*TTj|DFEQ>r&@AvwG7Gjg6MaM{nP(>Tc}`#H-6 zJv}q|@_@i)yuWneMh}k*{xV-)*0?)g`W}GDaJcpSn80Pc*qkdx{|2s1dh-P?(|ef4 z-RYe!a9Qte61ePd+^%twU-mcd7Pu^LzZ86A`_&=nZx;3OF^!WRWPfR$;3NAXe-wOV zynhvZWVt<1Z}{cb{~;PD{mAqV74$N_!v!wmEfaiXddmg9Oz%XEyVHA);3LyJUGS0d z-tK|lCHTm6{anz?bUiF^$^Qw#N2cp3K`+y_N#pKxZ4rEAy511Dl=Bn8U&@n<{e|gp z+pGQpm-cO-#@+SnFo9Fv8+%nMaB1Hz68xn+muTEwep)@~zbkNQ51$jb{)4Yn=GVd^}j=?tDB_@R9lWgy8d>sMl``dTD1q6!daju>ZkI zPLfBC3y#q^$uIfPzRz?Jy&M;uCg|n3pi0ooaluT1%W=Vc!AFh@S_CfT`Jvz=#|4iH zT4)5`apEDzgIfi@TG)qO0+;1vx8P5_=4g5PV&8B&D7}PVKsPuVG)|c0f1SW3 z|2}%dO*j1!0+;k-1upqNBXC)6KhQYkm+b%NA3@S8+2#0UhQQwv`e_lk9A~W&xa4C# zp+@PFe7=Ew#_1qj@~IHGq@N>jNuP`T!Ra7AGQDF3F6Hs-{g{bf;-_ky^068}Q+}oi zda3^l1un;f+dTNZF6iaBFISKp_%3CvOk^Se}1TOnU z_X(V2(!+M^H-f+H=lF(_fR3IG{YV$CyD`>z0+;%^L*Q?MpD90&3S5qZp3*qUD93%) zH%S^t9+NM91TNzp;KEJ59I0`4zEo)3oiCRNK2py|6gl$9cxMXyEs&V>&J(yy?-d&F z1zMTjl>(Rb>kWa+e)vv}ll-z>`&{6%ybaI_=>>Y(ejTK7;&XG3BmWT^&jl{WeMN$g zY`=~dd}O?11Rtr-CJ*{Wg1=1f^@3ie*A}>p_lJUyOz(0*FVp*g#@*@tmEa@OyHfCx z@$U4%KNWmry80ah1>y-ZiJ#@*>E6?|m6LIRg^o-g=Id1eb- z+N*kjOZ(QWags-thbsh5X*2fc4uQW4T&vM~T;uNg`?SW1hm?Pt2mR{;m-g_aW5EE2 zoBt^qck}c__gQ^X`;+epdRfjt7Pu_u2OO{TO!CNbK3L-vOqTPbH100v#|l2OoR1KEWV~ky zT*^6F;L={v_aW%uWFT_Wj@N12Eq|k+m+~*txLf{f1s^H@4T6u9|9659#cldsPq=Vn zCzAqy9rQ;2w=_;X{9hKh zDLKd($6k-;+5&8?>*2#`jqlC;JXWSxbeF*PWdaxeI0^c>VLJs z<+!hWB(tZYoW|!&jZ?gG+?Nn|e*`k+_BM@Ee*H)2f32Y3U(i1-=%qb;Uf|mWpYu*u za*{j)1RvW2|GCCVo>v5)&4S)9_`ED|$$z`xBg^628V3u`8#CVdP~flPnbFT@F5L8s z`i=q-4oa6ChaRADl3&`HZwg%6!{Y=_--j~sj?*~FDdidO!i_vl0)HD}44=m|PIAg| z&?f>vK*W34Xb=)Devb?N57D^0UJui_Tc0NhT*^Pjg&XqQrC()EhQNk&q&6R(g8ZcP(>;8xJmB-fhPr@DvguuGJmhqxLf~if)9l;`v0!Lr98K| za3jy%8h7je4M8vU{IS3(Og(;doP+PO&|%7(!LM@R5k+R*D{v|2Di?0#d`;jVfQQNV zw*@Zs`I*Mu`Yby|2|&1PXX^zn$Fo;zob)gIx3>s-+26iH(98bnk2OyEk$#>B1RvR7 z{jI>IJgWtN*^WFda4F|D!AHvZnxL0*zNK-uoF584QqI1oDt(fE_}nV!rG8cjT&O=U9y!dFH6#))_AR z0*%iVxRmEo!C%S~5xA_^*J_-~kF38-1--1lcL{n~fA7_}yZ-)M@R9ZRVZleXvo8uh z(*D0DaMG#C7hkzj2w^f^12pbVSCOEX={jD}%XE#@xI10r1Rt5M3c*LV`*A@p<-AkS zOZ~49^is~>33@5#;~IC%xnA&*a{fi&Ql71Xzm(?#K`-U`RM1O#d=(ZSZh87?obpS` zbEKe``F@(fDU4~~FA#jB{1d8Us@YD+1!w2_B1)5)|6q{)y>OA5Uj zpkU=?#R3%&!_y-5Qn6YT)GGC(V3n#>!CNJ~OXU%zYE;y_*Ews?{Ih56%s!bZe%HId zFLTcMXZ>sad+mMp*=Nt>4Cd`mfMec1Snul@sy687V8%%&=IwZ}$Gn{c_L#Q@z%g&< zgCES>#ek!ptH2ND?a;F_`tiC}3OM?yWSsgf)mfjvrx>`NpEm)%TiNUDYzz3u>)Iy3 zQO|b3QO`Soqy2k;<9gaL4Vn64KZ!6-?S<<+SAzZ9`(*Ur4fs2NkDHP4kM^~Iqx~lU zNBd=fqy5;AXZ)l7vjNBYMlAS~faCg1a%RT=p{kK}dvyW+2GqA3a9me>5^&VBoGf&GfsUC`}rRL$Nn(v?2P`gpudW7Gwyj{-v{+tX|aFBf}b!u6ZbHP zdkW)Jub099Y`}4S@>0NG1^cVO|7(EX4EXDS-wJ+k{8lJGa{5an{^Z?@&7uU7cGfr`FefSx`aUT9N z!0~?nImSsR>Ctif0e@ZLdK?&jt~yXf*K53g7#hPk>A`vOLW}+947`N>{0MN&&ye$c z1B&}+^{4fW0{jiY4`rP4hU;L{7$=>0UYrX!_VZrw^AQzX$31Yaa-a(NnE?2yj8k0v zykjcZp8)pPSn&J64}Ko;OU5Y=yVal8^Bb_o>*=dtPnvX|-!yRDj)(D$v+4gx#>ofz zzYK7^{@w&Qj?ZhrKl#$<-Mt3hq~4=4@_c_ww&?#zz|sFHfPWP7d_LglXC>e`&%cdv zYF|8GzQj1?2hWT9!5+`MZ-YIaUrzx}b<_EOgK@%8&mQoP_Z=hVD??St9`8F2WSsQl zea9h;lYU%3JQDoieaCU&2hZyi*rU$t!5($q4fd$>0kB7%>lrt7ZUjH5^VkKdLaI=G zah^Y)amo+&lP0jodH$7v<2?UPi=T(U9>2Y|-g&F;&fPav2 z(s>-<;{nHcat+|vUQzIm^NlOO9`7T*1UTMD{2FkKdjJo}q!ay=1CD;?0gm>U1CI7( z7yJ1k|5&eifTNy=8K?Hb^Kl#4WBcv`9M8LR~g z6655D-fL2SRNjbsoAmsUyFqAX%*V}k?_k`FyM}S?e}zvE-3d6(5AQW_J&%2aaf*xc z=Wj7iadG~<6L7qazYI8zhocty!bm612gU-9*ZmU!Crzb3Jv51N(u3F88!h&a8+aA_ z*$p`6rzGwh3{jiEs6RbkO#>X~&*w8v8gc%-2JGp*bh`kKaql(obi06mY?o0@%Bd=p z2OR$^8K;;y4?hL$@qD}*>~S9cS+K|P|0S@;`Su|RQsdw6>{eTyw{eUQRT$2P)uaBs zLO5QJt^yp-)9*7*^+i2D101h+FM=N&m;M0uc%9mJk*|mR<8^8*;AN^)=z5hfPWtgW zbvocU&Nl&$`Aqq_me^X>u0so#<&eZKq@@YhJI`lGTFa6BLX&N%r% zJ;N7!G_Swm{O2&n$sXr9VX(h>pG@99!Z_)~dG*QQ2j@98;0Mq5>%bm$-U{}pa~;^D z&PTu=b$*L+Q|I@<59++H+0PH<0nfX2fS(NgXA|J%fH$>d{NQzY730(&@cO<1?D2fr z1ok*S{2c7j|ENp+xK!WQ)t~O?$1_fGD?sP1U{C!@+iwB9AMiH-|101_E>#DrP~LF- zoB}x3D+M^V`==Qvo!IWTfIYVR7r`Fey@zqi1NP5#;0N3NJ7AA_>j!((xo@j-tct1g z5XQ~(=m@Y!oh6K$I!nP1>Z}Am*p8nDd(?R|*keBL0ej5nI2K-HekDoL~I{aGYQ50vz-C4)`Zu`hMge2HwPaF1yU%AzSo+ z6X587E#UtR=kGTFM?bf9Wc=g(-D7}HRLRqM_(^BR9^*a_IQGv_Dr1lRWCG(fKI8pe z1K7U}`Y#0>=XH+&j(TP+&BVoe-48hWe+qE)A77U7gZjGxNB{MgXYBF5coySSU%W3^ z4EA`RehuJQuNwfz`}EtuKhE3N0gmIq6W|BOfni-4{aCNl0LT0H#f;PWHAnsFesVk5 zV}E!YaIDuZi=UCpGkVZ|Umy1F>;DFERhRJ!oiAwrpNdyNeerzP`Jw)X_g@EsJ@!wV z{f8~~;{nG!qn~fV`Fk+ilb%h0R|1YYr-6Uec@*GJfS;29$MNl4z`qCfs1vWtVX((~ zeS~q+kJsf|u*ZI0EdP@%{_6looyE$}f2yBjEO|SDacWewJ&e=%hU4}_fTNxR0RJWQ|1pf4?g zz|TG4AJ0>pp09&FUcc~sDP-K33jR^gOu#We#fm!({A1i=`7fkiFGG7B&N`{x@q0ei zfaCXk_-kcezkLn-%!B&A4mf{|+F4iqyJw3j`Qt4z;V7kPW1sQ zG``_HvjTARKN)ZwPtNhYaQ&(raJ+xl^A_@t ze(-$6>uDJLU>^Rj%)3;oyh8aw{lgfiJmCCRuQw3B3G&3Bzug49t-wFD0+`#^(*EvY%vEZkP{hRvre2j3^ ze=6IXI;R4TdBgJ*>pP4ajQno|{RaU4ZNSGcZq`?iSA=7J@O;NS)PaAD+WlnD(Rlhn`n!`+u-~l>KS{O?vfF{LCnlpP5DSb9RyZoKqw}=N8G&+#>lo-{NNh;Mjj`=XImS{z8T8{)FSeC%}Fz z2cYxobigM7J_&HtWAlFz*rWdo07w6)0FF8_uC52^ycq1!KjP>I>xF(EC1+gF&o=-M z^ZNu{4LJJ8^Bw))2=?gzX28+^{eYwYk3oIW|Knhf{(AsN|Mvin{u?a*e+u^K|8Bt1 z{{w)d|BqYzzX|r}|1QAM|AT;||5+CQKLLC6e+S^`|0{r_|JfG*+rS?EuLT_auLB(Y z&$0ObG1#O3+W<%Z4*`z;r&;`81NP|uc(6zRBLSZf@(a0G34Y1}KMCw>0pASvb%2io z`v$=O4)${Z-wk*p;J*hP^Kc&c$Mfh9V2^pY1@JKV|0>|pk5Kcu^pp;*MfZv@H)U30^R_49B^#MCcqoPJ^^?X@I`<( z1HKsWB;d_}cLCl4IOZ9zQ`k@F{#O^w^Yeg**?=ItUSK}aKj!m0;HM7!{04B;N%!@- zpiWx%&;@nA0C<=U2tu6`0N(-jsQ+k)TL<>2rvdQaf}c5n_W~XT9Q`x{{v6mR0WSeP z*uK95`);s*5pag-RyOn);9-7)To31c+UWaW!u6U4;kv$r??(U^y?#Kr{>+Qs()tP4 zYhr}2q!(2P*K4PAyp~>6A^gMMp8v9*_X*dZWfQcSUQ{9cP;bwF*}?mS>$Mkxb^)%} zW(j%^aJ@!H&}hyT`O%-r5?%uM(FAa*1^ieIs_iVm^>>r$?I_@S&4=(5;Cd~N@Ku28 zwL!x5T!M7!&*BNEHBTyppX}}VFIxbw09^MyvabYO&tVAHpH+Ep6QBxh^qMmrj{$r# z0bJ<2H&ke&*AnSi-y;)#IsshtoPqE&HK?|FEG2vj;9Uf$LYrycp8s+q;PrrS1pF+( zw*o!`@OJ?JCg+ge9?A>r^tN7eBm4lsXA!`q1aPv~<3%mt`ZE-wv;wYe3BM8Wxdd?O z0sMRos_jO=7XZE$aJ>ddZ|?;BLa^@x{9?d|@&|>A4i}Qoxr0UJbZj!=$&PfRp`Z0#!)?ewhz>um1%&f0fU}*8ooT zx-HiMz7+g?9dQ22oA>Tkz{y_w*=gWW_SFaY6^zm5uYg|(_-MWuP~OO1`!6x@D06B7 z|1@K?nF4q>;EjM^4R{RjYXI*8{93@T0{l9_9|L?9;6DKTvw-&legok9f51PWJlq6$ zDd6;;F4chRwQG8>8E~>+eSpun3~;ia=EI@&fRlY6Uwpm^IN9qu_W@4!b0+$Z{t7tR zKkdVzh7tY_+0tKVwtsvs;AFpm$G8=M>uWSI)&hQq@4|cC2>4xqZw35rz<&lf#ckoZ z?*ZNe_QOW{2c(_sm$7{q@E(OH)gP5A!0+=R@AY)R$&a2RHUUmCqC6Nc0i5hV&vAPI z_w1wUO;sKOob2^n@D;!x^ep+MtaJI2RBU0WtTWZ&Z=3aAN1`=WmP&M`LS;>{R4i1s zu(LDd0cA_uT3aqnv@S1;Trj(OVS9ULs-`KCinX*>RCgvL@%E){sYFv`VXQMTsVSlS zwJ)z<#?(NJj&_Pn+A7Lwh1fIw;1x9sV@;9PL|02Z)*6Y&I#X4bH^)*GGhGRin%|tN zE7Y#KC8eq{X-TXtwm8vIQJv_DCz7d__O?i}y`?QxKYMOu^3t}JRD{ebDpkc>;*q$L z-O{#r#>{wq{gS!W5iHFm}Fh#LMn60s%m*8212wrA=U#2mx;W11}rXp?f6r3h>X3{agO zyCSXaiz6xENiha6A27@$%vPjjNwReY_0@jRY^5`rXtOW)?}h1 zlA1xiS{hsH>+ACfeqRFb&8jci>vc3D1g^}Kiio<-4Wb=#h`~eG4mPw&3?8~>u%S(2 z;LzS6FP;vAXapx`fhA6RGjz)kSbFM@n;5E!Ui^V_iSsD+@%@6^{k#VODlXEFgelD(cTehXFeU6)b|^#qoH=cN0-dWvz+K>Q_Zg5!{<8nb+Jlu`0srYlTLr zNZ ziX$?gw;&>6fQZMIE^bbFiHuZCPIM*WOTCq`^bk_--s*#Kn=4x{-q&=dS|baWE{Z6V z_V}d<8fR0JB9VAkS4BldwZE+GuWBo+8S%NPii&u1OfAlI#9C6FGvf7gW9mg+19>Gt z7>V~H6RZf7|dtP1bup%4{W4hE~jy8$aiMV5oX zs_+*!3XzfRAxDRQozOjT5_}v-3$BqQO`Rt4Csdbr#FFaDL!VOlOW5AYJE^IqGuhsm zu&iAa%XN-&?$g3dr##-;-j?uJjJ;LhAala{`f87!Q=RuAo-|{8AHtfcRWr#NHIw`| zL@v_o)i&S?eI-cO@NY$=M$)%M>1(q7P$IZ{p)ra#t@jdRMzANnz!PbJ`^TI_6(v-l zrYTB9Gne^p!U_#4-k0(DYVCx3CFtJkH381vLTl!QdS82ucn0q6USkVNqx@d$HDXW> z=id|4-Aqy~(8TC|rjtHPR^OJf4jOqm_IAumHBVy)nO^mT8C?U(1AmG4VLvz~kVz7%U~ z#@6$sYA+xBxsIB)*gjgSUv}Qid6s@Kcpu)f|I#FPFZIP$HI{aC#Fi_-AA}+o%$v(n z)#Qr5b*vVMz3%9JIa=*0W3}KpZ-!`?3?geFhv<3funn?_60^y`v@G}`{bg)=xHB8qZjASM zGwk4%*gFB|i<3e6mp)_Gs14c?G%i91x@=P2DVCHG(;$5EJ7Y+K_F+i}rG^P&_u?Qn#Fz-bes`L=7|8W?) zN$wS@wry!^D}6(uep!7L?R)=(tnPKsnxD&`+^N3D(3(hj_wZ_c++16#udk&Q!B|^d zeYK&!Hr1@YQJ{{s%c47!G*)Ddl&HsBt+Z=#BxYiocgmHS70&vaPO;`rl+41z^aW}a zVo_Nnvbd`&qW(p%v%O6%{ic>jmX(Lf;_XY8B-&JR+uBo!va@ENf0D|4{8FBAB$^|O zXnj~Mu6DGm<&T0(xB4Lqe6EjnSjRj1dAIazu&dM`KfWWqwej^cRFF^qv+v4p6ynqK z;avGm0-v4>=gQZqMg7+X;I9zkUl)MCO5lGc0Dq0Zr)Ltm*1t#Ke>MPrJ@fT*k*WXe z8-TxAh<{@M{x%{0&;a~ifltpucg^1(fj>L|e}uB7g8BPE0RDJ^Pd;7smka!n0r=Ae z{-^-_MuERy0Dh~$-#-AqTj0|(?_Kjp{hbPqAN1TsSALHW|APVe8<}6?%LtL40|W5& z^TkjS(;|0^6H`QHz~?-Tf&1MuGy_&*51AK^W0C%gTA7=W*ztA_P|G5|j;#NQHt zU&?$OKj;~GuI*PR#HZ)Ky7KiiaIyZ|0`T=Sq>)e0&vlKjpF4+qdVa7gKPlAz*#P_% zLjHFI;IC$WDV)C_3c!DY`Qw3qPyqgO%pVQ>Hv{l@34D64t!w`KnUC%F#{hi&oIm9M zIRJn3zJA5={Gs1=aMiD$8;J481mKr*e9S*R=hQWR9rH2%aRK4A|fltq! zcjfEnRbu_=n&8S`BgCiY(!28S68KXC@b4G+^xSdR`0E8e{l11PUq8PS^GDCkcjZ4J z#HZioaOH0i_zeO0+XO!So`-Av9Ri=8yYI^1De&ocKwSB+2z;88xboi=`1JcBuKYa$ zpPt+A%70Jb)9;SB^7ZpwvH#ICdR_VZvmx^7_exy(V+1}u@7|R^Uf|R3oVfB!1U@|v z-<4k~@agwaT=`W3pPrZR%Gb}^#r)Hp*p)wBh<{=L{w#q{ztiFxf1bdn=ghnEFB13{ z1>iRce0q+%Yy4J$zbU}=J0mm{_#Y0yzf0iL zJvGDWt!@4Jet~~*0RDP`zfS=EMuGowfcAev;O`qC{uY5>5rDr<;7omaI?jy*n z`i=YfK0xcIt!h{2W2_H{j#pc<hzjlU{m>g}2O={F(B z=Wx}wSZwhPGp|kq@ee|$YTt}c&ju&{M8j?^*Z**%!a9E%{u=X5{g2|q>A|e@@C*sN0#^Kc#H7KaJCxI$4_fw>s)yV&QLRzFA*WKdnhi@qg|Z zpUz2%-|HBk)|4dvOOEjq7Ji>&{JSjtKRU+$t%V=zR*kBPdONF_`9D~lxKjOxbZ61h z2d2LT7XE1FoAze>)fWCij`3f&@WYPrtJTRP)&CgB_*Yu^<&NeWeb0yWBhT$<@_Zb zs*qRI@Rn7~@h`6ULzP8cmX-P)Az}XbC1s(;T)gM(;IU<-f7{FcGUlCi~epwe~(gO>K~y#V3f|kLmc(bvGBu=`e!P>l>fDY z{`&;|*IVKr@2LM(3%}e^f3HRV20{OWg8qr>_o?<#xOx9kf5;xBX5e~cQ?DUx~qbTdES_7yDag;9AC%PTXX*Nd>;OMP2{bq ze}_f?F4iAq9_inr_D%hzs)5y8AzE9TmMj3dlEPhHA&i z{imDbM^LQVH}hAi_)_~f@DDv=`#-JtX8xAy_(q&wj(@y?oBCI3zVXKJYYZYE8fKv% zSoouvua?KMidp|ZS@>fd;~#ghoc}QMO}%FPSr+~=j`8oY@XHF;CxU7&xbp#MQj z{5_8P`z-v>N5VxaEz85tr~fj=m-4?s z(EpO4|4~c)&5rut%frv7|1TE({eu2i1^u<^18C{|3tyW~dDf1Z|7-H_^XdPT;!F9j z>&opvy9E84E%Cb@^_QrBP>|}c`HyDRK6m^%O7SKAt5|;@^J)C~y`cXJOZTOIevcf2tR-3{Bz`Ie4?7(W)QG{jXB-rTnes{6(2h{jXo`oB6w2 z@u^N`|9j0bf1{6<_3w7f-?atu{}zyM=D+P2S%05n{#z7Z%74GmfBz}ue+S1m^FM!; zGFByD|NYppvi=L0?|aF-Qd?tryg+_=NwD~4{+C$zQP%%66sz{l{@<+ll%qPsE_tP2 zQ~iI~)c=R7KePYe#qrJjSA5oYNWQU{`TI5V&GDm#`N*Yxv;Jd_lk-={{O1h^X8jLT ze5w9jD}1G47EJZ0T$uHr#_`SiA9lSTIA8rgWzl~m^9}hq_1|gXhnasm>(_qF`v2Ne z|F!?+6Q5%u)t~-<+^m18TA(0Hv;G&~;1kvIOjhx|W}sEfH`_nS{EVf)XSV-AACcQ% z^XrX(X8jLPe5w7DpYn-VfBOGnv;H@8e6#-FywTU2ul|Qjko9k6zFB{xI-yG}{O!zF zm)ERf)<2>6QvDk~?MG^0Hnsm4q5c~z@!xUO|AvL%$NbZ?)aQ<0uUPc2X8kz-IaJU; z<^(_g6OA}0-Q)we8MvPnpF?jQ%Y3t6KFNIgpCK%oud!<8oBe;xYHg9dHQa@+v+%>r zKP{V{GyY$t_)`0i==POHnNRIc&(s*f$76Z>v?cyUj`|P(sNDaf%%9G2^k%f);qAeS zFX?Y){n-9T3HmR##J}HB{~Z?o2Idbl^qTr_wdn6<{W{N-|6>IGPg~-D%Ta&XiE{oo zGynEH`cF`NDgXUK{*M#%Uu%iq_<18RADaC?R4VI_GJl!j#?1fUE&7x6uqRbEd#@qy z|Gy^)`j=SZ|H`7@_sUMy=8XdRH7CjS@8$Rx83E1uS17*Je&tvD#9HQ4|0`90=J|hx zj-RQLw^#QCAK-3~e%Fk@)Dpj$9(JWl!@fS1;+F~WZ&G~q5q{494{ToJ^R!<7D5GB= zud>A7Ko6@@1<${7A^sP+{^s?6JI6P#|7QKa%Y6FZCM>&{Z`zyndCa1JE9)<3r+{xe+hrTjOt z{stye|2a+2KZ)a;`S0cUN9(}64I9TT7X2f5;$_y?)Zb*$-y`JzOhNyh7X4w4Ut;Jr z^>4T6Z(x4D{QuaZf4h+Xse=Ats)H#w=l(0o@s<0m63#jbh3c7ap1-Rd_17uB)PKgV zB2{Yq=6KY9=w3{>pU%s*7X6zY_5aACzt2(sW{du)pua)TKdeH|f0!puQ@Q?n6V^Mt zZDhWg|7PavJZYNFpFWfuR4` zDp`LW$6sLR4I9TdFyGX_)=~d;iZAIOeSL2Kxj@kWu0{W5j(?G%*VG@a_Umuz58vSv z^X30S#h3Iq3i>Y=^#6q8oAZY{j<1#nvr0JYNX4#^^*1wrv|(?KpZ~Jx?_vGw^57M^ zenkcSr*eE#e>cb1=f9Q_);qjiW6{5r`L%|yPR%te8%q7tm&ka_<0I>tXr@umFN-bh}v^WQ4O zzt9qY#9bael&}8tE%Db1@!N#>J(l?8j`8ob#P1j4Cx!U0TH-f4#_zSnZ@eit{~bd7 z(U5`Vj6{LPm5 zT|#{NN{tzR*Jw{FXjI^jz7XrgSY-jABk(euKzSk{6_j`J5?t5 zoAj&ZYv2q^{NB&`fun3l;~#w_s`)zpQfbHIf6x+t!reZv!QZ4`&G`3N;*Yq+54?_<6rYx4HDBj{ z=xK8OlN^6lIk2B{Lei6eEF|AL+(GW`L9rX>HP6J zjA}yNPpSXXB}MDkcq7Nx^K8G>l^wUgnx1AAT_3%TF+a;l9h|{@6W2VAFJr#3{2r>) z{cn`E^tW2SMlZ9}e=Jp4mDMACOFI0#`qO+}{|~9R`6CYBkYCq*$>)DY`N!g;8HA2a n?euQLL%vO)y1r4lRTGYj--vvFPyVJ&72AxB#(G8j zVYojXF627{u8&apqmZ9TWk2K#sk{jCv#4AL`Po!H2l8{NTo3tTDxU}W`Bc6D@(Zcl z0Qp65ErqL@ups1(a9s@7CkR^tc@tbMaJ3TFLHR1mEy}}`uc5q?^0ky-3b{Z*dzJlS41cisU- zmTj-A>a&*2QjgQKt+9QzPv|F^KTIP9%MV=^+7MbF>RI1yeeShg@BoBrE-TYsHyWI> zCJsfQR2u;uHIeK;)=dGCmEBYKG)ftN0Bo_cbHkapBfGI3!9r|4BRuwAg%y3y%Df-W zJZoj!4n%zIuUna(xi!J(lp&GKZ>-E4k==cD0c{x6>|CxH)Z|>hCd-0aG^HxMyB!Sx zQ}8y>Iq^*Dq|S+{^arS2BbnFLedojx-$Wg@ zL*@!Xy z(BfGrXY5a4@p3FpJda$yiI@_9Ro%uXXVrq`ub{OX(b}$@NnO_1_iL=yH^^GFq+S^T zR9LWDdiq5zB$YhC$~=*G0xR>Y+*94+nJ1vp(=WaH>q)d5-=}cq5WZ63 z%zN-wWqu5=Fm%T-?*6;hOI6mbYpEC^pM@X4cqa6+2pu z^dBPH+e2d)S6I7e<0E?U!qFaZOa1nNl~(5XI(X*}SXmQaKX~;_e)WiGFLHBzBGduk z)Zp5Tq7yBkm-1KOL<<&0z_-bxvl{~8>^A76r*sv7_B5h>3TRJTl!H$ZB2LlV5W4EZ znW->z4|bJ6rz&=|sD4r11+Ag{DGdD;!VWuh*@lSjCo2o8 zGjC$s?)>ACBO9-X>^>DmL^Atjyf2g&&OG6e2V$ziQ1dDh8|n_NBe55OSbTr;f+wB! zxyq|?$_qk+|LVYt?}E6?Ls#a-^_M2E)+rC9MKaR|ZUupMXk*#({7!iw3=RAQ$h-WS zyg1*PMg8Gg-+B*uZ@g33Ev3qX_rTd7%D%6IJQaG`u`a&`{j65M7~oo#h{SOf`S)!U zVHotI2d5V0Vgb~zFb+(=^(PFNK-U7J@gelcqsEQtCp3K|^9M^0*c5aqm~d>ULP-!s zAcAOXDLz;Q@gY10uSex{5CSL1DXbp^lOPQJFe!;-X4MhD3gCVW)3uT8tU3z@1{g(Q zV6bqsIGm@12M{ZJASM9W^!)c!{n)NK+Abw?dbN7C10b$7_@|?Nehlvfv=7An({}Zs zvd5<%fhNE>zf)VrVME3F-0(?pUd)d&zsF$yx!3MMb*}Mzylxjf%ZGFr^py$-=@Vx` zkO}R$p$-GmGMtQL2kWXjC;rDbz8J%kj_TBRRN3&@`xSd3=3z&4;uwhy>T7>f$y9-w z#v&c`)qo213e!LWT}+fP=YZJ?&0dK3IFQR2M!6bmVk#Bay+VV?*gF+_!BSKYYTs4D z!VqpDVtXjo)s1A1kYcbI6u+YGxCiGc#f2CegIZv4*`!%9$idhU$;Ln%jN>qIN}t?0 z@p7tKPWSpJI~TtVQ%#uf_2IbjQD{n>dHTkCpakS7!#D9XwlGj^g_)jTxiz@gRvbCB zHXJ!N6^vHt=$97i04A@1Epf~P27ZcKmx;WJvUBaewe{m^5euHZ3k=q$R5KY&?Yp`Y|a6}6x2 zfl|&-9)cV66HEGug?^%Spr5q4`U#k#IyUDgr!oS5aw<81i=Xi13MWhp3jJh}Y=Iv` z74$q+$5)t-YgKw)tivir)8FRj#n7J^aQ)Nmss-Dj&2sTs@^4aM8Tm&dnU|P9l7*KF zpKO|bR7G0gr+M`VHud!V`S?qCK+mgxnx9v@>TApC>vGfAHocAQCAnQn-zGpIz)f$| z6ZPpDny`OI*M;9=*Fa9Q!+j7=a5|3@_FQ*rhV-+qK4-l31T?!y|KIn)sX~LwwMTvI zi~6Yhq+$5u>6Aa-?>9zzlgU`0k-TsH&NGf2sW?4#rD1%ja`v5bj7KYB`ROrp_9JtQSIr+m zNQK8IHXee=bEtCm-_JLGVD79^VExi*c>1C_``h!48)rQV1ozFE{mgvhhjXqrj9pc; z|8u_aVAY*4S`;K_f5R8(*lQ5{KY~;{Rv4+}R+iRj)Yqt$QFrtLX=rR8eDbJIlPj;L zc&o(nI5;syGE#f3toj6nC-9*GuU3aqAW2JsIio^f%@&yIdb4)v=6F1rYE2Ihq-^ZT zU~?jtOb@1#b|N-{zL{u-)*b3ib(F^6th=PKab&P}V3>s1S_BAlm*Oh=g8^4xa>;Uk z{rb)6;Z)kcw4tdXaA9*=-331rY;FiNH3S2T^#gxnAlMve4&WN&DWtvP)9Z|i(VB|W zkDpsL2|j^CD~^Sjz+F^AEI?(6LHJflVjEqsK^JU?3wE0ecE1buT^DRWVeG$X^UE%D z?+}LbeoRPrJk%SLtcTx$)xz^8!n%;Sz1m;7YF>3!XugusMbE1686=e3N0@SH!bTk! zw{^v*yCSM5=6)5~Pv`zXU3G{+S_74vg@u*XHMdr-tggMqTv_ekJ!@rk{mrvO)q$OJ zLe(u}b5~bSRhWOQm{;8bSg5)lXn+=YR#sQ7nGfvy;2K3akoJRd4w)S}ne9U6WQF-& zMfDvOq3XLTE>rnrMWqFWl>l_Ae6r%RbRVJn%C@5cp=uBj5)=i%{eTDjrso2%%7sdmANV6dm97zD&ryJ5wTOk+hcsOUddgkyN9g!gNNo?r~+ zWEyII!nZ2F7Je(>{o**zIX*PiuAL$)_%YQ^UIC|fzRy__hl zsaw;ygyDkRG&&0I`NlMG*RVL5hE)s#Vj5u&e2oX*>4C5Hz@592n#?rTdC+$k;lET! zalgMvIFH@T_#0Iy_J`MqUbulmenUsWW9^seg zAyuj&+!^5(5FT~VpFud!srd0C!cz=TUQhVR4!nWz(;c{;B~@AND^{;n{_ z9rUY+ezyaU5U%?t|8O1QujV0D+DQ1@4*VLzbwA`E>N(d6qe4B;<9|lC%%qaxu&NSwF z;4&)bNlfFo{EaA?hWZp2h%TB&aeLwu()LTOwU6gkN&R9+u z6b3x-fAYYeCi$C42)|Ja;FWWeUkCUiF@FQIRa)agzfRHPN`p>Jp8Vf~(13wJ-LNUL+fOI!N$X+Psw_KNN0OztW(->FuRu00mcbN7nJgjfvm%p?RddT?@ z3<(R3H97j6MEi=OB}Q5z3^v-UBbTlWMQnSm9Sk;)z#4E0mV$dzHmvxjV;$?d<3mG3 zYr6w>aEV?gj_QTt@S12xM|ZQ`pcacq67i9S#$|?!CWne;ytEmO4-Ue5cN~@@b2cQ? zo9(dezG~SJ9T@@n-Kj{6Z4bl;V6oI_h+GnEQNOMD+Za^80rk5?{Vr3#ie|}DEHBYC z&8pm}eih}CCPk@#6=kE6xkO1@qUn{iCiS#QAx#=l@|zU>QbpgSWG+>@nlz%yOB79$ z(%aPJ+FVO;1=x;nhFyhiu|)gQj%}`FtwrrQM~`N2B7P4VltdmMRvtcCJlZw+7v{H3x%#75l%lZp}Gzo9rzTQ&N?e z<>k=UO-GTSQtT0OxHXPRPIGR13bp}oPoZOTDe9YJqtVz1?rPc5-t?BODOC$Q*cuy+ zMbiq;QIyiYEf84ZiGkGilKQm0u{5%vJJ}5G-l%;}d5qp)@$7Pley*+M`to@h?Mi%X zrh7Ha3^i^)Hf@aojxp3s^nPKZ(5P|gs#V<`J$6rMWu(J~rs{^hE8B+6tVFDL$Q~HR zt%;yu);t+t)onuuR-55~8^Uai^z?phNyprHq2!-_ez z%(kPWqrqUXQEuqEwSIRmb^$7jLO-Qolph*0hGIj}k?n@Pe)#%<;XZpEM2n%=v9!64 z;qvwJh|BbLtts06bbDiX-k?XGVjiuPy1QBL@aynUM4KNPf-TXlF>o=xpC22J4#bkj z7E>Dg;<#w66Pd{jRYr9h|1M#E{ju&eR!_4dwia1VOM@qs~bFmT#l z8=PtrL(%j#=vvvdS*Ul#ZY#E5cmw~guRJn)MIezBl$7C8Rh9LrfLaOvlp z2**se^A&}d*I7vD=|fKJ}Ge7zxq5? zvEJK>-q|nT6?h0#aXbIq1LyTAl(SOM9}nw`m=Kq88a!}I;Fkao>%B_g?E?Rd2Y$Q2 zrN2EO@D3s8-#qYF1TO3Kp1`G?kHUH(CakZ-n+3iKo^ib*0+;l|9{5gyuNHFl2wcj+ zbyG}EdwxT>(+@vH3xr57?YzJP?-01O=PD0;Sl|}u;C4t7j`rLx@EZg@uF^66n7}_N z@Y{r(34!CfEGCpM-`{TuT+;tU;4rm*e0vAqQ8xS-95%OZpdt{4QZ9uDfG$w*Q-g{!{Rr+rfl&aZFD7vkAw3 zm-E2$1ihRGUMFyAC$7_DLisnr#d@xHLL*q+~d z(4RwF#z-F)^Z~-LUNXKd6ZAcTzD?kkz&|DA$of9)fj=W~*`E7_{PjZq3xZzC|FyuS zzr7`JNpGG2LLp&0Y=Dc~t%h)?|C}Z0FB9}jJ?OvUfj=N{S>JyU@}>Vw33_S&&pq&0 zJn+LF`0Q$^3?yuajc{>0oJ6>@9nKfH9Cs{%%W>ygflK;b0+;m93tZB_BXCK-%!k(N z_fd{JodTEbyk6jP-09O|)O)=P%G?h0xmNVPmy6SIWSj@G?-cS+CB2A$Rp4h3j{Smt z!1kQw!0{QTdYviSJy2%)iwH;gUlTZveV9=GU%|!nIH$$r)Qd406Y9GQE~e*mVov)v z0}Up`?}m%%69_^=Ie!fo<$S&o zIris$aMci2MLFX4P+4Y(-w&4?{Wk<5KS%m|1uo_Pjld=S=LOFDz9=Uva6gq19}{@J zz;6_IK;ZJMSBt>qnZP!I-$7-Wq24bEz)xlDuQ>we6D5dq-SM$SG>FfmGG@GvggAw8 z^>jr2YJZ@RppbEaa~mSWHlv)Ahz7FV>g3*PI72H->?*Z?Q=65{e@U zI%@m4cJIvAy6$K@TUQ;VNRLp(@d%{dn@IF-&lz6sX18uZ)dbLoP<`mY^0vRZ$y_zh z&;=b-ks0+Lo1A0V+s5f2G{Fab;)29}u*WV$-yQ8>5ggDR8j20WgctsgL#$!-+VvNz zb5+##v8{H0q8Cp3G;B%4!L>es)C}v7C%VXKBaFZ4aP1A(1n_$u6X#z15lxo+CPe*9wmBW`7OwJL#R( zy3vFGq!RVxxi~ld{u1?H0KvnJe^H706CV7567@gm!QWV-e&1|&``b#?-|xY{vPAv& zc<^@-zcVg6`ybD-xwU^!iTY1~fy0e|Q;GFo&ioW#INMyJ{xI`99KBTj2@n2}677e7 zGv`|WM2Yqv_Tb-9qW%?g-SvOIME%=5_$P@U+@l~l{pUL1cN_nIafxQ*aURG2X1I9# zW&9ow{a-H8{?|SD?<&#$X%G7ky4c_9V*mM2A@u)7xMaGI^w;7;k@%MLC54*K2v zr>b3RWIsXw!E?@Bf5!2AqSCL)bH9_M|CSu03r_!i)6ZNA@vOLD$0su{{baYG`>Bsr8On!L-%T|H{s0l8{j1<&ezt#z^gHd}LHeEVm7nBs_K=7Dj}SlWVS3ij z_uuxg{{Y!<5h2J%>wl=9{fz77 zr}{TDKsnN4;`}t?*J%EC10R^mL#o7l3|~O}j@QT7NcyN{XLj@r4w=w9fkUkFbWpdh&_fFf9{vlFukiP%%EF!L-I`xD5y6V5H Q9v(ot^mv`~uT%g30+XsLOaK4? literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/progress_monitor.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/progress_monitor.o new file mode 100644 index 0000000000000000000000000000000000000000..4fafedf8782c89870d6ed2010358b255aabd04b2 GIT binary patch literal 34304 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/results_collector.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/results_collector.o new file mode 100644 index 0000000000000000000000000000000000000000..dd8162123bb1ad90588f9a85b8f5071ccef69eae GIT binary patch literal 64416 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 aAbSxGT|a#OVbotZ+vEEI@q1^%c={h{VJ5!- literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/results_reporter.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/results_reporter.o new file mode 100644 index 0000000000000000000000000000000000000000..64105eab1b10714200e210e88fc8bdf7eb272d90 GIT binary patch literal 27656 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 G^Zx@@wOlFy literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/test_main.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/test_main.o new file mode 100644 index 0000000000000000000000000000000000000000..e7f4827e0dc76c865bf156c4c81387aa18b3d430 GIT binary patch literal 36096 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 yL)-|+=P77E)`PYqeLD(cG?@sBXf%m1 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 Y9A5ue%^?3T(MN4RIp5*)uh;+o0^v<6O#lD@ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_parameters.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_parameters.o new file mode 100644 index 0000000000000000000000000000000000000000..6b0330686256537ed773f90a826aeb2243b6e126 GIT binary patch literal 820240 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_suite.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/unit_test_suite.o new file mode 100644 index 0000000000000000000000000000000000000000..9d9c812486d6139c010167c6d59b0e12ce64361c GIT binary patch literal 42280 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/xml_log_formatter.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/xml_log_formatter.o new file mode 100644 index 0000000000000000000000000000000000000000..2b9a8f2a42f6678ad412896d2409991744eada5f GIT binary patch literal 41392 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 JM(_Ih{{gTAY)AkA literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/xml_report_formatter.o b/external/bin.v2/libs/test/build/gcc-5.4.0/release/link-static/threading-multi/xml_report_formatter.o new file mode 100644 index 0000000000000000000000000000000000000000..825f5e639e2cbd41997ff81dbb1d4a5a24827ffe GIT binary patch literal 32160 zcmdsg4SZD9nfIOCC=qcc^)o8gfT>MdjhO&3gI}4DfqP{p1OkW%4nr77G$i9>1_Li( zY=Y+QIFz++>u%k?$hKX(cHeckHrsXAEdhlt{X$y5+P8?-Rw7!kQpAsv{XgfPGdXkT z-eiLA?yq}(-Z|&~@AGw@bIxsxLm5jlS{c#afur#FKrpQsbj@D9P@(N!59P-ce@>R&M=H*J{*YI)`axX7eBcI00 z(~-}>H51o$9IHWoEv^8r*&M4y?!$Eht{XX4huqK08giYN=OPdCatL`NFE8TxVxBMI z`K>&^jpxgGeml>@JYT`{2y!`T#(P?tDxo|z2|q(rTD@&`rRVZKDk{?Rb8wsUd{MKO zzRV2vI#eua0=2^Y12&E$q8ETGbOhz-_4$F^ITr1_!lnHj6XK(#&ON~ z8Eh%G8lt5p3^$c(seq!TFSv1dcvwr-m21BJ$)vyc`mzxtsUv{IbPcPR@d|7{%x&dX z8oy&U^BPDtzv5`~C9t{pw&nh1yUAY7_(jn8E$TSD|HunWHlZW__ut}Q>|cahHEZ|2 z^*u5vbpx}^NR*)#>)`8!Wwof}WbW-p${xdW?=QKXd&&PL?51z0r*9&fK(s^ePFGK@ zl6;RSssxB~c`&sRvUzKvT&tzIHxgwHtW8k4hU@*kH@RewXolGin#C!m3#sijLpUnS zt<1Vm>hAKOaWZ7Q7gW2ev=r+ru+P&s?JPwJ`A&KIRCEU|-B30snEH(AgNCwV0yNDi zETe+XdRx#q6f%zM#vae*N+{J>tfw{?1v~?VWkKU7TE!`C@KoXIO#j|;V)ONy@q6vL z4>V)HHh8E|bDeCMscfD))P|t6O*5X;o_k+2elYUL^Tk{6L^JkjTMi^&(S7fG`W6Fd zm^s1oK!~2CI*YU|Z+rTJ>}Gly@5a<6v@3bL9Mz3yd6BwMP;~oLqO6F~0|C8$9V60v zpK*nJZ+Ny`O&u29Y_=qG_Eb|4@2eBWaJ1~&9~YV)Z6d!FYfz4%kSMG2^qm1;3pc~D zbA#!PWkKCIL4@Vx>QK;FRaO*CtwP^{_cQ*a0SafI8BA#q*j+T@bI;`s&}QrJT4mGJ zp@UFq@9&>d!^{4@5Cf9=`y3Q9{{9qhxbIG(tHFK2G2P8u$MkkcczX}LecZF<8t(0z zC2!xH?d@~N@HUMljL}#0)U~{o5@n5&xW@5`(^GdBjf|p1**rV<@r|(nL0%j;klm!?i+#3)X23*wann=1Wvn9{e0bwRlxCU_qGFP$SdOUk#t>CLBI?Pq z9uQ}w^|9M=3q(*5vHr=jZ4fA$U{4>rH3bemMlCd^v+sOAAF2RR8GE_M5@k(Wc50X< z(R;7>aCkTq%-F=DrA@22HJAbV${vQ5I>KC$z85hJHwqPsMWMtj6w<0vGz*iZr`pSk zA*cuVjU=ca1)aK<=6lxDcQ*nudSha$mNIFy)I*F!Gq46R78NmmlfL)aV%>l=-l;U- zVT`ial~j#xPv3)F(q!tlF)g*QtUF&BD?UpyT0MPLvWyiZqctBH&%%zTsU%~Gr|*Yn znl-wJ>}VnxOR{9p^w6Yb>OxaX2tF#(eV7zKBIjU*(EC==Q#YX;s`%XyY1Hp>DnrpA#d(yM{;s(z^f!6zGaYKK7 zX)sk^5;W>D`@NWa!{47&LPn@a>)lzb_wFjzeY=z2)O|-1vpfS{&%pd+v>ZsSFAApp z$LeZd*fiPS--Ja*6Xv>|p>*9b-DoQJ3^dWRjjwCHgT;0Iu&TRA^ZhvaG+)1&y_B!z z(igx~1?xbD4kb>G#52EVU}i8?S5#MfYSR={;D{PD_SN-oz}&h42HXr=Hk5bi{0|O*J7^hnx&weZUSyN} zVko_+6w7-5%#gBav1Yue8_!{+7X>Sh28|c=iubkNVbA6gt@m)TXP{R14c7HzNrFWy zMr%p(u)jZqI1oS_Kn%d8`TpSP^Fak9bEzBu&NC1{W{$;rjKOy(7{m|^Vk5yIhF}n* zXB%JdC&_s7!jZ>WkYv-1X6!LT9L*y`|G{QNEDhMRkq2yo7;5KFW42ExvZv+*ZcFeD zwxYrmhj%q?%W&chISiR)K5d(d5nkCGHU|@^XP^k7Hk4joO77$#7r}PZ3PhTqae{&@ z92+uTLYSi0EY}{>y@+5GW)ZYX;V3MIHz3TuAlxg3+1}j$u zO;?NrEx}%dMo5Qdv89JobNqkEpmm&mb8NuVcXva-l>Vphy*slF8m~QU14ycm^xmd_VBqw}Wo>?xtWaR@K2&0E{6em~O?2@fppv zn`9V2g_xl0wS+sA!heeqX(k4Z1z32UOw?$`2SMXiZOeZo+`-huU}^!Lo)t9av+zc% zl%Q`{@{pFEQ%uXQ-q((W((UJ$jzo!|5ycW^Er#WCwtYqKbi23xE3J=*qGZ~?HPgMlwRtZm%i#!eel<3=&lb#>CiBC9j*vwHflTrw~Wq>aGt0#;*Z3ctXF@eJ=<4FA1iWAW|&FwQu9!pV;L}Vsq}z0^K;E559R*&~*U2 zLP6g?Pv4heqV9Xg_~GV_dV2maC(vC7bPyogK{{5GlP_wheR=az_I?{Q_UnVM7SgVf z?s^}4N`d~1gT5CutP*wjeA9G2yskG|k3z;9`rsRdA=i6H3iaN%Tp@%GGE+}^nl;Unw~I}U2o}cMA;b+U-0;Z1Cy0^C*!qj->26AkrVc< zsXL`EBe3T>B{5S=@y%qukIn9w(PC>G>aaIY47V-kZ^A5$ir|O$dQ(Q?Db3s`#uIv3 zqqop3Nv0Gmv>AFNMKZHf@gec-)yk`9K)L=OJwuwye!*y(gvG^dQ+0=N;!tk z&l1U-Zi8tYqdh%JM7NA%!pDTgELb_PK8~^O>vtF5SKxP-^s3G7s)CM*?h+t=cai^W z=KCi&?Jn>s_3q*ai1t3U!Cl&0crzHjJkebW1U&WbqQKeAj@LPlsKfPOJ;^cJ_$4`8 z3+mk^X*J+3eW1|qF2C=L26t8OnFaqc(OvF$m*N>{AhG^zkkfb3TJEH^#6R0zoF@JU zRM6f>{Jm$Wm$*z*OvX82r1p<-zG;->(H9E>?vkx)y}LABSnn=>fb`yXrr%xLJ7JEy zPE}oQZH~KXfm`#t>k86tt-;-Ni(9LA*WK#YR=AsPW)Eh&YyIvjsD+q}sU!W@wV^4< zdiR8{LaB18=;I08u-!i7J3We0NKctf5F*L53%>?DF6UX=?1 zQQ2vQ+()WXoeMI0I?<4uR5p_B@EN%v5LKbm54lNYCnD_d+FTHb%1%q}RS%r)zSPs?ceh z+@vbYb3q`gLZ@+Zld6PsK_IHK!U2ys;Hw<)Xb%2MhUE6!S2>PleO7vd<7HW>qP)%V zOD*`j9JfZY_c>1IsN`f$P_vYIGKeyrKTt5ftSxyq$Dgv$vvmsScUka@IQ{b${4$Oo zw%}KAyv~AGaGcgCa=M1&_sAg1GdTXB1;38t-?ZRcxtvF;B38iJk5mO8JZ+My;A5&yQZvyo`=P3wl@0JaRhj63=lYolRVCNY zCZ6kO6L<167PU4>Wp4$!4^-t-xgZc#5pOlwk5%QoY=GaXnYYU9$EtEcHjtse&;h^5 z0WWdDFLuB$aloz74QE9Q=#1%<3_WgHTE_4za`3GT|4a@($nekR;1kegr%LNjA%7mj zKc7SY6^37(gTKP?YjW@l3rYS+6c+N=FnnYk2zHkKg5fiAAsFz;9qU?KEW5#~tv$W%zZ1JTqc{0-WBTt?6|K{0NgXvJS*8OQjgFEu=-Ib8 z;9G&8E4@#Nclnor+u8G3gbboD<@yAD7su;3p5pld;C6CecEI1{a`tonT|C#YFq6tOh`#6bV3wEh(J-No>cSzqAiVydvK*XJDYdI!7%_!McC zb``Jl*BCys-WIxk;vnZZqaRt#RB<`wn7XD&>u?d-mjM?tB{wTu82!lVM-vajOUJiW zTRn|^C1m@;=1y>Ubz4VUS8HIw+{WgrurKpCu%NlKvc0n<(jIAVi*!}a@G3USyw%}3 z!Fl!mU^v_u_Ij@syUZ<}?d|w%*onR23_(|NWmpf}Z6H^+#A1-%oCwy2!)=`~D4|pa zXL)PbZ!P^+d)aRl`>kfbKKh+Djr~ri-|6P>3|3~m)30Su8Siw)JKZcZ3DZqphEHS2 zG{!rP@lG>&nf7Tu+sd2H>|BZOsOzHfh8cl%wq(8>uY?m$#G`JsJ282ut#0eaC)%}< zSgfsMjo#8Ux1~8Ty*=91rMCnE&TOo;h5g{hCc#oIdLZHe`H zwP{0jeq>$;GTQ;=B-57ILGtLM&q2fJOb(hX{%feBs`5}eZ}#lwz{2oCe|<0zhVxgo zH`xxZ(G@d^b`3XrtZ=C0SRuxtnxmRnT_pk|pNjbSZtg^-oAJ#u9L7h?cr>y$+}1&7 zRdhr(ueYT&5)UWhk+uYjZVP}-TN&wUYZ25sd{-3?G}nZi<~C0Yx7+pK(GBxj3=<)P zS@vH!<0`0cd$dCdhvAEsJHsulcd~;wKCiZ^|}&q&_pkRErs?MIg|QoK{6M&=F%@-Wg#X?C|Q^7!#!D^n{#I(mXvZO~lo) zY7)DS_0Q%|c%e7Eu$o+9cJ{W8M7*;LU+2T^ot>Xh4gPD)Zw}H3gZXwnXY`?Et^ni( zsKcyI{j%Yf%6N2jC0eq(I~b90V4*mYX5C^gqKxjd#te8kt7 z2kh9yGiR|~_{2=tkqAe-S|T{dN2_FVv4}t|7{9avn~P;vz-LCP^|2_7{RBldHh0nh z<1uk}nX%olcz5D3)5-bAFMB^p>4s7e)*Vvq>ZR_kp-06x=*YPSbi_c9~yurj5F3ugswl#pQ3!8Ikoln+)-X=th zO24?#TScwV9a-774)0Saw_}ADPM{OPVXHd>_EwBK<`_?|C1dksTT>0oy4q|F%5~uw z!uk6vwv$+*t%Z7AILOV?l_tz~z-LK#K*Ad&yhFl?M#xD@_-qN^%yDe%DSs~E_euCe z5>91GR{F9NGRSC3{E~U6g(y(f?oEi~7DH;oBwrgd}HLl2p9Afq68-lie20X``3APN zUYjIbu2)LJ<$CRK!1p-dKjt`@b+cs8FC6G!mFQ(Z{LX>?4;;7p;d0)=2$%ivD#xvU zcuT@%KYSqJvL9&wo|0A0bO-!8j*}ne;u7tvInd9O=w&}FbD(dR@V}Ad_e!{I|DQ?n zgA)B$9O%C$(aZKc?m+*~5-!_A-z6wn{r0>hKZNJPKd(8^4@va0JtrLK3(jO}nO@nR zizQt4Pn`q)eFyxw1AZ~SKTx7}Z^R|)Rq22?NI0DV5cKmoZuQ#|iC*?Y)Pa7Tgv)+N zOStTZha~w;l0A<)&_5>8%l3TNfqqcJWqV$daM_+$B>D3td){)Oe^;WH?GYbRtp1$D zKL`*m+fyOovOQHCr}kYS*>i&feS<_V+cV#Rez}Cp_H2-F*`E6(`E(jc^q;Rf;NO<; zg%Uk|*P=xAlJTE$oc!~3Ttfa^9Jj{XcO^NCB>LL3aDzm09>yi)+{AIxOJ7R_{+AMd zi-iA5!s%;?pr0}kH%KIhPAv)i>l`P&k4Sg|-@7Q0{qlUep5sLS4O~J_k3|1P3BRA? zr1zT={zXa7-%9vF377r(wj_UtL{H!4D3N^GpFVuoqGa`F9mk1Y_UB(oxa`k^5-$65 zD!xZiA~~`@w{zU;&%5y5iIUZy>o{)p=O&3>_Gcf*Nw4hB2P8SNKkw(?O|5>|?tuTh z1OAEwEH-j%Pye1w@QQ?fY$90-sDE5{V;O0>6SlB!Sa2O66w8X#XB%L4OU$ zN&f$naQa(nl&t+<_(#YWa+*wXCjaXw3!KI*C9C}_O_<^TfU=;EbDZp!pHsSw-OZ3+w&OrDRyewyge;1b>{dXin@to-YQNm^U zPfEB*7+dTsf}qu6?aB5%$1jN?(A z$4QL5t;t)~cnr+zkVoDojzijbjFe7(IG-TN+sJW9J53{@^RJpPwV7sQ!dXq6tV+9`D&7gM^$0>kxt^Zn*_#S8BN`& zAGAhSn=k8V>g~=8;oCT$Li3m?*$E@F2}aX1x~+8lV|1-~@Y9?>#uPvH5v9?s$T^2$ zIS@&QoGRm;wCfcIeaqGo!G-_#r+0cv~NjCb|F#W(?>P9s$N9w`C-tADFX4BQJNf^R4ga!n@E_;=a{JR?e-L^_ z?xde>_=8^Nr#)f8Cvqo#@wcdCe)_H>_(bl+U&8k(W&TIT!7uiOi@-yP+V2TmLa)f3 z^k2pG%lz~mLhy;)iGR8cKYia2d?I(^zut!b$#L*E*znW0I-ytOPWr_@xm>)M*p|R!7u*yn5_TNaqzFQ(Z6FH{OvaUw68AeE%H)eL@Ix?!L8E6`BzvbH%xa~ z=~CR0thy`|-z9G{fgb)npZf1)T*4pXTgsKdNEP357)$>n4*Uh@NsS>Dt@7S+;4kLaRR|t-_SfgBKkmTal&AiGaNu8%r+yF4huYb{ zB2WGFKijb5Uzw-=zj5G?aeixDwD$iO9rzP@>OTh)hn@XBdDefX1OFHD)W6Pwe_NjV zzvaOHV4nKlcHrNhr~dK@_Ws+Er~VcP{wFv;nl~$1+y8d(+s)sP1x+?FPq*UsI$UD@ z6!-#~|3e4< zLtOt@{r3d;?fiGl#(%R>1(35O`fnu;=-IXZZ}Y5wzXSg<&M*Gn4_BKxHzw|T!Ea}O zQOKmI;)JcpbzD~af9{~)B_CqqGAI-6E}$Jad}UYvV$LuA&XAzD_TM!)KWxXp$^K7= z<>Msa*eu(pLwcu9&oeh3F`+K;0!4^ou_j zDaHxuZ?@5Y4fx5#0*eECxc;kzVxE^;?%O%PYTc zdVR~m{+(RE;1_0>iUQBybg=&z=NEbeo6s-rf8$`k#_iWQVJmVvb1V3T+$uCa`QPfl zB6=}L68z@f2*0@hJoxSU-!`s)CnqHRx8bttr*rv)S@kz@{eqs0$?%K&AAC&y%RC=X zf2RZg3T}U?FqG%k`)9y!=YPRJR{g&Zemnm+HJJ)UJGbICf=kE~_;0y>Yd>w}_ScwV zGQVUiC6OQH{3bf``!&u#f|w=2C-A~zKK=#3^X;5}yCpCQ`vv*1L;YKM{kQYDK=qH} z68xh6v^`}}!9*8PutK^3_Q}a=KiykG4(^b literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/libboost_thread.a b/external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/libboost_thread.a new file mode 100644 index 0000000000000000000000000000000000000000..79afd534ae691087bff05e4839ae29632355b06c GIT binary patch literal 236168 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�pVpd!W7Uu=W%qolkK?=VG_P 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/pthread/once.o b/external/bin.v2/libs/thread/build/gcc-13/release/link-static/threading-multi/pthread/once.o new file mode 100644 index 0000000000000000000000000000000000000000..6f309cbcfe2d4f0e39a435368252fbeb0f1d830b GIT binary patch literal 2480 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/libboost_thread.a b/external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/libboost_thread.a new file mode 100644 index 0000000000000000000000000000000000000000..e42d796e287267070fe479dba1c128e75cb3be70 GIT binary patch literal 245400 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/pthread/once.o b/external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/pthread/once.o new file mode 100644 index 0000000000000000000000000000000000000000..499a0e437d2f79faf8e40eae6de66395a294d40d GIT binary patch literal 2616 zcmbVM&1(};5PxaZ*4BRcMMa_UA{FeC)FytRY}K?YmKLqzN5OTod1-1lA7nS$deDQ4 z6cKt9{|L|CR0`EU!DEklQ}EzHh%>u0$;)<&;K1(8{N^|F_PyD8PqWjL9kG~TiHQrM z*7Nf5EK?fjn$2SyZY7m9EVzs`E`K`1?#oR)TK*j6C*cs z^|Dt_q_uG^Ihv{aUg}9Iqb0|+RPuNbNQ@;@nPet;1`6z_BC*HUMQnK>c6d)`*BTtm z0N_U`wvRMoNwRm6M$TojZ=s&(8+g|7pu4Xt+f(SnO+^cy{SNVS>plRFM|KABcx16S zREmhs=)2~QA}Gt=P5puR&muaqae7{bwwi%vq@Ra``$M_edB9i_Yh zjprSfcK}4;pSHm_0N)Ec;J*1i0_@i|d>oOe`Ukebk8Fb{0UuQQ!s}lnT!-~hMgk@3 zKHlnY^Q0zYe)MdYO;+rYf#S;D+Klg?Etu9wM6&sua+ zW9HQK?8S*`)0{C=sgrFrvj3u=Zljw8$6A0KDmXhiIhVa*-k7*Joi#<(E5cXi@zc!U zdqtrp<(3u3(hJfvacgE()=bLs*U3I?R>64FfdscI?Zv{PElQT-RP1KRRYF^~e$rnh z*n<5qVzU{AP^x=!If8S_=PWptoaF=^$Wq^Mo=`gA!P($>IENqz<2WxUy8jNigJAy& zuCvA@;mqecR~7zVgCg}`mR-DiJ3Iy0@4(fwZU+c3EYW?>Fz6~uHa>ZXQ)k-h` literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/pthread/thread.o b/external/bin.v2/libs/thread/build/gcc-5.4.0/release/link-static/threading-multi/pthread/thread.o new file mode 100644 index 0000000000000000000000000000000000000000..663bdf94bbe51af27c08235b0a2ac48477fbc847 GIT binary patch literal 217712 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⪻}tBxm?1l4&ey_JdN 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%0D)X(w( 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 ed}Dv6#TQ+FBa0e37VcyhIDVmU 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 +#include + +/*! \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(Arg1,m_Loc)==std::toupper(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 + 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)(Arg1,m_Loc)(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(Arg1,m_Loc)<=std::toupper(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/external/boost/algorithm/string/concept.hpp b/external/boost/algorithm/string/concept.hpp new file mode 100644 index 0000000..9876e98 --- /dev/null +++ b/external/boost/algorithm/string/concept.hpp @@ -0,0 +1,83 @@ +// Boost string_algo library concept.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_CONCEPT_HPP +#define BOOST_STRING_CONCEPT_HPP + +#include +#include +#include +#include + +/*! \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 + struct FinderConcept + { + private: + typedef iterator_range 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 + struct FormatterConcept + { + public: + void constraints() + { + // Operation + ::boost::begin((*pFo)( (*pF)(i,i) )); + ::boost::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/external/boost/algorithm/string/config.hpp b/external/boost/algorithm/string/config.hpp new file mode 100644 index 0000000..559750a --- /dev/null +++ b/external/boost/algorithm/string/config.hpp @@ -0,0 +1,28 @@ +// Boost string_algo library config.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_CONFIG_HPP +#define BOOST_STRING_CONFIG_HPP + +#include +#include + +#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/external/boost/algorithm/string/constants.hpp b/external/boost/algorithm/string/constants.hpp new file mode 100644 index 0000000..6ed70ef --- /dev/null +++ b/external/boost/algorithm/string/constants.hpp @@ -0,0 +1,36 @@ +// Boost string_algo library constants.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 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/external/boost/algorithm/string/detail/find_format.hpp b/external/boost/algorithm/string/detail/find_format.hpp new file mode 100644 index 0000000..8b9ad42 --- /dev/null +++ b/external/boost/algorithm/string/detail/find_format.hpp @@ -0,0 +1,204 @@ +// Boost string_algo library find_format.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_DETAIL_HPP +#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// find_format_copy (iterator variant) implementation -------------------------------// + + 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::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 + Output = std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); + return Output; + } + + // Copy the beginning of the sequence + Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output ); + // Format find result + // Copy formated result + Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output ); + // Copy the rest of the sequence + Output = std::copy( M.end(), ::boost::end(Input), Output ); + + return Output; + } + + 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 ) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_copy_impl2( + Output, + Input, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); + } + } + + +// find_format_copy implementation --------------------------------------------------// + + 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::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, ::boost::end(Output), ::boost::begin(Input), M.begin() ); + // Copy formated result + insert( Output, ::boost::end(Output), M.format_result() ); + // Copy the rest of the sequence + insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) ); + + return Output; + } + + template< + typename InputT, + typename FormatterT, + typename FindResultT > + inline InputT find_format_copy_impl( + const InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_copy_impl2( + Input, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return Input; + } + } + + // replace implementation ----------------------------------------------------// + + 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::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 + ::boost::algorithm::detail::replace( Input, M.begin(), M.end(), M.format_result() ); + } + + template< + typename InputT, + typename FormatterT, + typename FindResultT > + inline void find_format_impl( + InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + ::boost::algorithm::detail::find_format_impl2( + Input, + Formatter, + FindResult, + Formatter(FindResult) ); + } + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FIND_FORMAT_DETAIL_HPP diff --git a/external/boost/algorithm/string/detail/find_format_all.hpp b/external/boost/algorithm/string/detail/find_format_all.hpp new file mode 100644 index 0000000..978710c --- /dev/null +++ b/external/boost/algorithm/string/detail/find_format_all.hpp @@ -0,0 +1,273 @@ +// Boost string_algo library find_format_all.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP +#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// find_format_all_copy (iterator variant) implementation ---------------------------// + + 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::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=::boost::begin(Input); + + // Iterate through all matches + while( M ) + { + // Copy the beginning of the sequence + Output = std::copy( LastMatch, M.begin(), Output ); + // Copy formated result + Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output ); + + // Proceed to the next match + LastMatch=M.end(); + M=Finder( LastMatch, ::boost::end(Input) ); + } + + // Copy the rest of the sequence + Output = std::copy( LastMatch, ::boost::end(Input), Output ); + + return Output; + } + + 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 ) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_all_copy_impl2( + Output, + Input, + Finder, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); + } + } + + // find_format_all_copy implementation ----------------------------------------------// + + 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::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=::boost::begin(Input); + + // Output temporary + InputT Output; + + // Iterate through all matches + while( M ) + { + // Copy the beginning of the sequence + insert( Output, ::boost::end(Output), LastMatch, M.begin() ); + // Copy formated result + insert( Output, ::boost::end(Output), M.format_result() ); + + // Proceed to the next match + LastMatch=M.end(); + M=Finder( LastMatch, ::boost::end(Input) ); + } + + // Copy the rest of the sequence + ::boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) ); + + return Output; + } + + 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) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_all_copy_impl2( + Input, + Finder, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return Input; + } + } + + // find_format_all implementation ------------------------------------------------// + + 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::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::type> Storage; + + // Initialize replacement iterators + input_iterator_type InsertIt=::boost::begin(Input); + input_iterator_type SearchIt=::boost::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 + ::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() ); + + // Find range for a next match + M=Finder( SearchIt, ::boost::end(Input) ); + } + + // process the last segment + InsertIt=::boost::algorithm::detail::process_segment( + Storage, + Input, + InsertIt, + SearchIt, + ::boost::end(Input) ); + + if ( Storage.empty() ) + { + // Truncate input + ::boost::algorithm::detail::erase( Input, InsertIt, ::boost::end(Input) ); + } + else + { + // Copy remaining data to the end of input + ::boost::algorithm::detail::insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() ); + } + } + + template< + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT > + inline void find_format_all_impl( + InputT& Input, + FinderT Finder, + FormatterT Formatter, + FindResultT FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + ::boost::algorithm::detail::find_format_all_impl2( + Input, + Finder, + Formatter, + FindResult, + Formatter(FindResult) ); + } + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP diff --git a/external/boost/algorithm/string/detail/find_format_store.hpp b/external/boost/algorithm/string/detail/find_format_store.hpp new file mode 100644 index 0000000..e8bd84a --- /dev/null +++ b/external/boost/algorithm/string/detail/find_format_store.hpp @@ -0,0 +1,89 @@ +// Boost string_algo library find_format_store.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP +#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP + +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// temporary format and find result storage --------------------------------// + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif + template< + typename ForwardIteratorT, + typename FormatterT, + typename FormatResultT > + class find_format_store : + public iterator_range + { + public: + // typedefs + typedef iterator_range 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::operator=(FindResult); + if( !this->empty() ) { + 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; + }; + + template + bool check_find_result(InputT&, FindResultT& FindResult) + { + typedef BOOST_STRING_TYPENAME + range_const_iterator::type input_iterator_type; + iterator_range ResultRange(FindResult); + return !ResultRange.empty(); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP diff --git a/external/boost/algorithm/string/detail/finder.hpp b/external/boost/algorithm/string/detail/finder.hpp new file mode 100644 index 0000000..45bcb7d --- /dev/null +++ b/external/boost/algorithm/string/detail/finder.hpp @@ -0,0 +1,646 @@ +// Boost string_algo library finder.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-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/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FINDER_DETAIL_HPP +#define BOOST_STRING_FINDER_DETAIL_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + + +// find first functor -----------------------------------------------// + + // find a subsequence in the sequence ( functor ) + /* + Returns a pair marking the subsequence in the sequence. + If the find fails, functor returns + */ + template + struct first_finderF + { + typedef SearchIteratorT search_iterator_type; + + // Construction + template< typename SearchT > + first_finderF( const SearchT& Search, PredicateT Comp ) : + m_Search(::boost::begin(Search), ::boost::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 + operator()( + ForwardIteratorT Begin, + ForwardIteratorT End ) const + { + typedef iterator_range 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 m_Search; + PredicateT m_Comp; + }; + +// find last functor -----------------------------------------------// + + // find the last match a subseqeunce in the sequence ( functor ) + /* + Returns a pair marking the subsequence in the sequence. + If the find fails, returns + */ + template + 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(::boost::begin(Search), ::boost::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 + operator()( + ForwardIteratorT Begin, + ForwardIteratorT End ) const + { + typedef iterator_range result_type; + + if( boost::empty(m_Search) ) + return result_type( End, End ); + + typedef BOOST_STRING_TYPENAME boost::detail:: + iterator_traits::iterator_category category; + + return findit( Begin, End, category() ); + } + + private: + // forward iterator + template< typename ForwardIteratorT > + iterator_range + findit( + ForwardIteratorT Begin, + ForwardIteratorT End, + std::forward_iterator_tag ) const + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range 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( ::boost::end(M), End ); + } + + return Last; + } + + // bidirectional iterator + template< typename ForwardIteratorT > + iterator_range + findit( + ForwardIteratorT Begin, + ForwardIteratorT End, + std::bidirectional_iterator_tag ) const + { + typedef iterator_range 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 m_Search; + PredicateT m_Comp; + }; + +// find n-th functor -----------------------------------------------// + + // find the n-th match of a subsequence in the sequence ( functor ) + /* + Returns a pair marking the subsequence in the sequence. + If the find fails, returns + */ + template + 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(::boost::begin(Search), ::boost::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 + 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 + find_forward( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N) const + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range 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( ::boost::end(M), End ); + + if ( !M ) + { + // Subsequence not found, return + return M; + } + } + + return M; + } + + template< typename ForwardIteratorT > + iterator_range + find_backward( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N) const + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range 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, ::boost::begin(M) ); + + if ( !M ) + { + // Subsequence not found, return + return M; + } + } + + return M; + } + + + private: + iterator_range m_Search; + int m_Nth; + PredicateT m_Comp; + }; + +// find head/tail implementation helpers ---------------------------// + + template + iterator_range + find_head_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N, + std::forward_iterator_tag ) + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range result_type; + + input_iterator_type It=Begin; + for( + unsigned int Index=0; + Index + iterator_range + find_head_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N, + std::random_access_iterator_tag ) + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range result_type; + + if ( (End<=Begin) || ( static_cast(End-Begin) < N ) ) + return result_type( Begin, End ); + + return result_type(Begin,Begin+N); + } + + // Find head implementation + template + iterator_range + find_head_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N ) + { + typedef BOOST_STRING_TYPENAME boost::detail:: + iterator_traits::iterator_category category; + + return ::boost::algorithm::detail::find_head_impl( Begin, End, N, category() ); + } + + template< typename ForwardIteratorT > + iterator_range + find_tail_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N, + std::forward_iterator_tag ) + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range 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 + iterator_range + find_tail_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N, + std::bidirectional_iterator_tag ) + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range result_type; + + input_iterator_type It=End; + for( + unsigned int Index=0; + Index + iterator_range + find_tail_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N, + std::random_access_iterator_tag ) + { + typedef ForwardIteratorT input_iterator_type; + typedef iterator_range result_type; + + if ( (End<=Begin) || ( static_cast(End-Begin) < N ) ) + return result_type( Begin, End ); + + return result_type( End-N, End ); + } + + // Operation + template< typename ForwardIteratorT > + iterator_range + find_tail_impl( + ForwardIteratorT Begin, + ForwardIteratorT End, + unsigned int N ) + { + typedef BOOST_STRING_TYPENAME boost::detail:: + iterator_traits::iterator_category category; + + return ::boost::algorithm::detail::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 + operator()( + ForwardIteratorT Begin, + ForwardIteratorT End ) const + { + if(m_N>=0) + { + return ::boost::algorithm::detail::find_head_impl( Begin, End, m_N ); + } + else + { + iterator_range Res= + ::boost::algorithm::detail::find_tail_impl( Begin, End, -m_N ); + + return ::boost::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 + operator()( + ForwardIteratorT Begin, + ForwardIteratorT End ) const + { + if(m_N>=0) + { + return ::boost::algorithm::detail::find_tail_impl( Begin, End, m_N ); + } + else + { + iterator_range Res= + ::boost::algorithm::detail::find_head_impl( Begin, End, -m_N ); + + return ::boost::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 + operator()( + ForwardIteratorT Begin, + ForwardIteratorT End ) const + { + typedef iterator_range 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 + struct range_finderF + { + typedef ForwardIterator1T input_iterator_type; + typedef iterator_range result_type; + + // Construction + range_finderF( + input_iterator_type Begin, + input_iterator_type End ) : m_Range(Begin, End) {} + + range_finderF(const iterator_range& Range) : + m_Range(Range) {} + + // Operation + template< typename ForwardIterator2T > + iterator_range + operator()( + ForwardIterator2T, + ForwardIterator2T ) const + { +#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 ) + return iterator_range(this->m_Range); +#elif BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + return iterator_range(m_Range.begin(), m_Range.end()); +#else + return m_Range; +#endif + } + + private: + iterator_range m_Range; + }; + + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FINDER_DETAIL_HPP diff --git a/external/boost/algorithm/string/detail/formatter.hpp b/external/boost/algorithm/string/detail/formatter.hpp new file mode 100644 index 0000000..8e7b727 --- /dev/null +++ b/external/boost/algorithm/string/detail/formatter.hpp @@ -0,0 +1,119 @@ +// Boost string_algo library formatter.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_FORMATTER_DETAIL_HPP +#define BOOST_STRING_FORMATTER_DETAIL_HPP + + +#include +#include +#include +#include + +#include + +// generic replace functors -----------------------------------------------// + +namespace boost { + namespace algorithm { + namespace detail { + +// const format functor ----------------------------------------------------// + + // constant format functor + template + struct const_formatF + { + private: + typedef BOOST_STRING_TYPENAME + range_const_iterator::type format_iterator; + typedef iterator_range result_type; + + public: + // Construction + const_formatF(const RangeT& Format) : + m_Format(::boost::begin(Format), ::boost::end(Format)) {} + + // Operation +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + template + result_type& operator()(const Range2T&) + { + return m_Format; + } +#endif + + template + const result_type& operator()(const Range2T&) const + { + return m_Format; + } + + private: + result_type m_Format; + }; + +// identity format functor ----------------------------------------------------// + + // identity format functor + template + struct identity_formatF + { + // Operation + template< typename Range2T > + const RangeT& operator()(const Range2T& Replace) const + { + return RangeT(::boost::begin(Replace), ::boost::end(Replace)); + } + }; + +// empty format functor ( used by erase ) ------------------------------------// + + // empty format functor + template< typename CharT > + struct empty_formatF + { + template< typename ReplaceT > + empty_container operator()(const ReplaceT&) const + { + return empty_container(); + } + }; + +// dissect format functor ----------------------------------------------------// + + // dissect format functor + template + struct dissect_formatF + { + public: + // Construction + dissect_formatF(FinderT Finder) : + m_Finder(Finder) {} + + // Operation + template + inline iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> + operator()(const RangeT& Replace) const + { + return m_Finder(::boost::begin(Replace), ::boost::end(Replace)); + } + + private: + FinderT m_Finder; + }; + + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FORMATTER_DETAIL_HPP diff --git a/external/boost/algorithm/string/detail/replace_storage.hpp b/external/boost/algorithm/string/detail/replace_storage.hpp new file mode 100644 index 0000000..db35e4c --- /dev/null +++ b/external/boost/algorithm/string/detail/replace_storage.hpp @@ -0,0 +1,159 @@ +// Boost string_algo library replace_storage.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP +#define BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP + +#include +#include +#include +#include +#include + +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(), ::boost::begin(What), ::boost::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=::boost::algorithm::detail::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 + ::boost::algorithm::detail::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::value>()( + Storage, Input, InsertIt, SegmentBegin, SegmentEnd ); + } + + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP diff --git a/external/boost/algorithm/string/detail/sequence.hpp b/external/boost/algorithm/string/detail/sequence.hpp new file mode 100644 index 0000000..dc47409 --- /dev/null +++ b/external/boost/algorithm/string/detail/sequence.hpp @@ -0,0 +1,200 @@ +// Boost string_algo library sequence.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP +#define BOOST_STRING_DETAIL_SEQUENCE_HPP + +#include +#include +#include +#include +#include + +#include + +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 ) + { + ::boost::algorithm::detail::insert( Input, At, ::boost::begin(Insert), ::boost::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, + has_const_time_erase >::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::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) + { + ::boost::algorithm::detail::replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) ); + } + else + { + ::boost::algorithm::detail::insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) ); + } + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_DETAIL_SEQUENCE_HPP diff --git a/external/boost/algorithm/string/detail/util.hpp b/external/boost/algorithm/string/detail/util.hpp new file mode 100644 index 0000000..7e8471f --- /dev/null +++ b/external/boost/algorithm/string/detail/util.hpp @@ -0,0 +1,106 @@ +// Boost string_algo library util.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_UTIL_DETAIL_HPP +#define BOOST_STRING_UTIL_DETAIL_HPP + +#include +#include +#include + +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 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(0); + } + + const_iterator end() const + { + return reinterpret_cast(0); + } + + bool empty() const + { + return false; + } + + size_type size() const + { + return 0; + } + }; + +// bounded copy algorithm -----------------------------------------------// + + // Bounded version of the std::copy algorithm + template + 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, SeqT > + { + SeqT operator()( const iterator_range& Range ) const + { + return copy_range(Range); + } + }; + + } // namespace detail + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_UTIL_DETAIL_HPP diff --git a/external/boost/algorithm/string/find_format.hpp b/external/boost/algorithm/string/find_format.hpp new file mode 100644 index 0000000..ef03739 --- /dev/null +++ b/external/boost/algorithm/string/find_format.hpp @@ -0,0 +1,287 @@ +// Boost string_algo library find_format.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_HPP +#define BOOST_STRING_FIND_FORMAT_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/*! \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 + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + iterator_range::type> lit_input(::boost::as_literal(Input)); + + return detail::find_format_copy_impl( + Output, + lit_input, + Formatter, + Finder( ::boost::begin(lit_input), ::boost::end(lit_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 + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + return detail::find_format_copy_impl( + Input, + Formatter, + Finder(::boost::begin(Input), ::boost::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 + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + detail::find_format_impl( + Input, + Formatter, + Finder(::boost::begin(Input), ::boost::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 + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + iterator_range::type> lit_input(::boost::as_literal(Input)); + + return detail::find_format_all_copy_impl( + Output, + lit_input, + Finder, + Formatter, + Finder(::boost::begin(lit_input), ::boost::end(lit_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 + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + return detail::find_format_all_copy_impl( + Input, + Finder, + Formatter, + Finder( ::boost::begin(Input), ::boost::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 + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + detail::find_format_all_impl( + Input, + Finder, + Formatter, + Finder(::boost::begin(Input), ::boost::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/external/boost/algorithm/string/finder.hpp b/external/boost/algorithm/string/finder.hpp new file mode 100644 index 0000000..4c7ac38 --- /dev/null +++ b/external/boost/algorithm/string/finder.hpp @@ -0,0 +1,270 @@ +// Boost string_algo library finder.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-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/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FINDER_HPP +#define BOOST_STRING_FINDER_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +/*! \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 + inline detail::first_finderF< + BOOST_STRING_TYPENAME range_const_iterator::type, + is_equal> + first_finder( const RangeT& Search ) + { + return + detail::first_finderF< + BOOST_STRING_TYPENAME + range_const_iterator::type, + is_equal>( ::boost::as_literal(Search), is_equal() ) ; + } + + //! "First" finder + /*! + \overload + */ + template + inline detail::first_finderF< + BOOST_STRING_TYPENAME range_const_iterator::type, + PredicateT> + first_finder( + const RangeT& Search, PredicateT Comp ) + { + return + detail::first_finderF< + BOOST_STRING_TYPENAME + range_const_iterator::type, + PredicateT>( ::boost::as_literal(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 + inline detail::last_finderF< + BOOST_STRING_TYPENAME range_const_iterator::type, + is_equal> + last_finder( const RangeT& Search ) + { + return + detail::last_finderF< + BOOST_STRING_TYPENAME + range_const_iterator::type, + is_equal>( ::boost::as_literal(Search), is_equal() ); + } + //! "Last" finder + /*! + \overload + */ + template + inline detail::last_finderF< + BOOST_STRING_TYPENAME range_const_iterator::type, + PredicateT> + last_finder( const RangeT& Search, PredicateT Comp ) + { + return + detail::last_finderF< + BOOST_STRING_TYPENAME + range_const_iterator::type, + PredicateT>( ::boost::as_literal(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 + inline detail::nth_finderF< + BOOST_STRING_TYPENAME range_const_iterator::type, + is_equal> + nth_finder( + const RangeT& Search, + int Nth) + { + return + detail::nth_finderF< + BOOST_STRING_TYPENAME + range_const_iterator::type, + is_equal>( ::boost::as_literal(Search), Nth, is_equal() ) ; + } + //! "Nth" finder + /*! + \overload + */ + template + inline detail::nth_finderF< + BOOST_STRING_TYPENAME range_const_iterator::type, + PredicateT> + nth_finder( + const RangeT& Search, + int Nth, + PredicateT Comp ) + { + return + detail::nth_finderF< + BOOST_STRING_TYPENAME + range_const_iterator::type, + PredicateT>( ::boost::as_literal(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 + token_finder( + PredicateT Pred, + token_compress_mode_type eCompress=token_compress_off ) + { + return detail::token_finderF( 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 + range_finder( + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + return detail::range_finderF( Begin, End ); + } + + //! "Range" finder + /*! + \overload + */ + template< typename ForwardIteratorT > + inline detail::range_finderF + range_finder( iterator_range Range ) + { + return detail::range_finderF( 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/external/boost/algorithm/string/formatter.hpp b/external/boost/algorithm/string/formatter.hpp new file mode 100644 index 0000000..ab5921e --- /dev/null +++ b/external/boost/algorithm/string/formatter.hpp @@ -0,0 +1,120 @@ +// Boost string_algo library formatter.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_FORMATTER_HPP +#define BOOST_STRING_FORMATTER_HPP + +#include +#include +#include +#include + +#include + +/*! \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 + /*! + Constructs a \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 + inline detail::const_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> > + const_formatter(const RangeT& Format) + { + return detail::const_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> >(::boost::as_literal(Format)); + } + + //! Identity formatter + /*! + Constructs an \c identity_formatter. Identity formatter always returns + the parameter. + + \return An instance of the \c identity_formatter object. + */ + template + inline detail::identity_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> > + identity_formatter() + { + return detail::identity_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> >(); + } + + //! Empty formatter + /*! + Constructs an \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 + inline detail::empty_formatF< + BOOST_STRING_TYPENAME range_value::type> + empty_formatter(const RangeT&) + { + return detail::empty_formatF< + BOOST_STRING_TYPENAME range_value::type>(); + } + + //! Empty formatter + /*! + Constructs a \c dissect_formatter. Dissect formatter uses a specified finder + to extract a portion of the formatted sequence. The first finder's match is returned + as a result + + \param Finder a finder used to select a portion of the formated sequence + \return An instance of the \c dissect_formatter object. + */ + template + inline detail::dissect_formatF< FinderT > + dissect_formatter(const FinderT& Finder) + { + return detail::dissect_formatF(Finder); + } + + + } // namespace algorithm + + // pull the names to the boost namespace + using algorithm::const_formatter; + using algorithm::identity_formatter; + using algorithm::empty_formatter; + using algorithm::dissect_formatter; + +} // namespace boost + + +#endif // BOOST_FORMATTER_HPP diff --git a/external/boost/algorithm/string/replace.hpp b/external/boost/algorithm/string/replace.hpp new file mode 100644 index 0000000..f2d201f --- /dev/null +++ b/external/boost/algorithm/string/replace.hpp @@ -0,0 +1,928 @@ +// Boost string_algo library replace.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-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/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_REPLACE_HPP +#define BOOST_STRING_REPLACE_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/*! \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::type>& SearchRange, + const Range2T& Format) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::const_formatter(Format)); + } + + //! Replace range algorithm + /*! + \overload + */ + template + inline SequenceT replace_range_copy( + const SequenceT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_const_iterator::type>& SearchRange, + const RangeT& Format) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::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 + inline void replace_range( + SequenceT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_iterator::type>& SearchRange, + const RangeT& Format) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace first algorithm + /*! + \overload + */ + template + inline SequenceT replace_first_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::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 + inline void replace_first( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace first algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_first_copy( + const SequenceT& Input, + const Range2T& Search, + const Range1T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::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 + inline void ireplace_first( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace last algorithm + /*! + \overload + */ + template + inline SequenceT replace_last_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::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 + inline void replace_last( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace last algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_last_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::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 + inline void ireplace_last( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace nth algorithm + /*! + \overload + */ + template + inline SequenceT replace_nth_copy( + const SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::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 + inline void replace_nth( + SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc) ), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace nth algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_nth_copy( + const SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + ::boost::algorithm::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 + inline void ireplace_nth( + SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + ::boost::algorithm::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 ::boost::algorithm::find_format_all_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace all algorithm + /*! + \overload + */ + template + inline SequenceT replace_all_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_all_copy( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::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 + inline void replace_all( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + ::boost::algorithm::find_format_all( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::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 ::boost::algorithm::find_format_all_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace all algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_all_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_all_copy( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::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 + inline void ireplace_all( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format_all( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace head algorithm + /*! + \overload + */ + template + inline SequenceT replace_head_copy( + const SequenceT& Input, + int N, + const RangeT& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::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 + inline void replace_head( + SequenceT& Input, + int N, + const RangeT& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::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 ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace tail algorithm + /*! + \overload + */ + template + inline SequenceT replace_tail_copy( + const SequenceT& Input, + int N, + const RangeT& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::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 + inline void replace_tail( + SequenceT& Input, + int N, + const RangeT& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::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/external/boost/algorithm/string/sequence_traits.hpp b/external/boost/algorithm/string/sequence_traits.hpp new file mode 100644 index 0000000..b1ac67e --- /dev/null +++ b/external/boost/algorithm/string/sequence_traits.hpp @@ -0,0 +1,193 @@ +// Boost string_algo library sequence_traits.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 updates, documentation, and revision history. + +#ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP +#define BOOST_STRING_SEQUENCE_TRAITS_HPP + +#include +#include +#include + +/*! \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_::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_::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_::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_::value> type; + }; + + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_SEQUENCE_TRAITS_HPP diff --git a/external/boost/algorithm/string/yes_no_type.hpp b/external/boost/algorithm/string/yes_no_type.hpp new file mode 100644 index 0000000..b76cc6c --- /dev/null +++ b/external/boost/algorithm/string/yes_no_type.hpp @@ -0,0 +1,33 @@ +// Boost string_algo library yes_no_type.hpp header file ---------------------------// + +// Copyright Pavol Droba 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 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 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/external/boost/aligned_storage.hpp b/external/boost/aligned_storage.hpp new file mode 100644 index 0000000..ce277ab --- /dev/null +++ b/external/boost/aligned_storage.hpp @@ -0,0 +1,181 @@ +//----------------------------------------------------------------------------- +// 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 // 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::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 + , type_with_alignment + >::type align_; + } data_; + void* address() const { return const_cast(this); } +}; + +template< std::size_t alignment_ > +struct aligned_storage_imp<0u,alignment_> +{ + /* intentionally empty */ + void* address() const { return 0; } +}; + +}} // namespace detail::aligned_storage + +template < + std::size_t size_ + , std::size_t alignment_ = std::size_t(-1) +> +class aligned_storage : +#ifndef __BORLANDC__ + private +#else + public +#endif + detail::aligned_storage::aligned_storage_imp +{ + +public: // constants + + typedef detail::aligned_storage::aligned_storage_imp 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 static_cast(this)->address(); + } + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + + const void* address() const + { + return static_cast(this)->address(); + } + +#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 +const void* aligned_storage::address() const +{ + return const_cast< aligned_storage* >(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 +struct is_pod > + 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/external/boost/any.hpp b/external/boost/any.hpp new file mode 100644 index 0000000..a8c654c --- /dev/null +++ b/external/boost/any.hpp @@ -0,0 +1,253 @@ +// 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 +#include + +#include "boost/config.hpp" +#include +#include +#include +#include + +// See boost/python/type_id.hpp +// TODO: add BOOST_TYPEID_COMPARE_BY_NAME to config.hpp +# 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_AUX_ANY_TYPE_ID_NAME +#include +# endif + +namespace boost +{ + class any + { + public: // structors + + any() + : content(0) + { + } + + template + any(const ValueType & value) + : content(new holder(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 + any & operator=(const ValueType & rhs) + { + any(rhs).swap(*this); + return *this; + } + + any & operator=(any rhs) + { + 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 + 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; + + private: // intentionally left unimplemented + holder & operator=(const holder &); + }; + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + + private: // representation + + template + friend ValueType * any_cast(any *); + + template + 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 + ValueType * any_cast(any * operand) + { + return operand && +#ifdef BOOST_AUX_ANY_TYPE_ID_NAME + std::strcmp(operand->type().name(), typeid(ValueType).name()) == 0 +#else + operand->type() == typeid(ValueType) +#endif + ? &static_cast *>(operand->content)->held + : 0; + } + + template + inline const ValueType * any_cast(const any * operand) + { + return any_cast(const_cast(operand)); + } + + template + ValueType any_cast(any & operand) + { + typedef BOOST_DEDUCED_TYPENAME remove_reference::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::value); +#endif + + nonref * result = any_cast(&operand); + if(!result) + boost::throw_exception(bad_any_cast()); + return *result; + } + + template + inline ValueType any_cast(const any & operand) + { + typedef BOOST_DEDUCED_TYPENAME remove_reference::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::value); +#endif + + return any_cast(const_cast(operand)); + } + + // 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 + inline ValueType * unsafe_any_cast(any * operand) + { + return &static_cast *>(operand->content)->held; + } + + template + inline const ValueType * unsafe_any_cast(const any * operand) + { + return unsafe_any_cast(const_cast(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/external/boost/assert.hpp b/external/boost/assert.hpp new file mode 100644 index 0000000..174f084 --- /dev/null +++ b/external/boost/assert.hpp @@ -0,0 +1,131 @@ +// +// boost/assert.hpp - BOOST_ASSERT(expr) +// BOOST_ASSERT_MSG(expr, msg) +// BOOST_VERIFY(expr) +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2007 Peter Dimov +// Copyright (c) Beman Dawes 2011 +// +// Distributed under the 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. +// + +// +// Stop inspect complaining about use of 'assert': +// +// boostinspect:naassert_macro +// + +//--------------------------------------------------------------------------------------// +// BOOST_ASSERT // +//--------------------------------------------------------------------------------------// + +#undef BOOST_ASSERT + +#if defined(BOOST_DISABLE_ASSERTS) + +# define BOOST_ASSERT(expr) ((void)0) + +#elif defined(BOOST_ENABLE_ASSERT_HANDLER) + +#include + +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 // .h to support old libraries w/o - effect is the same +# define BOOST_ASSERT(expr) assert(expr) +#endif + +//--------------------------------------------------------------------------------------// +// BOOST_ASSERT_MSG // +//--------------------------------------------------------------------------------------// + +# undef BOOST_ASSERT_MSG + +#if defined(BOOST_DISABLE_ASSERTS) || defined(NDEBUG) + + #define BOOST_ASSERT_MSG(expr, msg) ((void)0) + +#elif defined(BOOST_ENABLE_ASSERT_HANDLER) + + #include + + namespace boost + { + void assertion_failed_msg(char const * expr, char const * msg, + char const * function, char const * file, long line); // user defined + } // namespace boost + + #define BOOST_ASSERT_MSG(expr, msg) ((expr) \ + ? ((void)0) \ + : ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)) + +#else + #ifndef BOOST_ASSERT_HPP + #define BOOST_ASSERT_HPP + #include + #include + #include + + // IDE's like Visual Studio perform better if output goes to std::cout or + // some other stream, so allow user to configure output stream: + #ifndef BOOST_ASSERT_MSG_OSTREAM + # define BOOST_ASSERT_MSG_OSTREAM std::cerr + #endif + + namespace boost + { + namespace assertion + { + namespace detail + { + inline void assertion_failed_msg(char const * expr, char const * msg, char const * function, + char const * file, long line) + { + BOOST_ASSERT_MSG_OSTREAM + << "***** Internal Program Error - assertion (" << expr << ") failed in " + << function << ":\n" + << file << '(' << line << "): " << msg << std::endl; + std::abort(); + } + } // detail + } // assertion + } // detail + #endif + + #define BOOST_ASSERT_MSG(expr, msg) ((expr) \ + ? ((void)0) \ + : ::boost::assertion::detail::assertion_failed_msg(#expr, msg, \ + BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)) +#endif + +//--------------------------------------------------------------------------------------// +// BOOST_VERIFY // +//--------------------------------------------------------------------------------------// + +#undef BOOST_VERIFY + +#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) ) + +# define BOOST_VERIFY(expr) ((void)(expr)) + +#else + +# define BOOST_VERIFY(expr) BOOST_ASSERT(expr) + +#endif diff --git a/external/boost/bind.hpp b/external/boost/bind.hpp new file mode 100644 index 0000000..fd3421e --- /dev/null +++ b/external/boost/bind.hpp @@ -0,0 +1,24 @@ +#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) 2009 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 + +#endif // #ifndef BOOST_BIND_HPP_INCLUDED diff --git a/external/boost/bind/arg.hpp b/external/boost/bind/arg.hpp new file mode 100644 index 0000000..0d5cd03 --- /dev/null +++ b/external/boost/bind/arg.hpp @@ -0,0 +1,62 @@ +#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. +// + +#include +#include + +namespace boost +{ + +template< int I > struct arg +{ + arg() + { + } + + template< class T > arg( T const & /* t */ ) + { + // static assert I == is_placeholder::value + typedef char T_must_be_placeholder[ I == is_placeholder::value? 1: -1 ]; + } +}; + +template< int I > bool operator==( arg const &, arg const & ) +{ + return true; +} + +#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) + +template< int I > struct is_placeholder< arg > +{ + enum _vt { value = I }; +}; + +template< int I > struct is_placeholder< arg (*) () > +{ + enum _vt { value = I }; +}; + +#endif + +} // namespace boost + +#endif // #ifndef BOOST_BIND_ARG_HPP_INCLUDED diff --git a/external/boost/bind/bind.hpp b/external/boost/bind/bind.hpp new file mode 100644 index 0000000..fb67097 --- /dev/null +++ b/external/boost/bind/bind.hpp @@ -0,0 +1,1751 @@ +#ifndef BOOST_BIND_BIND_HPP_INCLUDED +#define BOOST_BIND_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 +#include +#include +#include +#include +#include +#include +#include + +// 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 + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4512) // assignment operator could not be generated +#endif + +namespace boost +{ + +template class weak_ptr; + +namespace _bi // implementation details +{ + +// result_traits + +template struct result_traits +{ + typedef R type; +}; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + +struct unspecified {}; + +template struct result_traits +{ + typedef typename F::result_type type; +}; + +template struct result_traits< unspecified, reference_wrapper > +{ + typedef typename F::result_type type; +}; + +#endif + +// ref_compare + +template bool ref_compare( T const & a, T const & b, long ) +{ + return a == b; +} + +template bool ref_compare( arg const &, arg const &, int ) +{ + return true; +} + +template bool ref_compare( arg (*) (), arg (*) (), int ) +{ + return true; +} + +template bool ref_compare( reference_wrapper const & a, reference_wrapper const & b, int ) +{ + return a.get_pointer() == b.get_pointer(); +} + +// bind_t forward declaration for listN + +template class bind_t; + +template bool ref_compare( bind_t const & a, bind_t const & b, int ) +{ + return a.compare( b ); +} + +// value + +template 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_; +}; + +// ref_compare for weak_ptr + +template bool ref_compare( value< weak_ptr > const & a, value< weak_ptr > const & b, int ) +{ + return !(a.get() < b.get()) && !(b.get() < a.get()); +} + +// type + +template class type {}; + +// unwrap + +template struct unwrapper +{ + static inline F & unwrap( F & f, long ) + { + return f; + } + + template static inline F2 & unwrap( reference_wrapper rf, int ) + { + return rf.get(); + } + + template static inline _mfi::dm unwrap( R T::* pm, int ) + { + return _mfi::dm( pm ); + } +}; + +// listN + +class list0 +{ +public: + + list0() {} + + template T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A &, long) + { + return unwrapper::unwrap(f, 0)(); + } + + template R operator()(type, F const & f, A &, long) const + { + return unwrapper::unwrap(f, 0)(); + } + + template void operator()(type, F & f, A &, int) + { + unwrapper::unwrap(f, 0)(); + } + + template void operator()(type, F const & f, A &, int) const + { + unwrapper::unwrap(f, 0)(); + } + + template void accept(V &) const + { + } + + bool operator==(list0 const &) const + { + return true; + } +}; + +#ifdef BOOST_MSVC +// MSVC is bright enough to realise that the parameter rhs +// in operator==may be unused for some template argument types: +#pragma warning(push) +#pragma warning(disable:4100) +#endif + +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 T & operator[] ( _bi::value & v ) const { return v.get(); } + + template T const & operator[] ( _bi::value const & v ) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_]); + } + + template R operator()(type, F const & f, A & a, long) const + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_]); + } + + template void operator()(type, F & f, A & a, int) + { + unwrapper::unwrap(f, 0)(a[base_type::a1_]); + } + + template void operator()(type, F const & f, A & a, int) const + { + unwrapper::unwrap(f, 0)(a[base_type::a1_]); + } + + template void accept(V & v) const + { + base_type::accept(v); + } + + bool operator==(list1 const & rhs) const + { + return ref_compare(base_type::a1_, rhs.a1_, 0); + } +}; + +struct logical_and; +struct logical_or; + +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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); + } + + template R operator()(type, F const & f, A & a, long) const + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); + } + + template void operator()(type, F & f, A & a, int) + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); + } + + template void operator()(type, F const & f, A & a, int) const + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); + } + + template bool operator()( type, logical_and & /*f*/, A & a, int ) + { + return a[ base_type::a1_ ] && a[ base_type::a2_ ]; + } + + template bool operator()( type, logical_and const & /*f*/, A & a, int ) const + { + return a[ base_type::a1_ ] && a[ base_type::a2_ ]; + } + + template bool operator()( type, logical_or & /*f*/, A & a, int ) + { + return a[ base_type::a1_ ] || a[ base_type::a2_ ]; + } + + template bool operator()( type, logical_or const & /*f*/, A & a, int ) const + { + return a[ base_type::a1_ ] || a[ base_type::a2_ ]; + } + + template 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); + } + + template R operator()(type, F const & f, A & a, long) const + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); + } + + template void operator()(type, F & f, A & a, int) + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); + } + + template void operator()(type, F const & f, A & a, int) const + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); + } + + template 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); + } + + template R operator()(type, F const & f, A & a, long) const + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); + } + + template void operator()(type, F & f, A & a, int) + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); + } + + template void operator()(type, F const & f, A & a, int) const + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); + } + + template 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); + } + + template R operator()(type, F const & f, A & a, long) const + { + return unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); + } + + template void operator()(type, F & f, A & a, int) + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); + } + + template void operator()(type, F const & f, A & a, int) const + { + unwrapper::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); + } + + template 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 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::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 R operator()(type, F const & f, A & a, long) const + { + return unwrapper::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 void operator()(type, F & f, A & a, int) + { + unwrapper::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 void operator()(type, F const & f, A & a, int) const + { + unwrapper::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 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 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::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 R operator()(type, F const & f, A & a, long) const + { + return unwrapper::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 void operator()(type, F & f, A & a, int) + { + unwrapper::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 void operator()(type, F const & f, A & a, int) const + { + unwrapper::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 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::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 R operator()(type, F const & f, A & a, long) const + { + return unwrapper::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 void operator()(type, F & f, A & a, int) + { + unwrapper::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 void operator()(type, F const & f, A & a, int) const + { + unwrapper::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 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 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 T & operator[] (_bi::value & v) const { return v.get(); } + + template T const & operator[] (_bi::value const & v) const { return v.get(); } + + template T & operator[] (reference_wrapper const & v) const { return v.get(); } + + template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + + template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + + template R operator()(type, F & f, A & a, long) + { + return unwrapper::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 R operator()(type, F const & f, A & a, long) const + { + return unwrapper::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 void operator()(type, F & f, A & a, int) + { + unwrapper::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 void operator()(type, F const & f, A & a, int) const + { + unwrapper::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 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 ); + } +}; + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +// bind_t + +#ifndef BOOST_NO_VOID_RETURNS + +template 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 +#undef BOOST_BIND_RETURN + +}; + +#else + +template struct bind_t_generator +{ + +template class implementation +{ +public: + + typedef implementation this_type; + + implementation(F f, L const & l): f_(f), l_(l) {} + +#define BOOST_BIND_RETURN return +#include +#undef BOOST_BIND_RETURN + +}; + +}; + +template<> struct bind_t_generator +{ + +template 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 +#undef BOOST_BIND_RETURN + +}; + +}; + +template class bind_t: public bind_t_generator::BOOST_NESTED_TEMPLATE implementation +{ +public: + + bind_t(F f, L const & l): bind_t_generator::BOOST_NESTED_TEMPLATE implementation(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 bool function_equal( bind_t const & a, bind_t const & b ) +{ + return a.compare(b); +} + +# else + +template bool function_equal_impl( bind_t const & a, bind_t 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 bool function_equal( _bi::bind_t const & a, _bi::bind_t const & b ) +{ + return a.compare(b); +} + +# else + +template bool function_equal_impl( _bi::bind_t const & a, _bi::bind_t 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) + +#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x582) ) + +template struct add_value +{ + typedef _bi::value type; +}; + +#else + +template< class T, int I > struct add_value_2 +{ + typedef boost::arg type; +}; + +template< class T > struct add_value_2< T, 0 > +{ + typedef _bi::value< T > type; +}; + +template struct add_value +{ + typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type; +}; + +#endif + +template struct add_value< value > +{ + typedef _bi::value type; +}; + +template struct add_value< reference_wrapper > +{ + typedef reference_wrapper type; +}; + +template struct add_value< arg > +{ + typedef boost::arg type; +}; + +template struct add_value< arg (*) () > +{ + typedef boost::arg (*type) (); +}; + +template struct add_value< bind_t > +{ + typedef bind_t type; +}; + +#else + +template struct _avt_0; + +template<> struct _avt_0<1> +{ + template struct inner + { + typedef T type; + }; +}; + +template<> struct _avt_0<2> +{ + template struct inner + { + typedef value type; + }; +}; + +typedef char (&_avt_r1) [1]; +typedef char (&_avt_r2) [2]; + +template _avt_r1 _avt_f(value); +template _avt_r1 _avt_f(reference_wrapper); +template _avt_r1 _avt_f(arg); +template _avt_r1 _avt_f(arg (*) ()); +template _avt_r1 _avt_f(bind_t); + +_avt_r2 _avt_f(...); + +template struct add_value +{ + static T t(); + typedef typename _avt_0::template inner::type type; +}; + +#endif + +// list_av_N + +template struct list_av_1 +{ + typedef typename add_value::type B1; + typedef list1 type; +}; + +template struct list_av_2 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef list2 type; +}; + +template struct list_av_3 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef list3 type; +}; + +template struct list_av_4 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef typename add_value::type B4; + typedef list4 type; +}; + +template struct list_av_5 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef typename add_value::type B4; + typedef typename add_value::type B5; + typedef list5 type; +}; + +template struct list_av_6 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef typename add_value::type B4; + typedef typename add_value::type B5; + typedef typename add_value::type B6; + typedef list6 type; +}; + +template struct list_av_7 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef typename add_value::type B4; + typedef typename add_value::type B5; + typedef typename add_value::type B6; + typedef typename add_value::type B7; + typedef list7 type; +}; + +template struct list_av_8 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef typename add_value::type B4; + typedef typename add_value::type B5; + typedef typename add_value::type B6; + typedef typename add_value::type B7; + typedef typename add_value::type B8; + typedef list8 type; +}; + +template struct list_av_9 +{ + typedef typename add_value::type B1; + typedef typename add_value::type B2; + typedef typename add_value::type B3; + typedef typename add_value::type B4; + typedef typename add_value::type B5; + typedef typename add_value::type B6; + typedef typename add_value::type B7; + typedef typename add_value::type B8; + typedef typename add_value::type B9; + typedef list9 type; +}; + +// operator! + +struct logical_not +{ + template bool operator()(V const & v) const { return !v; } +}; + +template + bind_t< bool, logical_not, list1< bind_t > > + operator! (bind_t const & f) +{ + typedef list1< bind_t > list_type; + return bind_t ( logical_not(), list_type(f) ); +} + +// relational operators + +#define BOOST_BIND_OPERATOR( op, name ) \ +\ +struct name \ +{ \ + template bool operator()(V const & v, W const & w) const { return v op w; } \ +}; \ + \ +template \ + bind_t< bool, name, list2< bind_t, typename add_value::type > > \ + operator op (bind_t const & f, A2 a2) \ +{ \ + typedef typename add_value::type B2; \ + typedef list2< bind_t, B2> list_type; \ + return bind_t ( 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 ) + +BOOST_BIND_OPERATOR( &&, logical_and ) +BOOST_BIND_OPERATOR( ||, logical_or ) + +#undef BOOST_BIND_OPERATOR + +#if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) + +// resolve ambiguity with rel_ops + +#define BOOST_BIND_OPERATOR( op, name ) \ +\ +template \ + bind_t< bool, name, list2< bind_t, bind_t > > \ + operator op (bind_t const & f, bind_t const & g) \ +{ \ + typedef list2< bind_t, bind_t > list_type; \ + return bind_t ( 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 void visit_each( V & v, value const & t, int ) +{ + using boost::visit_each; + BOOST_BIND_VISIT_EACH( v, t.get(), 0 ); +} + +template void visit_each( V & v, bind_t 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 void visit_each( V & v, _bi::value const & t, int ) +{ + BOOST_BIND_VISIT_EACH( v, t.get(), 0 ); +} + +template void visit_each( V & v, _bi::bind_t const & t, int ) +{ + t.accept( v ); +} + +#endif + +// is_bind_expression + +template< class T > struct is_bind_expression +{ + enum _vt { value = 0 }; +}; + +#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) + +template< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > > +{ + enum _vt { value = 1 }; +}; + +#endif + +// bind + +#ifndef BOOST_BIND +#define BOOST_BIND bind +#endif + +// generic function objects + +template + _bi::bind_t + BOOST_BIND(F f) +{ + typedef _bi::list0 list_type; + return _bi::bind_t (f, list_type()); +} + +template + _bi::bind_t::type> + BOOST_BIND(F f, A1 a1) +{ + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t (f, list_type(a1)); +} + +template + _bi::bind_t::type> + BOOST_BIND(F f, A1 a1, A2 a2) +{ + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t (f, list_type(a1, a2)); +} + +template + _bi::bind_t::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) +{ + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3)); +} + +template + _bi::bind_t::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) +{ + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4)); +} + +template + _bi::bind_t::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); +} + +template + _bi::bind_t::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} + +// generic function objects, alternative syntax + +template + _bi::bind_t + BOOST_BIND(boost::type, F f) +{ + typedef _bi::list0 list_type; + return _bi::bind_t (f, list_type()); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1) +{ + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t (f, list_type(a1)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2) +{ + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t (f, list_type(a1, a2)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3) +{ + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4) +{ + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +{ + typedef typename _bi::list_av_7::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) +{ + typedef typename _bi::list_av_8::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template + _bi::bind_t::type> + BOOST_BIND(boost::type, 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::type list_type; + return _bi::bind_t(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 + _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 + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1::type> + BOOST_BIND(F f, A1 a1) +{ + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2::type> + BOOST_BIND(F f, A1 a1, A2 a2) +{ + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) +{ + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) +{ + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6::type> + BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7::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::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8::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::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9::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::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 + +#undef BOOST_BIND_CC +#undef BOOST_BIND_ST + +#ifdef BOOST_BIND_ENABLE_STDCALL + +#define BOOST_BIND_CC __stdcall +#define BOOST_BIND_ST + +#include + +#undef BOOST_BIND_CC +#undef BOOST_BIND_ST + +#endif + +#ifdef BOOST_BIND_ENABLE_FASTCALL + +#define BOOST_BIND_CC __fastcall +#define BOOST_BIND_ST + +#include + +#undef BOOST_BIND_CC +#undef BOOST_BIND_ST + +#endif + +#ifdef BOOST_BIND_ENABLE_PASCAL + +#define BOOST_BIND_ST pascal +#define BOOST_BIND_CC + +#include + +#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 +#include + +#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 +#include + +#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 +#include + +#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 +#include + +#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__, BOOST_TESTED_AT( 0x620 ) ) ) + +template +_bi::bind_t< R, _mfi::dm, typename _bi::list_av_1::type > + BOOST_BIND(R T::*f, A1 a1) +{ + typedef _mfi::dm F; + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t( 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 > +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4180) +#endif + typedef M const & type; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +}; + +template< class R, class T > struct add_cref< R (T::*) (), 1 > +{ + typedef void type; +}; + +#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION + +template< class R, class T > struct add_cref< R (T::*) () const, 1 > +{ + typedef void type; +}; + +#endif // __IBMCPP__ + +template struct isref +{ + enum value_type { value = 0 }; +}; + +template struct isref< R& > +{ + enum value_type { value = 1 }; +}; + +template struct isref< R* > +{ + enum value_type { value = 1 }; +}; + +template struct dm_result +{ + typedef typename add_cref< Pm, 1 >::type type; +}; + +template struct dm_result< Pm, bind_t > +{ + typedef typename bind_t::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, + typename _bi::list_av_1::type +> + +BOOST_BIND( M T::*f, A1 a1 ) +{ + typedef typename _bi::dm_result< M T::*, A1 >::type result_type; + typedef _mfi::dm F; + typedef typename _bi::list_av_1::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 + +#endif + +#ifdef BOOST_MSVC +# pragma warning(default: 4512) // assignment operator could not be generated +# pragma warning(pop) +#endif + +#endif // #ifndef BOOST_BIND_BIND_HPP_INCLUDED diff --git a/external/boost/bind/bind_cc.hpp b/external/boost/bind/bind_cc.hpp new file mode 100644 index 0000000..35f8ece --- /dev/null +++ b/external/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 + _bi::bind_t + 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 (f, list_type()); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t (f, list_type(a1)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t (f, list_type(a1, a2)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template + _bi::bind_t::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::type list_type; + return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} diff --git a/external/boost/bind/bind_mf2_cc.hpp b/external/boost/bind/bind_mf2_cc.hpp new file mode 100644 index 0000000..66476bc --- /dev/null +++ b/external/boost/bind/bind_mf2_cc.hpp @@ -0,0 +1,228 @@ +// +// bind/bind_mf2_cc.hpp - member functions, type<> syntax +// +// Do not include this header directly. +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2008 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. +// + +// 0 + +template + _bi::bind_t, typename _bi::list_av_1::type> + BOOST_BIND(boost::type, R (BOOST_BIND_MF_CC T::*f) (), A1 a1) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf0) F; + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t(F(f), list_type(a1)); +} + +template + _bi::bind_t, typename _bi::list_av_1::type> + BOOST_BIND(boost::type, R (BOOST_BIND_MF_CC T::*f) () const, A1 a1) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf0) F; + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t(F(f), list_type(a1)); +} + +// 1 + +template + _bi::bind_t, typename _bi::list_av_2::type> + BOOST_BIND(boost::type, R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf1) F; + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2)); +} + +template + _bi::bind_t, typename _bi::list_av_2::type> + BOOST_BIND(boost::type, R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf1) F; + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2)); +} + +// 2 + +template + _bi::bind_t, typename _bi::list_av_3::type> + BOOST_BIND(boost::type, R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf2) F; + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3)); +} + +template + _bi::bind_t, typename _bi::list_av_3::type> + BOOST_BIND(boost::type, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf2) F; + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3)); +} + +// 3 + +template + _bi::bind_t, typename _bi::list_av_4::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4)); +} + +template + _bi::bind_t, typename _bi::list_av_4::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4)); +} + +// 4 + +template + _bi::bind_t, typename _bi::list_av_5::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5)); +} + +template + _bi::bind_t, typename _bi::list_av_5::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5)); +} + +// 5 + +template + _bi::bind_t, typename _bi::list_av_6::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6)); +} + +template + _bi::bind_t, typename _bi::list_av_6::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6)); +} + +// 6 + +template + _bi::bind_t, typename _bi::list_av_7::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_7::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template + _bi::bind_t, typename _bi::list_av_7::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_7::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +// 7 + +template + _bi::bind_t, typename _bi::list_av_8::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_8::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template + _bi::bind_t, typename _bi::list_av_8::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_8::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +// 8 + +template + _bi::bind_t, typename _bi::list_av_9::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_9::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} + +template + _bi::bind_t, typename _bi::list_av_9::type> + BOOST_BIND(boost::type, 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) F; + typedef typename _bi::list_av_9::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} diff --git a/external/boost/bind/bind_mf_cc.hpp b/external/boost/bind/bind_mf_cc.hpp new file mode 100644 index 0000000..88be822 --- /dev/null +++ b/external/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 + _bi::bind_t, typename _bi::list_av_1::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf0) F; + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t(F(f), list_type(a1)); +} + +template + _bi::bind_t, typename _bi::list_av_1::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf0) F; + typedef typename _bi::list_av_1::type list_type; + return _bi::bind_t(F(f), list_type(a1)); +} + +// 1 + +template + _bi::bind_t, typename _bi::list_av_2::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf1) F; + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2)); +} + +template + _bi::bind_t, typename _bi::list_av_2::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf1) F; + typedef typename _bi::list_av_2::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2)); +} + +// 2 + +template + _bi::bind_t, typename _bi::list_av_3::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) F; + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3)); +} + +template + _bi::bind_t, typename _bi::list_av_3::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) F; + typedef typename _bi::list_av_3::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3)); +} + +// 3 + +template + _bi::bind_t, typename _bi::list_av_4::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) F; + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4)); +} + +template + _bi::bind_t, typename _bi::list_av_4::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) F; + typedef typename _bi::list_av_4::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4)); +} + +// 4 + +template + _bi::bind_t, typename _bi::list_av_5::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) F; + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5)); +} + +template + _bi::bind_t, typename _bi::list_av_5::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) F; + typedef typename _bi::list_av_5::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5)); +} + +// 5 + +template + _bi::bind_t, typename _bi::list_av_6::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) F; + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6)); +} + +template + _bi::bind_t, typename _bi::list_av_6::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) F; + typedef typename _bi::list_av_6::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6)); +} + +// 6 + +template + _bi::bind_t, typename _bi::list_av_7::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) F; + typedef typename _bi::list_av_7::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template + _bi::bind_t, typename _bi::list_av_7::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) F; + typedef typename _bi::list_av_7::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +// 7 + +template + _bi::bind_t, typename _bi::list_av_8::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) F; + typedef typename _bi::list_av_8::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template + _bi::bind_t, typename _bi::list_av_8::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) F; + typedef typename _bi::list_av_8::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +// 8 + +template + _bi::bind_t, typename _bi::list_av_9::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) F; + typedef typename _bi::list_av_9::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} + +template + _bi::bind_t, typename _bi::list_av_9::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) F; + typedef typename _bi::list_av_9::type list_type; + return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} diff --git a/external/boost/bind/bind_template.hpp b/external/boost/bind/bind_template.hpp new file mode 100644 index 0000000..411d20c --- /dev/null +++ b/external/boost/bind/bind_template.hpp @@ -0,0 +1,345 @@ +// +// 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::type result_type; + + result_type operator()() + { + list0 a; + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + result_type operator()() const + { + list0 a; + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1) + { + list1 a(a1); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1) const + { + list1 a(a1); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1) + { + list1 a(a1); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1) const + { + list1 a(a1); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2) + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2) const + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 & a2) + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 & a2) const + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + + template result_type operator()(A1 & a1, A2 const & a2) + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 const & a2) const + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + + template result_type operator()(A1 const & a1, A2 const & a2) + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2) const + { + list2 a(a1, a2); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3) + { + list3 a(a1, a2, a3); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3) const + { + list3 a(a1, a2, a3); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) + { + list3 a(a1, a2, a3); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const + { + list3 a(a1, a2, a3); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) + { + list4 a(a1, a2, a3, a4); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const + { + list4 a(a1, a2, a3, a4); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) + { + list4 a(a1, a2, a3, a4); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const + { + list4 a(a1, a2, a3, a4); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) + { + list5 a(a1, a2, a3, a4, a5); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const + { + list5 a(a1, a2, a3, a4, a5); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) + { + list5 a(a1, a2, a3, a4, a5); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const + { + list5 a(a1, a2, a3, a4, a5); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) + { + list6 a(a1, a2, a3, a4, a5, a6); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const + { + list6 a(a1, a2, a3, a4, a5, a6); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) + { + list6 a(a1, a2, a3, a4, a5, a6); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const + { + list6 a(a1, a2, a3, a4, a5, a6); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) + { + list7 a(a1, a2, a3, a4, a5, a6, a7); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const + { + list7 a(a1, a2, a3, a4, a5, a6, a7); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) + { + list7 a(a1, a2, a3, a4, a5, a6, a7); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const + { + list7 a(a1, a2, a3, a4, a5, a6, a7); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) + { + list8 a(a1, a2, a3, a4, a5, a6, a7, a8); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const + { + list8 a(a1, a2, a3, a4, a5, a6, a7, a8); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) + { + list8 a(a1, a2, a3, a4, a5, a6, a7, a8); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const + { + list8 a(a1, a2, a3, a4, a5, a6, a7, a8); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) + { + list9 a(a1, a2, a3, a4, a5, a6, a7, a8, a9); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const + { + list9 a(a1, a2, a3, a4, a5, a6, a7, a8, a9); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) + { + list9 a(a1, a2, a3, a4, a5, a6, a7, a8, a9); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) const + { + list9 a(a1, a2, a3, a4, a5, a6, a7, a8, a9); + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + +#endif + + template result_type eval(A & a) + { + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template result_type eval(A & a) const + { + BOOST_BIND_RETURN l_(type(), f_, a, 0); + } + + template 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/external/boost/bind/mem_fn.hpp b/external/boost/bind/mem_fn.hpp new file mode 100644 index 0000000..956e7d8 --- /dev/null +++ b/external/boost/bind/mem_fn.hpp @@ -0,0 +1,389 @@ +#ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED +#define BOOST_BIND_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 +#include +#include + +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 struct mf +{ + +#define BOOST_MEM_FN_RETURN return + +#define BOOST_MEM_FN_NAME(X) inner_##X +#define BOOST_MEM_FN_CC + +#include + +#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 + +#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 + +#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 + +#undef BOOST_MEM_FN_CC +#undef BOOST_MEM_FN_NAME + +#endif + +#undef BOOST_MEM_FN_RETURN + +}; // struct mf + +template<> struct mf +{ + +#define BOOST_MEM_FN_RETURN + +#define BOOST_MEM_FN_NAME(X) inner_##X +#define BOOST_MEM_FN_CC + +#include + +#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 + +#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 + +#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 + +#undef BOOST_MEM_FN_CC +#undef BOOST_MEM_FN_NAME + +#endif + +#undef BOOST_MEM_FN_RETURN + +}; // struct mf + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#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 + +#undef BOOST_MEM_FN_NAME +#undef BOOST_MEM_FN_CC + +#endif + +// data member support + +namespace _mfi +{ + +template class dm +{ +public: + + typedef R const & result_type; + typedef T const * argument_type; + +private: + + typedef R (T::*F); + F f_; + + template R const & call(U & u, T const *) const + { + return (u.*f_); + } + + template 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 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 _mfi::dm mem_fn(R T::*f) +{ + return _mfi::dm(f); +} + +} // namespace boost + +#endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED diff --git a/external/boost/bind/mem_fn_cc.hpp b/external/boost/bind/mem_fn_cc.hpp new file mode 100644 index 0000000..8b6ea0b --- /dev/null +++ b/external/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 _mfi::BOOST_MEM_FN_NAME(mf0) mem_fn(R (BOOST_MEM_FN_CC T::*f) ()) +{ + return _mfi::BOOST_MEM_FN_NAME(mf0)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf0) mem_fn(R (BOOST_MEM_FN_CC T::*f) () const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf0)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf1) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf1)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf1) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf1)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf2) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf2)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf2) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf2)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf3) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf3)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf3) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf3)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf4) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf4)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf4) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf4)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf5) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf5)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf5) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf5)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf6) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf6)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf6) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf6)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf7) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf7)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf7) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf7)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(mf8) mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf8)(f); +} + +template _mfi::BOOST_MEM_FN_NAME(cmf8) 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)(f); +} diff --git a/external/boost/bind/mem_fn_template.hpp b/external/boost/bind/mem_fn_template.hpp new file mode 100644 index 0000000..b26d585 --- /dev/null +++ b/external/boost/bind/mem_fn_template.hpp @@ -0,0 +1,1047 @@ +// +// 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 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 R call(U & u, T const *) const + { + BOOST_MEM_FN_RETURN (u.*f_)(); + } + + template 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 R operator()(U & u) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p); + } + +#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 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 R call(U & u, T const *) const + { + BOOST_MEM_FN_RETURN (u.*f_)(); + } + + template 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 R operator()(U const & u) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p); + } + + 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 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 R call(U & u, T const *, B1 & b1) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1); + } + + template 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 R operator()(U & u, A1 a1) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 R call(U & u, T const *, B1 & b1) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1); + } + + template 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 R operator()(U const & u, A1 a1) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 R call(U & u, T const *, B1 & b1, B2 & b2) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); + } + + template 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 R operator()(U & u, A1 a1, A2 a2) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 R call(U & u, T const *, B1 & b1, B2 & b2) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); + } + + template 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 R operator()(U const & u, A1 a1, A2 a2) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); + } + + template 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 R operator()(U & u, A1 a1, A2 a2, A3 a3) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2, A3 a3) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); + } + + template 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 R operator()(U const & u, A1 a1, A2 a2, A3 a3) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8); + } + +#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS + + template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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 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 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 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 R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const + { + U const * p = 0; + BOOST_MEM_FN_RETURN call(u, p, 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/external/boost/bind/mem_fn_vw.hpp b/external/boost/bind/mem_fn_vw.hpp new file mode 100644 index 0000000..f3fc58d --- /dev/null +++ b/external/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 struct BOOST_MEM_FN_NAME(mf0): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (); + explicit BOOST_MEM_FN_NAME(mf0)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf0): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0) +{ + typedef R (BOOST_MEM_FN_CC T::*F) () const; + explicit BOOST_MEM_FN_NAME(cmf0)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf1): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1); + explicit BOOST_MEM_FN_NAME(mf1)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf1): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1) const; + explicit BOOST_MEM_FN_NAME(cmf1)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf2): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2); + explicit BOOST_MEM_FN_NAME(mf2)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf2): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2) const; + explicit BOOST_MEM_FN_NAME(cmf2)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf3): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3); + explicit BOOST_MEM_FN_NAME(mf3)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf3): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const; + explicit BOOST_MEM_FN_NAME(cmf3)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf4): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4); + explicit BOOST_MEM_FN_NAME(mf4)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf4): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const; + explicit BOOST_MEM_FN_NAME(cmf4)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf5): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5); + explicit BOOST_MEM_FN_NAME(mf5)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf5): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const; + explicit BOOST_MEM_FN_NAME(cmf5)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf6): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6); + explicit BOOST_MEM_FN_NAME(mf6)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf6): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const; + explicit BOOST_MEM_FN_NAME(cmf6)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf7): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7) +{ + typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7); + explicit BOOST_MEM_FN_NAME(mf7)(F f): mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf7): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7) +{ + 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::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)(f) {} +}; + + +template struct BOOST_MEM_FN_NAME(mf8): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8) +{ + 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::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)(f) {} +}; + +template struct BOOST_MEM_FN_NAME(cmf8): public mf::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8) +{ + 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::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)(f) {} +}; + diff --git a/external/boost/bind/placeholders.hpp b/external/boost/bind/placeholders.hpp new file mode 100644 index 0000000..3b098b1 --- /dev/null +++ b/external/boost/bind/placeholders.hpp @@ -0,0 +1,69 @@ +#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 +#include + +namespace +{ + +#if defined(__BORLANDC__) || defined(__GNUC__) && (__GNUC__ < 4) + +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__) || \ + defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 2) + +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/external/boost/bind/storage.hpp b/external/boost/bind/storage.hpp new file mode 100644 index 0000000..be490b0 --- /dev/null +++ b/external/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 +#include + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4512) // assignment operator could not be generated +#endif + +namespace boost +{ + +namespace _bi +{ + +// 1 + +template struct storage1 +{ + explicit storage1( A1 a1 ): a1_( a1 ) {} + + template void accept(V & v) const + { + BOOST_BIND_VISIT_EACH(v, a1_, 0); + } + + A1 a1_; +}; + +#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( __BORLANDC__ ) + +template struct storage1< boost::arg > +{ + explicit storage1( boost::arg ) {} + + template void accept(V &) const { } + + static boost::arg a1_() { return boost::arg(); } +}; + +template struct storage1< boost::arg (*) () > +{ + explicit storage1( boost::arg (*) () ) {} + + template void accept(V &) const { } + + static boost::arg a1_() { return boost::arg(); } +}; + +#endif + +// 2 + +template struct storage2: public storage1 +{ + typedef storage1 inherited; + + storage2( A1 a1, A2 a2 ): storage1( a1 ), a2_( a2 ) {} + + template 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 struct storage2< A1, boost::arg >: public storage1 +{ + typedef storage1 inherited; + + storage2( A1 a1, boost::arg ): storage1( a1 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a2_() { return boost::arg(); } +}; + +template struct storage2< A1, boost::arg (*) () >: public storage1 +{ + typedef storage1 inherited; + + storage2( A1 a1, boost::arg (*) () ): storage1( a1 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a2_() { return boost::arg(); } +}; + +#endif + +// 3 + +template struct storage3: public storage2< A1, A2 > +{ + typedef storage2 inherited; + + storage3( A1 a1, A2 a2, A3 a3 ): storage2( a1, a2 ), a3_( a3 ) {} + + template 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 struct storage3< A1, A2, boost::arg >: public storage2< A1, A2 > +{ + typedef storage2 inherited; + + storage3( A1 a1, A2 a2, boost::arg ): storage2( a1, a2 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a3_() { return boost::arg(); } +}; + +template struct storage3< A1, A2, boost::arg (*) () >: public storage2< A1, A2 > +{ + typedef storage2 inherited; + + storage3( A1 a1, A2 a2, boost::arg (*) () ): storage2( a1, a2 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a3_() { return boost::arg(); } +}; + +#endif + +// 4 + +template struct storage4: public storage3< A1, A2, A3 > +{ + typedef storage3 inherited; + + storage4( A1 a1, A2 a2, A3 a3, A4 a4 ): storage3( a1, a2, a3 ), a4_( a4 ) {} + + template 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 struct storage4< A1, A2, A3, boost::arg >: public storage3< A1, A2, A3 > +{ + typedef storage3 inherited; + + storage4( A1 a1, A2 a2, A3 a3, boost::arg ): storage3( a1, a2, a3 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a4_() { return boost::arg(); } +}; + +template struct storage4< A1, A2, A3, boost::arg (*) () >: public storage3< A1, A2, A3 > +{ + typedef storage3 inherited; + + storage4( A1 a1, A2 a2, A3 a3, boost::arg (*) () ): storage3( a1, a2, a3 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a4_() { return boost::arg(); } +}; + +#endif + +// 5 + +template struct storage5: public storage4< A1, A2, A3, A4 > +{ + typedef storage4 inherited; + + storage5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): storage4( a1, a2, a3, a4 ), a5_( a5 ) {} + + template 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 struct storage5< A1, A2, A3, A4, boost::arg >: public storage4< A1, A2, A3, A4 > +{ + typedef storage4 inherited; + + storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg ): storage4( a1, a2, a3, a4 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a5_() { return boost::arg(); } +}; + +template struct storage5< A1, A2, A3, A4, boost::arg (*) () >: public storage4< A1, A2, A3, A4 > +{ + typedef storage4 inherited; + + storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg (*) () ): storage4( a1, a2, a3, a4 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a5_() { return boost::arg(); } +}; + +#endif + +// 6 + +template struct storage6: public storage5< A1, A2, A3, A4, A5 > +{ + typedef storage5 inherited; + + storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): storage5( a1, a2, a3, a4, a5 ), a6_( a6 ) {} + + template 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 struct storage6< A1, A2, A3, A4, A5, boost::arg >: public storage5< A1, A2, A3, A4, A5 > +{ + typedef storage5 inherited; + + storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg ): storage5( a1, a2, a3, a4, a5 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a6_() { return boost::arg(); } +}; + +template struct storage6< A1, A2, A3, A4, A5, boost::arg (*) () >: public storage5< A1, A2, A3, A4, A5 > +{ + typedef storage5 inherited; + + storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg (*) () ): storage5( a1, a2, a3, a4, a5 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a6_() { return boost::arg(); } +}; + +#endif + +// 7 + +template struct storage7: public storage6< A1, A2, A3, A4, A5, A6 > +{ + typedef storage6 inherited; + + storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): storage6( a1, a2, a3, a4, a5, a6 ), a7_( a7 ) {} + + template 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 struct storage7< A1, A2, A3, A4, A5, A6, boost::arg >: public storage6< A1, A2, A3, A4, A5, A6 > +{ + typedef storage6 inherited; + + storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg ): storage6( a1, a2, a3, a4, a5, a6 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a7_() { return boost::arg(); } +}; + +template struct storage7< A1, A2, A3, A4, A5, A6, boost::arg (*) () >: public storage6< A1, A2, A3, A4, A5, A6 > +{ + typedef storage6 inherited; + + storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg (*) () ): storage6( a1, a2, a3, a4, a5, a6 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a7_() { return boost::arg(); } +}; + +#endif + +// 8 + +template struct storage8: public storage7< A1, A2, A3, A4, A5, A6, A7 > +{ + typedef storage7 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 ), a8_( a8 ) {} + + template 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 struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg >: public storage7< A1, A2, A3, A4, A5, A6, A7 > +{ + typedef storage7 inherited; + + storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg ): storage7( a1, a2, a3, a4, a5, a6, a7 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a8_() { return boost::arg(); } +}; + +template struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg (*) () >: public storage7< A1, A2, A3, A4, A5, A6, A7 > +{ + typedef storage7 inherited; + + storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg (*) () ): storage7( a1, a2, a3, a4, a5, a6, a7 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a8_() { return boost::arg(); } +}; + +#endif + +// 9 + +template struct storage9: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 > +{ + typedef storage8 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 ), a9_( a9 ) {} + + template 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 struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 > +{ + typedef storage8 inherited; + + storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg ): storage8( a1, a2, a3, a4, a5, a6, a7, a8 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a9_() { return boost::arg(); } +}; + +template struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg (*) () >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 > +{ + typedef storage8 inherited; + + storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg (*) () ): storage8( a1, a2, a3, a4, a5, a6, a7, a8 ) {} + + template void accept(V & v) const + { + inherited::accept(v); + } + + static boost::arg a9_() { return boost::arg(); } +}; + +#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/external/boost/call_traits.hpp b/external/boost/call_traits.hpp new file mode 100644 index 0000000..5253a6d --- /dev/null +++ b/external/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 +#endif + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#else +#include +#endif + +#endif // BOOST_CALL_TRAITS_HPP diff --git a/external/boost/cerrno.hpp b/external/boost/cerrno.hpp new file mode 100644 index 0000000..6f26698 --- /dev/null +++ b/external/boost/cerrno.hpp @@ -0,0 +1,331 @@ +// Boost 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/system + +#ifndef BOOST_CERRNO_HPP +#define BOOST_CERRNO_HPP + +#include + +// supply errno values likely to be missing, particularly on Windows + +#ifndef EAFNOSUPPORT +#define EAFNOSUPPORT 9901 +#endif + +#ifndef EADDRINUSE +#define EADDRINUSE 9902 +#endif + +#ifndef EADDRNOTAVAIL +#define EADDRNOTAVAIL 9903 +#endif + +#ifndef EISCONN +#define EISCONN 9904 +#endif + +#ifndef EBADMSG +#define EBADMSG 9905 +#endif + +#ifndef ECONNABORTED +#define ECONNABORTED 9906 +#endif + +#ifndef EALREADY +#define EALREADY 9907 +#endif + +#ifndef ECONNREFUSED +#define ECONNREFUSED 9908 +#endif + +#ifndef ECONNRESET +#define ECONNRESET 9909 +#endif + +#ifndef EDESTADDRREQ +#define EDESTADDRREQ 9910 +#endif + +#ifndef EHOSTUNREACH +#define EHOSTUNREACH 9911 +#endif + +#ifndef EIDRM +#define EIDRM 9912 +#endif + +#ifndef EMSGSIZE +#define EMSGSIZE 9913 +#endif + +#ifndef ENETDOWN +#define ENETDOWN 9914 +#endif + +#ifndef ENETRESET +#define ENETRESET 9915 +#endif + +#ifndef ENETUNREACH +#define ENETUNREACH 9916 +#endif + +#ifndef ENOBUFS +#define ENOBUFS 9917 +#endif + +#ifndef ENOLINK +#define ENOLINK 9918 +#endif + +#ifndef ENODATA +#define ENODATA 9919 +#endif + +#ifndef ENOMSG +#define ENOMSG 9920 +#endif + +#ifndef ENOPROTOOPT +#define ENOPROTOOPT 9921 +#endif + +#ifndef ENOSR +#define ENOSR 9922 +#endif + +#ifndef ENOTSOCK +#define ENOTSOCK 9923 +#endif + +#ifndef ENOSTR +#define ENOSTR 9924 +#endif + +#ifndef ENOTCONN +#define ENOTCONN 9925 +#endif + +#ifndef ENOTSUP +#define ENOTSUP 9926 +#endif + +#ifndef ECANCELED +#define ECANCELED 9927 +#endif + +#ifndef EINPROGRESS +#define EINPROGRESS 9928 +#endif + +#ifndef EOPNOTSUPP +#define EOPNOTSUPP 9929 +#endif + +#ifndef EWOULDBLOCK +#define EWOULDBLOCK 9930 +#endif + +#ifndef EOWNERDEAD +#define EOWNERDEAD 9931 +#endif + +#ifndef EPROTO +#define EPROTO 9932 +#endif + +#ifndef EPROTONOSUPPORT +#define EPROTONOSUPPORT 9933 +#endif + +#ifndef ENOTRECOVERABLE +#define ENOTRECOVERABLE 9934 +#endif + +#ifndef ETIME +#define ETIME 9935 +#endif + +#ifndef ETXTBSY +#define ETXTBSY 9936 +#endif + +#ifndef ETIMEDOUT +#define ETIMEDOUT 9938 +#endif + +#ifndef ELOOP +#define ELOOP 9939 +#endif + +#ifndef EOVERFLOW +#define EOVERFLOW 9940 +#endif + +#ifndef EPROTOTYPE +#define EPROTOTYPE 9941 +#endif + +#ifndef ENOSYS +#define ENOSYS 9942 +#endif + +#ifndef EINVAL +#define EINVAL 9943 +#endif + +#ifndef ERANGE +#define ERANGE 9944 +#endif + +#ifndef EILSEQ +#define EILSEQ 9945 +#endif + +// Windows Mobile doesn't appear to define these: + +#ifndef E2BIG +#define E2BIG 9946 +#endif + +#ifndef EDOM +#define EDOM 9947 +#endif + +#ifndef EFAULT +#define EFAULT 9948 +#endif + +#ifndef EBADF +#define EBADF 9949 +#endif + +#ifndef EPIPE +#define EPIPE 9950 +#endif + +#ifndef EXDEV +#define EXDEV 9951 +#endif + +#ifndef EBUSY +#define EBUSY 9952 +#endif + +#ifndef ENOTEMPTY +#define ENOTEMPTY 9953 +#endif + +#ifndef ENOEXEC +#define ENOEXEC 9954 +#endif + +#ifndef EEXIST +#define EEXIST 9955 +#endif + +#ifndef EFBIG +#define EFBIG 9956 +#endif + +#ifndef ENAMETOOLONG +#define ENAMETOOLONG 9957 +#endif + +#ifndef ENOTTY +#define ENOTTY 9958 +#endif + +#ifndef EINTR +#define EINTR 9959 +#endif + +#ifndef ESPIPE +#define ESPIPE 9960 +#endif + +#ifndef EIO +#define EIO 9961 +#endif + +#ifndef EISDIR +#define EISDIR 9962 +#endif + +#ifndef ECHILD +#define ECHILD 9963 +#endif + +#ifndef ENOLCK +#define ENOLCK 9964 +#endif + +#ifndef ENOSPC +#define ENOSPC 9965 +#endif + +#ifndef ENXIO +#define ENXIO 9966 +#endif + +#ifndef ENODEV +#define ENODEV 9967 +#endif + +#ifndef ENOENT +#define ENOENT 9968 +#endif + +#ifndef ESRCH +#define ESRCH 9969 +#endif + +#ifndef ENOTDIR +#define ENOTDIR 9970 +#endif + +#ifndef ENOMEM +#define ENOMEM 9971 +#endif + +#ifndef EPERM +#define EPERM 9972 +#endif + +#ifndef EACCES +#define EACCES 9973 +#endif + +#ifndef EROFS +#define EROFS 9974 +#endif + +#ifndef EDEADLK +#define EDEADLK 9975 +#endif + +#ifndef EAGAIN +#define EAGAIN 9976 +#endif + +#ifndef ENFILE +#define ENFILE 9977 +#endif + +#ifndef EMFILE +#define EMFILE 9978 +#endif + +#ifndef EMLINK +#define EMLINK 9979 +#endif + +#endif // include guard diff --git a/external/boost/checked_delete.hpp b/external/boost/checked_delete.hpp new file mode 100644 index 0000000..9bb84e8 --- /dev/null +++ b/external/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 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 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 struct checked_deleter +{ + typedef void result_type; + typedef T * argument_type; + + void operator()(T * x) const + { + // boost:: disables ADL + boost::checked_delete(x); + } +}; + +template 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/external/boost/concept/assert.hpp b/external/boost/concept/assert.hpp new file mode 100644 index 0000000..80eca81 --- /dev/null +++ b/external/boost/concept/assert.hpp @@ -0,0 +1,46 @@ +// 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_CONCEPT_ASSERT_DWA2006430_HPP +# define BOOST_CONCEPT_ASSERT_DWA2006430_HPP + +# include +# include + +// The old protocol used a constraints() member function in concept +// checking classes. If the compiler supports SFINAE, we can detect +// that function and seamlessly support the old concept checking +// classes. In this release, backward compatibility with the old +// concept checking classes is enabled by default, where available. +// The old protocol is deprecated, though, and backward compatibility +// will no longer be the default in the next release. + +# if !defined(BOOST_NO_OLD_CONCEPT_SUPPORT) \ + && !defined(BOOST_NO_SFINAE) \ + \ + && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4)) \ + && !(BOOST_WORKAROUND(__GNUC__, == 2)) + +// Note: gcc-2.96 through 3.3.x have some SFINAE, but no ability to +// check for the presence of particularmember functions. + +# define BOOST_OLD_CONCEPT_SUPPORT + +# endif + +# ifdef BOOST_MSVC +# include +# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +# include +# else +# include +# endif + + // Usage, in class or function context: + // + // BOOST_CONCEPT_ASSERT((UnaryFunctionConcept)); + // +# define BOOST_CONCEPT_ASSERT(ModelInParens) \ + BOOST_CONCEPT_ASSERT_FN(void(*)ModelInParens) + +#endif // BOOST_CONCEPT_ASSERT_DWA2006430_HPP diff --git a/external/boost/concept/detail/backward_compatibility.hpp b/external/boost/concept/detail/backward_compatibility.hpp new file mode 100644 index 0000000..66d573e --- /dev/null +++ b/external/boost/concept/detail/backward_compatibility.hpp @@ -0,0 +1,16 @@ +// Copyright David Abrahams 2009. Distributed under the Boost +// Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP +# define BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP + +namespace boost +{ + namespace concepts {} + +# if defined(BOOST_HAS_CONCEPTS) && !defined(BOOST_CONCEPT_NO_BACKWARD_KEYWORD) + namespace concept = concepts; +# endif +} // namespace boost::concept + +#endif // BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP diff --git a/external/boost/concept/detail/borland.hpp b/external/boost/concept/detail/borland.hpp new file mode 100644 index 0000000..300d5d4 --- /dev/null +++ b/external/boost/concept/detail/borland.hpp @@ -0,0 +1,30 @@ +// 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_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP +# define BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP + +# include +# include + +namespace boost { namespace concepts { + +template +struct require; + +template +struct require +{ + enum { instantiate = sizeof((((Model*)0)->~Model()), 3) }; +}; + +# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \ + enum \ + { \ + BOOST_PP_CAT(boost_concept_check,__LINE__) = \ + boost::concepts::require::instantiate \ + } + +}} // namespace boost::concept + +#endif // BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP diff --git a/external/boost/concept/detail/concept_def.hpp b/external/boost/concept/detail/concept_def.hpp new file mode 100644 index 0000000..79f628e --- /dev/null +++ b/external/boost/concept/detail/concept_def.hpp @@ -0,0 +1,51 @@ +// 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_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP +# define BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP +# include +# include +# include +# include +#endif // BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP + +// BOOST_concept(SomeName, (p1)(p2)...(pN)) +// +// Expands to "template struct SomeName" +// +// Also defines an equivalent SomeNameConcept for backward compatibility. +// Maybe in the next release we can kill off the "Concept" suffix for good. +#if BOOST_WORKAROUND(__GNUC__, <= 3) +# define BOOST_concept(name, params) \ + template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \ + struct name; /* forward declaration */ \ + \ + template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \ + struct BOOST_PP_CAT(name,Concept) \ + : name< BOOST_PP_SEQ_ENUM(params) > \ + { \ + /* at least 2.96 and 3.4.3 both need this */ \ + BOOST_PP_CAT(name,Concept)(); \ + }; \ + \ + template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \ + struct name +#else +# define BOOST_concept(name, params) \ + template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \ + struct name; /* forward declaration */ \ + \ + template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \ + struct BOOST_PP_CAT(name,Concept) \ + : name< BOOST_PP_SEQ_ENUM(params) > \ + { \ + }; \ + \ + template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \ + struct name +#endif + +// Helper for BOOST_concept, above. +# define BOOST_CONCEPT_typename(r, ignored, index, t) \ + BOOST_PP_COMMA_IF(index) typename t + diff --git a/external/boost/concept/detail/concept_undef.hpp b/external/boost/concept/detail/concept_undef.hpp new file mode 100644 index 0000000..713db89 --- /dev/null +++ b/external/boost/concept/detail/concept_undef.hpp @@ -0,0 +1,5 @@ +// 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) +# undef BOOST_concept_typename +# undef BOOST_concept diff --git a/external/boost/concept/detail/general.hpp b/external/boost/concept/detail/general.hpp new file mode 100644 index 0000000..e3014c1 --- /dev/null +++ b/external/boost/concept/detail/general.hpp @@ -0,0 +1,75 @@ +// 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_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP +# define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP + +# include +# include + +# ifdef BOOST_OLD_CONCEPT_SUPPORT +# include +# include +# endif + +// This implementation works on Comeau and GCC, all the way back to +// 2.95 +namespace boost { namespace concepts { + +template +struct requirement_; + +namespace detail +{ + template struct instantiate {}; +} + +template +struct requirement +{ + static void failed() { ((Model*)0)->~Model(); } +}; + +struct failed {}; + +template +struct requirement +{ + static void failed() { ((Model*)0)->~Model(); } +}; + +# ifdef BOOST_OLD_CONCEPT_SUPPORT + +template +struct constraint +{ + static void failed() { ((Model*)0)->constraints(); } +}; + +template +struct requirement_ + : mpl::if_< + concepts::not_satisfied + , constraint + , requirement + >::type +{}; + +# else + +// For GCC-2.x, these can't have exactly the same name +template +struct requirement_ + : requirement +{}; + +# endif + +# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \ + typedef ::boost::concepts::detail::instantiate< \ + &::boost::concepts::requirement_::failed> \ + BOOST_PP_CAT(boost_concept_check,__LINE__) + +}} + +#endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP diff --git a/external/boost/concept/detail/has_constraints.hpp b/external/boost/concept/detail/has_constraints.hpp new file mode 100644 index 0000000..a309db3 --- /dev/null +++ b/external/boost/concept/detail/has_constraints.hpp @@ -0,0 +1,50 @@ +// 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_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP +# define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP + +# include +# include +# include + +namespace boost { namespace concepts { + +namespace detail +{ + +// Here we implement the metafunction that detects whether a +// constraints metafunction exists + typedef char yes; + typedef char (&no)[2]; + + template + struct wrap_constraints {}; + +#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580) || defined(__CUDACC__) + // Work around the following bogus error in Sun Studio 11, by + // turning off the has_constraints function entirely: + // Error: complex expression not allowed in dependent template + // argument expression + inline no has_constraints_(...); +#else + template + inline yes has_constraints_(Model*, wrap_constraints* = 0); + inline no has_constraints_(...); +#endif +} + +// This would be called "detail::has_constraints," but it has a strong +// tendency to show up in error messages. +template +struct not_satisfied +{ + BOOST_STATIC_CONSTANT( + bool + , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) ); + typedef mpl::bool_ type; +}; + +}} // namespace boost::concepts::detail + +#endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP diff --git a/external/boost/concept/detail/msvc.hpp b/external/boost/concept/detail/msvc.hpp new file mode 100644 index 0000000..9fbd250 --- /dev/null +++ b/external/boost/concept/detail/msvc.hpp @@ -0,0 +1,114 @@ +// 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_CONCEPT_CHECK_MSVC_DWA2006429_HPP +# define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP + +# include +# include + +# ifdef BOOST_OLD_CONCEPT_SUPPORT +# include +# include +# endif + + +namespace boost { namespace concepts { + + +template +struct check +{ + virtual void failed(Model* x) + { + x->~Model(); + } +}; + +# ifndef BOOST_NO_PARTIAL_SPECIALIZATION +struct failed {}; +template +struct check +{ + virtual void failed(Model* x) + { + x->~Model(); + } +}; +# endif + +# ifdef BOOST_OLD_CONCEPT_SUPPORT + +namespace detail +{ + // No need for a virtual function here, since evaluating + // not_satisfied below will have already instantiated the + // constraints() member. + struct constraint {}; +} + +template +struct require + : mpl::if_c< + not_satisfied::value + , detail::constraint +# ifndef BOOST_NO_PARTIAL_SPECIALIZATION + , check +# else + , check +# endif + >::type +{}; + +# else + +template +struct require +# ifndef BOOST_NO_PARTIAL_SPECIALIZATION + : check +# else + : check +# endif +{}; + +# endif + +# if BOOST_WORKAROUND(BOOST_MSVC, == 1310) + +// +// The iterator library sees some really strange errors unless we +// do things this way. +// +template +struct require +{ + virtual void failed(Model*) + { + require(); + } +}; + +# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \ +enum \ +{ \ + BOOST_PP_CAT(boost_concept_check,__LINE__) = \ + sizeof(::boost::concepts::require) \ +} + +# else // Not vc-7.1 + +template +require +require_(void(*)(Model)); + +# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \ +enum \ +{ \ + BOOST_PP_CAT(boost_concept_check,__LINE__) = \ + sizeof(::boost::concepts::require_((ModelFnPtr)0)) \ +} + +# endif +}} + +#endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP diff --git a/external/boost/concept/usage.hpp b/external/boost/concept/usage.hpp new file mode 100644 index 0000000..21547c3 --- /dev/null +++ b/external/boost/concept/usage.hpp @@ -0,0 +1,44 @@ +// 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_CONCEPT_USAGE_DWA2006919_HPP +# define BOOST_CONCEPT_USAGE_DWA2006919_HPP + +# include +# include +# include + +namespace boost { namespace concepts { + +# if BOOST_WORKAROUND(__GNUC__, == 2) + +# define BOOST_CONCEPT_USAGE(model) ~model() + +# else + +template +struct usage_requirements +{ + ~usage_requirements() { ((Model*)0)->~Model(); } +}; + +# if BOOST_WORKAROUND(__GNUC__, <= 3) + +# define BOOST_CONCEPT_USAGE(model) \ + model(); /* at least 2.96 and 3.4.3 both need this :( */ \ + BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements)); \ + ~model() + +# else + +# define BOOST_CONCEPT_USAGE(model) \ + BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements)); \ + ~model() + +# endif + +# endif + +}} // namespace boost::concepts + +#endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP diff --git a/external/boost/concept_check.hpp b/external/boost/concept_check.hpp new file mode 100644 index 0000000..01b2f4e --- /dev/null +++ b/external/boost/concept_check.hpp @@ -0,0 +1,1083 @@ +// +// (C) Copyright Jeremy Siek 2000. +// Copyright 2002 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) +// +// 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 header. (JMaddock) +// + +// See http://www.boost.org/libs/concept_check for documentation. + +#ifndef BOOST_CONCEPT_CHECKS_HPP +# define BOOST_CONCEPT_CHECKS_HPP + +# include + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +namespace boost +{ + + // + // Backward compatibility + // + + template + inline void function_requires(Model* = 0) + { + BOOST_CONCEPT_ASSERT((Model)); + } + template inline void ignore_unused_variable_warning(T const&) {} + +# define BOOST_CLASS_REQUIRE(type_var, ns, concept) \ + BOOST_CONCEPT_ASSERT((ns::concept)) + +# define BOOST_CLASS_REQUIRE2(type_var1, type_var2, ns, concept) \ + BOOST_CONCEPT_ASSERT((ns::concept)) + +# define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept) \ + BOOST_CONCEPT_ASSERT((ns::concept)) + +# define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \ + BOOST_CONCEPT_ASSERT((ns::concept)) + + + // + // Begin concept definitions + // + BOOST_concept(Integer, (T)) + { + BOOST_CONCEPT_USAGE(Integer) + { + x.error_type_must_be_an_integer_type(); + } + private: + T x; + }; + + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; + template <> struct Integer {}; +# if defined(BOOST_HAS_LONG_LONG) + template <> struct Integer< ::boost::long_long_type> {}; + template <> struct Integer< ::boost::ulong_long_type> {}; +# elif defined(BOOST_HAS_MS_INT64) + template <> struct Integer<__int64> {}; + template <> struct Integer {}; +# endif + + BOOST_concept(SignedInteger,(T)) { + BOOST_CONCEPT_USAGE(SignedInteger) { + x.error_type_must_be_a_signed_integer_type(); + } + private: + T x; + }; + template <> struct SignedInteger { }; + template <> struct SignedInteger {}; + template <> struct SignedInteger {}; + template <> struct SignedInteger {}; +# if defined(BOOST_HAS_LONG_LONG) + template <> struct SignedInteger< ::boost::long_long_type> {}; +# elif defined(BOOST_HAS_MS_INT64) + template <> struct SignedInteger<__int64> {}; +# endif + + BOOST_concept(UnsignedInteger,(T)) { + BOOST_CONCEPT_USAGE(UnsignedInteger) { + x.error_type_must_be_an_unsigned_integer_type(); + } + private: + T x; + }; + + template <> struct UnsignedInteger {}; + template <> struct UnsignedInteger {}; + template <> struct UnsignedInteger {}; + template <> struct UnsignedInteger {}; +# if defined(BOOST_HAS_LONG_LONG) + template <> struct UnsignedInteger< ::boost::ulong_long_type> {}; +# elif defined(BOOST_HAS_MS_INT64) + template <> struct UnsignedInteger {}; +# endif + + //=========================================================================== + // Basic Concepts + + BOOST_concept(DefaultConstructible,(TT)) + { + BOOST_CONCEPT_USAGE(DefaultConstructible) { + TT a; // require default constructor + ignore_unused_variable_warning(a); + } + }; + + BOOST_concept(Assignable,(TT)) + { + BOOST_CONCEPT_USAGE(Assignable) { +#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL + a = b; // require assignment operator +#endif + const_constraints(b); + } + private: + void const_constraints(const TT& x) { +#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL + a = x; // const required for argument to assignment +#else + ignore_unused_variable_warning(x); +#endif + } + private: + TT a; + TT b; + }; + + + BOOST_concept(CopyConstructible,(TT)) + { + BOOST_CONCEPT_USAGE(CopyConstructible) { + TT a(b); // require copy constructor + TT* ptr = &a; // require address of operator + const_constraints(a); + ignore_unused_variable_warning(ptr); + } + private: + 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; + }; + +#if (defined _MSC_VER) +# pragma warning( push ) +# pragma warning( disable : 4510 ) // default constructor could not be generated +# pragma warning( disable : 4610 ) // object 'class' can never be instantiated - user-defined constructor required +#endif + // The SGI STL version of Assignable requires copy constructor and operator= + BOOST_concept(SGIAssignable,(TT)) + { + BOOST_CONCEPT_USAGE(SGIAssignable) { + TT c(a); +#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL + a = b; // require assignment operator +#endif + const_constraints(b); + ignore_unused_variable_warning(c); + } + private: + void const_constraints(const TT& x) { + TT c(x); +#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL + a = x; // const required for argument to assignment +#endif + ignore_unused_variable_warning(c); + } + TT a; + TT b; + }; +#if (defined _MSC_VER) +# pragma warning( pop ) +#endif + + BOOST_concept(Convertible,(X)(Y)) + { + BOOST_CONCEPT_USAGE(Convertible) { + Y y = x; + ignore_unused_variable_warning(y); + } + private: + 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 + void require_boolean_expr(const TT& t) { + bool x = t; + ignore_unused_variable_warning(x); + } + + BOOST_concept(EqualityComparable,(TT)) + { + BOOST_CONCEPT_USAGE(EqualityComparable) { + require_boolean_expr(a == b); + require_boolean_expr(a != b); + } + private: + TT a, b; + }; + + BOOST_concept(LessThanComparable,(TT)) + { + BOOST_CONCEPT_USAGE(LessThanComparable) { + require_boolean_expr(a < b); + } + private: + TT a, b; + }; + + // This is equivalent to SGI STL's LessThanComparable. + BOOST_concept(Comparable,(TT)) + { + BOOST_CONCEPT_USAGE(Comparable) { + require_boolean_expr(a < b); + require_boolean_expr(a > b); + require_boolean_expr(a <= b); + require_boolean_expr(a >= b); + } + private: + TT a, b; + }; + +#define BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME) \ + BOOST_concept(NAME, (First)(Second)) \ + { \ + BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); } \ + private: \ + bool constraints_() { return a OP b; } \ + First a; \ + Second b; \ + } + +#define BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(OP,NAME) \ + BOOST_concept(NAME, (Ret)(First)(Second)) \ + { \ + BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); } \ + private: \ + Ret constraints_() { return a OP b; } \ + First a; \ + Second b; \ + } + + BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOp); + BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, NotEqualOp); + BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, LessThanOp); + BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, LessEqualOp); + BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, GreaterThanOp); + BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, GreaterEqualOp); + + BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, PlusOp); + BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, TimesOp); + BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, DivideOp); + BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOp); + BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOp); + + //=========================================================================== + // Function Object Concepts + + BOOST_concept(Generator,(Func)(Return)) + { + BOOST_CONCEPT_USAGE(Generator) { test(is_void()); } + + private: + void test(boost::mpl::false_) + { + // Do we really want a reference here? + const Return& r = f(); + ignore_unused_variable_warning(r); + } + + void test(boost::mpl::true_) + { + f(); + } + + Func f; + }; + + BOOST_concept(UnaryFunction,(Func)(Return)(Arg)) + { + BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void()); } + + private: + void test(boost::mpl::false_) + { + f(arg); // "priming the pump" this way keeps msvc6 happy (ICE) + Return r = f(arg); + ignore_unused_variable_warning(r); + } + + void test(boost::mpl::true_) + { + f(arg); + } + +#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ + && BOOST_WORKAROUND(__GNUC__, > 3))) + // Declare a dummy construktor to make gcc happy. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // (warning: non-static reference "const double& boost::UnaryFunction::arg" + // in class without a constructor [-Wuninitialized]) + UnaryFunction(); +#endif + + Func f; + Arg arg; + }; + + BOOST_concept(BinaryFunction,(Func)(Return)(First)(Second)) + { + BOOST_CONCEPT_USAGE(BinaryFunction) { test(is_void()); } + private: + void test(boost::mpl::false_) + { + f(first,second); + Return r = f(first, second); // require operator() + (void)r; + } + + void test(boost::mpl::true_) + { + f(first,second); + } + +#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ + && BOOST_WORKAROUND(__GNUC__, > 3))) + // Declare a dummy constructor to make gcc happy. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // (warning: non-static reference "const double& boost::BinaryFunction::arg" + // in class without a constructor [-Wuninitialized]) + BinaryFunction(); +#endif + + Func f; + First first; + Second second; + }; + + BOOST_concept(UnaryPredicate,(Func)(Arg)) + { + BOOST_CONCEPT_USAGE(UnaryPredicate) { + require_boolean_expr(f(arg)); // require operator() returning bool + } + private: +#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ + && BOOST_WORKAROUND(__GNUC__, > 3))) + // Declare a dummy constructor to make gcc happy. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // (warning: non-static reference "const double& boost::UnaryPredicate::arg" + // in class without a constructor [-Wuninitialized]) + UnaryPredicate(); +#endif + + Func f; + Arg arg; + }; + + BOOST_concept(BinaryPredicate,(Func)(First)(Second)) + { + BOOST_CONCEPT_USAGE(BinaryPredicate) { + require_boolean_expr(f(a, b)); // require operator() returning bool + } + private: +#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ + && BOOST_WORKAROUND(__GNUC__, > 3))) + // Declare a dummy constructor to make gcc happy. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // (warning: non-static reference "const double& boost::BinaryPredicate::arg" + // in class without a constructor [-Wuninitialized]) + BinaryPredicate(); +#endif + Func f; + First a; + Second b; + }; + + // use this when functor is used inside a container class like std::set + BOOST_concept(Const_BinaryPredicate,(Func)(First)(Second)) + : BinaryPredicate + { + BOOST_CONCEPT_USAGE(Const_BinaryPredicate) { + const_constraints(f); + } + private: + void const_constraints(const Func& fun) { + // operator() must be a const member function + require_boolean_expr(fun(a, b)); + } +#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ + && BOOST_WORKAROUND(__GNUC__, > 3))) + // Declare a dummy constructor to make gcc happy. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // (warning: non-static reference "const double& boost::Const_BinaryPredicate::arg" + // in class without a constructor [-Wuninitialized]) + Const_BinaryPredicate(); +#endif + + Func f; + First a; + Second b; + }; + + BOOST_concept(AdaptableGenerator,(Func)(Return)) + : Generator + { + typedef typename Func::result_type result_type; + + BOOST_CONCEPT_USAGE(AdaptableGenerator) + { + BOOST_CONCEPT_ASSERT((Convertible)); + } + }; + + BOOST_concept(AdaptableUnaryFunction,(Func)(Return)(Arg)) + : UnaryFunction + { + typedef typename Func::argument_type argument_type; + typedef typename Func::result_type result_type; + + ~AdaptableUnaryFunction() + { + BOOST_CONCEPT_ASSERT((Convertible)); + BOOST_CONCEPT_ASSERT((Convertible)); + } + }; + + BOOST_concept(AdaptableBinaryFunction,(Func)(Return)(First)(Second)) + : BinaryFunction< + Func + , typename Func::result_type + , typename Func::first_argument_type + , typename Func::second_argument_type + > + { + 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; + + ~AdaptableBinaryFunction() + { + BOOST_CONCEPT_ASSERT((Convertible)); + BOOST_CONCEPT_ASSERT((Convertible)); + BOOST_CONCEPT_ASSERT((Convertible)); + } + }; + + BOOST_concept(AdaptablePredicate,(Func)(Arg)) + : UnaryPredicate + , AdaptableUnaryFunction + { + }; + + BOOST_concept(AdaptableBinaryPredicate,(Func)(First)(Second)) + : BinaryPredicate + , AdaptableBinaryFunction + { + }; + + //=========================================================================== + // Iterator Concepts + + BOOST_concept(InputIterator,(TT)) + : Assignable + , EqualityComparable + { + typedef typename boost::detail::iterator_traits::value_type value_type; + typedef typename boost::detail::iterator_traits::difference_type difference_type; + typedef typename boost::detail::iterator_traits::reference reference; + typedef typename boost::detail::iterator_traits::pointer pointer; + typedef typename boost::detail::iterator_traits::iterator_category iterator_category; + + BOOST_CONCEPT_USAGE(InputIterator) + { + BOOST_CONCEPT_ASSERT((SignedInteger)); + BOOST_CONCEPT_ASSERT((Convertible)); + + TT j(i); + (void)*i; // require dereference operator + ++j; // require preincrement operator + i++; // require postincrement operator + } + private: + TT i; + }; + + BOOST_concept(OutputIterator,(TT)(ValueT)) + : Assignable + { + BOOST_CONCEPT_USAGE(OutputIterator) { + + ++i; // require preincrement operator + i++; // require postincrement operator + *i++ = t; // require postincrement and assignment + } + private: + TT i, j; + ValueT t; + }; + + BOOST_concept(ForwardIterator,(TT)) + : InputIterator + { + BOOST_CONCEPT_USAGE(ForwardIterator) + { + BOOST_CONCEPT_ASSERT((Convertible< + BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category + , std::forward_iterator_tag + >)); + + typename InputIterator::reference r = *i; + ignore_unused_variable_warning(r); + } + + private: + TT i; + }; + + BOOST_concept(Mutable_ForwardIterator,(TT)) + : ForwardIterator + { + BOOST_CONCEPT_USAGE(Mutable_ForwardIterator) { + *i++ = *i; // require postincrement and assignment + } + private: + TT i; + }; + + BOOST_concept(BidirectionalIterator,(TT)) + : ForwardIterator + { + BOOST_CONCEPT_USAGE(BidirectionalIterator) + { + BOOST_CONCEPT_ASSERT((Convertible< + BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category + , std::bidirectional_iterator_tag + >)); + + --i; // require predecrement operator + i--; // require postdecrement operator + } + private: + TT i; + }; + + BOOST_concept(Mutable_BidirectionalIterator,(TT)) + : BidirectionalIterator + , Mutable_ForwardIterator + { + BOOST_CONCEPT_USAGE(Mutable_BidirectionalIterator) + { + *i-- = *i; // require postdecrement and assignment + } + private: + TT i; + }; + + BOOST_concept(RandomAccessIterator,(TT)) + : BidirectionalIterator + , Comparable + { + BOOST_CONCEPT_USAGE(RandomAccessIterator) + { + BOOST_CONCEPT_ASSERT((Convertible< + BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category + , std::random_access_iterator_tag + >)); + + 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 + } + + private: + TT a, b; + TT i, j; + typename boost::detail::iterator_traits::difference_type n; + }; + + BOOST_concept(Mutable_RandomAccessIterator,(TT)) + : RandomAccessIterator + , Mutable_BidirectionalIterator + { + BOOST_CONCEPT_USAGE(Mutable_RandomAccessIterator) + { + i[n] = *i; // require element access and assignment + } + private: + TT i; + typename boost::detail::iterator_traits::difference_type n; + }; + + //=========================================================================== + // Container s + + BOOST_concept(Container,(C)) + : Assignable + { + typedef typename C::value_type value_type; + typedef typename C::difference_type difference_type; + typedef typename C::size_type size_type; + typedef typename C::const_reference const_reference; + typedef typename C::const_pointer const_pointer; + typedef typename C::const_iterator const_iterator; + + BOOST_CONCEPT_USAGE(Container) + { + BOOST_CONCEPT_ASSERT((InputIterator)); + const_constraints(c); + } + + private: + void const_constraints(const C& cc) { + i = cc.begin(); + i = cc.end(); + n = cc.size(); + n = cc.max_size(); + b = cc.empty(); + } + C c; + bool b; + const_iterator i; + size_type n; + }; + + BOOST_concept(Mutable_Container,(C)) + : Container + { + typedef typename C::reference reference; + typedef typename C::iterator iterator; + typedef typename C::pointer pointer; + + BOOST_CONCEPT_USAGE(Mutable_Container) + { + BOOST_CONCEPT_ASSERT(( + Assignable)); + + BOOST_CONCEPT_ASSERT((InputIterator)); + + i = c.begin(); + i = c.end(); + c.swap(c2); + } + + private: + iterator i; + C c, c2; + }; + + BOOST_concept(ForwardContainer,(C)) + : Container + { + BOOST_CONCEPT_USAGE(ForwardContainer) + { + BOOST_CONCEPT_ASSERT(( + ForwardIterator< + typename ForwardContainer::const_iterator + >)); + } + }; + + BOOST_concept(Mutable_ForwardContainer,(C)) + : ForwardContainer + , Mutable_Container + { + BOOST_CONCEPT_USAGE(Mutable_ForwardContainer) + { + BOOST_CONCEPT_ASSERT(( + Mutable_ForwardIterator< + typename Mutable_ForwardContainer::iterator + >)); + } + }; + + BOOST_concept(ReversibleContainer,(C)) + : ForwardContainer + { + typedef typename + C::const_reverse_iterator + const_reverse_iterator; + + BOOST_CONCEPT_USAGE(ReversibleContainer) + { + BOOST_CONCEPT_ASSERT(( + BidirectionalIterator< + typename ReversibleContainer::const_iterator>)); + + BOOST_CONCEPT_ASSERT((BidirectionalIterator)); + + const_constraints(c); + } + private: + void const_constraints(const C& cc) + { + const_reverse_iterator i = cc.rbegin(); + i = cc.rend(); + } + C c; + }; + + BOOST_concept(Mutable_ReversibleContainer,(C)) + : Mutable_ForwardContainer + , ReversibleContainer + { + typedef typename C::reverse_iterator reverse_iterator; + + BOOST_CONCEPT_USAGE(Mutable_ReversibleContainer) + { + typedef typename Mutable_ForwardContainer::iterator iterator; + BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator)); + BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator)); + + reverse_iterator i = c.rbegin(); + i = c.rend(); + } + private: + C c; + }; + + BOOST_concept(RandomAccessContainer,(C)) + : ReversibleContainer + { + typedef typename C::size_type size_type; + typedef typename C::const_reference const_reference; + + BOOST_CONCEPT_USAGE(RandomAccessContainer) + { + BOOST_CONCEPT_ASSERT(( + RandomAccessIterator< + typename RandomAccessContainer::const_iterator + >)); + + const_constraints(c); + } + private: + void const_constraints(const C& cc) + { + const_reference r = cc[n]; + ignore_unused_variable_warning(r); + } + + C c; + size_type n; + }; + + BOOST_concept(Mutable_RandomAccessContainer,(C)) + : Mutable_ReversibleContainer + , RandomAccessContainer + { + private: + typedef Mutable_RandomAccessContainer self; + public: + BOOST_CONCEPT_USAGE(Mutable_RandomAccessContainer) + { + BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator)); + BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator)); + + typename self::reference r = c[i]; + ignore_unused_variable_warning(r); + } + + private: + typename Mutable_ReversibleContainer::size_type i; + C c; + }; + + // A Sequence is inherently mutable + BOOST_concept(Sequence,(S)) + : Mutable_ForwardContainer + // Matt Austern's book puts DefaultConstructible here, the C++ + // standard places it in Container --JGS + // ... so why aren't we following the standard? --DWA + , DefaultConstructible + { + BOOST_CONCEPT_USAGE(Sequence) + { + S + 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); + + typename Sequence::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); + } + private: + void const_constraints(const S& c) { + typename Sequence::const_reference r = c.front(); + ignore_unused_variable_warning(r); + } + + typename S::value_type t; + typename S::size_type n; + typename S::value_type* first, *last; + typename S::iterator p, q; + }; + + BOOST_concept(FrontInsertionSequence,(S)) + : Sequence + { + BOOST_CONCEPT_USAGE(FrontInsertionSequence) + { + c.push_front(t); + c.pop_front(); + } + private: + S c; + typename S::value_type t; + }; + + BOOST_concept(BackInsertionSequence,(S)) + : Sequence + { + BOOST_CONCEPT_USAGE(BackInsertionSequence) + { + c.push_back(t); + c.pop_back(); + typename BackInsertionSequence::reference r = c.back(); + ignore_unused_variable_warning(r); + const_constraints(c); + } + private: + void const_constraints(const S& cc) { + typename BackInsertionSequence::const_reference + r = cc.back(); + ignore_unused_variable_warning(r); + }; + S c; + typename S::value_type t; + }; + + BOOST_concept(AssociativeContainer,(C)) + : ForwardContainer + , DefaultConstructible + { + typedef typename C::key_type key_type; + typedef typename C::key_compare key_compare; + typedef typename C::value_compare value_compare; + typedef typename C::iterator iterator; + + BOOST_CONCEPT_USAGE(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); + BOOST_CONCEPT_ASSERT((BinaryPredicate)); + + typedef typename AssociativeContainer::value_type value_type_; + BOOST_CONCEPT_ASSERT((BinaryPredicate)); + } + + // Redundant with the base concept, but it helps below. + typedef typename C::const_iterator const_iterator; + private: + void const_constraints(const C& cc) + { + ci = cc.find(k); + n = cc.count(k); + cr = cc.equal_range(k); + } + + C c; + iterator i; + std::pair r; + const_iterator ci; + std::pair cr; + typename C::key_type k; + typename C::size_type n; + }; + + BOOST_concept(UniqueAssociativeContainer,(C)) + : AssociativeContainer + { + BOOST_CONCEPT_USAGE(UniqueAssociativeContainer) + { + C c(first, last); + + pos_flag = c.insert(t); + c.insert(first, last); + + ignore_unused_variable_warning(c); + } + private: + std::pair pos_flag; + typename C::value_type t; + typename C::value_type* first, *last; + }; + + BOOST_concept(MultipleAssociativeContainer,(C)) + : AssociativeContainer + { + BOOST_CONCEPT_USAGE(MultipleAssociativeContainer) + { + C c(first, last); + + pos = c.insert(t); + c.insert(first, last); + + ignore_unused_variable_warning(c); + ignore_unused_variable_warning(pos); + } + private: + typename C::iterator pos; + typename C::value_type t; + typename C::value_type* first, *last; + }; + + BOOST_concept(SimpleAssociativeContainer,(C)) + : AssociativeContainer + { + BOOST_CONCEPT_USAGE(SimpleAssociativeContainer) + { + typedef typename C::key_type key_type; + typedef typename C::value_type value_type; + BOOST_MPL_ASSERT((boost::is_same)); + } + }; + + BOOST_concept(PairAssociativeContainer,(C)) + : AssociativeContainer + { + BOOST_CONCEPT_USAGE(PairAssociativeContainer) + { + typedef typename C::key_type key_type; + typedef typename C::value_type value_type; + typedef typename C::mapped_type mapped_type; + typedef std::pair required_value_type; + BOOST_MPL_ASSERT((boost::is_same)); + } + }; + + BOOST_concept(SortedAssociativeContainer,(C)) + : AssociativeContainer + , ReversibleContainer + { + BOOST_CONCEPT_USAGE(SortedAssociativeContainer) + { + C + 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); + const_constraints(c); + } + + void const_constraints(const C& c) + { + kc = c.key_comp(); + vc = c.value_comp(); + + cp = c.upper_bound(k); + cp = c.lower_bound(k); + cr = c.equal_range(k); + } + + private: + typename C::key_compare kc; + typename C::value_compare vc; + typename C::value_type t; + typename C::key_type k; + typedef typename C::iterator iterator; + typedef typename C::const_iterator const_iterator; + + typedef SortedAssociativeContainer self; + iterator p; + const_iterator cp; + std::pair r; + std::pair cr; + typename C::value_type* first, *last; + }; + + // HashedAssociativeContainer + + BOOST_concept(Collection,(C)) + { + BOOST_CONCEPT_USAGE(Collection) + { + boost::function_requires >(); + boost::function_requires >(); + boost::function_requires >(); + const_constraints(c); + i = c.begin(); + i = c.end(); + c.swap(c); + } + + void const_constraints(const C& c) { + ci = c.begin(); + ci = c.end(); + n = c.size(); + b = c.empty(); + } + + private: + typedef typename C::value_type value_type; + typedef typename C::iterator iterator; + typedef typename C::const_iterator const_iterator; + typedef typename C::reference reference; + typedef typename C::const_reference const_reference; + // typedef typename C::pointer pointer; + typedef typename C::difference_type difference_type; + typedef typename C::size_type size_type; + + C c; + bool b; + iterator i; + const_iterator ci; + size_type n; + }; +} // namespace boost + +# include + +#endif // BOOST_CONCEPT_CHECKS_HPP + diff --git a/external/boost/config.hpp b/external/boost/config.hpp new file mode 100644 index 0000000..f37585e --- /dev/null +++ b/external/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 +#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 +#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) && defined(__cplusplus) +# include +#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 +#endif +// if we have a platform config, include it now: +#ifdef BOOST_PLATFORM_CONFIG +# include BOOST_PLATFORM_CONFIG +#endif + +// get config suffix code: +#include + +#endif // BOOST_CONFIG_HPP + + + + + + + + + + + diff --git a/external/boost/config/abi/borland_prefix.hpp b/external/boost/config/abi/borland_prefix.hpp new file mode 100644 index 0000000..3a0e5ae --- /dev/null +++ b/external/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 -a8 -Vx- -Ve- -b- -pc -Vmv -VC- -Vl- -w-8027 -w-8026 + + + diff --git a/external/boost/config/abi/borland_suffix.hpp b/external/boost/config/abi/borland_suffix.hpp new file mode 100644 index 0000000..940535f --- /dev/null +++ b/external/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/external/boost/config/abi/msvc_prefix.hpp b/external/boost/config/abi/msvc_prefix.hpp new file mode 100644 index 0000000..97f06cd --- /dev/null +++ b/external/boost/config/abi/msvc_prefix.hpp @@ -0,0 +1,22 @@ +// (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) + +// +// Boost binaries are built with the compiler's default ABI settings, +// if the user changes their default alignment in the VS IDE then their +// code will no longer be binary compatible with the bjam built binaries +// unless this header is included to force Boost code into a consistent ABI. +// +// Note that inclusion of this header is only necessary for libraries with +// separate source, header only libraries DO NOT need this as long as all +// translation units are built with the same options. +// +#if defined(_M_X64) +# pragma pack(push,16) +#else +# pragma pack(push,8) +#endif + + diff --git a/external/boost/config/abi/msvc_suffix.hpp b/external/boost/config/abi/msvc_suffix.hpp new file mode 100644 index 0000000..a64d783 --- /dev/null +++ b/external/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/external/boost/config/abi_prefix.hpp b/external/boost/config/abi_prefix.hpp new file mode 100644 index 0000000..3b13474 --- /dev/null +++ b/external/boost/config/abi_prefix.hpp @@ -0,0 +1,25 @@ +// abi_prefix header -------------------------------------------------------// + +// (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_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 + +// this must occur after all other includes and before any code appears: +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +#if defined( __BORLANDC__ ) +#pragma nopushoptwarn +#endif + diff --git a/external/boost/config/abi_suffix.hpp b/external/boost/config/abi_suffix.hpp new file mode 100644 index 0000000..9391616 --- /dev/null +++ b/external/boost/config/abi_suffix.hpp @@ -0,0 +1,27 @@ +// abi_sufffix header -------------------------------------------------------// + +// (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). + +// This header should be #included AFTER code that was preceded by a #include +// . + +#ifndef BOOST_CONFIG_ABI_PREFIX_HPP +# error Header boost/config/abi_suffix.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 + +#if defined( __BORLANDC__ ) +#pragma nopushoptwarn +#endif + + diff --git a/external/boost/config/auto_link.hpp b/external/boost/config/auto_link.hpp new file mode 100644 index 0000000..ad021f4 --- /dev/null +++ b/external/boost/config/auto_link.hpp @@ -0,0 +1,422 @@ +// (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 + * 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. +BOOST_AUTO_LINK_TAGGED: Specifies that we link to libraries built with the --layout=tagged option. + This is essentially the same as the default name-mangled version, but without + the compiler name and version, or the Boost version. Just the build options. + +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). + g debug/diagnostic runtime (release if not present). + y Python debug/diagnostic runtime (release 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 +# 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 +#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(BOOST_MSVC) && (BOOST_MSVC == 1500) + + // vc90: +# define BOOST_LIB_TOOLSET "vc90" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1600) + + // vc10: +# define BOOST_LIB_TOOLSET "vc100" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1700) + + // vc11: +# define BOOST_LIB_TOOLSET "vc110" + +#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))\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-gydp" +# elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-gdp" +# elif defined(_DEBUG)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-gydp" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# 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))\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-gydpn" +# elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-gdpn" +# elif defined(_DEBUG)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-gydpn" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# 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) && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-gyd" +# elif 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))\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-sgydp" +# elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-sgdp" +# elif defined(_DEBUG)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-sgydp" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# 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))\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-sgydpn" +# elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-sgdpn" +# elif defined(_DEBUG)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-sgydpn" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# 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)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-sgyd" +# elif 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 + +# if defined(BOOST_BORLAND_DEBUG)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-yd" +# elif defined(BOOST_BORLAND_DEBUG) +# define BOOST_LIB_RT_OPT "-d" +# elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT -y +# else +# define BOOST_LIB_RT_OPT +# endif + +# else + +# if defined(BOOST_BORLAND_DEBUG)\ + && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-syd" +# elif defined(BOOST_BORLAND_DEBUG) +# define BOOST_LIB_RT_OPT "-sd" +# elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) +# define BOOST_LIB_RT_OPT "-sy" +# 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) + +#ifdef BOOST_AUTO_LINK_TAGGED +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") +# ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") +# endif +#elif defined(BOOST_AUTO_LINK_NOMANGLE) +# 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 +#else +# 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 +#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 + diff --git a/external/boost/config/compiler/borland.hpp b/external/boost/config/compiler/borland.hpp new file mode 100644 index 0000000..680e87b --- /dev/null +++ b/external/boost/config/compiler/borland.hpp @@ -0,0 +1,285 @@ +// (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" +#endif + +// last known compiler version: +#if (__BORLANDC__ > 0x613) +//# 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 +#elif (__BORLANDC__ == 0x600) +# error "CBuilderX preview compiler is no longer supported" +#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 +// Variadic macros do not exist for C++ Builder versions 5 and below +#define BOOST_NO_VARIADIC_MACROS +# endif + +// Version 5.51 and below: +#if (__BORLANDC__ <= 0x551) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_DEDUCED_TYPENAME +// workaround for missing WCHAR_MAX/WCHAR_MIN: +#ifdef __cplusplus +#include +#include +#else +#include +#include +#endif // __cplusplus +#ifndef WCHAR_MAX +# define WCHAR_MAX 0xffff +#endif +#ifndef WCHAR_MIN +# define WCHAR_MIN 0 +#endif +#endif + +// Borland C++ Builder 6 and below: +#if (__BORLANDC__ <= 0x564) + +# if defined(NDEBUG) && defined(__cplusplus) + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#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 + +// Borland C++ Builder 2006 Update 2 and below: +#if (__BORLANDC__ <= 0x582) +# define BOOST_NO_SFINAE +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# define BOOST_NO_TEMPLATE_TEMPLATES + +# define BOOST_NO_PRIVATE_IN_AGGREGATE + +# 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 + +#if (__BORLANDC__ <= 0x613) // Beman has asked Alisdair for more info + // 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_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +# define BOOST_NO_USING_TEMPLATE +# define BOOST_SP_NO_SP_CONVERTIBLE + +// Temporary workaround +#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif + +// Borland C++ Builder 2008 and below: +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_NO_NESTED_FRIENDSHIP +# define BOOST_NO_TYPENAME_WITH_CTOR +#if (__BORLANDC__ < 0x600) +# define BOOST_ILLEGAL_CV_REFERENCES +#endif + +// +// Positive Feature detection +// +// Borland C++ Builder 2008 and below: +#if (__BORLANDC__ >= 0x599) +# pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax +#endif +// +// C++0x Macros: +// +#if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610) +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_DECLTYPE +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_STATIC_ASSERT +#else +# define BOOST_HAS_ALIGNOF +# define BOOST_HAS_CHAR16_T +# define BOOST_HAS_CHAR32_T +# define BOOST_HAS_DECLTYPE +# define BOOST_HAS_EXPLICIT_CONVERSION_OPS +# define BOOST_HAS_REF_QUALIFIER +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_STATIC_ASSERT +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS // UTF-8 still not supported +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +#if __BORLANDC__ >= 0x590 +# define BOOST_HAS_TR1_HASH + +# define BOOST_HAS_MACRO_USE_FACET +#endif + +// +// Post 0x561 we have long long and stdint.h: +#if __BORLANDC__ >= 0x561 +# ifndef __NO_LONG_LONG +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_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 ) +// 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 +#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) && !defined(BOOST_NO_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#if defined(__STRICT_ANSI__) +// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined +# define BOOST_SYMBOL_EXPORT +#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 + +// Borland did not implement value-initialization completely, as I reported +// in 2007, Borland Report 51854, "Value-initialization: POD struct should be +// zero-initialized", http://qc.embarcadero.com/wc/qcmain.aspx?d=51854 +// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues +// (Niels Dekker, LKEB, April 2010) +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION + +#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__) + + + + diff --git a/external/boost/config/compiler/clang.hpp b/external/boost/config/compiler/clang.hpp new file mode 100644 index 0000000..a183f34 --- /dev/null +++ b/external/boost/config/compiler/clang.hpp @@ -0,0 +1,121 @@ +// (C) Copyright Douglas Gregor 2010 +// +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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. + +// Clang compiler setup. + +#if __has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS) +#else +# define BOOST_NO_EXCEPTIONS +#endif + +#if !__has_feature(cxx_rtti) +# define BOOST_NO_RTTI +#endif + +#if defined(__int64) +# define BOOST_HAS_MS_INT64 +#endif + +#define BOOST_HAS_NRVO + +// Clang supports "long long" in all compilation modes. + +#if !__has_feature(cxx_auto_type) +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_AUTO_MULTIDECLARATIONS +#endif + +#if !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L) +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +#endif + +#if !__has_feature(cxx_constexpr) +# define BOOST_NO_CONSTEXPR +#endif + +#if !__has_feature(cxx_decltype) +# define BOOST_NO_DECLTYPE +#endif + +#define BOOST_NO_DECLTYPE_N3276 + +#if !__has_feature(cxx_defaulted_functions) +# define BOOST_NO_DEFAULTED_FUNCTIONS +#endif + +#if !__has_feature(cxx_deleted_functions) +# define BOOST_NO_DELETED_FUNCTIONS +#endif + +#if !__has_feature(cxx_explicit_conversions) +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#endif + +#if !__has_feature(cxx_default_function_template_args) +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#endif + +#if !__has_feature(cxx_generalized_initializers) +# define BOOST_NO_INITIALIZER_LISTS +#endif + +#if !__has_feature(cxx_lambdas) +# define BOOST_NO_LAMBDAS +#endif + +#if !__has_feature(cxx_noexcept) +# define BOOST_NO_NOEXCEPT +#endif + +#if !__has_feature(cxx_nullptr) +# define BOOST_NO_NULLPTR +#endif + +#if !__has_feature(cxx_raw_string_literals) +# define BOOST_NO_RAW_LITERALS +#endif + +#if !__has_feature(cxx_generalized_initializers) +# define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#endif + +#if !__has_feature(cxx_rvalue_references) +# define BOOST_NO_RVALUE_REFERENCES +#endif + +#if !__has_feature(cxx_strong_enums) +# define BOOST_NO_SCOPED_ENUMS +#endif + +#if !__has_feature(cxx_static_assert) +# define BOOST_NO_STATIC_ASSERT +#endif + +#if !__has_feature(cxx_alias_templates) +# define BOOST_NO_TEMPLATE_ALIASES +#endif + +#if !__has_feature(cxx_unicode_literals) +# define BOOST_NO_UNICODE_LITERALS +#endif + +#if !__has_feature(cxx_variadic_templates) +# define BOOST_NO_VARIADIC_TEMPLATES +#endif + +// Clang always supports variadic macros +// Clang always supports extern templates + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "Clang version " __clang_version__ +#endif + +// Macro used to identify the Clang compiler. +#define BOOST_CLANG 1 + diff --git a/external/boost/config/compiler/codegear.hpp b/external/boost/config/compiler/codegear.hpp new file mode 100644 index 0000000..f1887a0 --- /dev/null +++ b/external/boost/config/compiler/codegear.hpp @@ -0,0 +1,178 @@ +// (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. + +// CodeGear C++ compiler setup: + +#if !defined( BOOST_WITH_CODEGEAR_WARNINGS ) +// these warnings occur frequently in optimized template code +# pragma warn -8004 // var assigned value, but never used +# pragma warn -8008 // condition always true/false +# pragma warn -8066 // dead code can never execute +# pragma warn -8104 // static members with ctors not threadsafe +# pragma warn -8105 // reference member in class without ctors +#endif +// +// versions check: +// last known and checked version is 0x621 +#if (__CODEGEARC__ > 0x621) +# 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 + +// CodeGear C++ Builder 2009 +#if (__CODEGEARC__ <= 0x613) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_PRIVATE_IN_AGGREGATE +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE + // 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_SP_NO_SP_CONVERTIBLE +#endif + +// CodeGear C++ Builder 2010 +#if (__CODEGEARC__ <= 0x621) +# define BOOST_NO_TYPENAME_WITH_CTOR // Cannot use typename keyword when making temporaries of a dependant type +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_NESTED_FRIENDSHIP // TC1 gives nested classes access rights as any other member +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +// Temporary hack, until specific MPL preprocessed headers are generated +# define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +// CodeGear has not yet completely implemented value-initialization, for +// example for array types, as I reported in 2010: Embarcadero Report 83751, +// "Value-initialization: arrays should have each element value-initialized", +// http://qc.embarcadero.com/wc/qcmain.aspx?d=83751 +// Last checked version: Embarcadero C++ 6.21 +// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues +// (Niels Dekker, LKEB, April 2010) +# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION + +# if defined(NDEBUG) && defined(__cplusplus) + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#endif +// +// C++0x macros: +// +#if (__CODEGEARC__ <= 0x620) +#define BOOST_NO_STATIC_ASSERT +#else +#define BOOST_HAS_STATIC_ASSERT +#endif +#define BOOST_HAS_CHAR16_T +#define BOOST_HAS_CHAR32_T +#define BOOST_HAS_LONG_LONG +// #define BOOST_HAS_ALIGNOF +#define BOOST_HAS_DECLTYPE +#define BOOST_HAS_EXPLICIT_CONVERSION_OPS +// #define BOOST_HAS_RVALUE_REFS +#define BOOST_HAS_SCOPED_ENUM +// #define BOOST_HAS_STATIC_ASSERT +#define BOOST_HAS_STD_TYPE_TRAITS + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +// +// TR1 macros: +// +#define BOOST_HAS_TR1_HASH +#define BOOST_HAS_TR1_TYPE_TRAITS +#define BOOST_HAS_TR1_UNORDERED_MAP +#define BOOST_HAS_TR1_UNORDERED_SET + +#define BOOST_HAS_MACRO_USE_FACET + +#define BOOST_NO_INITIALIZER_LISTS + +// On non-Win32 platforms let the platform config figure this out: +#ifdef _WIN32 +# define BOOST_HAS_STDINT_H +#endif + +// +// __int64: +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_MS_INT64 +#endif +// +// check for exception handling support: +// +#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#if defined(__STRICT_ANSI__) +// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined +# define BOOST_SYMBOL_EXPORT +#endif +// +// ABI fixing headers: +// +#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 +// +// Disable Win32 support in ANSI mode: +// +# pragma defineonoption BOOST_DISABLE_WIN32 -A +// +// 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 "CodeGear C++ version " BOOST_STRINGIZE(__CODEGEARC__) + diff --git a/external/boost/config/compiler/comeau.hpp b/external/boost/config/compiler/comeau.hpp new file mode 100644 index 0000000..278222d --- /dev/null +++ b/external/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/external/boost/config/compiler/common_edg.hpp b/external/boost/config/compiler/common_edg.hpp new file mode 100644 index 0000000..10333ad --- /dev/null +++ b/external/boost/config/compiler/common_edg.hpp @@ -0,0 +1,101 @@ +// (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) && !defined(BOOST_NO_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +# if !defined(__NO_LONG_LONG) +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif + +// +// C++0x features +// +// See above for BOOST_NO_LONG_LONG +// +#if (__EDG_VERSION__ < 310) +# define BOOST_NO_EXTERN_TEMPLATE +#endif +#if (__EDG_VERSION__ <= 310) +// No support for initializer lists +# define BOOST_NO_INITIALIZER_LISTS +#endif +#if (__EDG_VERSION__ < 400) +# define BOOST_NO_VARIADIC_MACROS +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +#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/external/boost/config/compiler/compaq_cxx.hpp b/external/boost/config/compiler/compaq_cxx.hpp new file mode 100644 index 0000000..b44486c --- /dev/null +++ b/external/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. + +// Tru64 C++ compiler setup (now HP): + +#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER) + +#include "boost/config/compiler/common_edg.hpp" + +// +// versions check: +// Nothing to do here? + + + diff --git a/external/boost/config/compiler/cray.hpp b/external/boost/config/compiler/cray.hpp new file mode 100644 index 0000000..ad2eeaf --- /dev/null +++ b/external/boost/config/compiler/cray.hpp @@ -0,0 +1,61 @@ +// (C) Copyright John Maddock 2011. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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 "Cray C version " BOOST_STRINGIZE(_RELEASE) + +#if _RELEASE < 7 +# error "Boost is not configured for Cray compilers prior to version 7, please try the configure script." +#endif + +// +// Check this is a recent EDG based compiler, otherwise we don't support it here: +// +#ifndef __EDG_VERSION__ +# error "Unsupported Cray compiler, please try running the configure script." +#endif + +#include "boost/config/compiler/common_edg.hpp" + +// +// Cray peculiarities, probably version 7 specific: +// +#undef BOOST_NO_AUTO_DECLARATIONS +#undef BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_HAS_NRVO +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_HAS_NRVO +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_NULLPTR +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_LAMBDAS +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DECLTYPE +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CHAR16_T +//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +#define BOOST_MATH_DISABLE_STD_FPCLASSIFY +//#define BOOST_HAS_FPCLASSIFY + +#define BOOST_SP_USE_PTHREADS +#define BOOST_AC_USE_PTHREADS + diff --git a/external/boost/config/compiler/digitalmars.hpp b/external/boost/config/compiler/digitalmars.hpp new file mode 100644 index 0000000..ed92306 --- /dev/null +++ b/external/boost/config/compiler/digitalmars.hpp @@ -0,0 +1,101 @@ +// 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 + +#if (__DMC__ >= 0x847) +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_LOG1P +#endif + +// +// Is this really the best way to detect whether the std lib is in namespace std? +// +#ifdef __cplusplus +#include +#endif +#if !defined(__STL_IMPORT_VENDOR_CSTD) && !defined(_STLP_IMPORT_VENDOR_CSTD) +# define BOOST_NO_STDC_NAMESPACE +#endif + + +// check for exception handling support: +#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif + +// +// C++0x features +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +#if (__DMC__ < 0x812) +#define BOOST_NO_VARIADIC_MACROS +#endif + +#if __DMC__ < 0x800 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is ...: +#if (__DMC__ > 0x848) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/external/boost/config/compiler/gcc.hpp b/external/boost/config/compiler/gcc.hpp new file mode 100644 index 0000000..5a69cb4 --- /dev/null +++ b/external/boost/config/compiler/gcc.hpp @@ -0,0 +1,252 @@ +// (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 +# define BOOST_NO_EXTERN_TEMPLATE +// Variadic macros do not exist for gcc versions before 3.0 +# define BOOST_NO_VARIADIC_MACROS +#elif __GNUC__ == 3 +# if defined (__PATHSCALE__) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_IS_ABSTRACT +# endif + // + // 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 +# define BOOST_NO_EXTERN_TEMPLATE +#endif +#if __GNUC__ < 4 +// +// All problems to gcc-3.x and earlier here: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# ifdef __OPEN64__ +# define BOOST_NO_IS_ABSTRACT +# endif +#endif + +#if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 ) +// Previous versions of GCC did not completely implement value-initialization: +// GCC Bug 30111, "Value-initialization of POD base class doesn't initialize +// members", reported by Jonathan Wakely in 2006, +// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111 (fixed for GCC 4.4) +// GCC Bug 33916, "Default constructor fails to initialize array members", +// reported by Michael Elizabeth Chastain in 2007, +// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 (fixed for GCC 4.2.4) +// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +#endif + +#if !defined(__EXCEPTIONS) && !defined(BOOST_NO_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 + +// +// Dynamic shared object (DSO) and dynamic-link library (DLL) support +// +#if __GNUC__ >= 4 +# if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(__CYGWIN__) + // All Win32 development environments, including 64-bit Windows and MinGW, define + // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment, + // so does not define _WIN32 or its variants. +# define BOOST_HAS_DECLSPEC +# define BOOST_SYMBOL_EXPORT __attribute__((dllexport)) +# define BOOST_SYMBOL_IMPORT __attribute__((dllimport)) +# else +# define BOOST_SYMBOL_EXPORT __attribute__((visibility("default"))) +# define BOOST_SYMBOL_IMPORT +# endif +# define BOOST_SYMBOL_VISIBLE __attribute__((visibility("default"))) +#else +// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined +# define BOOST_SYMBOL_EXPORT +#endif + +// +// RTTI and typeinfo detection is possible post gcc-4.3: +// +#if __GNUC__ * 100 + __GNUC_MINOR__ >= 403 +# ifndef __GXX_RTTI +# ifndef BOOST_NO_TYPEID +# define BOOST_NO_TYPEID +# endif +# ifndef BOOST_NO_RTTI +# define BOOST_NO_RTTI +# endif +# endif +#endif + +// C++0x features not implemented in any GCC version +// +#define BOOST_NO_TEMPLATE_ALIASES + +// C++0x features in 4.3.n and later +// +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && defined(__GXX_EXPERIMENTAL_CXX0X__) +// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are +// passed on the command line, which in turn defines +// __GXX_EXPERIMENTAL_CXX0X__. +# define BOOST_HAS_DECLTYPE +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_STATIC_ASSERT +# define BOOST_HAS_VARIADIC_TMPL +#else +# define BOOST_NO_DECLTYPE +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_STATIC_ASSERT + +// Variadic templates compiler: +// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html +# if defined(__VARIADIC_TEMPLATES) || (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4) && defined(__GXX_EXPERIMENTAL_CXX0X__)) +# define BOOST_HAS_VARIADIC_TMPL +# else +# define BOOST_NO_VARIADIC_TEMPLATES +# endif +#endif + +// C++0x features in 4.4.n and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_DEFAULTED_FUNCTIONS +# define BOOST_NO_DELETED_FUNCTIONS +#endif + +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +# define BOOST_NO_SFINAE_EXPR +#endif + +// C++0x features in 4.5.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_LAMBDAS +# define BOOST_NO_RAW_LITERALS +# define BOOST_NO_UNICODE_LITERALS +#endif + +// C++0x features in 4.5.1 and later +// +#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40501) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_SCOPED_ENUMS before 4.5.1 +// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064 +# define BOOST_NO_SCOPED_ENUMS +#endif + +// C++0x features in 4.6.n and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#endif + +// C++0x features not supported at all yet +// +#define BOOST_NO_DECLTYPE_N3276 + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "GNU C++ version " __VERSION__ +#endif + +// ConceptGCC compiler: +// http://www.generic-programming.org/software/ConceptGCC/ +#ifdef __GXX_CONCEPTS__ +# define BOOST_HAS_CONCEPTS +# define BOOST_COMPILER "ConceptGCC version " __VERSION__ +#endif + +// 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.6 (Pre-release): +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 6)) +# 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/external/boost/config/compiler/gcc_xml.hpp b/external/boost/config/compiler/gcc_xml.hpp new file mode 100644 index 0000000..61dcedc --- /dev/null +++ b/external/boost/config/compiler/gcc_xml.hpp @@ -0,0 +1,59 @@ +// (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 + +// C++0x features: +// +# define BOOST_NO_CONSTEXPR +# define BOOST_NO_NULLPTR +# define BOOST_NO_TEMPLATE_ALIASES +# define BOOST_NO_DECLTYPE +# define BOOST_NO_DECLTYPE_N3276 +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_VARIADIC_TEMPLATES +# define BOOST_NO_VARIADIC_MACROS +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_DEFAULTED_FUNCTIONS +# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_SFINAE_EXPR +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_LAMBDAS +# define BOOST_NO_RAW_LITERALS +# define BOOST_NO_UNICODE_LITERALS +# define BOOST_NO_NOEXCEPT +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ + + diff --git a/external/boost/config/compiler/greenhills.hpp b/external/boost/config/compiler/greenhills.hpp new file mode 100644 index 0000000..038b6b2 --- /dev/null +++ b/external/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/external/boost/config/compiler/hp_acc.hpp b/external/boost/config/compiler/hp_acc.hpp new file mode 100644 index 0000000..0d73b28 --- /dev/null +++ b/external/boost/config/compiler/hp_acc.hpp @@ -0,0 +1,138 @@ +// (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 - 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) + +// See http://www.boost.org for most recent version. + +// HP aCC C++ compiler setup: + +#if 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 <= 38000) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#if (__HP_aCC > 50000) && (__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 + +// This macro should not be defined when compiling in strict ansi +// mode, but, currently, we don't have the ability to determine +// what standard mode we are compiling with. Some future version +// of aCC6 compiler will provide predefined macros reflecting the +// compilation options, including the standard mode. +#if (__HP_aCC >= 60000) || ((__HP_aCC > 38000) && defined(__hpxstd98)) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#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 + +// +// Extended checks for supporting aCC on PA-RISC +#if __HP_aCC > 30000 && __HP_aCC < 50000 +# if __HP_aCC < 38000 + // versions prior to version A.03.80 not supported +# error "Compiler version not supported - version A.03.80 or higher is required" +# elif !defined(__hpxstd98) + // must compile using the option +hpxstd98 with version A.03.80 and above +# error "Compiler option '+hpxstd98' is required for proper support" +# endif //PA-RISC +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if !defined(__EDG__) + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +/* + See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and + https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443436 +*/ + +#if (__HP_aCC < 62500) || !defined(HP_CXX0x_SOURCE) + #define BOOST_NO_VARIADIC_MACROS +#endif + +#endif + +// +// last known and checked version for HP-UX/ia64 is 61300 +// last known and checked version for PA-RISC is 38000 +#if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98))) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/external/boost/config/compiler/intel.hpp b/external/boost/config/compiler/intel.hpp new file mode 100644 index 0000000..a1704a4 --- /dev/null +++ b/external/boost/config/compiler/intel.hpp @@ -0,0 +1,270 @@ +// (C) Copyright John Maddock 2001-8. +// (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 + +// Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x' +#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) +# define BOOST_INTEL_STDCXX0X +#endif +#if defined(_MSC_VER) && (_MSC_VER >= 1600) +# define BOOST_INTEL_STDCXX0X +#endif + +#ifdef BOOST_INTEL_STDCXX0X +#define BOOST_COMPILER "Intel C++ C++0x mode version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION) +#else +#define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION) +#endif +#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 +#if (defined(__GNUC__) && (__GNUC__ < 4)) || defined(_WIN32) || (BOOST_INTEL_CXX_VERSION <= 1200) +// GCC or VC emulation: +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#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: +// +#ifdef __cplusplus +#if defined(BOOST_NO_INTRINSIC_WCHAR_T) +#include +template< typename T > struct assert_no_intrinsic_wchar_t; +template<> struct assert_no_intrinsic_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::type assert_no_intrinsic_wchar_t_; +#else +template< typename T > struct assert_intrinsic_wchar_t; +template<> struct assert_intrinsic_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 {}; +#endif +#endif + +#if defined(_MSC_VER) && (_MSC_VER+0 >= 1000) +# if _MSC_VER >= 1200 +# define BOOST_HAS_MS_INT64 +# endif +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#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 + +// Intel on MacOS requires +#if defined(__APPLE__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +// Intel on Altix Itanium +#if defined(__itanium__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +// +// An attempt to value-initialize a pointer-to-member may trigger an +// internal error on Intel <= 11.1 (last checked version), as was +// reported by John Maddock, Intel support issue 589832, May 2010. +// Moreover, according to test results from Huang-Vista-x86_32_intel, +// intel-vc9-win-11.1 may leave a non-POD array uninitialized, in some +// cases when it should be value-initialized. +// (Niels Dekker, LKEB, May 2010) +// Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression). +#if defined(__INTEL_COMPILER) +# if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999) +# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +# endif +#endif + +// +// Dynamic shared object (DSO) and dynamic-link library (DLL) support +// +#if defined(__GNUC__) && (__GNUC__ >= 4) +# define BOOST_SYMBOL_EXPORT __attribute__((visibility("default"))) +# define BOOST_SYMBOL_IMPORT +# define BOOST_SYMBOL_VISIBLE __attribute__((visibility("default"))) +#endif +// +// C++0x features +// - ICC added static_assert in 11.0 (first version with C++0x support) +// +#if defined(BOOST_INTEL_STDCXX0X) +# undef BOOST_NO_STATIC_ASSERT +// +// These pass our test cases, but aren't officially supported according to: +// http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/ +// +//# undef BOOST_NO_LAMBDAS +//# undef BOOST_NO_DECLTYPE +//# undef BOOST_NO_AUTO_DECLARATIONS +//# undef BOOST_NO_AUTO_MULTIDECLARATIONS +#endif + +#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION >= 1200) +//# undef BOOST_NO_RVALUE_REFERENCES // Enabling this breaks Filesystem and Exception libraries +//# undef BOOST_NO_SCOPED_ENUMS // doesn't really work!! +# undef BOOST_NO_DELETED_FUNCTIONS +# undef BOOST_NO_DEFAULTED_FUNCTIONS +# undef BOOST_NO_LAMBDAS +# undef BOOST_NO_DECLTYPE +# undef BOOST_NO_AUTO_DECLARATIONS +# undef BOOST_NO_AUTO_MULTIDECLARATIONS +#endif + +// icl Version 12.1.0.233 Build 20110811 and possibly some other builds +// had an incorrect __INTEL_COMPILER value of 9999. Intel say this has been fixed. +#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION > 1200) +# undef BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# undef BOOST_NO_NULLPTR +# undef BOOST_NO_RVALUE_REFERENCES +# undef BOOST_NO_SFINAE_EXPR +# undef BOOST_NO_TEMPLATE_ALIASES +# undef BOOST_NO_VARIADIC_TEMPLATES + +// http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/ +// continues to list scoped enum support as "Partial" +//# undef BOOST_NO_SCOPED_ENUMS +#endif + +#if defined(_MSC_VER) && (_MSC_VER <= 1700) +// +// Although the Intel compiler is capable of supporting these, it appears not to in MSVC compatibility mode: +// +# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_VARIADIC_TEMPLATES +# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_DEFAULTED_FUNCTIONS +# define BOOST_NO_TEMPLATE_ALIASES +#endif + +#if (BOOST_INTEL_CXX_VERSION < 1200) +// +// fenv.h appears not to work with Intel prior to 12.0: +// +# define BOOST_NO_FENV_H +#endif + +// +// last known and checked version: +#if (BOOST_INTEL_CXX_VERSION > 1200) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# elif defined(_MSC_VER) +// +// We don't emit this warning any more, since we have so few +// defect macros set anyway (just the one). +// +//# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + diff --git a/external/boost/config/compiler/kai.hpp b/external/boost/config/compiler/kai.hpp new file mode 100644 index 0000000..2337e6a --- /dev/null +++ b/external/boost/config/compiler/kai.hpp @@ -0,0 +1,33 @@ +// (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 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) && !defined(BOOST_NO_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +// +// 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/external/boost/config/compiler/metrowerks.hpp b/external/boost/config/compiler/metrowerks.hpp new file mode 100644 index 0000000..02baecd --- /dev/null +++ b/external/boost/config/compiler/metrowerks.hpp @@ -0,0 +1,142 @@ +// (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__ <= 0x3207) || !defined(BOOST_STRICT_CONFIG) // 9.6 +# 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) && !defined(BOOST_NO_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 +# elif __MWERKS__ == 0x3207 +# define BOOST_COMPILER_VERSION 9.6 +# else +# define BOOST_COMPILER_VERSION __MWERKS__ +# endif +#else +# define BOOST_COMPILER_VERSION __MWERKS__ +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if __MWERKS__ > 0x3206 && __option(rvalue_refs) +# define BOOST_HAS_RVALUE_REFS +#else +# define BOOST_NO_RVALUE_REFERENCES +#endif +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_VARIADIC_MACROS +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +#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/external/boost/config/compiler/mpw.hpp b/external/boost/config/compiler/mpw.hpp new file mode 100644 index 0000000..45e1aa4 --- /dev/null +++ b/external/boost/config/compiler/mpw.hpp @@ -0,0 +1,84 @@ +// (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 + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_VARIADIC_MACROS +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +// +// 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/external/boost/config/compiler/nvcc.hpp b/external/boost/config/compiler/nvcc.hpp new file mode 100644 index 0000000..03203fb --- /dev/null +++ b/external/boost/config/compiler/nvcc.hpp @@ -0,0 +1,28 @@ +// (C) Copyright Eric Jourdanneau, Joel Falcou 2010 +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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. + +// NVIDIA CUDA C++ compiler setup + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "NVIDIA CUDA C++ Compiler" +#endif + +// NVIDIA Specific support +// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device +#define BOOST_GPU_ENABLED __host__ __device__ + +// Boost support macro for NVCC +// NVCC Basically behaves like some flavor of MSVC6 + some specific quirks +#ifdef __GNUC__ + +#include + +#elif defined(_MSC_VER) + +#include + +#endif diff --git a/external/boost/config/compiler/pathscale.hpp b/external/boost/config/compiler/pathscale.hpp new file mode 100644 index 0000000..94e4472 --- /dev/null +++ b/external/boost/config/compiler/pathscale.hpp @@ -0,0 +1,80 @@ +// (C) Copyright Bryce Lelbach 2011 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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. + +// PathScale EKOPath C++ Compiler + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "PathScale EKOPath C++ Compiler version " __PATHSCALE__ +#endif + +#if __PATHCC__ >= 4 +# define BOOST_MSVC6_MEMBER_TEMPLATES +# define BOOST_HAS_UNISTD_H +# define BOOST_HAS_STDINT_H +# define BOOST_HAS_SIGACTION +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_THREADS +# define BOOST_HAS_PTHREADS +# define BOOST_HAS_PTHREAD_YIELD +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +# define BOOST_HAS_NRVO +# define BOOST_HAS_NL_TYPES_H +# define BOOST_HAS_NANOSLEEP +# define BOOST_HAS_LONG_LONG +# define BOOST_HAS_LOG1P +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_EXPM1 +# define BOOST_HAS_DIRENT_H +# define BOOST_HAS_CLOCK_GETTIME +# define BOOST_NO_VARIADIC_TEMPLATES +# define BOOST_NO_UNICODE_LITERALS +# define BOOST_NO_TEMPLATE_ALIASES +# define BOOST_NO_STD_UNORDERED +# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_SFINAE_EXPR +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_RAW_LITERALS +# define BOOST_NO_NULLPTR +# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_NOEXCEPT +# define BOOST_NO_LAMBDAS +# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_DEFAULTED_FUNCTIONS +# define BOOST_NO_DECLTYPE +# define BOOST_NO_DECLTYPE_N3276 +# define BOOST_NO_CONSTEXPR +# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +# define BOOST_NO_CHAR32_T +# define BOOST_NO_CHAR16_T +# define BOOST_NO_AUTO_MULTIDECLARATIONS +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CHRONO +#endif + diff --git a/external/boost/config/compiler/pgi.hpp b/external/boost/config/compiler/pgi.hpp new file mode 100644 index 0000000..0ae8af5 --- /dev/null +++ b/external/boost/config/compiler/pgi.hpp @@ -0,0 +1,77 @@ +// (C) Copyright Noel Belcourt 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) + +// See http://www.boost.org for most recent version. + +// PGI C++ compiler setup: + +#define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__ +#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// + +#if __PGIC__ >= 10 + +// options requested by configure --enable-test +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_NRVO +#define BOOST_HAS_LONG_LONG + +// options --enable-test wants undefined +#undef BOOST_NO_STDC_NAMESPACE +#undef BOOST_NO_EXCEPTION_STD_NAMESPACE +#undef BOOST_DEDUCED_TYPENAME + +#elif __PGIC__ >= 7 + +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_SWPRINTF +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_AUTO_DECLARATIONS + +#else + +# error "Pgi compiler not configured - please reconfigure" + +#endif +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_VARIADIC_MACROS +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +// +// version check: +// probably nothing to do here? + diff --git a/external/boost/config/compiler/sgi_mipspro.hpp b/external/boost/config/compiler/sgi_mipspro.hpp new file mode 100644 index 0000000..9068831 --- /dev/null +++ b/external/boost/config/compiler/sgi_mipspro.hpp @@ -0,0 +1,29 @@ +// (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 +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP + +#undef BOOST_NO_SWPRINTF +#undef BOOST_DEDUCED_TYPENAME + +// +// version check: +// probably nothing to do here? + + diff --git a/external/boost/config/compiler/sunpro_cc.hpp b/external/boost/config/compiler/sunpro_cc.hpp new file mode 100644 index 0000000..eaf6c74 --- /dev/null +++ b/external/boost/config/compiler/sunpro_cc.hpp @@ -0,0 +1,147 @@ +// (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 Ganssauge 04 Mar 2002) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // SunPro 5.3 has better support for partial specialization, + // but breaks when compiling std::less > + // (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 + +# if (__SUNPRO_CC <= 0x5100) + // Sun 5.10 may not correctly value-initialize objects of + // some user defined types, as was reported in April 2010 + // (CR 6947016), and confirmed by Steve Clamage. + // (Niels Dekker, LKEB, May 2010). +# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +# endif + +// +// Dynamic shared object (DSO) and dynamic-link library (DLL) support +// +#if __SUNPRO_CC > 0x500 +# define BOOST_SYMBOL_EXPORT __global +# define BOOST_SYMBOL_IMPORT __global +# define BOOST_SYMBOL_VISIBLE __global +#endif + + + +// +// Issues that effect all known versions: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_ADL_BARRIER + +// +// C++0x features +// +# define BOOST_HAS_LONG_LONG + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_VARIADIC_MACROS +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX + +// +// Version +// + +#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 0x590: +#if (__SUNPRO_CC > 0x590) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff --git a/external/boost/config/compiler/vacpp.hpp b/external/boost/config/compiler/vacpp.hpp new file mode 100644 index 0000000..b0407aa --- /dev/null +++ b/external/boost/config/compiler/vacpp.hpp @@ -0,0 +1,120 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Toon Knapen 2001 - 2003. +// (C) Copyright Lie-Quan Lee 2001. +// (C) Copyright Markus Schoepflin 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 + +#if (__IBMCPP__ <= 1110) +// XL C++ V11.1 and earlier versions may not always value-initialize +// a temporary object T(), when T is a non-POD aggregate class type. +// Michael Wong (IBM Canada Ltd) has confirmed this issue and gave it +// high priority. -- Niels Dekker (LKEB), May 2010. +# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +#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 1110: +#if (__IBMCPP__ > 1110) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + +// Some versions of the compiler have issues with default arguments on partial specializations +#if __IBMCPP__ <= 1010 +#define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if ! __IBMCPP_AUTO_TYPEDEDUCTION +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_AUTO_MULTIDECLARATIONS +#endif +#if ! __IBMCPP_UTF_LITERAL__ +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +#endif +#define BOOST_NO_CONSTEXPR +#if ! __IBMCPP_DECLTYPE +# define BOOST_NO_DECLTYPE +#else +# define BOOST_HAS_DECLTYPE +#endif +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#if ! __IBMCPP_EXTERN_TEMPLATE +# define BOOST_NO_EXTERN_TEMPLATE +#endif +#if ! __IBMCPP_VARIADIC_TEMPLATES +// not enabled separately at this time +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#endif +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#if ! __IBMCPP_STATIC_ASSERT +# define BOOST_NO_STATIC_ASSERT +#endif +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#if ! __IBMCPP_VARIADIC_TEMPLATES +# define BOOST_NO_VARIADIC_TEMPLATES +#endif +#if ! __C99_MACRO_WITH_VA_ARGS +# define BOOST_NO_VARIADIC_MACROS +#endif + + + diff --git a/external/boost/config/compiler/visualc.hpp b/external/boost/config/compiler/visualc.hpp new file mode 100644 index 0000000..1a13f0d --- /dev/null +++ b/external/boost/config/compiler/visualc.hpp @@ -0,0 +1,287 @@ +// (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 + +#if _MSC_FULL_VER > 100000000 +# define BOOST_MSVC_FULL_VER _MSC_FULL_VER +#else +# define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10) +#endif + +// 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 + +# if BOOST_MSVC == 1202 +# define BOOST_NO_STD_TYPEINFO +# endif + + // disable min/max macro defines on vc6: + // +#endif + +/// Visual Studio has no fenv.h +#define BOOST_NO_FENV_H + +#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 +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +// 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 +// Our extern template tests also fail for this compiler: +# define BOOST_NO_EXTERN_TEMPLATE +// Variadic macros do not exist for VC7.1 and lower +# define BOOST_NO_VARIADIC_MACROS +#endif + +#if defined(UNDER_CE) +// Windows CE does not have a conforming signature for swprintf +# define BOOST_NO_SWPRINTF +#endif + +#if _MSC_VER <= 1400 // 1400 == VC++ 8.0 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +#if _MSC_VER == 1500 // 1500 == VC++ 9.0 + // A bug in VC9: +# define BOOST_NO_ADL_BARRIER +#endif + + +#if (_MSC_VER <= 1600) +// MSVC (including the latest checked version) has not yet completely +// implemented value-initialization, as is reported: +// "VC++ does not value-initialize members of derived classes without +// user-declared constructor", reported in 2009 by Sylvester Hesp: +// https://connect.microsoft.com/VisualStudio/feedback/details/484295 +// "Presence of copy constructor breaks member class initialization", +// reported in 2009 by Alex Vakulenko: +// https://connect.microsoft.com/VisualStudio/feedback/details/499606 +// "Value-initialization in new-expression", reported in 2005 by +// Pavel Kuznetsov (MetaCommunications Engineering): +// https://connect.microsoft.com/VisualStudio/feedback/details/100744 +// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues +// (Niels Dekker, LKEB, May 2010) +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +#endif + +#if _MSC_VER <= 1500 || !defined(BOOST_STRICT_CONFIG) // 1500 == VC++ 9.0 +# define BOOST_NO_INITIALIZER_LISTS +#endif + +#ifndef _NATIVE_WCHAR_T_DEFINED +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if defined(_WIN32_WCE) || defined(UNDER_CE) +# define BOOST_NO_SWPRINTF +#endif + +// we have ThreadEx or GetSystemTimeAsFileTime unless we're running WindowsCE +#if !defined(_WIN32_WCE) && !defined(UNDER_CE) +# define BOOST_HAS_THREADEX +# define BOOST_HAS_GETSYSTEMTIMEASFILETIME +#endif + +// +// check for exception handling support: +#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif + +// +// __int64 support: +// +#if (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +#endif +#if (_MSC_VER >= 1310) && (defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400)) +# define BOOST_HAS_LONG_LONG +#else +# define BOOST_NO_LONG_LONG +#endif +#if (_MSC_VER >= 1400) && !defined(_DEBUG) +# define BOOST_HAS_NRVO +#endif +// +// disable Win32 API's if compiler extentions are +// turned off: +// +#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32) +# define BOOST_DISABLE_WIN32 +#endif +#if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI) +# define BOOST_NO_RTTI +#endif + +// +// C++0x features +// +// See above for BOOST_NO_LONG_LONG + +// C++ features supported by VC++ 10 (aka 2010) +// +#if _MSC_VER < 1600 +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_NULLPTR +#define BOOST_NO_DECLTYPE +#endif // _MSC_VER < 1600 + +#if _MSC_VER >= 1600 +#define BOOST_HAS_STDINT_H +#endif + +// C++0x features not supported by any versions +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE_N3276 +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_NOEXCEPT +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +// +// 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 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION evc9 +# elif _MSC_VER == 1600 +# define BOOST_COMPILER_VERSION evc10 +# elif _MSC_VER == 1700 +# define BOOST_COMPILER_VERSION evc11 +# 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 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION 9.0 +# elif _MSC_VER == 1600 +# define BOOST_COMPILER_VERSION 10.0 +# elif _MSC_VER == 1700 +# define BOOST_COMPILER_VERSION 11.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 1700 (VC11, aka 2011): +#if (_MSC_VER > 1700) +# 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/external/boost/config/no_tr1/cmath.hpp b/external/boost/config/no_tr1/cmath.hpp new file mode 100644 index 0000000..d8268d8 --- /dev/null +++ b/external/boost/config/no_tr1/cmath.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2008. +// Use, modification and distribution are subject to the +// 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 but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/cmath is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_CMATH +# define BOOST_CONFIG_CMATH + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_CMATH_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_CMATH_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_CMATH_RECURSION +# endif + +#endif diff --git a/external/boost/config/no_tr1/complex.hpp b/external/boost/config/no_tr1/complex.hpp new file mode 100644 index 0000000..ca20092 --- /dev/null +++ b/external/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 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 + +# ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_COMPLEX_RECURSION +# endif + +#endif diff --git a/external/boost/config/no_tr1/functional.hpp b/external/boost/config/no_tr1/functional.hpp new file mode 100644 index 0000000..e395efc --- /dev/null +++ b/external/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 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 + +# ifdef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# endif + +#endif diff --git a/external/boost/config/no_tr1/memory.hpp b/external/boost/config/no_tr1/memory.hpp new file mode 100644 index 0000000..2b5d208 --- /dev/null +++ b/external/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 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 + +# ifdef BOOST_CONFIG_NO_MEMORY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_MEMORY_RECURSION +# endif + +#endif diff --git a/external/boost/config/no_tr1/utility.hpp b/external/boost/config/no_tr1/utility.hpp new file mode 100644 index 0000000..dea8f11 --- /dev/null +++ b/external/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 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 + +# ifdef BOOST_CONFIG_NO_UTILITY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +#endif diff --git a/external/boost/config/platform/aix.hpp b/external/boost/config/platform/aix.hpp new file mode 100644 index 0000000..894ef42 --- /dev/null +++ b/external/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 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 + + + + diff --git a/external/boost/config/platform/amigaos.hpp b/external/boost/config/platform/amigaos.hpp new file mode 100644 index 0000000..34bcf41 --- /dev/null +++ b/external/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/external/boost/config/platform/beos.hpp b/external/boost/config/platform/beos.hpp new file mode 100644 index 0000000..48c3d8d --- /dev/null +++ b/external/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 + + + diff --git a/external/boost/config/platform/bsd.hpp b/external/boost/config/platform/bsd.hpp new file mode 100644 index 0000000..a014297 --- /dev/null +++ b/external/boost/config/platform/bsd.hpp @@ -0,0 +1,86 @@ +// (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 but does not +// advertise the fact in : +// +#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 +// and not in +// +#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3))\ + || defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_HAS_PTHREADS +#endif + +// +// No wide character support in the BSD header files: +// +#if defined(__NetBSD__) +#define __NetBSD_GCC__ (__GNUC__ * 1000000 \ + + __GNUC_MINOR__ * 1000 \ + + __GNUC_PATCHLEVEL__) +// XXX - the following is required until c++config.h +// defines _GLIBCXX_HAVE_SWPRINTF and friends +// or the preprocessor conditionals are removed +// from the cwchar header. +#define _GLIBCXX_HAVE_SWPRINTF 1 +#endif + +#if !((defined(__FreeBSD__) && (__FreeBSD__ >= 5)) \ + || (defined(__NetBSD_GCC__) && (__NetBSD_GCC__ >= 2095003)) || defined(__DragonFly__)) +# define BOOST_NO_CWCHAR +#endif +// +// The BSD has macros only, no functions: +// +#if !defined(__OpenBSD__) || defined(__DragonFly__) +# 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 + + + + + + diff --git a/external/boost/config/platform/cray.hpp b/external/boost/config/platform/cray.hpp new file mode 100644 index 0000000..5c476e4 --- /dev/null +++ b/external/boost/config/platform/cray.hpp @@ -0,0 +1,18 @@ +// (C) Copyright John Maddock 2011. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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 "Cray" + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + diff --git a/external/boost/config/platform/cygwin.hpp b/external/boost/config/platform/cygwin.hpp new file mode 100644 index 0000000..b7ef572 --- /dev/null +++ b/external/boost/config/platform/cygwin.hpp @@ -0,0 +1,58 @@ +// (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_HAS_DIRENT_H +#define BOOST_HAS_LOG1P +#define BOOST_HAS_EXPM1 + +// +// 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 +#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 +#ifdef _STDINT_H +#define BOOST_HAS_STDINT_H +#endif + +/// Cygwin has no fenv.h +#define BOOST_NO_FENV_H + +// boilerplate code: +#include + +// +// Cygwin lies about XSI conformance, there is no nl_types.h: +// +#ifdef BOOST_HAS_NL_TYPES_H +# undef BOOST_HAS_NL_TYPES_H +#endif + + + + + diff --git a/external/boost/config/platform/hpux.hpp b/external/boost/config/platform/hpux.hpp new file mode 100644 index 0000000..19ce68e --- /dev/null +++ b/external/boost/config/platform/hpux.hpp @@ -0,0 +1,87 @@ +// (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 - 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) + +// 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 under the name +// 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 +#endif +#if defined(__HP_aCC) && !defined(_INCLUDE__STDC_A1_SOURCE) +# 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 + +// 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 +# ifndef __parisc +# define BOOST_HAS_NRVO +# endif +#endif +#ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +#endif +#ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +#endif + diff --git a/external/boost/config/platform/irix.hpp b/external/boost/config/platform/irix.hpp new file mode 100644 index 0000000..aeae49c --- /dev/null +++ b/external/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 + + + diff --git a/external/boost/config/platform/linux.hpp b/external/boost/config/platform/linux.hpp new file mode 100644 index 0000000..a02aff7 --- /dev/null +++ b/external/boost/config/platform/linux.hpp @@ -0,0 +1,103 @@ +// (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 +#ifdef __cplusplus +#include +#else +#include +#endif + +// +// added to glibc 2.1.1 +// We can only test for 2.1 though: +// +#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) + // defines int64_t unconditionally, but defines + // int64_t only if __GNUC__. Thus, assume a fully usable + // 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 +#define BOOST_HAS_PTHREAD_YIELD + +#ifndef __GNUC__ +// +// if the compiler is not gcc we still need to be able to parse +// the GNU system headers, some of which (mainly ) +// 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/external/boost/config/platform/macos.hpp b/external/boost/config/platform/macos.hpp new file mode 100644 index 0000000..6d876b1 --- /dev/null +++ b/external/boost/config/platform/macos.hpp @@ -0,0 +1,87 @@ +// (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 +// to replace the platform-native BSD one. G++ users +// should also always be able to do this on MaxOS X. +// +# include +# 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 , 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 + +# if (__GNUC__ == 4) + +// Both gcc and intel require these. +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_NANOSLEEP + +# 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) +// MPTasks support is deprecated/removed from Boost: +//# 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 + +#ifdef BOOST_HAS_PTHREADS +# define BOOST_HAS_THREADS +#endif + +// The remote call manager depends on this. +# define BOOST_BIND_ENABLE_PASCAL + +# endif + +#endif + + + diff --git a/external/boost/config/platform/qnxnto.hpp b/external/boost/config/platform/qnxnto.hpp new file mode 100644 index 0000000..b1377c8 --- /dev/null +++ b/external/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 + +// 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/external/boost/config/platform/solaris.hpp b/external/boost/config/platform/solaris.hpp new file mode 100644 index 0000000..9f92566 --- /dev/null +++ b/external/boost/config/platform/solaris.hpp @@ -0,0 +1,28 @@ +// (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 + +// +// pthreads don't actually work with gcc unless _PTHREADS is defined: +// +#if defined(__GNUC__) && defined(_POSIX_THREADS) && !defined(_PTHREADS) +# undef BOOST_HAS_PTHREADS +#endif + + + + diff --git a/external/boost/config/platform/symbian.hpp b/external/boost/config/platform/symbian.hpp new file mode 100644 index 0000000..e02a778 --- /dev/null +++ b/external/boost/config/platform/symbian.hpp @@ -0,0 +1,97 @@ +// (C) Copyright Yuriy Krasnoschek 2009. +// (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. + +// symbian specific config options: + + +#define BOOST_PLATFORM "Symbian" +#define BOOST_SYMBIAN 1 + + +#if defined(__S60_3X__) +// Open C / C++ plugin was introdused in this SDK, earlier versions don't have CRT / STL +# define BOOST_S60_3rd_EDITION_FP2_OR_LATER_SDK +// make sure we have __GLIBC_PREREQ if available at all +#ifdef __cplusplus +#include +#else +#include +#endif// boilerplate code: +# define BOOST_HAS_UNISTD_H +# include +// S60 SDK defines _POSIX_VERSION as POSIX.1 +# ifndef BOOST_HAS_STDINT_H +# define BOOST_HAS_STDINT_H +# endif +# ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +# endif +# ifndef BOOST_HAS_DIRENT_H +# define BOOST_HAS_DIRENT_H +# endif +# ifndef BOOST_HAS_SIGACTION +# define BOOST_HAS_SIGACTION +# endif +# ifndef BOOST_HAS_PTHREADS +# define BOOST_HAS_PTHREADS +# endif +# ifndef BOOST_HAS_NANOSLEEP +# define BOOST_HAS_NANOSLEEP +# 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_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# ifndef BOOST_POSIX_API +# define BOOST_POSIX_API +# endif +// endianess support +# include +// Symbian SDK provides _BYTE_ORDER instead of __BYTE_ORDER +# ifndef __LITTLE_ENDIAN +# ifdef _LITTLE_ENDIAN +# define __LITTLE_ENDIAN _LITTLE_ENDIAN +# else +# define __LITTLE_ENDIAN 1234 +# endif +# endif +# ifndef __BIG_ENDIAN +# ifdef _BIG_ENDIAN +# define __BIG_ENDIAN _BIG_ENDIAN +# else +# define __BIG_ENDIAN 4321 +# endif +# endif +# ifndef __BYTE_ORDER +# define __BYTE_ORDER __LITTLE_ENDIAN // Symbian is LE +# endif +// Known limitations +# define BOOST_ASIO_DISABLE_SERIAL_PORT +# define BOOST_DATE_TIME_NO_LOCALE +# define BOOST_NO_STD_WSTRING +# define BOOST_EXCEPTION_DISABLE +# define BOOST_NO_EXCEPTIONS + +#else // TODO: More platform support e.g. UIQ +# error "Unsuppoted Symbian SDK" +#endif + +#if defined(__WINSCW__) && !defined(BOOST_DISABLE_WIN32) +# define BOOST_DISABLE_WIN32 // winscw defines WIN32 macro +#endif + + diff --git a/external/boost/config/platform/vms.hpp b/external/boost/config/platform/vms.hpp new file mode 100644 index 0000000..f70efcf --- /dev/null +++ b/external/boost/config/platform/vms.hpp @@ -0,0 +1,25 @@ +// (C) Copyright Artyom Beilis 2010. +// Use, modification and distribution are subject to the +// Boost Software 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_PLATFORM_VMS_HPP +#define BOOST_CONFIG_PLATFORM_VMS_HPP + +#define BOOST_PLATFORM "OpenVMS" + +#undef BOOST_HAS_STDINT_H +#define BOOST_HAS_UNISTD_H +#define BOOST_HAS_NL_TYPES_H +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_CLOCK_GETTIME +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#define BOOST_HAS_LOG1P +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_THREADS +#undef BOOST_HAS_SCHED_YIELD + +#endif diff --git a/external/boost/config/platform/vxworks.hpp b/external/boost/config/platform/vxworks.hpp new file mode 100644 index 0000000..6ec5171 --- /dev/null +++ b/external/boost/config/platform/vxworks.hpp @@ -0,0 +1,31 @@ +// (C) Copyright Dustin Spicuzza 2009. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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. + +// vxWorks specific config options: + +#define BOOST_PLATFORM "vxWorks" + +#define BOOST_NO_CWCHAR +#define BOOST_NO_INTRINSIC_WCHAR_T + +#if defined(__GNUC__) && defined(__STRICT_ANSI__) +#define BOOST_NO_INT64_T +#endif + +#define BOOST_HAS_UNISTD_H + +// these allow posix_features to work, since vxWorks doesn't +// define them itself +#define _POSIX_TIMERS 1 +#define _POSIX_THREADS 1 + +// vxworks doesn't work with asio serial ports +#define BOOST_ASIO_DISABLE_SERIAL_PORT + +// boilerplate code: +#include + diff --git a/external/boost/config/platform/win32.hpp b/external/boost/config/platform/win32.hpp new file mode 100644 index 0000000..3922012 --- /dev/null +++ b/external/boost/config/platform/win32.hpp @@ -0,0 +1,71 @@ +// (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 + +// Default defines for BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT +// If a compiler doesn't support __declspec(dllexport)/__declspec(dllimport), +// its boost/config/compiler/ file must define BOOST_SYMBOL_EXPORT and +// BOOST_SYMBOL_IMPORT +#ifndef BOOST_SYMBOL_EXPORT +# define BOOST_HAS_DECLSPEC +# define BOOST_SYMBOL_EXPORT __declspec(dllexport) +# define BOOST_SYMBOL_IMPORT __declspec(dllimport) +#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 + +#if defined(__MINGW32__) && (__GNUC__ >= 4) +# define BOOST_HAS_EXPM1 +# define BOOST_HAS_LOG1P +# define BOOST_HAS_GETTIMEOFDAY +#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 +#else +# define BOOST_HAS_GETSYSTEMTIMEASFILETIME +#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/external/boost/config/posix_features.hpp b/external/boost/config/posix_features.hpp new file mode 100644 index 0000000..d129547 --- /dev/null +++ b/external/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 + + // XOpen has , 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 +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100) +# define BOOST_HAS_STDINT_H +# endif + + // POSIX version 2 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L) +# define BOOST_HAS_DIRENT_H +# endif + + // POSIX version 3 requires 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 , 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/external/boost/config/requires_threads.hpp b/external/boost/config/requires_threads.hpp new file mode 100644 index 0000000..cfaff23 --- /dev/null +++ b/external/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 +#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/external/boost/config/select_compiler_config.hpp b/external/boost/config/select_compiler_config.hpp new file mode 100644 index 0000000..0d47b25 --- /dev/null +++ b/external/boost/config/select_compiler_config.hpp @@ -0,0 +1,112 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Martin Wille 2003. +// (C) Copyright Guillaume Melquiond 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. + +// 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(_CRAYC) +// EDG based Cray compiler: +# define BOOST_COMPILER_CONFIG "boost/config/compiler/cray.hpp" + +#elif defined __CUDACC__ +// NVIDIA CUDA C++ compiler for GPU +# define BOOST_COMPILER_CONFIG "boost/config/compiler/nvcc.hpp" + +#elif defined __COMO__ +// Comeau C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/comeau.hpp" + +#elif defined(__PATHSCALE__) && (__PATHCC__ >= 4) +// PathScale EKOPath compiler (has to come before clang and gcc) +# define BOOST_COMPILER_CONFIG "boost/config/compiler/pathscale.hpp" + +#elif defined __clang__ +// Clang C++ emulates GCC, so it has to appear early. +# define BOOST_COMPILER_CONFIG "boost/config/compiler/clang.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 __CODEGEARC__ +// CodeGear - must be checked for before Borland +# define BOOST_COMPILER_CONFIG "boost/config/compiler/codegear.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(__PGI) +// Portland Group Inc. +# define BOOST_COMPILER_CONFIG "boost/config/compiler/pgi.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/external/boost/config/select_platform_config.hpp b/external/boost/config/select_platform_config.hpp new file mode 100644 index 0000000..2af61d2 --- /dev/null +++ b/external/boost/config/select_platform_config.hpp @@ -0,0 +1,105 @@ +// 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 +// 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__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC) +// linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though? +# 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" + +#elif defined(__VXWORKS__) +// vxWorks: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/vxworks.hpp" + +#elif defined(__SYMBIAN32__) +// Symbian: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/symbian.hpp" + +#elif defined(_CRAYC) +// Cray: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/cray.hpp" + +#elif defined(__VMS) +// VMS: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/vms.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 + +# 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/external/boost/config/select_stdlib_config.hpp b/external/boost/config/select_stdlib_config.hpp new file mode 100644 index 0000000..96ede00 --- /dev/null +++ b/external/boost/config/select_stdlib_config.hpp @@ -0,0 +1,85 @@ +// 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: + +// First include to determine if some version of STLport is in use as the std lib +// (do not rely on this header being included since users can short-circuit this header +// if they know whose std lib they are using.) +#ifdef __cplusplus +# include +#else +# include +#endif + +#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" + +#else + +// If our std lib was not some version of STLport, then include as it is about +// the smallest of the std lib headers that includes real C++ stuff. (Some std libs do not +// include their C++-related macros in so this additional include makes sure +// we get those definitions) +// (again do not rely on this header being included since users can short-circuit this +// header if they know whose std lib they are using.) +#include + +#if 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(_LIBCPP_VERSION) +// libc++ +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcpp.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 + +#endif + + + diff --git a/external/boost/config/stdlib/dinkumware.hpp b/external/boost/config/stdlib/dinkumware.hpp new file mode 100644 index 0000000..1814bee --- /dev/null +++ b/external/boost/config/stdlib/dinkumware.hpp @@ -0,0 +1,145 @@ +// (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 +#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 +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +// There's no numeric_limits 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) & , +// and no 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, as does MTA version. +# ifndef __MTA__ +# define BOOST_NO_STD_MIN_MAX +# endif +# 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 +// this may be an overly restrictive define, but regex fails without it: +# define BOOST_NO_STD_LOCALE +#endif + +#include +#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (!_HAS_NAMESPACE && defined(__ghs__)) ) +# define BOOST_NO_STD_TYPEINFO +#endif + +// C++0x headers implemented in 520 (as shipped by Microsoft) +// +#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520 +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_NUMERIC_LIMITS_LOWEST +#endif + +#if (!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_0X_HDR_TUPLE) +# define BOOST_NO_0X_HDR_TUPLE +#endif +// +// C++0x headers not yet (fully) implemented: +// +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_THREAD + +#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/external/boost/config/stdlib/libcomo.hpp b/external/boost/config/stdlib/libcomo.hpp new file mode 100644 index 0000000..341cf97 --- /dev/null +++ b/external/boost/config/stdlib/libcomo.hpp @@ -0,0 +1,69 @@ +// (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 +# if !defined(__LIBCOMO__) +# error "This is not the Comeau STL!" +# endif +#endif + +// +// std::streambuf 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 + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + +// +// 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/external/boost/config/stdlib/libcpp.hpp b/external/boost/config/stdlib/libcpp.hpp new file mode 100644 index 0000000..07c7043 --- /dev/null +++ b/external/boost/config/stdlib/libcpp.hpp @@ -0,0 +1,36 @@ +// (C) Copyright Christopher Jefferson 2011. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (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 libc++ +// Might need more in here later. + +#if !defined(_LIBCPP_VERSION) +# include +# if !defined(_LIBCPP_VERSION) +# error "This is not libc++!" +# endif +#endif + +#define BOOST_STDLIB "libc++ version " BOOST_STRINGIZE(_LIBCPP_VERSION) + +#define BOOST_HAS_THREADS + +#ifdef _LIBCPP_HAS_NO_VARIADICS +# define BOOST_NO_0X_HDR_TUPLE +#endif + +// +// These appear to be unusable/incomplete so far: +// +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_TYPE_TRAITS + +// libc++ uses a non-standard messages_base +#define BOOST_NO_STD_MESSAGES + +// --- end --- diff --git a/external/boost/config/stdlib/libstdcpp3.hpp b/external/boost/config/stdlib/libstdcpp3.hpp new file mode 100644 index 0000000..03cea5c --- /dev/null +++ b/external/boost/config/stdlib/libstdcpp3.hpp @@ -0,0 +1,155 @@ +// (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: + +#define BOOST_GNU_STDLIB 1 + +#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) \ + || defined(_GLIBCXX_HAS_GTHREADS) \ + || defined(_WIN32) + // + // 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 + +// Apple doesn't seem to reliably defined a *unix* macro +#if !defined(CYGWIN) && ( defined(__unix__) \ + || defined(__unix) \ + || defined(unix) \ + || defined(__APPLE__) \ + || defined(__APPLE) \ + || defined(APPLE)) +# include +#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 +# if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +# else +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +# endif +#endif + +// stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly +// __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++ +// developers. He also commented: +// +// "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in +// GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305. +// Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support +// than any release in the 4.2 series." +// +// Another resource for understanding stdlibc++ features is: +// http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x + +// C++0x headers in GCC 4.3.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +#endif + +// C++0x headers in GCC 4.4.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +#else +# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG +# define BOOST_HAS_TR1_COMPLEX_OVERLOADS +#endif + +#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1)) && (!defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_0X_HDR_MUTEX)) +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_MUTEX +#endif + +// C++0x features in GCC 4.5.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_RANDOM +#endif + +// C++0x features in GCC 4.5.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_TYPEINDEX +#endif +// C++0x headers not yet (fully!) implemented +// +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_CODECVT + +// --- end --- diff --git a/external/boost/config/stdlib/modena.hpp b/external/boost/config/stdlib/modena.hpp new file mode 100644 index 0000000..626e712 --- /dev/null +++ b/external/boost/config/stdlib/modena.hpp @@ -0,0 +1,53 @@ +// (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 +# 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 + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + +#define BOOST_STDLIB "Modena C++ standard library" + + + + + diff --git a/external/boost/config/stdlib/msl.hpp b/external/boost/config/stdlib/msl.hpp new file mode 100644 index 0000000..adb3d47 --- /dev/null +++ b/external/boost/config/stdlib/msl.hpp @@ -0,0 +1,81 @@ +// (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 +# 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 +#include + +#if defined(__MSL__) && (__MSL__ >= 0x5000) +# define BOOST_HAS_STDINT_H +# if !defined(__PALMOS_TRAPS__) +# define BOOST_HAS_UNISTD_H +# endif + // boilerplate code: +# include +#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 + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + +#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) + + + + + + + + + diff --git a/external/boost/config/stdlib/roguewave.hpp b/external/boost/config/stdlib/roguewave.hpp new file mode 100644 index 0000000..95ac36c --- /dev/null +++ b/external/boost/config/stdlib/roguewave.hpp @@ -0,0 +1,183 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2003. +// (C) Copyright Boris Gubenko 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) + +// See http://www.boost.org for most recent version. + +// Rogue Wave std lib: + +#define BOOST_RW_STDLIB 1 + +#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# include +# 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)" +#elif _RWSTD_VER < 0x04010200 + # define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER) +#else +# ifdef _RWSTD_VER_STR +# define BOOST_STDLIB "Apache STDCXX standard library version " _RWSTD_VER_STR +# else +# define BOOST_STDLIB "Apache STDCXX standard library version " BOOST_STRINGIZE(_RWSTD_VER) +# endif +#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 + +// +// check that on HP-UX, the proper RW library is used +// +#if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD) +# error "Boost requires Standard RW library. Please compile and link with -AA" +#endif + +// +// Define macros specific to RW V2.2 on HP-UX +// +#if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100) +# ifndef __HP_TC1_MAKE_PAIR +# define __HP_TC1_MAKE_PAIR +# endif +# ifndef _HP_INSTANTIATE_STD2_VL +# define _HP_INSTANTIATE_STD2_VL +# endif +#endif + +#if _RWSTD_VER < 0x05000000 +# define BOOST_NO_0X_HDR_ARRAY +#endif +// type_traits header is incomplete: +# define BOOST_NO_0X_HDR_TYPE_TRAITS +// +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + diff --git a/external/boost/config/stdlib/sgi.hpp b/external/boost/config/stdlib/sgi.hpp new file mode 100644 index 0000000..c8d77d5 --- /dev/null +++ b/external/boost/config/stdlib/sgi.hpp @@ -0,0 +1,145 @@ +// (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 +# 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 + // 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 . +# define BOOST_NO_STRINGSTREAM +#endif + +// Apple doesn't seem to reliably defined a *unix* macro +#if !defined(CYGWIN) && ( defined(__unix__) \ + || defined(__unix) \ + || defined(unix) \ + || defined(__APPLE__) \ + || defined(__APPLE) \ + || defined(APPLE)) +# include +#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 and no std::wstring: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) +# include +# if defined(__BASTRING__) +# define BOOST_NO_LIMITS +// Note: 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 + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + +#define BOOST_STDLIB "SGI standard library" + + + diff --git a/external/boost/config/stdlib/stlport.hpp b/external/boost/config/stdlib/stlport.hpp new file mode 100644 index 0000000..d306999 --- /dev/null +++ b/external/boost/config/stdlib/stlport.hpp @@ -0,0 +1,244 @@ +// (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 +# if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# error "This is not STLPort!" +# endif +#endif + +// Apple doesn't seem to reliably defined a *unix* macro +#if !defined(CYGWIN) && ( defined(__unix__) \ + || defined(__unix) \ + || defined(unix) \ + || defined(__APPLE__) \ + || defined(__APPLE) \ + || defined(APPLE)) +# include +#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 + +#if defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x500) || (_STLPORT_VERSION >= 0x520)) +# define BOOST_NO_STD_UNORDERED +#endif + +#if defined(_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x520) +# define BOOST_HAS_TR1_UNORDERED_SET +# define BOOST_HAS_TR1_UNORDERED_MAP +#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: +// +#ifndef _STLP_NO_EXTENSIONS +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST +#endif + +// +// 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 +namespace std { using ::abs; } +// and strcmp/strcpy don't get imported either ('cos they are macros) +#include +#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, 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 // 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 + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + +#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) + + + + + + + + diff --git a/external/boost/config/stdlib/vacpp.hpp b/external/boost/config/stdlib/vacpp.hpp new file mode 100644 index 0000000..32a1fc0 --- /dev/null +++ b/external/boost/config/stdlib/vacpp.hpp @@ -0,0 +1,51 @@ +// (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 + +// Apple doesn't seem to reliably defined a *unix* macro +#if !defined(CYGWIN) && ( defined(__unix__) \ + || defined(__unix) \ + || defined(unix) \ + || defined(__APPLE__) \ + || defined(__APPLE) \ + || defined(APPLE)) +# include +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_NUMERIC_LIMITS_LOWEST + +#define BOOST_STDLIB "Visual Age default standard library" + + + diff --git a/external/boost/config/suffix.hpp b/external/boost/config/suffix.hpp new file mode 100644 index 0000000..72a0dc9 --- /dev/null +++ b/external/boost/config/suffix.hpp @@ -0,0 +1,704 @@ +// Boost config.hpp configuration header file ------------------------------// + +// Copyright (c) 2001-2003 John Maddock +// Copyright (c) 2001 Darin Adler +// Copyright (c) 2001 Peter Dimov +// Copyright (c) 2002 Bill Kempf +// Copyright (c) 2002 Jens Maurer +// Copyright (c) 2002-2003 David Abrahams +// Copyright (c) 2003 Gennaro Prota +// Copyright (c) 2003 Eric Friedman +// Copyright (c) 2010 Eric Jourdanneau, Joel Falcou +// Distributed under the Boost Software License, Version 1.0. (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 + +#if defined(__GNUC__) && (__GNUC__ >= 4) +// +// Some GCC-4.x versions issue warnings even when __extension__ is used, +// so use this as a workaround: +// +#pragma GCC system_header +#endif + +// +// ensure that visibility macros are always defined, thus symplifying use +// +#ifndef BOOST_SYMBOL_EXPORT +# define BOOST_SYMBOL_EXPORT +#endif +#ifndef BOOST_SYMBOL_IMPORT +# define BOOST_SYMBOL_IMPORT +#endif +#ifndef BOOST_SYMBOL_VISIBLE +# define BOOST_SYMBOL_VISIBLE +#endif + +// +// look for long long by looking for the appropriate macros in . +// 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_NO_LONG_LONG) \ + && !defined(BOOST_MSVC) && !defined(__BORLANDC__) +# include +# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_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 either: +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +#endif + +// +// Normalize BOOST_NO_STATIC_ASSERT and (depricated) BOOST_HAS_STATIC_ASSERT: +// +#if !defined(BOOST_NO_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT) +# define BOOST_HAS_STATIC_ASSERT +#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 partial specialization, partial +// specialization with default args won't work either: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) +# define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS +# 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 + +// +// Without typeid support we have no dynamic RTTI either: +// +#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI) +# define BOOST_NO_RTTI +#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 if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE) +# define BOOST_NO_CWCTYPE +# endif + +// +// We can't have a swprintf if there is no : +// +# 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(__APPLE__) || defined(__DragonFly__)) \ + && !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_PTHREAD_YIELD +# undef BOOST_HAS_PTHREAD_DELAY_NP +# 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 : +// +# 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. +// +# if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST) +# define BOOST_NO_SLIST +# endif + +# if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_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 +#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 +#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 +#endif + +// +// Set BOOST_NO_INITIALIZER_LISTS if there is no library support. +// + +#if defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) +# define BOOST_NO_INITIALIZER_LISTS +#endif +#if defined(BOOST_NO_INITIALIZER_LISTS) && !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +#endif + +// +// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_RVALUE_REFERENCES is not defined +// +#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS) +#define BOOST_HAS_RVALUE_REFS +#endif + +// +// Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_VARIADIC_TEMPLATES is not defined +// +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL) +#define BOOST_HAS_VARIADIC_TMPL +#endif + +// +// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined +// +#if !defined(BOOST_NO_DECLTYPE_N3276) && defined(BOOST_NO_DECLTYPE) +#define BOOST_NO_DECLTYPE_N3276 +#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 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; +// must still be #included in the usual places so that inclusion +// works as expected with standard conforming compilers. The resulting +// double inclusion of is harmless. + +# if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus) +# include + 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 -----------------------------------------// + +# if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus) + +namespace std { + template + inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __b < __a ? __b : __a; + } + template + 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(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 analogous. + +#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(0)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast(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(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 syntax, as a workaround replace: +// +// typedef typename A::template rebind binder; +// +// with: +// +// typedef typename A::BOOST_NESTED_TEMPLATE rebind 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 void f(T, typename T::type); +// ^^^^^^^^ +// Replace these declarations with: +// +// template void f(T, BOOST_DEDUCED_TYPENAME T::type); + +#ifndef BOOST_NO_DEDUCED_TYPENAME +# define BOOST_DEDUCED_TYPENAME typename +#else +# define BOOST_DEDUCED_TYPENAME +#endif + +#ifndef BOOST_NO_TYPENAME_WITH_CTOR +# define BOOST_CTOR_TYPENAME typename +#else +# define BOOST_CTOR_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) && defined(__cplusplus) +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 +// #include +// #include +// +// template +// void f() { std::cout << n << ' '; } +// +// template +// void g() { std::cout << typeid(T).name() << ' '; } +// +// int main() { +// f<1>(); +// f<2>(); +// +// g(); +// g(); +// } +// +// With VC++ 6.0 the output is: +// +// 2 2 double double +// +// To fix it, write +// +// template +// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } +// +// template +// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } +// + + +#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) && defined(__cplusplus) + +# include "boost/type.hpp" +# include "boost/non_type.hpp" + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type* +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type* + +# 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 + +// When BOOST_NO_STD_TYPEINFO is defined, we can just import +// the global definition into std namespace: +#if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus) +#include +namespace std{ using ::type_info; } +#endif + +// ---------------------------------------------------------------------------// + +// +// 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 + +// +// Helper macros BOOST_NOEXCEPT, BOOST_NOEXCEPT_IF, BOOST_NOEXCEPT_EXPR +// These aid the transition to C++11 while still supporting C++03 compilers +// +#ifdef BOOST_NO_NOEXCEPT +# define BOOST_NOEXCEPT +# define BOOST_NOEXCEPT_IF(Predicate) +# define BOOST_NOEXCEPT_EXPR(Expression) false +#else +# define BOOST_NOEXCEPT noexcept +# define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate)) +# define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression)) +#endif + +// +// 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 + +// +// Set some default values GPU support +// +# ifndef BOOST_GPU_ENABLED +# define BOOST_GPU_ENABLED +# endif + +// +// constexpr workarounds +// +#if defined(BOOST_NO_CONSTEXPR) +#define BOOST_CONSTEXPR +#define BOOST_CONSTEXPR_OR_CONST const +#else +#define BOOST_CONSTEXPR constexpr +#define BOOST_CONSTEXPR_OR_CONST constexpr +#endif + +#define BOOST_STATIC_CONSTEXPR static BOOST_CONSTEXPR_OR_CONST + +// BOOST_FORCEINLINE ---------------------------------------------// +// Macro to use in place of 'inline' to force a function to be inline +#if !defined(BOOST_FORCEINLINE) +# if defined(_MSC_VER) +# define BOOST_FORCEINLINE __forceinline +# elif defined(__GNUC__) && __GNUC__ > 3 +# define BOOST_FORCEINLINE inline __attribute__ ((always_inline)) +# else +# define BOOST_FORCEINLINE inline +# endif +#endif + +#endif + diff --git a/external/boost/config/user.hpp b/external/boost/config/user.hpp new file mode 100644 index 0000000..5a4a9d4 --- /dev/null +++ b/external/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 + +// define this to locate a stdlib config file: +// #define BOOST_STDLIB_CONFIG + +// define this to locate a platform config file: +// #define BOOST_PLATFORM_CONFIG + +// 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/external/boost/config/warning_disable.hpp b/external/boost/config/warning_disable.hpp new file mode 100644 index 0000000..fea8e82 --- /dev/null +++ b/external/boost/config/warning_disable.hpp @@ -0,0 +1,47 @@ +// Copyright John Maddock 2008 +// Use, modification, and distribution is subject to the 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 turn off some overly-pedantic warning emitted +// by certain compilers. You should include this header only in: +// +// * A test case, before any other headers, or, +// * A library source file before any other headers. +// +// IT SHOULD NOT BE INCLUDED BY ANY BOOST HEADER. +// +// YOU SHOULD NOT INCLUDE IT IF YOU CAN REASONABLY FIX THE WARNING. +// +// The only warnings disabled here are those that are: +// +// * Quite unreasonably pedantic. +// * Generally only emitted by a single compiler. +// * Can't easily be fixed: for example if the vendors own std lib +// code emits these warnings! +// +// Note that THIS HEADER MUST NOT INCLUDE ANY OTHER HEADERS: +// not even std library ones! Doing so may turn the warning +// off too late to be of any use. For example the VC++ C4996 +// warning can be emitted from if that header is included +// before or by this one :-( +// + +#ifndef BOOST_CONFIG_WARNING_DISABLE_HPP +#define BOOST_CONFIG_WARNING_DISABLE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) + // Error 'function': was declared deprecated + // http://msdn2.microsoft.com/en-us/library/ttcz0bys(VS.80).aspx + // This error is emitted when you use some perfectly conforming + // std lib functions in a perfectly correct way, and also by + // some of Microsoft's own std lib code ! +# pragma warning(disable:4996) +#endif +#if defined(__INTEL_COMPILER) || defined(__ICL) + // As above: gives warning when a "deprecated" + // std library function is encountered. +# pragma warning(disable:1786) +#endif + +#endif // BOOST_CONFIG_WARNING_DISABLE_HPP diff --git a/external/boost/container/container_fwd.hpp b/external/boost/container/container_fwd.hpp new file mode 100644 index 0000000..da325e4 --- /dev/null +++ b/external/boost/container/container_fwd.hpp @@ -0,0 +1,177 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP +#define BOOST_CONTAINER_CONTAINER_FWD_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +////////////////////////////////////////////////////////////////////////////// +// Standard predeclarations +////////////////////////////////////////////////////////////////////////////// + +/// @cond + +namespace boost{ +namespace intrusive{ + //Create namespace to avoid compilation errors +}} + +namespace boost{ namespace container{ namespace container_detail{ + +namespace bi = boost::intrusive; + +}}} + +#include +#include +#include +#include +#include + +/// @endcond + +////////////////////////////////////////////////////////////////////////////// +// Containers +////////////////////////////////////////////////////////////////////////////// + +namespace boost { +namespace container { + +//vector class +template > +class vector; + +//vector class +template > +class stable_vector; + +//vector class +template > +class deque; + +//list class +template > +class list; + +//slist class +template > +class slist; + +//set class +template + ,class A = std::allocator > +class set; + +//multiset class +template + ,class A = std::allocator > +class multiset; + +//map class +template + ,class A = std::allocator > > +class map; + +//multimap class +template + ,class A = std::allocator > > +class multimap; + +//flat_set class +template + ,class A = std::allocator > +class flat_set; + +//flat_multiset class +template + ,class A = std::allocator > +class flat_multiset; + +//flat_map class +template + ,class A = std::allocator > > +class flat_map; + +//flat_multimap class +template + ,class A = std::allocator > > +class flat_multimap; + +//basic_string class +template + ,class A = std::allocator > +class basic_string; + +//! Type used to tag that the input range is +//! guaranteed to be ordered +struct ordered_range_impl_t {}; + +//! Type used to tag that the input range is +//! guaranteed to be ordered and unique +struct ordered_unique_range_impl_t{}; + +/// @cond + +typedef ordered_range_impl_t * ordered_range_t; +typedef ordered_unique_range_impl_t *ordered_unique_range_t; + +/// @endcond + +//! Value used to tag that the input range is +//! guaranteed to be ordered +static const ordered_range_t ordered_range = 0; + +//! Value used to tag that the input range is +//! guaranteed to be ordered and unique +static const ordered_unique_range_t ordered_unique_range = 0; + +/// @cond + +namespace detail_really_deep_namespace { + +//Otherwise, gcc issues a warning of previously defined +//anonymous_instance and unique_instance +struct dummy +{ + dummy() + { + (void)ordered_range; + (void)ordered_unique_range; + } +}; + +} //detail_really_deep_namespace { + +/// @endcond + +}} //namespace boost { namespace container { + +#endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP diff --git a/external/boost/cregex.hpp b/external/boost/cregex.hpp new file mode 100644 index 0000000..b7a918e --- /dev/null +++ b/external/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 + * 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 +#endif + +#include + +#endif /* include guard */ + + + + + + + + + + diff --git a/external/boost/cstdint.hpp b/external/boost/cstdint.hpp new file mode 100644 index 0000000..ea84b65 --- /dev/null +++ b/external/boost/cstdint.hpp @@ -0,0 +1,508 @@ +// 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 (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 + +// +// Since we always define the INT#_C macros as per C++0x, +// define __STDC_CONSTANT_MACROS so that does the right +// thing if possible, and so that the user knows that the macros +// are actually defined as per C99. +// +#ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +#endif + +#include + +// +// Note that GLIBC is a bit inconsistent about whether int64_t is defined or not +// depending upon what headers happen to have been included first... +// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG. +// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990 +// +#if defined(BOOST_HAS_STDINT_H) && (!defined(__GLIBC__) || defined(__GLIBC_HAVE_LONG_LONG)) + +// The following #include is an implementation artifact; not part of interface. +# ifdef __hpux +// HP-UX has a vaguely nice in a non-standard location +# include +# 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__) || defined(_AIX) +# include +# else +# include + +// 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__) || defined(__VMS) +// FreeBSD and Tru64 have an that contains much of what we need. +# include + +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 // implementation artifact; not part of interface +# include // 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(__MTA__) + // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified + // MTA / XMT does support the following non-standard integer types + typedef __short16 int16_t; + typedef __short16 int_least16_t; + typedef __short16 int_fast16_t; + typedef unsigned __short16 uint16_t; + typedef unsigned __short16 uint_least16_t; + typedef unsigned __short16 uint_fast16_t; +# 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 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; +# elif (USHRT_MAX == 0xffffffff) + typedef short int32_t; + typedef short int_least32_t; + typedef short int_fast32_t; + typedef unsigned short uint32_t; + typedef unsigned short uint_least32_t; + typedef unsigned short uint_fast32_t; +# elif 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 == 0xffffffffffffffff) && defined(__MTA__) + // Integers are 64 bits on the MTA / XMT + typedef __int32 int32_t; + typedef __int32 int_least32_t; + typedef __int32 int_fast32_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int32 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: + +Added 23rd September 2000 (John Maddock). +Modified 11th September 2001 to be excluded when +BOOST_HAS_STDINT_H is defined (John Maddock). +Modified 11th Dec 2009 to always define the +INT#_C macros if they're not already defined (John Maddock). + +******************************************************/ + +#if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \ + (!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C)) +// +// For the following code we get several warnings along the lines of: +// +// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant +// +// So we declare this a system header to suppress these warnings. +// +#if defined(__GNUC__) && (__GNUC__ >= 4) +#pragma GCC system_header +#endif + +#include +# define BOOST__STDC_CONSTANT_MACROS_DEFINED +# if defined(BOOST_HAS_MS_INT64) +// +// Borland/Intel/Microsoft compilers have width specific suffixes: +// +#ifndef INT8_C +# define INT8_C(value) value##i8 +#endif +#ifndef INT16_C +# define INT16_C(value) value##i16 +#endif +#ifndef INT32_C +# define INT32_C(value) value##i32 +#endif +#ifndef INT64_C +# define INT64_C(value) value##i64 +#endif +# ifdef __BORLANDC__ + // Borland bug: appending ui8 makes the type a signed char +# define UINT8_C(value) static_cast(value##u) +# else +# define UINT8_C(value) value##ui8 +# endif +#ifndef UINT16_C +# define UINT16_C(value) value##ui16 +#endif +#ifndef UINT32_C +# define UINT32_C(value) value##ui32 +#endif +#ifndef UINT64_C +# define UINT64_C(value) value##ui64 +#endif +#ifndef INTMAX_C +# define INTMAX_C(value) value##i64 +# define UINTMAX_C(value) value##ui64 +#endif + +# else +// do it the old fashioned way: + +// 8-bit types ------------------------------------------------------------// + +# if (UCHAR_MAX == 0xff) && !defined(INT8_C) +# define INT8_C(value) static_cast(value) +# define UINT8_C(value) static_cast(value##u) +# endif + +// 16-bit types -----------------------------------------------------------// + +# if (USHRT_MAX == 0xffff) && !defined(INT16_C) +# define INT16_C(value) static_cast(value) +# define UINT16_C(value) static_cast(value##u) +# endif + +// 32-bit types -----------------------------------------------------------// +#ifndef INT32_C +# 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 +#endif + +// 64-bit types + intmax_t and uintmax_t ----------------------------------// +#ifndef INT64_C +# if defined(BOOST_HAS_LONG_LONG) && \ + (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX) || defined(_LLONG_MAX)) + +# if defined(__hpux) + // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions +# define INT64_C(value) value##LL +# define UINT64_C(value) value##uLL +# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || \ + (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || \ + (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) || \ + (defined(_LLONG_MAX) && _LLONG_MAX == 18446744073709551615ULL) + +# define INT64_C(value) value##LL +# define UINT64_C(value) value##uLL +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# elif ULONG_MAX != 0xffffffff + +# if ULONG_MAX == 18446744073709551615U // 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 +# elif defined(BOOST_HAS_LONG_LONG) + // Usual macros not defined, work things out for ourselves: +# if(~0uLL == 18446744073709551615ULL) +# define INT64_C(value) value##LL +# define UINT64_C(value) value##uLL +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# 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 +# endif // Borland/Microsoft specific width suffixes + +#endif // INT#_C macros. + + + + diff --git a/external/boost/cstdlib.hpp b/external/boost/cstdlib.hpp new file mode 100644 index 0000000..6322146 --- /dev/null +++ b/external/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 + +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/external/boost/current_function.hpp b/external/boost/current_function.hpp new file mode 100644 index 0000000..cb36e35 --- /dev/null +++ b/external/boost/current_function.hpp @@ -0,0 +1,68 @@ +#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)) || defined(__ghs__) + +# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ + +#elif defined(__DMC__) && (__DMC__ >= 0x810) + +# 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/external/boost/date_time/adjust_functors.hpp b/external/boost/date_time/adjust_functors.hpp new file mode 100644 index 0000000..7854ae4 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 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 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 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(f_)); + year = static_cast(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 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(f_)); + year = static_cast(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 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 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 _mf; + }; + + +} }//namespace date_time + + +#endif + diff --git a/external/boost/date_time/c_time.hpp b/external/boost/date_time/c_time.hpp new file mode 100644 index 0000000..f19e785 --- /dev/null +++ b/external/boost/date_time/c_time.hpp @@ -0,0 +1,123 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2012-01-30 21:30:03 -0500 (Mon, 30 Jan 2012) $ + */ + + +/*! @file c_time.hpp + Provide workarounds related to the ctime header +*/ + +#include +#include // to be able to convert from string literals to exceptions +#include +#include +#include + +//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 +#endif + +#ifdef BOOST_HAS_FTIME +#include +#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. This struct may be used to store the resulting time. + * The returned pointer may or may not point to this struct, however, + * it will point to the result of the corresponding function. + * All functions do proper checking of the C function results and throw + * exceptions on error. Therefore the functions will never return NULL. + */ + 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??? + #if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 + std::tm tmp; + if(!localtime_r(t,&tmp)) + result = 0; + else + *result = tmp; + #else + result = localtime_r(t, result); + #endif + if (!result) + boost::throw_exception(std::runtime_error("could not convert calendar time to local time")); + 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??? + #if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 + std::tm tmp; + if(!gmtime_r(t,&tmp)) + result = 0; + else + *result = tmp; + #else + result = gmtime_r(t, result); + #endif + if (!result) + boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time")); + 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); + if (!result) + boost::throw_exception(std::runtime_error("could not convert calendar time to local time")); + 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); + if (!result) + boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time")); + 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/external/boost/date_time/compiler_config.hpp b/external/boost/date_time/compiler_config.hpp new file mode 100644 index 0000000..304748f --- /dev/null +++ b/external/boost/date_time/compiler_config.hpp @@ -0,0 +1,169 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2011-07-26 13:40:21 -0400 (Tue, 26 Jul 2011) $ + */ + +#include +#include +#include + +// 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 //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 + +//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 +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 macro marks up places where compiler complains for missing return statement or +// uninitialized variables after calling to boost::throw_exception. +// BOOST_UNREACHABLE_RETURN doesn't work since even compilers that support +// unreachable statements detection emit such warnings. +#if defined(_MSC_VER) +// Use special MSVC extension to markup unreachable code +# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) __assume(false) +#elif !defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION) +// Call to a non-returning function should suppress the warning +# if defined(BOOST_NO_STDC_NAMESPACE) +namespace std { + using ::abort; +} +# endif // defined(BOOST_NO_STDC_NAMESPACE) +# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) std::abort() +#else +// For other poor compilers the specified expression is compiled. Usually, this would be a return statement. +# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) x +#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_SOURCE + * defined before including its header. For examples see: + * greg_month.hpp & greg_month.cpp + * + */ + +// 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 BOOST_SYMBOL_EXPORT +# else +# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_IMPORT +# endif // BOOST_DATE_TIME_SOURCE +#endif // DYN_LINK +// +// 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 +#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) +# elif (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT))) +# define BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS +# endif +#endif + + +#endif diff --git a/external/boost/date_time/constrained_value.hpp b/external/boost/date_time/constrained_value.hpp new file mode 100644 index 0000000..b273dd5 --- /dev/null +++ b/external/boost/date_time/constrained_value.hpp @@ -0,0 +1,121 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + +#include +#include +#include +#include +#include +#include + +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. + * + * value policies + * 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 constrained_value { + public: + typedef typename value_policies::value_type value_type; + // typedef except_type exception_type; + constrained_value(value_type value) : value_((min)()) + { + 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 + class simple_exception_policy + { + struct exception_wrapper : public exception_type + { + // In order to support throw_exception mechanism in the BOOST_NO_EXCEPTIONS mode, + // we'll have to provide a way to acquire std::exception from the exception being thrown. + // However, we cannot derive from it, since it would make it interceptable by this class, + // which might not be what the user wanted. + operator std::out_of_range () const + { + // TODO: Make the message more descriptive by using arguments to on_error + return std::out_of_range("constrained value boundary has been violated"); + } + }; + + typedef typename mpl::if_< + is_base_of< std::exception, exception_type >, + exception_type, + exception_wrapper + >::type actual_exception_type; + + 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) + { + boost::throw_exception(actual_exception_type()); + } + }; + + + +} } //namespace CV + + + + +#endif diff --git a/external/boost/date_time/date.hpp b/external/boost/date_time/date.hpp new file mode 100644 index 0000000..1056fb6 --- /dev/null +++ b/external/boost/date_time/date.hpp @@ -0,0 +1,208 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + */ + +#include +#include +#include + +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. + + Theory + + 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 date : private + boost::less_than_comparable > + { + 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 + { + if (!this->is_special() && !d.is_special()) + { + // The duration underlying type may be wider than the date underlying type. + // Thus we calculate the difference in terms of two durations from some common fixed base date. + typedef typename duration_type::duration_rep_type duration_rep_type; + return duration_type(static_cast< duration_rep_type >(days_) - static_cast< duration_rep_type >(d.days_)); + } + else + { + // In this case the difference will be a special value, too + date_rep_type val = date_rep_type(days_) - date_rep_type(d.days_); + return duration_type(val.as_special()); + } + } + + 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/external/boost/date_time/date_clock_device.hpp b/external/boost/date_time/date_clock_device.hpp new file mode 100644 index 0000000..6ccb26e --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 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/external/boost/date_time/date_defs.hpp b/external/boost/date_time/date_defs.hpp new file mode 100644 index 0000000..bc25b56 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +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/external/boost/date_time/date_duration.hpp b/external/boost/date_time/date_duration.hpp new file mode 100644 index 0000000..3871aac --- /dev/null +++ b/external/boost/date_time/date_duration.hpp @@ -0,0 +1,146 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + + +#include +#include + +namespace boost { +namespace date_time { + + + //! Duration type with date level resolution + template + class date_duration : private + boost::less_than_comparable1< date_duration< duration_rep_traits > + , boost::equality_comparable1< date_duration< duration_rep_traits > + , boost::addable1< date_duration< duration_rep_traits > + , boost::subtractable1< date_duration< duration_rep_traits > + , boost::dividable2< date_duration< duration_rep_traits >, int + > > > > > + { + 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& 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(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(get_rep() * (-1)); + } + //! Division operations on a duration with an integer. + date_duration& operator/=(int divisor) + { + days_ = days_ / divisor; + return *this; + } + + //! return sign information + bool is_negative() const + { + return days_ < 0; + } + + private: + duration_rep days_; + }; + + + /*! Struct for instantiating date_duration with NO special values + * functionality. Allows for transparent implementation of either + * date_duration or date_duration > */ + 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 WITH special values + * functionality. Allows for transparent implementation of either + * date_duration or date_duration > */ + struct duration_traits_adapted + { + typedef long int_type; + typedef boost::date_time::int_adapter impl_type; + static int_type as_number(impl_type i) { return i.as_number(); }; + }; + + +} } //namspace date_time + + +#endif + diff --git a/external/boost/date_time/date_duration_types.hpp b/external/boost/date_time/date_duration_types.hpp new file mode 100644 index 0000000..1512c0e --- /dev/null +++ b/external/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.txt or + * http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include +#include +#include + +namespace boost { +namespace date_time { + + + //! Additional duration type that represents a number of n*7 days + template + class weeks_duration : public date_duration { + public: + weeks_duration(typename duration_config::impl_type w) + : date_duration(w * 7) {} + weeks_duration(special_values sv) + : date_duration(sv) {} + }; + + // predeclare + template + 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 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 months_type; + typedef years_duration 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 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 years_type; + typedef months_duration 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/external/boost/date_time/date_format_simple.hpp b/external/boost/date_time/date_format_simple.hpp new file mode 100644 index 0000000..be21ce4 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include "boost/date_time/parse_format_base.hpp" + +namespace boost { +namespace date_time { + +//! Class to provide simple basic formatting rules +template +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 { +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/external/boost/date_time/date_formatting.hpp b/external/boost/date_time/date_formatting.hpp new file mode 100644 index 0000000..f9721a3 --- /dev/null +++ b/external/boost/date_time/date_formatting.hpp @@ -0,0 +1,133 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2012-01-30 21:30:03 -0500 (Mon, 30 Jan 2012) $ + */ + +#include "boost/date_time/iso_format.hpp" +#include "boost/date_time/compiler_config.hpp" +#include +#include +#include + +/* 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_formatter + { + typedef std::basic_ostream 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_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 ymd_to_string(ymd_type ymd) + { + typedef typename ymd_type::month_type month_type; + std::basic_ostringstream ss; + + // Temporarily switch to classic locale to prevent possible formatting + // of year with comma or other character (for example 2,008). + ss.imbue(std::locale::classic()); + ss << ymd.year; + ss.imbue(std::locale()); + + if (format_type::has_date_sep_chars()) { + ss << format_type::month_sep_char(); + } + //this name is a bit ugly, oh well.... + month_formatter::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_formatter + { + public: + typedef std::basic_string 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_to_string(ymd); + } + }; + + +} } //namespace date_time + + +#endif + diff --git a/external/boost/date_time/date_formatting_limited.hpp b/external/boost/date_time/date_formatting_limited.hpp new file mode 100644 index 0000000..38fee07 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include "boost/date_time/iso_format.hpp" +#include "boost/date_time/compiler_config.hpp" +#include +#include +#include + + +namespace boost { +namespace date_time { + + //! Formats a month as as string into an ostream + template + 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_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::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_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_to_string(ymd); + } + }; + + +} } //namespace date_time + + +#endif + diff --git a/external/boost/date_time/date_formatting_locales.hpp b/external/boost/date_time/date_formatting_locales.hpp new file mode 100644 index 0000000..4ac9c4e --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +#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 +#include +#include + + +namespace boost { +namespace date_time { + + //! Formats a month as as string into an ostream + template + class ostream_month_formatter + { + public: + typedef typename facet_type::month_type month_type; + typedef std::basic_ostream 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 oitr(os); + f.put_month_short(oitr, month.as_enum()); + break; + } + case month_as_long_string: + { + std::ostreambuf_iterator 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 ostream_weekday_formatter + { + public: + typedef typename facet_type::month_type month_type; + typedef std::basic_ostream 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 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 ostream_ymd_formatter + { + public: + typedef typename ymd_type::month_type month_type; + typedef ostream_month_formatter month_formatter_type; + typedef std::basic_ostream ostream_type; + typedef std::basic_string 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 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 ostream_date_formatter + { + public: + typedef std::basic_ostream 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_put(ymd, os, f); + } + else { // output a special value + std::ostreambuf_iterator 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(locale)) { + const facet_type& f = std::use_facet(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/external/boost/date_time/date_generators.hpp b/external/boost/date_time/date_generators.hpp new file mode 100644 index 0000000..1f1a34a --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + +/*! @file date_generators.hpp + Definition and implementation of date algorithm templates +*/ + +#include +#include +#include +#include +#include + +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 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 partial_date : public year_based_generator + { + 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::ostringstream ss; + ss << "No Feb 29th in given year of " << y << "."; + boost::throw_exception(std::invalid_argument(ss.str())); + } + 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::ostringstream 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 nth_kday_of_month : public year_based_generator + { + 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::ostringstream ss; + ss << 'M' + << static_cast(month_) << '.' + << static_cast(wn_) << '.' + << static_cast(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 first_kday_of_month : public year_based_generator + { + 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::ostringstream ss; + ss << 'M' + << static_cast(month_) << '.' + << 1 << '.' + << static_cast(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 last_kday_of_month : public year_based_generator + { + 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::ostringstream ss; + ss << 'M' + << static_cast(month_) << '.' + << 5 << '.' + << static_cast(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 firstkdayafter; + firstkdayafter fkaf(Monday); + fkaf.get_date(date(2002,Feb,1)); + @endcode + * \ingroup date_alg + */ + template + 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 firstkdaybefore; + firstkdaybefore fkbf(Monday); + fkbf.get_date(date(2002,Feb,1)); + @endcode + * \ingroup date_alg + */ + template + 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 + 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 + 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 + 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 + 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/external/boost/date_time/date_iterator.hpp b/external/boost/date_time/date_iterator.hpp new file mode 100644 index 0000000..284dc74 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include + +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. + * + * Template Parameters + * + * date_type + * + * The date_type is a concrete date_type. The date_type must + * define a duration_type and a calendar_type. + */ + template + class date_itr_base { + // works, but benefit unclear at the moment + // class date_itr_base : public std::iterator{ + 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 ¤t_;}; + 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 + /* + * offset_functor + * + * The offset functor must define a get_offset function that takes the + * current point in time and calculates and offset. + * + */ + template + class date_itr : public date_itr_base { + public: + typedef typename date_type::duration_type duration_type; + date_itr(date_type d, int factor=1) : + date_itr_base(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/external/boost/date_time/date_names_put.hpp b/external/boost/date_time/date_names_put.hpp new file mode 100644 index 0000000..c6f0ce2 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +#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 + + +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 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 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(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 + const typename date_names_put::char_type + date_names_put::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 + const typename date_names_put::char_type + date_names_put::separator[2] = + {'-', '\0'} ; + + + //! Generate storage location for a std::locale::id + template + std::locale::id date_names_put::id; + + //! A date name output facet that takes an array of char* to define strings + template > + class all_date_names_put : public date_names_put + { + 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/external/boost/date_time/date_parsing.hpp b/external/boost/date_time/date_parsing.hpp new file mode 100644 index 0000000..f361bc8 --- /dev/null +++ b/external/boost/date_time/date_parsing.hpp @@ -0,0 +1,316 @@ +#ifndef _DATE_TIME_DATE_PARSING_HPP___ +#define _DATE_TIME_DATE_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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $ + */ + +#include +#include +#include +#include +#include +#include +#include + +#if defined(BOOST_DATE_TIME_NO_LOCALE) +#include // ::tolower(int) +#else +#include // 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(std::string inp) + { +#if !defined(BOOST_DATE_TIME_NO_LOCALE) + const std::locale loc(std::locale::classic()); +#endif + std::string::size_type i = 0, n = inp.length(); + for (; i < n; ++i) { + inp[i] = +#if defined(BOOST_DATE_TIME_NO_LOCALE) + static_cast(std::tolower(inp[i])); +#else + // tolower and others were brought in to std for borland >= v564 + // in compiler_config.hpp + std::tolower(inp[i], loc); +#endif + } + return inp; + } + + //! Helper function for parse_date. + /* Used by-value parameter because we change the string and may + * want to preserve the original argument */ + template + inline unsigned short + month_str_to_ushort(std::string const& s) { + if((s.at(0) >= '0') && (s.at(0) <= '9')) { + return boost::lexical_cast(s); + } + else { + std::string str = 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(str); + 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'. Both arrays + * must contain 'size' elements. The index of the match is returned. + * If no match is found, 'size' is returned. + * Ex. "Jan" returns 0, "Dec" returns 11, "Tue" returns 2. + * 'size' can be sent in with: (greg_month::max)() (which 12), + * (greg_weekday::max)() + 1 (which is 7) or date_time::NumSpecialValues */ + template + short find_match(const charT* const* short_names, + const charT* const* long_names, + short size, + const std::basic_string& s) { + for(short i = 0; i < size; ++i){ + if(short_names[i] == s || long_names[i] == s){ + return i; + } + } + return size; // 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 + 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::traits_type traits_type; + typedef boost::char_separator char_separator_type; + typedef boost::tokenizer::const_iterator, + std::basic_string > tokenizer; + typedef boost::tokenizer::const_iterator, + std::basic_string >::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(*beg); + break; + } + case 'm': + { + month = month_str_to_ushort(*beg); + break; + } + case 'd': + { + day = boost::lexical_cast(*beg); + break; + } + } //switch + } + return date_type(year, month, day); + } + + //! Generic function to parse undelimited date (eg: 20020201) + template + 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::const_iterator, + std::basic_string > 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(*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 + inline + date_type + from_stream_type(iterator_type& beg, + iterator_type const& end, + char) + { + std::ostringstream ss; + while(beg != end) { + ss << *beg++; + } + return parse_date(ss.str()); + } + + //! Helper function for 'date gregorian::from_stream()' + /*! Returns the first string found in the stream referenced by the + * begining & end iterators */ + template + inline + date_type + from_stream_type(iterator_type& beg, + iterator_type const& /* end */, + std::string const&) + { + return parse_date(*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 + inline + date_type from_stream_type(iterator_type& beg, + iterator_type const& end, + wchar_t) + { + std::ostringstream ss; +#if !defined(BOOST_DATE_TIME_NO_LOCALE) + std::locale loc; + std::ctype const& fac = std::use_facet >(loc); + while(beg != end) { + ss << fac.narrow(*beg++, 'X'); // 'X' will cause exception to be thrown + } +#else + while(beg != end) { + char c = 'X'; // 'X' will cause exception to be thrown + const wchar_t wc = *beg++; + if (wc >= 0 && wc <= 127) + c = static_cast< char >(wc); + ss << c; + } +#endif + return parse_date(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 + inline + date_type + from_stream_type(iterator_type& beg, + iterator_type const& /* end */, + std::wstring const&) { + std::wstring ws = *beg; + std::ostringstream ss; + std::wstring::iterator wsb = ws.begin(), wse = ws.end(); +#if !defined(BOOST_DATE_TIME_NO_LOCALE) + std::locale loc; + std::ctype const& fac = std::use_facet >(loc); + while(wsb != wse) { + ss << fac.narrow(*wsb++, 'X'); // 'X' will cause exception to be thrown + } +#else + while(wsb != wse) { + char c = 'X'; // 'X' will cause exception to be thrown + const wchar_t wc = *wsb++; + if (wc >= 0 && wc <= 127) + c = static_cast< char >(wc); + ss << c; + } +#endif + return parse_date(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 + period + from_simple_string_type(const std::basic_string& s){ + typedef typename std::basic_string::traits_type traits_type; + typedef typename boost::char_separator char_separator; + typedef typename boost::tokenizer::const_iterator, + std::basic_string > 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 date_string = *tok_it; + // get 2 string iterators and generate a date from them + typename std::basic_string::iterator date_string_start = date_string.begin(), + date_string_end = date_string.end(); + typedef typename std::iterator_traits::iterator>::value_type value_type; + date_type d1 = from_stream_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_string_start, date_string_end, value_type()); + return period(d1, d2); + } +#endif + +} } //namespace date_time + + + + +#endif + diff --git a/external/boost/date_time/dst_rules.hpp b/external/boost/date_time/dst_rules.hpp new file mode 100644 index 0000000..20cb40b --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +/*! @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 + +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 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 dst_calc_engine + { + public: + typedef typename date_type::year_type year_type; + typedef typename date_type::calendar_type calendar_type; + typedef dst_calculator 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 //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 lkday; + typedef date_time::first_kday_of_month fkday; + typedef date_time::nth_kday_of_month nkday; + typedef dst_calculator 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 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/external/boost/date_time/filetime_functions.hpp b/external/boost/date_time/filetime_functions.hpp new file mode 100644 index 0000000..03f63f8 --- /dev/null +++ b/external/boost/date_time/filetime_functions.hpp @@ -0,0 +1,170 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2012-01-30 21:30:03 -0500 (Mon, 30 Jan 2012) $ + */ + +/*! @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 + +#if defined(BOOST_HAS_FTIME) // skip this file if no FILETIME + +#if defined(BOOST_USE_WINDOWS_H) +# include +#endif + +#include +#include +#include + +namespace boost { + +namespace date_time { + +namespace winapi { + +#if !defined(BOOST_USE_WINDOWS_H) + + extern "C" { + + struct FILETIME + { + boost::uint32_t dwLowDateTime; + boost::uint32_t dwHighDateTime; + }; + struct SYSTEMTIME + { + boost::uint16_t wYear; + boost::uint16_t wMonth; + boost::uint16_t wDayOfWeek; + boost::uint16_t wDay; + boost::uint16_t wHour; + boost::uint16_t wMinute; + boost::uint16_t wSecond; + boost::uint16_t wMilliseconds; + }; + + __declspec(dllimport) void __stdcall GetSystemTimeAsFileTime(FILETIME* lpFileTime); + __declspec(dllimport) int __stdcall FileTimeToLocalFileTime(const FILETIME* lpFileTime, FILETIME* lpLocalFileTime); + __declspec(dllimport) void __stdcall GetSystemTime(SYSTEMTIME* lpSystemTime); + __declspec(dllimport) int __stdcall SystemTimeToFileTime(const SYSTEMTIME* lpSystemTime, FILETIME* lpFileTime); + + } // extern "C" + +#endif // defined(BOOST_USE_WINDOWS_H) + + typedef FILETIME file_time; + typedef SYSTEMTIME system_time; + + inline void get_system_time_as_file_time(file_time& ft) + { +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) + // Some runtime library implementations expect local times as the norm for ctime. + file_time ft_utc; + GetSystemTimeAsFileTime(&ft_utc); + FileTimeToLocalFileTime(&ft_utc, &ft); +#elif defined(BOOST_HAS_GETSYSTEMTIMEASFILETIME) + GetSystemTimeAsFileTime(&ft); +#else + system_time st; + GetSystemTime(&st); + SystemTimeToFileTime(&st, &ft); +#endif + } + + /*! + * The function converts file_time into number of microseconds elapsed since 1970-Jan-01 + * + * \note Only dates after 1970-Jan-01 are supported. Dates before will be wrapped. + * + * \note The function is templated on the FILETIME type, so that + * it can be used with both native FILETIME and the ad-hoc + * boost::date_time::winapi::file_time type. + */ + template< typename FileTimeT > + inline boost::uint64_t file_time_to_microseconds(FileTimeT const& ft) + { + /* shift is difference between 1970-Jan-01 & 1601-Jan-01 + * in 100-nanosecond intervals */ + const uint64_t shift = 116444736000000000ULL; // (27111902 << 32) + 3577643008 + + union { + FileTimeT as_file_time; + uint64_t as_integer; // 100-nanos since 1601-Jan-01 + } caster; + caster.as_file_time = ft; + + caster.as_integer -= shift; // filetime is now 100-nanos since 1970-Jan-01 + return (caster.as_integer / 10); // truncate to microseconds + } + +} // namespace winapi + +//! 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 file_time's sub second value + * will be truncated. Nanosecond resolution has no truncation. + * + * \note The function is templated on the FILETIME type, so that + * it can be used with both native FILETIME and the ad-hoc + * boost::date_time::winapi::file_time type. + */ +template< typename TimeT, typename FileTimeT > +inline +TimeT time_from_ftime(const FileTimeT& ft) +{ + typedef typename TimeT::date_type date_type; + typedef typename TimeT::date_duration_type date_duration_type; + typedef typename TimeT::time_duration_type time_duration_type; + + // https://svn.boost.org/trac/boost/ticket/2523 + // Since this function can be called with arbitrary times, including ones that + // are before 1970-Jan-01, we'll have to cast the time a bit differently, + // than it is done in the file_time_to_microseconds function. This allows to + // avoid integer wrapping for dates before 1970-Jan-01. + union { + FileTimeT as_file_time; + uint64_t as_integer; // 100-nanos since 1601-Jan-01 + } caster; + caster.as_file_time = ft; + + uint64_t sec = caster.as_integer / 10000000UL; + uint32_t sub_sec = (caster.as_integer % 10000000UL) // 100-nanoseconds since the last second +#if !defined(BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG) + / 10; // microseconds since the last second +#else + * 100; // nanoseconds since the last second +#endif + + // split sec into usable chunks: days, hours, minutes, & seconds + const uint32_t sec_per_day = 86400; // seconds per day + uint32_t days = static_cast< uint32_t >(sec / sec_per_day); + uint32_t tmp = static_cast< uint32_t >(sec % sec_per_day); + uint32_t hours = tmp / 3600; // sec_per_hour + tmp %= 3600; + uint32_t minutes = tmp / 60; // sec_per_min + tmp %= 60; + uint32_t seconds = tmp; // seconds + + date_duration_type dd(days); + date_type d = date_type(1601, Jan, 01) + dd; + return TimeT(d, time_duration_type(hours, minutes, seconds, sub_sec)); +} + +}} // boost::date_time + +#endif // BOOST_HAS_FTIME + +#endif // DATE_TIME_FILETIME_FUNCTIONS_HPP__ diff --git a/external/boost/date_time/gregorian/conversion.hpp b/external/boost/date_time/gregorian/conversion.hpp new file mode 100644 index 0000000..c505bdd --- /dev/null +++ b/external/boost/date_time/gregorian/conversion.hpp @@ -0,0 +1,68 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $ + */ + +#include +#include +#include +#include +#include +#include +#include + +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_special()) + { + std::string s = "tm unable to handle "; + switch (d.as_special()) + { + case date_time::not_a_date_time: + s += "not-a-date-time value"; break; + case date_time::neg_infin: + s += "-infinity date value"; break; + case date_time::pos_infin: + s += "+infinity date value"; break; + default: + s += "a special date value"; break; + } + boost::throw_exception(std::out_of_range(s)); + } + + std::tm datetm; + std::memset(&datetm, 0, sizeof(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_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(datetm.tm_year+1900), + static_cast(datetm.tm_mon+1), + static_cast(datetm.tm_mday)); + } + +} } //namespace boost::gregorian + +#endif diff --git a/external/boost/date_time/gregorian/formatters.hpp b/external/boost/date_time/gregorian/formatters.hpp new file mode 100644 index 0000000..786e79f --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 + inline + std::basic_string to_simple_string_type(const date& d) { + return date_time::date_formatter,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(d); + } + + + // wrapper function for to_simple_(w)string(date_period) + template + inline std::basic_string to_simple_string_type(const date_period& d) { + typedef std::basic_string string_type; + charT b = '[', m = '/', e=']'; + + string_type d1(date_time::date_formatter,charT>::date_to_string(d.begin())); + string_type d2(date_time::date_formatter,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(d); + } + + // wrapper function for to_iso_(w)string(date_period) + template + inline std::basic_string to_iso_string_type(const date_period& d) { + charT sep = '/'; + std::basic_string s(date_time::date_formatter,charT>::date_to_string(d.begin())); + return s + sep + date_time::date_formatter,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(d); + } + + + // wrapper function for to_iso_extended_(w)string(date) + template + inline std::basic_string to_iso_extended_string_type(const date& d) { + return date_time::date_formatter,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(d); + } + + // wrapper function for to_iso_(w)string(date) + template + inline std::basic_string to_iso_string_type(const date& d) { + return date_time::date_formatter,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(d); + } + + + + + // wrapper function for to_sql_(w)string(date) + template + inline std::basic_string to_sql_string_type(const date& d) + { + date::ymd_type ymd = d.year_month_day(); + std::basic_ostringstream 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(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(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(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(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(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(d); + } + inline std::wstring to_sql_wstring(const date& d) { + return to_sql_string_type(d); + } +#endif // BOOST_NO_STD_WSTRING + +} } //namespace gregorian + + +#endif + diff --git a/external/boost/date_time/gregorian/formatters_limited.hpp b/external/boost/date_time/gregorian/formatters_limited.hpp new file mode 100644 index 0000000..4531ebe --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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_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_to_string(d.begin())); + std::string d2(date_time::date_formatter >::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_to_string(d.begin())); + return s + "/" + date_time::date_formatter >::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_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_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/external/boost/date_time/gregorian/greg_calendar.hpp b/external/boost/date_time/gregorian/greg_calendar.hpp new file mode 100644 index 0000000..483ead5 --- /dev/null +++ b/external/boost/date_time/gregorian/greg_calendar.hpp @@ -0,0 +1,48 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + */ + +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace gregorian { + + //!An internal date representation that includes infinities, not a date + typedef date_time::int_adapter fancy_date_rep; + + //! Gregorian calendar for this implementation, hard work in the base + class gregorian_calendar : + public date_time::gregorian_calendar_base { + 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/external/boost/date_time/gregorian/greg_date.hpp b/external/boost/date_time/gregorian/greg_date.hpp new file mode 100644 index 0000000..ad67c0c --- /dev/null +++ b/external/boost/date_time/gregorian/greg_date.hpp @@ -0,0 +1,136 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + */ + +#include +#include +#include +#include +#include + +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 + { + 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_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(y, m, d) + { + if (gregorian_calendar::end_of_month_day(y, m) < d) { + boost::throw_exception(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(ymd) + {} + //! Needed copy constructor + explicit date(const date_int_type& rhs): + date_time::date(rhs) + {} + //! Needed copy constructor + explicit date(date_rep_type rhs): + date_time::date(rhs) + {} + //! Constructor for infinities, not a date, max and min date + explicit date(special_values sv): + date_time::date(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((*this-start_of_year).days() + 1); + return day_of_year_type(doy); + } + //!Return the Modified Julian Day number for the date. + date_int_type 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/external/boost/date_time/gregorian/greg_day.hpp b/external/boost/date_time/gregorian/greg_day.hpp new file mode 100644 index 0000000..92ea6ab --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include "boost/date_time/constrained_value.hpp" +#include +#include + +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 greg_day_policies; + + //! Generated represetation for gregorian day of month + typedef CV::constrained_value 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/external/boost/date_time/gregorian/greg_day_of_year.hpp b/external/boost/date_time/gregorian/greg_day_of_year.hpp new file mode 100644 index 0000000..36b22c2 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include "boost/date_time/constrained_value.hpp" +#include +#include + +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 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_rep; + + +} } //namespace gregorian + + + +#endif diff --git a/external/boost/date_time/gregorian/greg_duration.hpp b/external/boost/date_time/gregorian/greg_duration.hpp new file mode 100644 index 0000000..fd75542 --- /dev/null +++ b/external/boost/date_time/gregorian/greg_duration.hpp @@ -0,0 +1,134 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + +#include +#include +#include + +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 + */ + class date_duration : + public boost::date_time::date_duration< date_duration_rep > + { + typedef boost::date_time::date_duration< date_duration_rep > base_type; + + public: + typedef base_type::duration_rep duration_rep; + + //! Construct from a day count + explicit date_duration(duration_rep day_count = 0) : base_type(day_count) {} + + //! construct from special_values + date_duration(date_time::special_values sv) : base_type(sv) {} + + //! Copy constructor + date_duration(const date_duration& other) : base_type(static_cast< base_type const& >(other)) + {} + + //! Construct from another date_duration + date_duration(const base_type& other) : base_type(other) + {} + + // Relational operators + // NOTE: Because of date_time::date_duration< T > design choice we don't use Boost.Operators here, + // because we need the class to be a direct base. Either lose EBO, or define operators by hand. + // The latter is more effecient. + bool operator== (const date_duration& rhs) const + { + return base_type::operator== (rhs); + } + bool operator!= (const date_duration& rhs) const + { + return !operator== (rhs); + } + bool operator< (const date_duration& rhs) const + { + return base_type::operator< (rhs); + } + bool operator> (const date_duration& rhs) const + { + return !(base_type::operator< (rhs) || base_type::operator== (rhs)); + } + bool operator<= (const date_duration& rhs) const + { + return (base_type::operator< (rhs) || base_type::operator== (rhs)); + } + bool operator>= (const date_duration& rhs) const + { + return !base_type::operator< (rhs); + } + + //! Subtract another duration -- result is signed + date_duration& operator-= (const date_duration& rhs) + { + base_type::operator-= (rhs); + return *this; + } + friend date_duration operator- (date_duration rhs, date_duration const& lhs) + { + rhs -= lhs; + return rhs; + } + + //! Add a duration -- result is signed + date_duration& operator+= (const date_duration& rhs) + { + base_type::operator+= (rhs); + return *this; + } + friend date_duration operator+ (date_duration rhs, date_duration const& lhs) + { + rhs += lhs; + return rhs; + } + + //! unary- Allows for dd = -date_duration(2); -> dd == -2 + date_duration operator- ()const + { + return date_duration(get_rep() * (-1)); + } + + //! Division operations on a duration with an integer. + date_duration& operator/= (int divisor) + { + base_type::operator/= (divisor); + return *this; + } + friend date_duration operator/ (date_duration rhs, int lhs) + { + rhs /= lhs; + return rhs; + } + + //! Returns the smallest duration -- used by to calculate 'end' + static date_duration unit() + { + return date_duration(base_type::unit().get_rep()); + } + }; + + //! Shorthand for date_duration + typedef date_duration days; + +} } //namespace gregorian + +#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES) +#include +#endif + +#endif diff --git a/external/boost/date_time/gregorian/greg_duration_types.hpp b/external/boost/date_time/gregorian/greg_duration_types.hpp new file mode 100644 index 0000000..3d1ce62 --- /dev/null +++ b/external/boost/date_time/gregorian/greg_duration_types.hpp @@ -0,0 +1,43 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + + +#include +#include +#include +#include +#include + +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_rep; + typedef date_time::month_functor month_adjustor_type; + }; + + typedef date_time::months_duration months; + typedef date_time::years_duration years; + + class weeks_duration : public date_duration { + public: + weeks_duration(duration_rep w) + : date_duration(w * 7) {} + weeks_duration(date_time::special_values sv) + : date_duration(sv) {} + }; + + typedef weeks_duration weeks; + +}} // namespace boost::gregorian + +#endif // GREG_DURATION_TYPES_HPP___ diff --git a/external/boost/date_time/gregorian/greg_facet.hpp b/external/boost/date_time/gregorian/greg_facet.hpp new file mode 100644 index 0000000..9c3877e --- /dev/null +++ b/external/boost/date_time/gregorian/greg_facet.hpp @@ -0,0 +1,354 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-23 06:13:35 -0500 (Sun, 23 Nov 2008) $ + */ + +#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" + +//This file is basically commented out if locales are not supported +#ifndef BOOST_DATE_TIME_NO_LOCALE + +#include +#include +#include +#include +#include + +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_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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& os, const date& d) + { + typedef boost::date_time::date_names_put facet_def; + typedef boost::date_time::ostream_date_formatter 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& os, const greg_month& m) + { + typedef boost::date_time::date_names_put facet_def; + typedef boost::date_time::ostream_month_formatter greg_month_formatter; + std::locale locale = os.getloc(); + if (std::has_facet(locale)) { + const facet_def& f = std::use_facet(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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& os, const greg_weekday& wd) + { + typedef boost::date_time::date_names_put facet_def; + typedef boost::date_time::ostream_weekday_formatter greg_weekday_formatter; + std::locale locale = os.getloc(); + if (std::has_facet(locale)) { + const facet_def& f = std::use_facet(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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& os, const date_duration& dd) + { + //os << dd.days(); + os << dd.get_rep(); + return os; + } + + //! operator<< for gregorian::partial_date. Output: "Jan 1" + template + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_ostream& + operator<<(std::basic_ostream& 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 + inline + std::basic_istream& operator>>(std::basic_istream& is, date& d) + { + std::istream_iterator, charT> beg(is), eos; + + typedef boost::date_time::all_date_names_put facet_def; + d = from_stream(beg, eos); + return is; + } +#endif // BOOST_NO_STD_ITERATOR_TRAITS + + //! operator>> for gregorian::date_duration + template + inline + std::basic_istream& operator>>(std::basic_istream& is, + date_duration& dd) + { + long v; + is >> v; + dd = date_duration(v); + return is; + } + + //! operator>> for gregorian::date_period + template + inline + std::basic_istream& operator>>(std::basic_istream& is, + date_period& dp) + { + std::basic_string s; + is >> s; + dp = date_time::from_simple_string_type(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* 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* create_facet_def(wchar_t type); +#endif // BOOST_NO_STD_WSTRING + + //! operator>> for gregorian::greg_month - throws exception if invalid month given + template + inline + std::basic_istream& operator>>(std::basic_istream& is,greg_month& m) + { + typedef boost::date_time::all_date_names_put facet_def; + + std::basic_string s; + is >> s; + + if(!std::has_facet(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(is.getloc()); + num = date_time::find_match(f.get_short_month_names(), + f.get_long_month_names(), + (greg_month::max)(), s); // greg_month spans 1..12, so max returns the array size, + // which is needed by find_match + } + /* 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&){ + charT a = '\0'; + std::auto_ptr< 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); // greg_month spans 1..12, so max returns the array size, + // which is needed by find_match + } + + ++num; // months numbered 1-12 + m = greg_month(num); + + return is; + } + + //! operator>> for gregorian::greg_weekday - throws exception if invalid weekday given + template + inline + std::basic_istream& operator>>(std::basic_istream& is,greg_weekday& wd) + { + typedef boost::date_time::all_date_names_put facet_def; + + std::basic_string s; + is >> s; + + if(!std::has_facet(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(is.getloc()); + num = date_time::find_match(f.get_short_weekday_names(), + f.get_long_weekday_names(), + (greg_weekday::max)() + 1, s); // greg_weekday spans 0..6, so increment is needed + // to form the array size which is needed by find_match + } + /* 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&){ + charT a = '\0'; + std::auto_ptr< 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)() + 1, s); // greg_weekday spans 0..6, so increment is needed + // to form the array size which is needed by find_match + } + + wd = greg_weekday(num); // weekdays numbered 0-6 + return is; + } + +} } //namespace gregorian + +#endif + + +#endif + diff --git a/external/boost/date_time/gregorian/greg_month.hpp b/external/boost/date_time/gregorian/greg_month.hpp new file mode 100644 index 0000000..fc9c861 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 +#include +#include +#include +#include + +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 greg_month_policies; + //! A constrained range that implements the gregorian_month rules + typedef CV::constrained_value 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 month_map_type; + typedef boost::shared_ptr month_map_ptr_type; + //! Construct a month from the months_of_year enumeration + greg_month(month_enum theMonth) : + greg_month_rep(static_cast(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(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/external/boost/date_time/gregorian/greg_weekday.hpp b/external/boost/date_time/gregorian/greg_weekday.hpp new file mode 100644 index 0000000..9b566c4 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + +#include "boost/date_time/constrained_value.hpp" +#include "boost/date_time/date_defs.hpp" +#include "boost/date_time/compiler_config.hpp" +#include +#include + +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 is out of range 0..6")) {} + }; + typedef CV::simple_exception_policy greg_weekday_policies; + typedef CV::constrained_value 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(value_);} + + + }; + + + +} } //namespace gregorian + + + +#endif diff --git a/external/boost/date_time/gregorian/greg_year.hpp b/external/boost/date_time/gregorian/greg_year.hpp new file mode 100644 index 0000000..ef1735f --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include "boost/date_time/constrained_value.hpp" +#include +#include + +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 greg_year_policies; + + //! Generated representation for gregorian year + typedef CV::constrained_value 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/external/boost/date_time/gregorian/greg_ymd.hpp b/external/boost/date_time/gregorian/greg_ymd.hpp new file mode 100644 index 0000000..086e73d --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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_month_day; + + + +} } //namespace gregorian + + + + +#endif + diff --git a/external/boost/date_time/gregorian/gregorian_types.hpp b/external/boost/date_time/gregorian/gregorian_types.hpp new file mode 100644 index 0000000..0c74857 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +/*! @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_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 year_based_generator; + + //! A date generation object type + typedef date_time::partial_date partial_date; + + typedef date_time::nth_kday_of_month nth_kday_of_month; + typedef nth_kday_of_month nth_day_of_the_week_in_month; + + typedef date_time::first_kday_of_month first_kday_of_month; + typedef first_kday_of_month first_day_of_the_week_in_month; + + typedef date_time::last_kday_of_month last_kday_of_month; + typedef last_kday_of_month last_day_of_the_week_in_month; + + typedef date_time::first_kday_after first_kday_after; + typedef first_kday_after first_day_of_the_week_after; + + typedef date_time::first_kday_before 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 day_clock; + + //! Base date_iterator type for gregorian types. + /*!\ingroup date_basics + */ + typedef date_time::date_itr_base date_iterator; + + //! A day level iterator + /*!\ingroup date_basics + */ + typedef date_time::date_itr, + date> day_iterator; + //! A week level iterator + /*!\ingroup date_basics + */ + typedef date_time::date_itr, + date> week_iterator; + //! A month level iterator + /*!\ingroup date_basics + */ + typedef date_time::date_itr, + date> month_iterator; + //! A year level iterator + /*!\ingroup date_basics + */ + typedef date_time::date_itr, + 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/external/boost/date_time/gregorian/parsers.hpp b/external/boost/date_time/gregorian/parsers.hpp new file mode 100644 index 0000000..95d4f23 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 +#include + +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(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(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(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(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(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(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 + inline date from_stream(iterator_type beg, iterator_type end) { + if(beg == end) + { + return date(not_a_date_time); + } + typedef typename std::iterator_traits::value_type value_type; + return date_time::from_stream_type(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(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(s); + } +# endif // BOOST_NO_STD_WSTRING +#endif + +} } //namespace gregorian + +#endif diff --git a/external/boost/date_time/gregorian_calendar.hpp b/external/boost/date_time/gregorian_calendar.hpp new file mode 100644 index 0000000..c27c09e --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + */ + + +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 + 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 date_int_type 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(date_int_type); + 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/external/boost/date_time/gregorian_calendar.ipp b/external/boost/date_time/gregorian_calendar.ipp new file mode 100644 index 0000000..19622fe --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2012-01-30 21:30:03 -0500 (Mon, 30 Jan 2012) $ + */ + +#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 year-month-day into a day of the week number + */ + template + BOOST_DATE_TIME_INLINE + unsigned short + gregorian_calendar_base::day_of_week(const ymd_type& ymd) { + unsigned short a = static_cast((14-ymd.month)/12); + unsigned short y = static_cast(ymd.year - a); + unsigned short m = static_cast(ymd.month + 12*a - 2); + unsigned short d = static_cast((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 + BOOST_DATE_TIME_INLINE + int + gregorian_calendar_base::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(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 + BOOST_DATE_TIME_INLINE + date_int_type_ + gregorian_calendar_base::day_number(const ymd_type& ymd) + { + unsigned short a = static_cast((14-ymd.month)/12); + unsigned short y = static_cast(ymd.year + 4800 - a); + unsigned short m = static_cast(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 + BOOST_DATE_TIME_INLINE + date_int_type_ + gregorian_calendar_base::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 + BOOST_DATE_TIME_INLINE + date_int_type_ + gregorian_calendar_base::modjulian_day_number(const ymd_type& ymd) + { + return julian_day_number(ymd)-2400001; //prerounded + } + + //! Change a day number into a year-month-day + template + BOOST_DATE_TIME_INLINE + ymd_type_ + gregorian_calendar_base::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(e - ((153*m + 2)/5) + 1); + unsigned short month = static_cast(m + 3 - 12 * (m/10)); + year_type year = static_cast(100*b + d - 4800 + (m/10)); + //std::cout << year << "-" << month << "-" << day << "\n"; + + return ymd_type(static_cast(year),month,day); + } + + //! Change a day number into a year-month-day + template + BOOST_DATE_TIME_INLINE + ymd_type_ + gregorian_calendar_base::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(e - ((153*m + 2)/5) + 1); + unsigned short month = static_cast(m + 3 - 12 * (m/10)); + year_type year = static_cast(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 + BOOST_DATE_TIME_INLINE + ymd_type_ + gregorian_calendar_base::from_modjulian_day_number(date_int_type 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 + BOOST_DATE_TIME_INLINE + bool + gregorian_calendar_base::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 + BOOST_DATE_TIME_INLINE + unsigned short + gregorian_calendar_base::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 + BOOST_DATE_TIME_INLINE + ymd_type_ + gregorian_calendar_base::epoch() + { + return ymd_type(1400,1,1); + } + + //! Defines length of a week for week calculations + template + BOOST_DATE_TIME_INLINE + unsigned short + gregorian_calendar_base::days_in_week() + { + return 7; + } + + +} } //namespace gregorian + + diff --git a/external/boost/date_time/int_adapter.hpp b/external/boost/date_time/int_adapter.hpp new file mode 100644 index 0000000..fc98fc1 --- /dev/null +++ b/external/boost/date_time/int_adapter.hpp @@ -0,0 +1,509 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + + +#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" +#ifndef BOOST_DATE_TIME_NO_LOCALE +# include +#endif + +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 +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::max)(); + } + static const int_adapter neg_infinity() + { + return (::std::numeric_limits::min)(); + } + static const int_adapter not_a_number() + { + return (::std::numeric_limits::max)()-1; + } + static int_adapter max BOOST_PREVENT_MACRO_SUBSTITUTION () + { + return (::std::numeric_limits::max)()-2; + } + static int_adapter min BOOST_PREVENT_MACRO_SUBSTITUTION () + { + return (::std::numeric_limits::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::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::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::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::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 + inline + int_adapter operator+(const int_adapter& 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(value_ + rhs.as_number()); + } + + int_adapter operator+(const int_type rhs) const + { + if(is_special()) + { + if (is_nan()) + { + return int_adapter(not_a_number()); + } + if (is_infinity()) + { + return *this; + } + } + return int_adapter(value_ + rhs); + } + + /*! Operator allows for subtracting dissimilar int_adapter types. + * The return type will match that of the the calling object's type */ + template + inline + int_adapter operator-(const int_adapter& 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(value_ - rhs.as_number()); + } + int_adapter operator-(const int_type rhs) const + { + if(is_special()) + { + if (is_nan()) + { + return int_adapter(not_a_number()); + } + if (is_infinity()) + { + return *this; + } + } + return int_adapter(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(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(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(not_a_number()); + } + if(rhs != 0) + { + return mult_div_specials(rhs); + } + else { // let divide by zero blow itself up + return int_adapter(value_ / rhs.value_); + } + } + return int_adapter(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(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(not_a_number()); + } + if(rhs != 0) + { + return mult_div_specials(rhs); + } + else { // let divide by zero blow itself up + return int_adapter(value_ % rhs.value_); + } + } + return int_adapter(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(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::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(not_a_number()); + } + if((*this > 0 && rhs > 0) || (*this < min_value && rhs < min_value)) { + return int_adapter(pos_infinity()); + } + if((*this > 0 && rhs < min_value) || (*this < min_value && rhs > 0)) { + return int_adapter(neg_infinity()); + } + //implied -> if(this->value_ == 0 || rhs.value_ == 0) + return int_adapter(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::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(not_a_number()); + } + if((*this > 0 && rhs > 0) || (*this < min_value && rhs < 0)) { + return int_adapter(pos_infinity()); + } + if((*this > 0 && rhs < 0) || (*this < min_value && rhs > 0)) { + return int_adapter(neg_infinity()); + } + //implied -> if(this->value_ == 0 || rhs.value_ == 0) + return int_adapter(not_a_number()); + } + +}; + +#ifndef BOOST_DATE_TIME_NO_LOCALE + /*! Expected output is either a numeric representation + * or a special values representation.
    + * Ex. "12", "+infinity", "not-a-number", etc. */ + //template, typename int_type> + template + inline + std::basic_ostream& + operator<<(std::basic_ostream& os, const int_adapter& 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/external/boost/date_time/iso_format.hpp b/external/boost/date_time/iso_format.hpp new file mode 100644 index 0000000..8262fa2 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#include "boost/date_time/parse_format_base.hpp" + +namespace boost { +namespace date_time { + +//! Class to provide common iso formatting spec +template +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 { +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 iso_format : public iso_format_base { +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 iso_extended_format : public iso_format_base { +public: + //! Extended format needs char separators + static bool has_date_sep_chars() + { + return true; + } + +}; + +} } //namespace date_time + + + + +#endif diff --git a/external/boost/date_time/locale_config.hpp b/external/boost/date_time/locale_config.hpp new file mode 100644 index 0000000..d01e008 --- /dev/null +++ b/external/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-2006 CrystalClear Software, Inc. + * Use, modification and distribution is subject to the + * Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +// 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/external/boost/date_time/microsec_time_clock.hpp b/external/boost/date_time/microsec_time_clock.hpp new file mode 100644 index 0000000..9396579 --- /dev/null +++ b/external/boost/date_time/microsec_time_clock.hpp @@ -0,0 +1,127 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2010-05-10 05:15:48 -0400 (Mon, 10 May 2010) $ + */ + + +/*! @file microsec_time_clock.hpp + This file contains a high resolution time clock implementation. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#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 microsec_clock + { + private: + //! Type for the function used to convert time_t to tm + typedef std::tm* (*time_converter)(const std::time_t*, std::tm*); + + 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 + static time_type local_time(shared_ptr tz_ptr) + { + typedef typename time_type::utc_time_type utc_time_type; + typedef second_clock 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::local_time() - utc_offset; + return time_type(utc_time, tz_ptr); + } + + //! Returns the local time based on computer clock settings + static time_type local_time() + { + return create_time(&c_time::localtime); + } + + //! Returns the UTC time based on computer settings + static time_type universal_time() + { + return create_time(&c_time::gmtime); + } + + private: + static time_type create_time(time_converter converter) + { +#ifdef BOOST_HAS_GETTIMEOFDAY + timeval tv; + gettimeofday(&tv, 0); //gettimeofday does not support TZ adjust on Linux. + std::time_t t = tv.tv_sec; + boost::uint32_t sub_sec = tv.tv_usec; +#elif defined(BOOST_HAS_FTIME) + winapi::file_time ft; + winapi::get_system_time_as_file_time(ft); + uint64_t micros = winapi::file_time_to_microseconds(ft); // it will not wrap, since ft is the current time + // and cannot be before 1970-Jan-01 + std::time_t t = static_cast(micros / 1000000UL); // seconds since epoch + // microseconds -- static casts supress warnings + boost::uint32_t sub_sec = static_cast(micros % 1000000UL); +#else +#error Internal Boost.DateTime error: BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK is defined, however neither gettimeofday nor FILETIME support is detected. +#endif + + std::tm curr; + std::tm* curr_ptr = converter(&t, &curr); + date_type d(static_cast< typename date_type::year_type::value_type >(curr_ptr->tm_year + 1900), + static_cast< typename date_type::month_type::value_type >(curr_ptr->tm_mon + 1), + static_cast< typename date_type::day_type::value_type >(curr_ptr->tm_mday)); + + //The following line will adjust 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(static_cast< typename time_duration_type::hour_type >(curr_ptr->tm_hour), + static_cast< typename time_duration_type::min_type >(curr_ptr->tm_min), + static_cast< typename time_duration_type::sec_type >(curr_ptr->tm_sec), + sub_sec * adjust); + + return time_type(d,td); + } + }; + + +} } //namespace date_time + +#endif //BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK + + +#endif + diff --git a/external/boost/date_time/parse_format_base.hpp b/external/boost/date_time/parse_format_base.hpp new file mode 100644 index 0000000..b17a5c8 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +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/external/boost/date_time/period.hpp b/external/boost/date_time/period.hpp new file mode 100644 index 0000000..c67bc36 --- /dev/null +++ b/external/boost/date_time/period.hpp @@ -0,0 +1,377 @@ +#ifndef DATE_TIME_PERIOD_HPP___ +#define DATE_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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +/*! \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 period : private + boost::less_than_comparable + , boost::equality_comparable< period + > > + { + 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); + void expand(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 + inline + period::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 + inline + period::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 + inline + point_rep period::begin() const + { + return begin_; + } + + //! Return one past the last element + template + inline + point_rep period::end() const + { + return last_ + duration_rep::unit(); + } + + //! Return the last item in the period + template + inline + point_rep period::last() const + { + return last_; + } + + //! True if period is ill formed (length is zero or less) + template + inline + bool period::is_null() const + { + return end() <= begin_; + } + + //! Return the length of the period + template + inline + duration_rep period::length() const + { + if(last_ < begin_){ // invalid period + return last_+duration_rep::unit() - begin_; + } + else{ + return end() - begin_; // normal case + } + } + + //! Equality operator + template + inline + bool period::operator==(const period& rhs) const + { + return ((begin_ == rhs.begin_) && + (last_ == rhs.last_)); + } + + //! Strict as defined by rhs.last <= lhs.last + template + inline + bool period::operator<(const period& rhs) const + { + return (last_ < rhs.begin_); + } + + + //! Shift the start and end by the specified amount + template + inline + void period::shift(const duration_rep& d) + { + begin_ = begin_ + d; + last_ = last_ + d; + } + + /** Expands the size of the period by the duration on both ends. + * + *So before expand + *@code + * + * [-------] + * ^ ^ ^ ^ ^ ^ ^ + * 1 2 3 4 5 6 7 + * + *@endcode + * After expand(2) + *@code + * + * [----------------------] + * ^ ^ ^ ^ ^ ^ ^ + * 1 2 3 4 5 6 7 + * + *@endcode + */ + template + inline + void period::expand(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 + inline + bool period::contains(const point_rep& point) const + { + return ((point >= begin_) && + (point <= last_)); + } + + + //! True if this period fully contains (or equals) the other period + template + inline + bool period::contains(const period& 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 + inline + bool + period::is_adjacent(const period& 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 + inline + bool + period::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 + inline + bool + period::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 + inline + bool period::intersects(const period& 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 + inline + period + period::intersection(const period& other) const + { + if (begin_ > other.begin_) { + if (last_ <= other.last_) { //case2 + return *this; + } + //case 1 + return period(begin_, other.end()); + } + else { + if (last_ <= other.last_) { //case3 + return period(other.begin_, this->end()); + } + //case4 + return other; + } + //unreachable + } + + //! Returns the union of intersecting periods -- or null period + /*! + */ + template + inline + period + period::merge(const period& other) const + { + if (this->intersects(other)) { + if (begin_ < other.begin_) { + return period(begin_, last_ > other.last_ ? this->end() : other.end()); + } + + return period(other.begin_, last_ > other.last_ ? this->end() : other.end()); + + } + return period(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 = min(p1.start, p2.start) + * end = max(p1.end , p2.end) + *@code + * [---p1---) + * [---p2---) + * result: + * [-----------p3----------) + *@endcode + */ + template + inline + period + period::span(const period& other) const + { + point_rep start((begin_ < other.begin_) ? begin() : other.begin()); + point_rep newend((last_ < other.last_) ? other.end() : this->end()); + return period(start, newend); + } + + +} } //namespace date_time + + + +#endif diff --git a/external/boost/date_time/posix_time/conversion.hpp b/external/boost/date_time/posix_time/conversion.hpp new file mode 100644 index 0000000..3fb21d7 --- /dev/null +++ b/external/boost/date_time/posix_time/conversion.hpp @@ -0,0 +1,94 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $ + */ + +#include +#include +#include +#include +#include +#include // absolute_value +#include + +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(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; + std::memset(&timetm, 0, sizeof(timetm)); + 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 FILETIME is part of the Win32 API, so it is not portable to non-windows + * platforms. + * + * \note The function is templated on the FILETIME type, so that + * it can be used with both native FILETIME and the ad-hoc + * boost::date_time::winapi::file_time type. + */ + template< typename TimeT, typename FileTimeT > + inline + TimeT from_ftime(const FileTimeT& ft) + { + return boost::date_time::time_from_ftime(ft); + } + +#endif // BOOST_HAS_FTIME + +} } //namespace boost::posix_time + + + + +#endif + diff --git a/external/boost/date_time/posix_time/date_duration_operators.hpp b/external/boost/date_time/posix_time/date_duration_operators.hpp new file mode 100644 index 0000000..e6899ba --- /dev/null +++ b/external/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.txt or + * http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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/external/boost/date_time/posix_time/posix_time_config.hpp b/external/boost/date_time/posix_time/posix_time_config.hpp new file mode 100644 index 0000000..60c3f7e --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2009-06-04 07:52:28 -0400 (Thu, 04 Jun 2009) $ + */ + +#include //for MCW 7.2 std::abs(long long) +#include +#include +#include +#include +#include +#include +#include +#include + +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 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 time_res_traits; + +#endif + + + //! Base time duration type + /*! \ingroup time_basics + */ + class time_duration : + public date_time::time_duration + { + 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(hour,min,sec,fs) + {} + time_duration() : + date_time::time_duration(0,0,0) + {} + //! Construct from special_values + time_duration(boost::date_time::special_values sv) : + date_time::time_duration(sv) + {} + //Give duration access to ticks constructor -- hide from users + friend class date_time::time_duration; + private: + explicit time_duration(impl_type tick_count) : + date_time::time_duration(tick_count) + {} + }; + +#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/external/boost/date_time/posix_time/posix_time_duration.hpp b/external/boost/date_time/posix_time/posix_time_duration.hpp new file mode 100644 index 0000000..db3b85f --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 millisec; + typedef date_time::subsecond_duration milliseconds; + + //! Allows expression of durations as micro seconds + /*! \ingroup time_basics + */ + typedef date_time::subsecond_duration microsec; + typedef date_time::subsecond_duration 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 nanosec; + typedef date_time::subsecond_duration nanoseconds; + + +#endif + + + + +} }//namespace posix_time + + +#endif + diff --git a/external/boost/date_time/posix_time/posix_time_system.hpp b/external/boost/date_time/posix_time/posix_time_system.hpp new file mode 100644 index 0000000..3d44e0f --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +#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; +#else + typedef date_time::split_timedate_system posix_time_system; +#endif + +#else + + typedef date_time::counted_time_rep int64_time_rep; + typedef date_time::counted_time_system posix_time_system; + +#endif + +} }//namespace posix_time + + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/boost/date_time/posix_time/posix_time_types.hpp b/external/boost/date_time/posix_time/posix_time_types.hpp new file mode 100644 index 0000000..f2488f8 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * 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 time_iterator; + //! A time clock that has a resolution of one second + /*! \ingroup time_basics + */ + typedef date_time::second_clock 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 microsec_clock; +#endif + + //! Define a dst null dst rule for the posix_time system + typedef date_time::null_dst_rules no_dst; + //! Define US dst rule calculator for the posix_time system + typedef date_time::us_dst_rules us_dst; + + +} } //namespace posix_time + + + + +#endif + diff --git a/external/boost/date_time/posix_time/ptime.hpp b/external/boost/date_time/posix_time/ptime.hpp new file mode 100644 index 0000000..2abc02d --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 + { + 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(d,td) + {} + //! Construct a time at start of the given day (midnight) + explicit ptime(gregorian::date d) : date_time::base_time(d,time_duration_type(0,0,0)) + {} + //! Copy from time_rep + ptime(const time_rep_type& rhs): + date_time::base_time(rhs) + {} + //! Construct from special value + ptime(const special_values sv) : date_time::base_time(sv) + {} +#if !defined(DATE_TIME_NO_DEFAULT_CONSTRUCTOR) + // Default constructor constructs to not_a_date_time + ptime() : date_time::base_time(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/external/boost/date_time/posix_time/time_period.hpp b/external/boost/date_time/posix_time/time_period.hpp new file mode 100644 index 0000000..cb7bf07 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +#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 time_period; + + +} }//namespace posix_time + + +#endif + diff --git a/external/boost/date_time/special_defs.hpp b/external/boost/date_time/special_defs.hpp new file mode 100644 index 0000000..56eb6fe --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +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/external/boost/date_time/time.hpp b/external/boost/date_time/time.hpp new file mode 100644 index 0000000..6a6cbe1 --- /dev/null +++ b/external/boost/date_time/time.hpp @@ -0,0 +1,191 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + + +/*! @file time.hpp + This file contains the interface for the time associated classes. +*/ +#include +#include +#include +#include + +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 base_time : private + boost::less_than_comparable > + { + 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/external/boost/date_time/time_clock.hpp b/external/boost/date_time/time_clock.hpp new file mode 100644 index 0000000..1ea5d2e --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +/*! @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 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 + static time_type local_time(boost::shared_ptr tz_ptr) + { + typedef typename time_type::utc_time_type utc_time_type; + utc_time_type utc_time = second_clock::universal_time(); + return time_type(utc_time, tz_ptr); + } + + + private: + static time_type create_time(::std::tm* current) + { + date_type d(static_cast(current->tm_year + 1900), + static_cast(current->tm_mon + 1), + static_cast(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/external/boost/date_time/time_defs.hpp b/external/boost/date_time/time_defs.hpp new file mode 100644 index 0000000..55fe42a --- /dev/null +++ b/external/boost/date_time/time_defs.hpp @@ -0,0 +1,43 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + + + +/*! \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, // deprecated misspelled version of hundredth + hundredth = 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/external/boost/date_time/time_duration.hpp b/external/boost/date_time/time_duration.hpp new file mode 100644 index 0000000..2fd2590 --- /dev/null +++ b/external/boost/date_time/time_duration.hpp @@ -0,0 +1,282 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $ + */ + +#include +#include +#include +#include +#include + +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 time_duration : private + boost::less_than_comparable > + /* 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& 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(ticks() / (3600*ticks_per_second())); + } + //! Returns normalized number of minutes + min_type minutes() const + { + return static_cast((ticks() / (60*ticks_per_second())) % 60); + } + //! Returns normalized number of seconds (0..60) + sec_type seconds() const + { + return static_cast((ticks()/ticks_per_second()) % 60); + } + //! Returns total number of seconds truncating any fractional seconds + sec_type total_seconds() const + { + return static_cast(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(1000) / ticks_per_second()); + } + return ticks() / (ticks_per_second() / static_cast(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(1000000000) / ticks_per_second()); + } + return ticks() / (ticks_per_second() / static_cast(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(1000000) / ticks_per_second()); + } + return ticks() / (ticks_per_second() / static_cast(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 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/external/boost/date_time/time_iterator.hpp b/external/boost/date_time/time_iterator.hpp new file mode 100644 index 0000000..2258a33 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +namespace boost { +namespace date_time { + + + //! Simple time iterator skeleton class + template + 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 ¤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;}; + bool operator>= (const time_type& t) {return current_ >= t;}; + + private: + time_type current_; + time_duration_type offset_; + }; + + + +} }//namespace date_time + + +#endif diff --git a/external/boost/date_time/time_resolution_traits.hpp b/external/boost/date_time/time_resolution_traits.hpp new file mode 100644 index 0000000..658f3d2 --- /dev/null +++ b/external/boost/date_time/time_resolution_traits.hpp @@ -0,0 +1,144 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2009-06-06 07:25:55 -0400 (Sat, 06 Jun 2009) $ + */ + + +#include +#include +#include +#include + +namespace boost { +namespace date_time { + + //! Simple function to calculate absolute value of a numeric type + template + // 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 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 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 + 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 fractional_seconds_type as_number(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 +#if (defined(BOOST_MSVC) && (_MSC_VER < 1300)) + BOOST_STATIC_CONSTANT(boost::int64_t, ticks_per_second = resolution_adjust); +#else + BOOST_STATIC_CONSTANT(fractional_seconds_type, ticks_per_second = resolution_adjust); +#endif + + 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 milli_res; + typedef time_resolution_traits micro_res; + typedef time_resolution_traits nano_res; + + +} } //namespace date_time + + + +#endif diff --git a/external/boost/date_time/time_system_counted.hpp b/external/boost/date_time/time_system_counted.hpp new file mode 100644 index 0000000..fa88390 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + + +#include "boost/date_time/time_defs.hpp" +#include + + +namespace boost { +namespace date_time { + + //! Time representation that uses a single integer count + template + 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(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 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 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/external/boost/date_time/time_system_split.hpp b/external/boost/date_time/time_system_split.hpp new file mode 100644 index 0000000..08ea1ec --- /dev/null +++ b/external/boost/date_time/time_system_split.hpp @@ -0,0 +1,207 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-13 15:10:23 -0500 (Thu, 13 Nov 2008) $ + */ + + +#include +#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 +#else + template +#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 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 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 std::string(); + } + 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); + } + + wrap_int_type day_offset(base.time_of_day.ticks()); + date_duration_type day_overflow(static_cast(day_offset.subtract(td.ticks()))); + + 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()); + date_duration_type day_overflow(static_cast< typename date_duration_type::duration_rep_type >(day_offset.add(td.ticks()))); + + 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/external/boost/date_time/wrapping_int.hpp b/external/boost/date_time/wrapping_int.hpp new file mode 100644 index 0000000..969b078 --- /dev/null +++ b/external/boost/date_time/wrapping_int.hpp @@ -0,0 +1,169 @@ +#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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + */ + + +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 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 +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 */ + template< typename IntT > + IntT add(IntT v) + { + int_type remainder = static_cast(v % (wrap_val)); + IntT overflow = static_cast(v / (wrap_val)); + value_ = static_cast(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. */ + template< typename IntT > + IntT subtract(IntT v) + { + int_type remainder = static_cast(v % (wrap_val)); + IntT underflow = static_cast(-(v / (wrap_val))); + value_ = static_cast(value_ - remainder); + return calculate_wrap(underflow) * -1; + } +private: + int_type value_; + + template< typename IntT > + IntT calculate_wrap(IntT 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 +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 */ + template< typename IntT > + IntT add(IntT v) + { + int_type remainder = static_cast(v % (wrap_max - wrap_min + 1)); + IntT overflow = static_cast(v / (wrap_max - wrap_min + 1)); + value_ = static_cast(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 */ + template< typename IntT > + IntT subtract(IntT v) + { + int_type remainder = static_cast(v % (wrap_max - wrap_min + 1)); + IntT underflow = static_cast(-(v / (wrap_max - wrap_min + 1))); + value_ = static_cast(value_ - remainder); + return calculate_wrap(underflow); + } + +private: + int_type value_; + + template< typename IntT > + IntT calculate_wrap(IntT 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/external/boost/date_time/year_month_day.hpp b/external/boost/date_time/year_month_day.hpp new file mode 100644 index 0000000..802ce42 --- /dev/null +++ b/external/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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + +namespace boost { +namespace date_time { + + //! Allow rapid creation of ymd triples of different types + template + 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 + inline + year_month_day_base::year_month_day_base(YearType y, + MonthType m, + DayType d) : + year(y), + month(m), + day(d) + {} + +} }//namespace date_time + + +#endif + diff --git a/external/boost/detail/binary_search.hpp b/external/boost/detail/binary_search.hpp new file mode 100644 index 0000000..3dca9b6 --- /dev/null +++ b/external/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 +# include + +namespace boost { namespace detail { + +template +ForwardIter lower_bound(ForwardIter first, ForwardIter last, + const Tp& val) +{ + typedef detail::iterator_traits 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 +ForwardIter lower_bound(ForwardIter first, ForwardIter last, + const Tp& val, Compare comp) +{ + typedef detail::iterator_traits 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 +ForwardIter upper_bound(ForwardIter first, ForwardIter last, + const Tp& val) +{ + typedef detail::iterator_traits 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 +ForwardIter upper_bound(ForwardIter first, ForwardIter last, + const Tp& val, Compare comp) +{ + typedef detail::iterator_traits 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 +std::pair +equal_range(ForwardIter first, ForwardIter last, const Tp& val) +{ + typedef detail::iterator_traits 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(left, right); + } + } + return std::pair(first, first); +} + +template +std::pair +equal_range(ForwardIter first, ForwardIter last, const Tp& val, + Compare comp) +{ + typedef detail::iterator_traits 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(left, right); + } + } + return std::pair(first, first); +} + +template +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 +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/external/boost/detail/bitmask.hpp b/external/boost/detail/bitmask.hpp new file mode 100644 index 0000000..c6714a1 --- /dev/null +++ b/external/boost/detail/bitmask.hpp @@ -0,0 +1,47 @@ +// boost/detail/bitmask.hpp ------------------------------------------------// + +// Copyright Beman Dawes 2006 + +// Distributed under the Boost Software License, Version 1.0 +// http://www.boost.org/LICENSE_1_0.txt + +// Usage: enum foo { a=1, b=2, c=4 }; +// BOOST_BITMASK( foo ); +// +// void f( foo arg ); +// ... +// f( a | c ); + +#ifndef BOOST_BITMASK_HPP +#define BOOST_BITMASK_HPP + +#include + +#define BOOST_BITMASK(Bitmask) \ + \ + inline Bitmask operator| (Bitmask x , Bitmask y ) \ + { return static_cast( static_cast(x) \ + | static_cast(y)); } \ + \ + inline Bitmask operator& (Bitmask x , Bitmask y ) \ + { return static_cast( static_cast(x) \ + & static_cast(y)); } \ + \ + inline Bitmask operator^ (Bitmask x , Bitmask y ) \ + { return static_cast( static_cast(x) \ + ^ static_cast(y)); } \ + \ + inline Bitmask operator~ (Bitmask x ) \ + { return static_cast(~static_cast(x)); } \ + \ + inline Bitmask & operator&=(Bitmask & x , Bitmask y) \ + { x = x & y ; return x ; } \ + \ + inline Bitmask & operator|=(Bitmask & x , Bitmask y) \ + { x = x | y ; return x ; } \ + \ + inline Bitmask & operator^=(Bitmask & x , Bitmask y) \ + { x = x ^ y ; return x ; } + +#endif // BOOST_BITMASK_HPP + diff --git a/external/boost/detail/call_traits.hpp b/external/boost/detail/call_traits.hpp new file mode 100644 index 0000000..6ad646e --- /dev/null +++ b/external/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 +#endif +#include + +#include +#include +#include + +namespace boost{ + +namespace detail{ + +template +struct ct_imp2 +{ + typedef const T& param_type; +}; + +template +struct ct_imp2 +{ + typedef const T param_type; +}; + +template +struct ct_imp +{ + typedef const T& param_type; +}; + +template +struct ct_imp +{ + typedef typename ct_imp2::param_type param_type; +}; + +template +struct ct_imp +{ + typedef const T param_type; +}; + +} + +template +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, + // however compiler bugs prevent this - instead pass three bool's to + // ct_imp and add an extra partial specialisation + // of ct_imp to handle the logic. (JM) + typedef typename boost::detail::ct_imp< + T, + ::boost::is_pointer::value, + ::boost::is_arithmetic::value + >::param_type param_type; +}; + +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; + +#if BOOST_WORKAROUND( __BORLANDC__, < 0x5A0 ) +// 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 +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; + +template +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 +struct call_traits +{ +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 +struct call_traits +{ +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/external/boost/detail/container_fwd.hpp b/external/boost/detail/container_fwd.hpp new file mode 100644 index 0000000..7df7ccb --- /dev/null +++ b/external/boost/detail/container_fwd.hpp @@ -0,0 +1,159 @@ + +// Copyright 2005-2011 Daniel James. +// Distributed under the 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: if you change this include guard, you also need to change +// container_fwd_compile_fail.cpp +#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP) +#define BOOST_DETAIL_CONTAINER_FWD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) && \ + !defined(BOOST_DETAIL_TEST_CONFIG_ONLY) +# pragma once +#endif + +#include +#include + +//////////////////////////////////////////////////////////////////////////////// +// // +// Define BOOST_DETAIL_NO_CONTAINER_FWD if you don't want this header to // +// forward declare standard containers. // +// // +//////////////////////////////////////////////////////////////////////////////// + +#if !defined(BOOST_DETAIL_NO_CONTAINER_FWD) +# if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + // STLport +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__LIBCOMO__) + // Comeau STL: +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) + // Rogue Wave library: +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(_LIBCPP_VERSION) + // libc++ +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__GLIBCPP__) || defined(__GLIBCXX__) + // GNU libstdc++ 3 + // + // Disable forwarding for all recent versions, as the library has a + // versioned namespace mode, and I don't know how to detect it. +# if __GLIBCXX__ >= 20070513 \ + || defined(_GLIBCXX_DEBUG) \ + || defined(_GLIBCXX_PARALLEL) \ + || defined(_GLIBCXX_PROFILE) +# define BOOST_DETAIL_NO_CONTAINER_FWD +# else +# if defined(__GLIBCXX__) && __GLIBCXX__ >= 20040530 +# define BOOST_CONTAINER_FWD_COMPLEX_STRUCT +# endif +# endif +# elif defined(__STL_CONFIG_H) + // generic SGI STL + // + // Forward declaration seems to be okay, but it has a couple of odd + // implementations. +# define BOOST_CONTAINER_FWD_BAD_BITSET +# if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) +# define BOOST_CONTAINER_FWD_BAD_DEQUE +# endif +# elif defined(__MSL_CPP__) + // MSL standard lib: +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__IBMCPP__) + // The default VACPP std lib, forward declaration seems to be fine. +# elif defined(MSIPL_COMPILE_H) + // Modena C++ standard library +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) + // Dinkumware Library (this has to appear after any possible replacement + // libraries) +# else +# define BOOST_DETAIL_NO_CONTAINER_FWD +# endif +#endif + +// BOOST_DETAIL_TEST_* macros are for testing only +// and shouldn't be relied upon. But you can use +// BOOST_DETAIL_NO_CONTAINER_FWD to prevent forward +// declaration of containers. + +#if !defined(BOOST_DETAIL_TEST_CONFIG_ONLY) + +#if defined(BOOST_DETAIL_NO_CONTAINER_FWD) && \ + !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD) + +#include +#include +#include +#include +#include +#include +#include +#include + +#else + +#include + +#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE) +#include +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_BITSET) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4099) // struct/class mismatch in fwd declarations +#endif + +namespace std +{ + template class allocator; + template class basic_string; + +#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) + template struct string_char_traits; +#else + template struct char_traits; +#endif + +#if defined(BOOST_CONTAINER_FWD_COMPLEX_STRUCT) + template struct complex; +#else + template class complex; +#endif + +#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE) + template class deque; +#endif + + template class list; + template class vector; + template class map; + template + class multimap; + template class set; + template class multiset; + +#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET) + template class bitset; +#endif + template struct pair; +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif // BOOST_DETAIL_NO_CONTAINER_FWD && + // !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD) + +#endif // BOOST_DETAIL_TEST_CONFIG_ONLY + +#endif diff --git a/external/boost/detail/endian.hpp b/external/boost/detail/endian.hpp new file mode 100644 index 0000000..98c870c --- /dev/null +++ b/external/boost/detail/endian.hpp @@ -0,0 +1,78 @@ +// Copyright 2005 Caleb Epstein +// Copyright 2006 John Maddock +// Copyright 2010 Rene Rivera +// 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 , from + * which this code was originally taken. + * + * Modified by Caleb Epstein to use 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 which defines +// __BYTE_ORDER + +#if defined (__GLIBC__) +# include +# 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) && !defined(_LITTLE_ENDIAN) || \ + defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) || \ + defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN) +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) || \ + defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) || \ + defined(_STLP_LITTLE_ENDIAN) && !defined(_STLP_BIG_ENDIAN) +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +#elif defined(__sparc) || defined(__sparc__) \ + || defined(_POWER) || defined(__powerpc__) \ + || defined(__ppc__) || defined(__hpux) || defined(__hppa) \ + || 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) || defined(__bfin__) + +# 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/external/boost/detail/fenv.hpp b/external/boost/detail/fenv.hpp new file mode 100644 index 0000000..f048706 --- /dev/null +++ b/external/boost/detail/fenv.hpp @@ -0,0 +1,74 @@ +/*============================================================================= + Copyright (c) 2010 Bryce Lelbach + + Distributed under the 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 + +#if defined(BOOST_NO_FENV_H) + #error This platform does not have a floating point environment +#endif + +#if !defined(BOOST_DETAIL_FENV_HPP) +#define BOOST_DETAIL_FENV_HPP + +/* If we're using clang + glibc, we have to get hacky. + * See http://llvm.org/bugs/show_bug.cgi?id=6907 */ +#if defined(__clang__) && (__clang_major__ < 3) && \ + defined(__GNU_LIBRARY__) && /* up to version 5 */ \ + defined(__GLIBC__) && /* version 6 + */ \ + !defined(_FENV_H) + #define _FENV_H + + #include + #include + + extern "C" { + extern int fegetexceptflag (fexcept_t*, int) __THROW; + extern int fesetexceptflag (__const fexcept_t*, int) __THROW; + extern int feclearexcept (int) __THROW; + extern int feraiseexcept (int) __THROW; + extern int fetestexcept (int) __THROW; + extern int fegetround (void) __THROW; + extern int fesetround (int) __THROW; + extern int fegetenv (fenv_t*) __THROW; + extern int fesetenv (__const fenv_t*) __THROW; + extern int feupdateenv (__const fenv_t*) __THROW; + extern int feholdexcept (fenv_t*) __THROW; + + #ifdef __USE_GNU + extern int feenableexcept (int) __THROW; + extern int fedisableexcept (int) __THROW; + extern int fegetexcept (void) __THROW; + #endif + } + + namespace std { namespace tr1 { + using ::fenv_t; + using ::fexcept_t; + using ::fegetexceptflag; + using ::fesetexceptflag; + using ::feclearexcept; + using ::feraiseexcept; + using ::fetestexcept; + using ::fegetround; + using ::fesetround; + using ::fegetenv; + using ::fesetenv; + using ::feupdateenv; + using ::feholdexcept; + } } + +#else /* if we're not using GNU's C stdlib, fenv.h should work with clang */ + #if defined(__SUNPRO_CC) /* lol suncc */ + #include + #endif + + #include + +#endif + +#endif /* BOOST_DETAIL_FENV_HPP */ + diff --git a/external/boost/detail/indirect_traits.hpp b/external/boost/detail/indirect_traits.hpp new file mode 100644 index 0000000..f9c0cd6 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# include +# include +# include +# include +# include +# include + +# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# endif + +namespace boost { namespace detail { + +namespace indirect_traits { + +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct is_reference_to_const : mpl::false_ +{ +}; + +template +struct is_reference_to_const : mpl::true_ +{ +}; + +# if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround +template +struct is_reference_to_const : mpl::true_ +{ +}; +# endif + +template +struct is_reference_to_function : mpl::false_ +{ +}; + +template +struct is_reference_to_function : is_function +{ +}; + +template +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 +struct is_pointer_to_function : is_function +{ +}; + +template +struct is_reference_to_member_function_pointer_impl : mpl::false_ +{ +}; + +template +struct is_reference_to_member_function_pointer_impl + : is_member_function_pointer::type> +{ +}; + + +template +struct is_reference_to_member_function_pointer + : is_reference_to_member_function_pointer_impl +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T)) +}; + +template +struct is_reference_to_function_pointer_aux + : mpl::and_< + is_reference + , is_pointer_to_function< + typename remove_cv< + typename remove_reference::type + >::type + > + > +{ + // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those +}; + +template +struct is_reference_to_function_pointer + : mpl::if_< + is_reference_to_function + , mpl::false_ + , is_reference_to_function_pointer_aux + >::type +{ +}; + +template +struct is_reference_to_non_const + : mpl::and_< + is_reference + , mpl::not_< + is_reference_to_const + > + > +{ +}; + +template +struct is_reference_to_volatile : mpl::false_ +{ +}; + +template +struct is_reference_to_volatile : mpl::true_ +{ +}; + +# if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround +template +struct is_reference_to_volatile : mpl::true_ +{ +}; +# endif + + +template +struct is_reference_to_pointer : mpl::false_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_class + : mpl::and_< + is_reference + , is_class< + typename remove_cv< + typename remove_reference::type + >::type + > + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T)) +}; + +template +struct is_pointer_to_class + : mpl::and_< + is_pointer + , is_class< + typename remove_cv< + typename remove_pointer::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 +struct is_const_help +{ + typedef typename mpl::if_< + is_const + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_volatile_help +{ + typedef typename mpl::if_< + is_volatile + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_pointer_help +{ + typedef typename mpl::if_< + is_pointer + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_class_help +{ + typedef typename mpl::if_< + is_class + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +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_ type; + }; + +template +struct is_reference_to_function + : mpl::if_, is_reference_to_function_aux, mpl::bool_ >::type +{ +}; + +template +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_ type; +}; + +template +struct is_pointer_to_function + : mpl::if_, is_pointer_to_function_aux, mpl::bool_ >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_function,(T)) +}; + +struct false_helper1 +{ + template + struct apply : mpl::false_ + { + }; +}; + +template +typename is_const_help::type reference_to_const_helper(V&); +outer_no_type +reference_to_const_helper(...); + +struct true_helper1 +{ + template + struct apply + { + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(reference_to_const_helper(t)) == sizeof(inner_yes_type)); + typedef mpl::bool_ type; + }; +}; + +template +struct is_reference_to_const_helper1 : true_helper1 +{ +}; + +template <> +struct is_reference_to_const_helper1 : false_helper1 +{ +}; + + +template +struct is_reference_to_const + : is_reference_to_const_helper1::value>::template apply +{ +}; + + +template +struct is_reference_to_non_const_helper1 +{ + template + struct apply + { + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(reference_to_const_helper(t)) == sizeof(inner_no_type)); + + typedef mpl::bool_ type; + }; +}; + +template <> +struct is_reference_to_non_const_helper1 : false_helper1 +{ +}; + + +template +struct is_reference_to_non_const + : is_reference_to_non_const_helper1::value>::template apply +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_non_const,(T)) +}; + + +template +typename is_volatile_help::type reference_to_volatile_helper(V&); +outer_no_type +reference_to_volatile_helper(...); + +template +struct is_reference_to_volatile_helper1 +{ + template + struct apply + { + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(reference_to_volatile_helper(t)) == sizeof(inner_yes_type)); + typedef mpl::bool_ type; + }; +}; + +template <> +struct is_reference_to_volatile_helper1 : false_helper1 +{ +}; + + +template +struct is_reference_to_volatile + : is_reference_to_volatile_helper1::value>::template apply +{ +}; + +template +typename is_pointer_help::type reference_to_pointer_helper(V&); +outer_no_type reference_to_pointer_helper(...); + +template +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_ type; +}; + +template +struct is_reference_to_pointer + : mpl::eval_if, reference_to_pointer_impl, mpl::false_>::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_pointer,(T)) +}; + +template +struct is_reference_to_function_pointer + : mpl::eval_if, is_pointer_to_function_aux, mpl::false_>::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_function_pointer,(T)) +}; + + +template +struct is_member_function_pointer_help + : mpl::if_, inner_yes_type, inner_no_type> +{}; + +template +typename is_member_function_pointer_help::type member_function_pointer_helper(V&); +outer_no_type member_function_pointer_helper(...); + +template +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_ type; +}; + +template +struct is_reference_to_member_function_pointer + : mpl::if_< + is_reference + , is_pointer_to_member_function_aux + , mpl::bool_ + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T)) +}; + +template +typename is_class_help::type reference_to_class_helper(V const volatile&); +outer_no_type reference_to_class_helper(...); + +template +struct is_reference_to_class +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = (is_reference::value + & (sizeof(reference_to_class_helper(t)) == sizeof(inner_yes_type))) + ); + typedef mpl::bool_ type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T)) +}; + +template +typename is_class_help::type pointer_to_class_helper(V const volatile*); +outer_no_type pointer_to_class_helper(...); + +template +struct is_pointer_to_class +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = (is_pointer::value + && sizeof(pointer_to_class_helper(t)) == sizeof(inner_yes_type)) + ); + typedef mpl::bool_ type; +}; +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} + +using namespace indirect_traits; + +}} // namespace boost::python::detail + +#endif // INDIRECT_TRAITS_DWA2002131_HPP diff --git a/external/boost/detail/interlocked.hpp b/external/boost/detail/interlocked.hpp new file mode 100644 index 0000000..1802e34 --- /dev/null +++ b/external/boost/detail/interlocked.hpp @@ -0,0 +1,163 @@ +#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 + +#if defined( BOOST_USE_WINDOWS_H ) + +# include + +# 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 + +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \ + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest),(long)(exchange),(long)(compare))) +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \ + ((void*)BOOST_INTERLOCKED_EXCHANGE((long*)(dest),(long)(exchange))) + +#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN ) + +#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600 + +#include + +#elif defined( __CLRCALL_PURE_OR_CDECL ) + +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long ); + +#else + +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 ); + +#endif + +# 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__ ) || defined( __CYGWIN__ ) + +#if defined(__MINGW64__) +#define BOOST_INTERLOCKED_IMPORT +#else +#define BOOST_INTERLOCKED_IMPORT __declspec(dllimport) +#endif + + +namespace boost +{ + +namespace detail +{ + +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedIncrement( long volatile * ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedDecrement( long volatile * ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedCompareExchange( long volatile *, long, long ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchange( long volatile *, long ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchangeAdd( long volatile *, long ); + +# if defined(_M_IA64) || defined(_M_AMD64) +extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* ); +extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedExchangePointer( void* volatile *, void* ); +# endif + +} // 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 + +# if defined(_M_IA64) || defined(_M_AMD64) +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER ::boost::detail::InterlockedCompareExchangePointer +# define BOOST_INTERLOCKED_EXCHANGE_POINTER ::boost::detail::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 + +#else + +# error "Interlocked intrinsics not available" + +#endif + +#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED diff --git a/external/boost/detail/is_function_ref_tester.hpp b/external/boost/detail/is_function_ref_tester.hpp new file mode 100644 index 0000000..5f367ea --- /dev/null +++ b/external/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 +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 +boost::type_traits::yes_type is_function_ref_tester(R (&)(), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11), int); + +template +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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/external/boost/detail/iterator.hpp b/external/boost/detail/iterator.hpp new file mode 100644 index 0000000..5bb9c62 --- /dev/null +++ b/external/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::pointer + +// Otherwise, if partial specialization is supported or X is not a pointer +// std::iterator_traits::value_type +// std::iterator_traits::pointer +// std::iterator_traits::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), 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 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 +# include + +// 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 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 +struct iterator_traits + : std::iterator_traits +{}; +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 +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 +struct iterator_traits +{ + 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 +struct iterator_traits +{ + 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 +# include +# include + +# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +# endif +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION +# include +# endif + +# include +# include +# include + +// 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 +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 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 +type_traits::yes_type is_mutable_iterator_helper(T const*, T const*); + +type_traits::no_type is_mutable_iterator_helper(...); + +template +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::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 +struct is_full_iterator_traits_impl +{ + enum { value = + has_value_type::value + & has_reference::value + & has_pointer::value + & has_difference_type::value + & has_iterator_category::value + }; +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_full_iterator_traits,T,::boost::detail::is_full_iterator_traits_impl::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 +struct is_stlport_40_debug_iterator_impl +{ + enum { value = + has_value_type::value + & has_reference::value + & has_pointer::value + & has_difference_type::value + & has__Iterator_category::value + }; +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_stlport_40_debug_iterator,T,::boost::detail::is_stlport_40_debug_iterator_impl::value) + +template +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 struct pointer_iterator_traits; + +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct pointer_iterator_traits +{ + typedef typename remove_const::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::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 please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee; + +template +struct pointer_value_type + : mpl::if_< + is_same::type> + , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee

    + , typename remove_const< + typename remove_pointer

    ::type + >::type + > +{ +}; + + +template +struct pointer_reference + : mpl::if_< + is_same::type> + , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee

    + , typename remove_pointer

    ::type& + > +{ +}; + +template +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::type value_type; + typedef typename pointer_reference::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 +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 +struct msvc_stdlib_mutable_traits + : std::iterator_traits +{ + typedef typename std::iterator_traits::distance_type difference_type; + typedef typename std::iterator_traits::value_type* pointer; + typedef typename std::iterator_traits::value_type& reference; +}; + +template +struct msvc_stdlib_const_traits + : std::iterator_traits +{ + typedef typename std::iterator_traits::distance_type difference_type; + typedef const typename std::iterator_traits::value_type* pointer; + typedef const typename std::iterator_traits::value_type& reference; +}; + +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION +template +struct is_bad_output_iterator + : is_base_and_derived< + std::iterator + , 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 +struct msvc_stdlib_iterator_traits + : mpl::if_< + is_mutable_iterator + , msvc_stdlib_mutable_traits + , msvc_stdlib_const_traits + >::type +{}; + +template +struct non_pointer_iterator_traits + : mpl::if_< + // if the iterator contains all the right nested types... + is_full_iterator_traits + // Use a standard iterator_traits implementation + , standard_iterator_traits +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + // Check for STLPort 4.0 broken _Iterator_category type + , mpl::if_< + is_stlport_40_debug_iterator + , stlport_40_debug_iterator_traits +# endif + // Otherwise, assume it's a Dinkum iterator + , msvc_stdlib_iterator_traits +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + >::type +# endif + >::type +{ +}; + +template +struct iterator_traits_aux + : mpl::if_< + is_pointer + , pointer_iterator_traits + , non_pointer_iterator_traits + >::type +{ +}; + +template +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 + , bad_output_iterator_traits + , iterator_traits_aux + >::type base; +# else + typedef iterator_traits_aux 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 +{ + 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 + 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 +inline typename iterator_traits::difference_type +distance(Iterator first, Iterator last) +{ + typedef typename iterator_traits::difference_type diff_t; + typedef typename ::boost::detail::iterator_traits::iterator_category iterator_category; + + return iterator_traits_::distance_select::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/external/boost/detail/lcast_precision.hpp b/external/boost/detail/lcast_precision.hpp new file mode 100644 index 0000000..93abce1 --- /dev/null +++ b/external/boost/detail/lcast_precision.hpp @@ -0,0 +1,184 @@ +// Copyright Alexander Nasonov & Paul A. Bristow 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) + +#ifndef BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED +#define BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED + +#include +#include +#include + +#include +#include + +#ifndef BOOST_NO_IS_ABSTRACT +// Fix for SF:1358600 - lexical_cast & pure virtual functions & VC 8 STL +#include +#include +#endif + +#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || \ + (defined(BOOST_MSVC) && (BOOST_MSVC<1310)) + +#define BOOST_LCAST_NO_COMPILE_TIME_PRECISION +#endif + +#ifdef BOOST_LCAST_NO_COMPILE_TIME_PRECISION +#include +#else +#include +#endif + +namespace boost { namespace detail { + +class lcast_abstract_stub {}; + +#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION +// Calculate an argument to pass to std::ios_base::precision from +// lexical_cast. See alternative implementation for broken standard +// libraries in lcast_get_precision below. Keep them in sync, please. +template +struct lcast_precision +{ +#ifdef BOOST_NO_IS_ABSTRACT + typedef std::numeric_limits limits; // No fix for SF:1358600. +#else + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::is_abstract + , std::numeric_limits + , std::numeric_limits + >::type limits; +#endif + + BOOST_STATIC_CONSTANT(bool, use_default_precision = + !limits::is_specialized || limits::is_exact + ); + + BOOST_STATIC_CONSTANT(bool, is_specialized_bin = + !use_default_precision && + limits::radix == 2 && limits::digits > 0 + ); + + BOOST_STATIC_CONSTANT(bool, is_specialized_dec = + !use_default_precision && + limits::radix == 10 && limits::digits10 > 0 + ); + + BOOST_STATIC_CONSTANT(std::streamsize, streamsize_max = + boost::integer_traits::const_max + ); + + BOOST_STATIC_CONSTANT(unsigned int, precision_dec = limits::digits10 + 1U); + + BOOST_STATIC_ASSERT(!is_specialized_dec || + precision_dec <= streamsize_max + 0UL + ); + + BOOST_STATIC_CONSTANT(unsigned long, precision_bin = + 2UL + limits::digits * 30103UL / 100000UL + ); + + BOOST_STATIC_ASSERT(!is_specialized_bin || + (limits::digits + 0UL < ULONG_MAX / 30103UL && + precision_bin > limits::digits10 + 0UL && + precision_bin <= streamsize_max + 0UL) + ); + + BOOST_STATIC_CONSTANT(std::streamsize, value = + is_specialized_bin ? precision_bin + : is_specialized_dec ? precision_dec : 6 + ); +}; +#endif + +template +inline std::streamsize lcast_get_precision(T* = 0) +{ +#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION + return lcast_precision::value; +#else // Follow lcast_precision algorithm at run-time: + +#ifdef BOOST_NO_IS_ABSTRACT + typedef std::numeric_limits limits; // No fix for SF:1358600. +#else + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::is_abstract + , std::numeric_limits + , std::numeric_limits + >::type limits; +#endif + + bool const use_default_precision = + !limits::is_specialized || limits::is_exact; + + if(!use_default_precision) + { // Includes all built-in floating-point types, float, double ... + // and UDT types for which digits (significand bits) is defined (not zero) + + bool const is_specialized_bin = + limits::radix == 2 && limits::digits > 0; + bool const is_specialized_dec = + limits::radix == 10 && limits::digits10 > 0; + std::streamsize const streamsize_max = + (boost::integer_traits::max)(); + + if(is_specialized_bin) + { // Floating-point types with + // limits::digits defined by the specialization. + + unsigned long const digits = limits::digits; + unsigned long const precision = 2UL + digits * 30103UL / 100000UL; + // unsigned long is selected because it is at least 32-bits + // and thus ULONG_MAX / 30103UL is big enough for all types. + BOOST_ASSERT( + digits < ULONG_MAX / 30103UL && + precision > limits::digits10 + 0UL && + precision <= streamsize_max + 0UL + ); + return precision; + } + else if(is_specialized_dec) + { // Decimal Floating-point type, most likely a User Defined Type + // rather than a real floating-point hardware type. + unsigned int const precision = limits::digits10 + 1U; + BOOST_ASSERT(precision <= streamsize_max + 0UL); + return precision; + } + } + + // Integral type (for which precision has no effect) + // or type T for which limits is NOT specialized, + // so assume stream precision remains the default 6 decimal digits. + // Warning: if your User-defined Floating-point type T is NOT specialized, + // then you may lose accuracy by only using 6 decimal digits. + // To avoid this, you need to specialize T with either + // radix == 2 and digits == the number of significand bits, + // OR + // radix = 10 and digits10 == the number of decimal digits. + + return 6; +#endif +} + +template +inline void lcast_set_precision(std::ios_base& stream, T*) +{ + stream.precision(lcast_get_precision()); +} + +template +inline void lcast_set_precision(std::ios_base& stream, Source*, Target*) +{ + std::streamsize const s = lcast_get_precision(static_cast(0)); + std::streamsize const t = lcast_get_precision(static_cast(0)); + stream.precision(s > t ? s : t); +} + +}} + +#endif // BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED + diff --git a/external/boost/detail/lightweight_main.hpp b/external/boost/detail/lightweight_main.hpp new file mode 100644 index 0000000..1705309 --- /dev/null +++ b/external/boost/detail/lightweight_main.hpp @@ -0,0 +1,36 @@ +// boost/detail/lightweight_main.hpp -------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +#include +#include + +//--------------------------------------------------------------------------------------// +// // +// exception reporting main() that calls cpp_main() // +// // +//--------------------------------------------------------------------------------------// + +int cpp_main(int argc, char* argv[]); + +int main(int argc, char* argv[]) +{ + try + { + return cpp_main(argc, argv); + } + + catch (const std::exception& ex) + { + std::cout + << "\nERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR\n" + << "\n****************************** std::exception *****************************\n" + << ex.what() + << "\n***************************************************************************\n" + << std::endl; + } + return 1; +} diff --git a/external/boost/detail/lightweight_mutex.hpp b/external/boost/detail/lightweight_mutex.hpp new file mode 100644 index 0000000..b7a7f6d --- /dev/null +++ b/external/boost/detail/lightweight_mutex.hpp @@ -0,0 +1,22 @@ +#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 +// + +#include + +#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED diff --git a/external/boost/detail/lightweight_test.hpp b/external/boost/detail/lightweight_test.hpp new file mode 100644 index 0000000..dbd99b9 --- /dev/null +++ b/external/boost/detail/lightweight_test.hpp @@ -0,0 +1,143 @@ +#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, 2009 Peter Dimov +// Copyright (2) Beman Dawes 2010, 2011 +// +// Distributed under the 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) +// BOOST_TEST_EQ(expr1, expr2) +// +// int boost::report_errors() +// + +#include +#include +#include + +// IDE's like Visual Studio perform better if output goes to std::cout or +// some other stream, so allow user to configure output stream: +#ifndef BOOST_LIGHTWEIGHT_TEST_OSTREAM +# define BOOST_LIGHTWEIGHT_TEST_OSTREAM std::cerr +#endif + +namespace boost +{ + +namespace detail +{ + +struct report_errors_reminder +{ + bool called_report_errors_function; + report_errors_reminder() : called_report_errors_function(false) {} + ~report_errors_reminder() + { + BOOST_ASSERT(called_report_errors_function); // verify report_errors() was called + } +}; + +inline report_errors_reminder& report_errors_remind() +{ + static report_errors_reminder r; + return r; +} + +inline int & test_errors() +{ + static int x = 0; + report_errors_remind(); + return x; +} + +inline void test_failed_impl(char const * expr, char const * file, int line, char const * function) +{ + BOOST_LIGHTWEIGHT_TEST_OSTREAM + << 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) +{ + BOOST_LIGHTWEIGHT_TEST_OSTREAM + << file << "(" << line << "): " << msg << " in function '" + << function << "'" << std::endl; + ++test_errors(); +} + +template inline void test_eq_impl( char const * expr1, char const * expr2, + char const * file, int line, char const * function, T const & t, U const & u ) +{ + if( t == u ) + { + } + else + { + BOOST_LIGHTWEIGHT_TEST_OSTREAM + << file << "(" << line << "): test '" << expr1 << " == " << expr2 + << "' failed in function '" << function << "': " + << "'" << t << "' != '" << u << "'" << std::endl; + ++test_errors(); + } +} + +template inline void test_ne_impl( char const * expr1, char const * expr2, + char const * file, int line, char const * function, T const & t, U const & u ) +{ + if( t != u ) + { + } + else + { + BOOST_LIGHTWEIGHT_TEST_OSTREAM + << file << "(" << line << "): test '" << expr1 << " != " << expr2 + << "' failed in function '" << function << "': " + << "'" << t << "' == '" << u << "'" << std::endl; + ++test_errors(); + } +} + +} // namespace detail + +inline int report_errors() +{ + detail::report_errors_remind().called_report_errors_function = true; + + int errors = detail::test_errors(); + + if( errors == 0 ) + { + BOOST_LIGHTWEIGHT_TEST_OSTREAM + << "No errors detected." << std::endl; + return 0; + } + else + { + BOOST_LIGHTWEIGHT_TEST_OSTREAM + << 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) +#define BOOST_TEST_EQ(expr1,expr2) ( ::boost::detail::test_eq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) ) +#define BOOST_TEST_NE(expr1,expr2) ( ::boost::detail::test_ne_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) ) + +#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED diff --git a/external/boost/detail/limits.hpp b/external/boost/detail/limits.hpp new file mode 100644 index 0000000..6f018df --- /dev/null +++ b/external/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 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 +#include +#include +#include + +#ifndef BOOST_NO_CWCHAR +#include // 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 _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 _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 + 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(&_S_word); + } +}; + +#else + + template + 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( + reinterpret_cast(&_S_word)+16- + (sizeof(Number) == 12 ? 10 : sizeof(Number))); + } +}; + +#endif + +// Base class for floating-point numbers. +template +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 numeric_limits : public _Numeric_limits_base {}; + +// Specializations for all built-in integral types. + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +template<> +class numeric_limits +#if !defined(WCHAR_MAX) || !defined(WCHAR_MIN) +#if defined(_WIN32) || defined(__CYGWIN__) + : public _Integer_limits +#elif defined(__hppa) +// wchar_t has "unsigned int" as the underlying type + : public _Integer_limits +#else +// assume that wchar_t has "int" as the underlying type + : public _Integer_limits +#endif +#else +// we have WCHAR_MIN and WCHAR_MAX defined, so use it + : public _Integer_limits +#endif +{}; +#endif + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +#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 + : public _Floating_limits +{ +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 + : public _Floating_limits +{ +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 + : public _Floating_limits +{ +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/external/boost/detail/no_exceptions_support.hpp b/external/boost/detail/no_exceptions_support.hpp new file mode 100644 index 0000000..d94e358 --- /dev/null +++ b/external/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 +#include + +#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/external/boost/detail/ob_call_traits.hpp b/external/boost/detail/ob_call_traits.hpp new file mode 100644 index 0000000..eb4df7a --- /dev/null +++ b/external/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 +#endif + +#ifndef BOOST_ARITHMETIC_TYPE_TRAITS_HPP +#include +#endif +#ifndef BOOST_COMPOSITE_TYPE_TRAITS_HPP +#include +#endif + +namespace boost{ + +#ifdef BOOST_MSVC6_MEMBER_TEMPLATES +// +// use member templates to emulate +// partial specialisation: +// +namespace detail{ + +template +struct standard_call_traits +{ + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& param_type; +}; +template +struct simple_call_traits +{ + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T param_type; +}; +template +struct reference_call_traits +{ + typedef T value_type; + typedef T reference; + typedef T const_reference; + typedef T param_type; +}; + +template +struct call_traits_chooser +{ + template + struct rebind + { + typedef standard_call_traits type; + }; +}; + +template <> +struct call_traits_chooser +{ + template + struct rebind + { + typedef simple_call_traits type; + }; +}; + +template <> +struct call_traits_chooser +{ + template + struct rebind + { + typedef reference_call_traits type; + }; +}; + +template +struct call_traits_sizeof_chooser2 +{ + template + struct small_rebind + { + typedef simple_call_traits small_type; + }; +}; + +template<> +struct call_traits_sizeof_chooser2 +{ + template + struct small_rebind + { + typedef standard_call_traits small_type; + }; +}; + +template <> +struct call_traits_chooser +{ + template + 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 bound_type; + typedef typename bound_type::small_type type; + }; +}; + +} // namespace detail +template +struct call_traits +{ +private: + typedef detail::call_traits_chooser< + ::boost::is_pointer::value, + ::boost::is_arithmetic::value, + ::boost::is_reference::value + > chooser; + typedef typename chooser::template rebind 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 +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/external/boost/detail/reference_content.hpp b/external/boost/detail/reference_content.hpp new file mode 100644 index 0000000..daf56a8 --- /dev/null +++ b/external/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 +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 struct make_reference_content; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +struct make_reference_content +{ + typedef T type; +}; + +template +struct make_reference_content< T& > +{ + typedef reference_content type; +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +struct make_reference_content + : mpl::if_< + is_reference + , reference_content + , T + > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +template <> +struct make_reference_content< mpl::void_ > +{ + template + struct apply + : make_reference_content + { + }; + + typedef mpl::void_ type; +}; + +} // namespace detail + +/////////////////////////////////////////////////////////////////////////////// +// reference_content type traits specializations +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +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/external/boost/detail/scoped_enum_emulation.hpp b/external/boost/detail/scoped_enum_emulation.hpp new file mode 100644 index 0000000..e695a20 --- /dev/null +++ b/external/boost/detail/scoped_enum_emulation.hpp @@ -0,0 +1,56 @@ +// scoped_enum_emulation.hpp ---------------------------------------------------------// + +// Copyright Beman Dawes, 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Generates C++0x scoped enums if the feature is present, otherwise emulates C++0x +// scoped enums with C++03 namespaces and enums. The Boost.Config BOOST_NO_SCOPED_ENUMS +// macro is used to detect feature support. +// +// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf for a +// description of the scoped enum feature. Note that the committee changed the name +// from strongly typed enum to scoped enum. +// +// Caution: only the syntax is emulated; the semantics are not emulated and +// the syntax emulation doesn't include being able to specify the underlying +// representation type. +// +// The emulation is via struct rather than namespace to allow use within classes. +// Thanks to Andrey Semashev for pointing that out. +// +// Helpful comments and suggestions were also made by Kjell Elster, Phil Endecott, +// Joel Falcou, Mathias Gaunard, Felipe Magno de Almeida, Matt Calabrese, Vincente +// Botet, and Daniel James. +// +// Sample usage: +// +// BOOST_SCOPED_ENUM_START(algae) { green, red, cyan }; BOOST_SCOPED_ENUM_END +// ... +// BOOST_SCOPED_ENUM(algae) sample( algae::red ); +// void foo( BOOST_SCOPED_ENUM(algae) color ); +// ... +// sample = algae::green; +// foo( algae::cyan ); + +#ifndef BOOST_SCOPED_ENUM_EMULATION_HPP +#define BOOST_SCOPED_ENUM_EMULATION_HPP + +#include + +#ifdef BOOST_NO_SCOPED_ENUMS + +# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type +# define BOOST_SCOPED_ENUM_END }; +# define BOOST_SCOPED_ENUM(name) name::enum_type + +#else + +# define BOOST_SCOPED_ENUM_START(name) enum class name +# define BOOST_SCOPED_ENUM_END +# define BOOST_SCOPED_ENUM(name) name + +#endif + +#endif // BOOST_SCOPED_ENUM_EMULATION_HPP diff --git a/external/boost/detail/sp_typeinfo.hpp b/external/boost/detail/sp_typeinfo.hpp new file mode 100644 index 0000000..43fae78 --- /dev/null +++ b/external/boost/detail/sp_typeinfo.hpp @@ -0,0 +1,135 @@ +#ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED +#define BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_typeinfo.hpp +// +// Copyright 2007 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 + +#if defined( BOOST_NO_TYPEID ) + +#include +#include + +namespace boost +{ + +namespace detail +{ + +class sp_typeinfo +{ +private: + + sp_typeinfo( sp_typeinfo const& ); + sp_typeinfo& operator=( sp_typeinfo const& ); + + char const * name_; + +public: + + explicit sp_typeinfo( char const * name ): name_( name ) + { + } + + bool operator==( sp_typeinfo const& rhs ) const + { + return this == &rhs; + } + + bool operator!=( sp_typeinfo const& rhs ) const + { + return this != &rhs; + } + + bool before( sp_typeinfo const& rhs ) const + { + return std::less< sp_typeinfo const* >()( this, &rhs ); + } + + char const* name() const + { + return name_; + } +}; + +template struct sp_typeid_ +{ + static sp_typeinfo ti_; + + static char const * name() + { + return BOOST_CURRENT_FUNCTION; + } +}; + +#if defined(__SUNPRO_CC) +// see #4199, the Sun Studio compiler gets confused about static initialization +// constructor arguments. But an assignment works just fine. +template sp_typeinfo sp_typeid_< T >::ti_ = sp_typeid_< T >::name(); +#else +template sp_typeinfo sp_typeid_< T >::ti_(sp_typeid_< T >::name()); +#endif + +template struct sp_typeid_< T & >: sp_typeid_< T > +{ +}; + +template struct sp_typeid_< T const >: sp_typeid_< T > +{ +}; + +template struct sp_typeid_< T volatile >: sp_typeid_< T > +{ +}; + +template struct sp_typeid_< T const volatile >: sp_typeid_< T > +{ +}; + +} // namespace detail + +} // namespace boost + +#define BOOST_SP_TYPEID(T) (boost::detail::sp_typeid_::ti_) + +#else + +#include + +namespace boost +{ + +namespace detail +{ + +#if defined( BOOST_NO_STD_TYPEINFO ) + +typedef ::type_info sp_typeinfo; + +#else + +typedef std::type_info sp_typeinfo; + +#endif + +} // namespace detail + +} // namespace boost + +#define BOOST_SP_TYPEID(T) typeid(T) + +#endif + +#endif // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED diff --git a/external/boost/detail/utf8_codecvt_facet.hpp b/external/boost/detail/utf8_codecvt_facet.hpp new file mode 100644 index 0000000..b777ff9 --- /dev/null +++ b/external/boost/detail/utf8_codecvt_facet.hpp @@ -0,0 +1,190 @@ +// Copyright (c) 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, 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 +// 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 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 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 is used, then std::codecvt must be +// specialized on those types for this to work. + +#include +#include // for mbstate_t +#include // for std::size_t + +#include +#include + +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std { + using ::mbstate_t; + using ::size_t; +} +#endif + +#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 +{ +public: + explicit utf8_codecvt_facet(std::size_t no_locale_manage=0) + : std::codecvt(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/external/boost/detail/workaround.hpp b/external/boost/detail/workaround.hpp new file mode 100644 index 0000000..40b3423 --- /dev/null +++ b/external/boost/detail/workaround.hpp @@ -0,0 +1,267 @@ +// 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 + +#include + +#ifndef __BORLANDC__ +#define __BORLANDC___WORKAROUND_GUARD 1 +#else +#define __BORLANDC___WORKAROUND_GUARD 0 +#endif +#ifndef __CODEGEARC__ +#define __CODEGEARC___WORKAROUND_GUARD 1 +#else +#define __CODEGEARC___WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_VER +#define _MSC_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_VER_WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_FULL_VER +#define _MSC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC +#define BOOST_MSVC_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC_FULL_VER +#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC__ +#define __GNUC___WORKAROUND_GUARD 1 +#else +#define __GNUC___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_MINOR__ +#define __GNUC_MINOR___WORKAROUND_GUARD 1 +#else +#define __GNUC_MINOR___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_PATCHLEVEL__ +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1 +#else +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0 +#endif +#ifndef __IBMCPP__ +#define __IBMCPP___WORKAROUND_GUARD 1 +#else +#define __IBMCPP___WORKAROUND_GUARD 0 +#endif +#ifndef __SUNPRO_CC +#define __SUNPRO_CC_WORKAROUND_GUARD 1 +#else +#define __SUNPRO_CC_WORKAROUND_GUARD 0 +#endif +#ifndef __DECCXX_VER +#define __DECCXX_VER_WORKAROUND_GUARD 1 +#else +#define __DECCXX_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __MWERKS__ +#define __MWERKS___WORKAROUND_GUARD 1 +#else +#define __MWERKS___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG__ +#define __EDG___WORKAROUND_GUARD 1 +#else +#define __EDG___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG_VERSION__ +#define __EDG_VERSION___WORKAROUND_GUARD 1 +#else +#define __EDG_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __HP_aCC +#define __HP_aCC_WORKAROUND_GUARD 1 +#else +#define __HP_aCC_WORKAROUND_GUARD 0 +#endif +#ifndef __hpxstd98 +#define __hpxstd98_WORKAROUND_GUARD 1 +#else +#define __hpxstd98_WORKAROUND_GUARD 0 +#endif +#ifndef _CRAYC +#define _CRAYC_WORKAROUND_GUARD 1 +#else +#define _CRAYC_WORKAROUND_GUARD 0 +#endif +#ifndef __DMC__ +#define __DMC___WORKAROUND_GUARD 1 +#else +#define __DMC___WORKAROUND_GUARD 0 +#endif +#ifndef MPW_CPLUS +#define MPW_CPLUS_WORKAROUND_GUARD 1 +#else +#define MPW_CPLUS_WORKAROUND_GUARD 0 +#endif +#ifndef __COMO__ +#define __COMO___WORKAROUND_GUARD 1 +#else +#define __COMO___WORKAROUND_GUARD 0 +#endif +#ifndef __COMO_VERSION__ +#define __COMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __COMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __INTEL_COMPILER +#define __INTEL_COMPILER_WORKAROUND_GUARD 1 +#else +#define __INTEL_COMPILER_WORKAROUND_GUARD 0 +#endif +#ifndef __ICL +#define __ICL_WORKAROUND_GUARD 1 +#else +#define __ICL_WORKAROUND_GUARD 0 +#endif +#ifndef _COMPILER_VERSION +#define _COMPILER_VERSION_WORKAROUND_GUARD 1 +#else +#define _COMPILER_VERSION_WORKAROUND_GUARD 0 +#endif + +#ifndef _RWSTD_VER +#define _RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define _RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_RWSTD_VER +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __GLIBCPP__ +#define __GLIBCPP___WORKAROUND_GUARD 1 +#else +#define __GLIBCPP___WORKAROUND_GUARD 0 +#endif +#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1 +#else +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0 +#endif +#ifndef __SGI_STL_PORT +#define __SGI_STL_PORT_WORKAROUND_GUARD 1 +#else +#define __SGI_STL_PORT_WORKAROUND_GUARD 0 +#endif +#ifndef _STLPORT_VERSION +#define _STLPORT_VERSION_WORKAROUND_GUARD 1 +#else +#define _STLPORT_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef __LIBCOMO_VERSION__ +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef _CPPLIB_VER +#define _CPPLIB_VER_WORKAROUND_GUARD 1 +#else +#define _CPPLIB_VER_WORKAROUND_GUARD 0 +#endif + +#ifndef BOOST_INTEL_CXX_VERSION +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL_WIN +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_DINKUMWARE_STDLIB +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1 +#else +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL +#define BOOST_INTEL_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WORKAROUND_GUARD 0 +#endif +// Always define to zero, if it's used it'll be defined my MPL: +#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0 + +# define BOOST_WORKAROUND(symbol, test) \ + ((symbol ## _WORKAROUND_GUARD + 0 == 0) && \ + (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/external/boost/enable_shared_from_this.hpp b/external/boost/enable_shared_from_this.hpp new file mode 100644 index 0000000..b1bb63d --- /dev/null +++ b/external/boost/enable_shared_from_this.hpp @@ -0,0 +1,18 @@ +#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 + +#endif // #ifndef BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED diff --git a/external/boost/exception/current_exception_cast.hpp b/external/boost/exception/current_exception_cast.hpp new file mode 100644 index 0000000..af2f153 --- /dev/null +++ b/external/boost/exception/current_exception_cast.hpp @@ -0,0 +1,43 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, 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) + +#ifndef UUID_7E83C166200811DE885E826156D89593 +#define UUID_7E83C166200811DE885E826156D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +namespace +boost + { + template + inline + E * + current_exception_cast() + { + try + { + throw; + } + catch( + E & e ) + { + return &e; + } + catch( + ...) + { + return 0; + } + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff --git a/external/boost/exception/detail/attribute_noreturn.hpp b/external/boost/exception/detail/attribute_noreturn.hpp new file mode 100644 index 0000000..f6a0b59 --- /dev/null +++ b/external/boost/exception/detail/attribute_noreturn.hpp @@ -0,0 +1,17 @@ +//Copyright (c) 2009 Emil Dotchevski and Reverge Studios, 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) + +#ifndef UUID_61531AB0680611DEADD5846855D89593 +#define UUID_61531AB0680611DEADD5846855D89593 + +#if defined(_MSC_VER) +#define BOOST_ATTRIBUTE_NORETURN __declspec(noreturn) +#elif defined(__GNUC__) +#define BOOST_ATTRIBUTE_NORETURN __attribute__((noreturn)) +#else +#define BOOST_ATTRIBUTE_NORETURN +#endif + +#endif diff --git a/external/boost/exception/detail/error_info_impl.hpp b/external/boost/exception/detail/error_info_impl.hpp new file mode 100644 index 0000000..883d313 --- /dev/null +++ b/external/boost/exception/detail/error_info_impl.hpp @@ -0,0 +1,75 @@ +//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, 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) + +#ifndef UUID_CE6983AC753411DDA764247956D89593 +#define UUID_CE6983AC753411DDA764247956D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include + +namespace +boost + { + namespace + exception_detail + { + class + error_info_base + { + public: + + virtual std::string tag_typeid_name() const = 0; + virtual std::string value_as_string() const = 0; + + protected: + + ~error_info_base() throw() + { + } + }; + } + + template + class + error_info: + public exception_detail::error_info_base + { + public: + + typedef T value_type; + + error_info( value_type const & value ); + ~error_info() throw(); + + value_type const & + value() const + { + return value_; + } + + value_type & + value() + { + return value_; + } + + private: + + std::string tag_typeid_name() const; + std::string value_as_string() const; + + value_type value_; + }; + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff --git a/external/boost/exception/detail/type_info.hpp b/external/boost/exception/detail/type_info.hpp new file mode 100644 index 0000000..92f8464 --- /dev/null +++ b/external/boost/exception/detail/type_info.hpp @@ -0,0 +1,83 @@ +//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, 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) + +#ifndef UUID_C3E1741C754311DDB2834CCA55D89593 +#define UUID_C3E1741C754311DDB2834CCA55D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#ifndef BOOST_NO_TYPEID +#include +#endif +#include + +namespace +boost + { + template + inline + std::string + tag_type_name() + { +#ifdef BOOST_NO_TYPEID + return BOOST_CURRENT_FUNCTION; +#else + return units::detail::demangle(typeid(T*).name()); +#endif + } + + template + inline + std::string + type_name() + { +#ifdef BOOST_NO_TYPEID + return BOOST_CURRENT_FUNCTION; +#else + return units::detail::demangle(typeid(T).name()); +#endif + } + + namespace + exception_detail + { + struct + type_info_ + { + detail::sp_typeinfo const * type_; + + explicit + type_info_( detail::sp_typeinfo const & type ): + type_(&type) + { + } + + friend + bool + operator<( type_info_ const & a, type_info_ const & b ) + { + return 0!=(a.type_->before(*b.type_)); + } + }; + } + } + +#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_SP_TYPEID(T)) + +#ifndef BOOST_NO_RTTI +#define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::boost::exception_detail::type_info_(typeid(x)) +#endif + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff --git a/external/boost/exception/exception.hpp b/external/boost/exception/exception.hpp new file mode 100644 index 0000000..9cdfd5c --- /dev/null +++ b/external/boost/exception/exception.hpp @@ -0,0 +1,456 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, 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) + +#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593 +#define UUID_274DA366004E11DCB1DDFE2E56D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +namespace +boost + { + namespace + exception_detail + { + template + class + refcount_ptr + { + public: + + refcount_ptr(): + px_(0) + { + } + + ~refcount_ptr() + { + release(); + } + + refcount_ptr( refcount_ptr const & x ): + px_(x.px_) + { + add_ref(); + } + + refcount_ptr & + operator=( refcount_ptr const & x ) + { + adopt(x.px_); + return *this; + } + + void + adopt( T * px ) + { + release(); + px_=px; + add_ref(); + } + + T * + get() const + { + return px_; + } + + private: + + T * px_; + + void + add_ref() + { + if( px_ ) + px_->add_ref(); + } + + void + release() + { + if( px_ && px_->release() ) + px_=0; + } + }; + } + + //////////////////////////////////////////////////////////////////////// + + template + class error_info; + + typedef error_info throw_function; + typedef error_info throw_file; + typedef error_info throw_line; + + template <> + class + error_info + { + public: + typedef char const * value_type; + value_type v_; + explicit + error_info( value_type v ): + v_(v) + { + } + }; + + template <> + class + error_info + { + public: + typedef char const * value_type; + value_type v_; + explicit + error_info( value_type v ): + v_(v) + { + } + }; + + template <> + class + error_info + { + public: + typedef int value_type; + value_type v_; + explicit + error_info( value_type v ): + v_(v) + { + } + }; + +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility push (default) +# endif +#endif + class exception; +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility pop +# endif +#endif + + template + class shared_ptr; + + namespace + exception_detail + { + class error_info_base; + struct type_info_; + + struct + error_info_container + { + virtual char const * diagnostic_information( char const * ) const = 0; + virtual shared_ptr get( type_info_ const & ) const = 0; + virtual void set( shared_ptr const &, type_info_ const & ) = 0; + virtual void add_ref() const = 0; + virtual bool release() const = 0; + virtual refcount_ptr clone() const = 0; + + protected: + + ~error_info_container() throw() + { + } + }; + + template + struct get_info; + + template <> + struct get_info; + + template <> + struct get_info; + + template <> + struct get_info; + + char const * get_diagnostic_information( exception const &, char const * ); + + void copy_boost_exception( exception *, exception const * ); + + template + E const & set_info( E const &, error_info const & ); + + template + E const & set_info( E const &, throw_function const & ); + + template + E const & set_info( E const &, throw_file const & ); + + template + E const & set_info( E const &, throw_line const & ); + } + +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility push (default) +# endif +#endif + class + exception + { + protected: + + exception(): + throw_function_(0), + throw_file_(0), + throw_line_(-1) + { + } + +#ifdef __HP_aCC + //On HP aCC, this protected copy constructor prevents throwing boost::exception. + //On all other platforms, the same effect is achieved by the pure virtual destructor. + exception( exception const & x ) throw(): + data_(x.data_), + throw_function_(x.throw_function_), + throw_file_(x.throw_file_), + throw_line_(x.throw_line_) + { + } +#endif + + virtual ~exception() throw() +#ifndef __HP_aCC + = 0 //Workaround for HP aCC, =0 incorrectly leads to link errors. +#endif + ; + +#if (defined(__MWERKS__) && __MWERKS__<=0x3207) || (defined(_MSC_VER) && _MSC_VER<=1310) + public: +#else + private: + + template + friend E const & exception_detail::set_info( E const &, throw_function const & ); + + template + friend E const & exception_detail::set_info( E const &, throw_file const & ); + + template + friend E const & exception_detail::set_info( E const &, throw_line const & ); + + template + friend E const & exception_detail::set_info( E const &, error_info const & ); + + friend char const * exception_detail::get_diagnostic_information( exception const &, char const * ); + + template + friend struct exception_detail::get_info; + friend struct exception_detail::get_info; + friend struct exception_detail::get_info; + friend struct exception_detail::get_info; + friend void exception_detail::copy_boost_exception( exception *, exception const * ); +#endif + mutable exception_detail::refcount_ptr data_; + mutable char const * throw_function_; + mutable char const * throw_file_; + mutable int throw_line_; + }; +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility pop +# endif +#endif + + inline + exception:: + ~exception() throw() + { + } + + namespace + exception_detail + { + template + E const & + set_info( E const & x, throw_function const & y ) + { + x.throw_function_=y.v_; + return x; + } + + template + E const & + set_info( E const & x, throw_file const & y ) + { + x.throw_file_=y.v_; + return x; + } + + template + E const & + set_info( E const & x, throw_line const & y ) + { + x.throw_line_=y.v_; + return x; + } + } + + //////////////////////////////////////////////////////////////////////// + + namespace + exception_detail + { + template + struct + error_info_injector: + public T, + public exception + { + explicit + error_info_injector( T const & x ): + T(x) + { + } + + ~error_info_injector() throw() + { + } + }; + + struct large_size { char c[256]; }; + large_size dispatch_boost_exception( exception const * ); + + struct small_size { }; + small_size dispatch_boost_exception( void const * ); + + template + struct enable_error_info_helper; + + template + struct + enable_error_info_helper + { + typedef T type; + }; + + template + struct + enable_error_info_helper + { + typedef error_info_injector type; + }; + + template + struct + enable_error_info_return_type + { + typedef typename enable_error_info_helper(0)))>::type type; + }; + } + + template + inline + typename + exception_detail::enable_error_info_return_type::type + enable_error_info( T const & x ) + { + typedef typename exception_detail::enable_error_info_return_type::type rt; + return rt(x); + } + + //////////////////////////////////////////////////////////////////////// + + namespace + exception_detail + { + class + clone_base + { + public: + + virtual clone_base const * clone() const = 0; + virtual void rethrow() const = 0; + + virtual + ~clone_base() throw() + { + } + }; + + inline + void + copy_boost_exception( exception * a, exception const * b ) + { + refcount_ptr data; + if( error_info_container * d=b->data_.get() ) + data = d->clone(); + a->throw_file_ = b->throw_file_; + a->throw_line_ = b->throw_line_; + a->throw_function_ = b->throw_function_; + a->data_ = data; + } + + inline + void + copy_boost_exception( void *, void const * ) + { + } + + template + class + clone_impl: + public T, + public clone_base + { + public: + + explicit + clone_impl( T const & x ): + T(x) + { + copy_boost_exception(this,&x); + } + + ~clone_impl() throw() + { + } + + private: + + clone_base const * + clone() const + { + return new clone_impl(*this); + } + + void + rethrow() const + { + throw*this; + } + }; + } + + template + inline + exception_detail::clone_impl + enable_current_exception( T const & x ) + { + return exception_detail::clone_impl(x); + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff --git a/external/boost/exception/get_error_info.hpp b/external/boost/exception/get_error_info.hpp new file mode 100644 index 0000000..046f05a --- /dev/null +++ b/external/boost/exception/get_error_info.hpp @@ -0,0 +1,130 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, 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) + +#ifndef UUID_1A590226753311DD9E4CCF6156D89593 +#define UUID_1A590226753311DD9E4CCF6156D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#include + +namespace +boost + { + namespace + exception_detail + { + template + struct + get_info + { + static + typename ErrorInfo::value_type * + get( exception const & x ) + { + if( exception_detail::error_info_container * c=x.data_.get() ) + if( shared_ptr eib = c->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo)) ) + { +#ifndef BOOST_NO_RTTI + BOOST_ASSERT( 0!=dynamic_cast(eib.get()) ); +#endif + ErrorInfo * w = static_cast(eib.get()); + return &w->value(); + } + return 0; + } + }; + + template <> + struct + get_info + { + static + char const * * + get( exception const & x ) + { + return x.throw_function_ ? &x.throw_function_ : 0; + } + }; + + template <> + struct + get_info + { + static + char const * * + get( exception const & x ) + { + return x.throw_file_ ? &x.throw_file_ : 0; + } + }; + + template <> + struct + get_info + { + static + int * + get( exception const & x ) + { + return x.throw_line_!=-1 ? &x.throw_line_ : 0; + } + }; + + template + struct + get_error_info_return_type + { + typedef R * type; + }; + + template + struct + get_error_info_return_type + { + typedef R const * type; + }; + } + +#ifdef BOOST_NO_RTTI + template + inline + typename ErrorInfo::value_type const * + get_error_info( boost::exception const & x ) + { + return exception_detail::get_info::get(x); + } + template + inline + typename ErrorInfo::value_type * + get_error_info( boost::exception & x ) + { + return exception_detail::get_info::get(x); + } +#else + template + inline + typename exception_detail::get_error_info_return_type::type + get_error_info( E & some_exception ) + { + if( exception const * x = dynamic_cast(&some_exception) ) + return exception_detail::get_info::get(*x); + else + return 0; + } +#endif + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff --git a/external/boost/filesystem.hpp b/external/boost/filesystem.hpp new file mode 100644 index 0000000..d64d760 --- /dev/null +++ b/external/boost/filesystem.hpp @@ -0,0 +1,41 @@ +// boost/filesystem.hpp --------------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_FILESYSTEM_HPP +#define BOOST_FILESYSTEM_FILESYSTEM_HPP + +#include // for , in case + // BOOST_FILESYSTEM_VERSION defined there + +# if defined(BOOST_FILESYSTEM_VERSION) \ + && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 +# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#if BOOST_FILESYSTEM_VERSION == 2 +# include +# include +# include +# include + +# else +# include +# include +# include +# include + +# endif + +#endif // BOOST_FILESYSTEM_FILESYSTEM_HPP diff --git a/external/boost/filesystem/config.hpp b/external/boost/filesystem/config.hpp new file mode 100644 index 0000000..c813bf5 --- /dev/null +++ b/external/boost/filesystem/config.hpp @@ -0,0 +1,35 @@ +// boost/filesystem/config.hpp -------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_CONFIGX_HPP +#define BOOST_FILESYSTEM_CONFIGX_HPP + +#include // for , in case + // BOOST_FILESYSTEM_VERSION defined there + +# if defined(BOOST_FILESYSTEM_VERSION) \ + && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 +# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#if BOOST_FILESYSTEM_VERSION == 2 +# include + +# else +# include + +# endif + +#endif // BOOST_FILESYSTEM_CONFIGX_HPP diff --git a/external/boost/filesystem/convenience.hpp b/external/boost/filesystem/convenience.hpp new file mode 100644 index 0000000..a132e17 --- /dev/null +++ b/external/boost/filesystem/convenience.hpp @@ -0,0 +1,35 @@ +// boost/filesystem/convenience.hpp --------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_CONVENIENCEX_HPP +#define BOOST_FILESYSTEM_CONVENIENCEX_HPP + +#include // for , in case + // BOOST_FILESYSTEM_VERSION defined there + +# if defined(BOOST_FILESYSTEM_VERSION) \ + && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 +# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#if BOOST_FILESYSTEM_VERSION == 2 +# include + +# else +# include + +# endif + +#endif // BOOST_FILESYSTEM_CONVENIENCEX_HPP diff --git a/external/boost/filesystem/detail/utf8_codecvt_facet.hpp b/external/boost/filesystem/detail/utf8_codecvt_facet.hpp new file mode 100644 index 0000000..3b78fb1 --- /dev/null +++ b/external/boost/filesystem/detail/utf8_codecvt_facet.hpp @@ -0,0 +1,24 @@ +// Copyright (c) 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 http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP +#define BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP + +#include + +#define BOOST_UTF8_BEGIN_NAMESPACE \ + namespace boost { namespace filesystem { namespace detail { + +#define BOOST_UTF8_END_NAMESPACE }}} +#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL + +#include + +#undef BOOST_UTF8_BEGIN_NAMESPACE +#undef BOOST_UTF8_END_NAMESPACE +#undef BOOST_UTF8_DECL + +#endif diff --git a/external/boost/filesystem/fstream.hpp b/external/boost/filesystem/fstream.hpp new file mode 100644 index 0000000..e159e58 --- /dev/null +++ b/external/boost/filesystem/fstream.hpp @@ -0,0 +1,35 @@ +// boost/filesystem/fstream.hpp ------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_FSTREAMX_HPP +#define BOOST_FILESYSTEM_FSTREAMX_HPP + +#include // for , in case + // BOOST_FILESYSTEM_VERSION defined there + +# if defined(BOOST_FILESYSTEM_VERSION) \ + && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 +# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#if BOOST_FILESYSTEM_VERSION == 2 +# include + +# else +# include + +# endif + +#endif // BOOST_FILESYSTEM_FSTREAMX_HPP diff --git a/external/boost/filesystem/operations.hpp b/external/boost/filesystem/operations.hpp new file mode 100644 index 0000000..db7b123 --- /dev/null +++ b/external/boost/filesystem/operations.hpp @@ -0,0 +1,35 @@ +// boost/filesystem/operations.hpp ---------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_OPERATIONSX_HPP +#define BOOST_FILESYSTEM_OPERATIONSX_HPP + +#include // for , in case + // BOOST_FILESYSTEM_VERSION defined there + +# if defined(BOOST_FILESYSTEM_VERSION) \ + && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 +# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#if BOOST_FILESYSTEM_VERSION == 2 +# include + +# else +# include + +# endif + +#endif // BOOST_FILESYSTEM_OPERATIONSX_HPP diff --git a/external/boost/filesystem/path.hpp b/external/boost/filesystem/path.hpp new file mode 100644 index 0000000..3bed7d2 --- /dev/null +++ b/external/boost/filesystem/path.hpp @@ -0,0 +1,35 @@ +// boost/filesystem/path.hpp ---------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_PATHX_HPP +#define BOOST_FILESYSTEM_PATHX_HPP + +#include // for , in case + // BOOST_FILESYSTEM_VERSION defined there + +# if defined(BOOST_FILESYSTEM_VERSION) \ + && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 +# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#if BOOST_FILESYSTEM_VERSION == 2 +# include + +# else +# include + +# endif + +#endif // BOOST_FILESYSTEM_PATHX_HPP diff --git a/external/boost/filesystem/v2/config.hpp b/external/boost/filesystem/v2/config.hpp new file mode 100644 index 0000000..7116de5 --- /dev/null +++ b/external/boost/filesystem/v2/config.hpp @@ -0,0 +1,106 @@ +// boost/filesystem/v2/config.hpp ------------------------------------------// + +// Copyright Beman Dawes 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 library home page at http://www.boost.org/libs/filesystem + +//----------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM2_CONFIG_HPP +#define BOOST_FILESYSTEM2_CONFIG_HPP + +# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 2 +# error Compiling Filesystem version 2 file with BOOST_FILESYSTEM_VERSION defined != 2 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 2 +# endif + +#define BOOST_FILESYSTEM_I18N // aid users wishing to compile several versions + +// ability to change namespace aids path_table.cpp ------------------------// +#ifndef BOOST_FILESYSTEM2_NAMESPACE +# define BOOST_FILESYSTEM2_NAMESPACE filesystem2 +#endif + +#include +#include // for BOOST_POSIX_API or BOOST_WINDOWS_API +#include + +// BOOST_POSIX_PATH or BOOST_WINDOWS_PATH specify which path syntax to recognise + +# if defined(BOOST_WINDOWS_API) && defined(BOOST_POSIX_PATH) +# error builds with Windows API do not support BOOST_POSIX_PATH +# endif + +# if !defined(_WIN32) && !defined(__CYGWIN__) && defined(BOOST_WINDOWS_PATH) +# error builds on non-Windows platforms do not support BOOST_WINDOWS_PATH +# endif + +# if defined(BOOST_WINDOWS_PATH) && defined(BOOST_POSIX_PATH) +# error both BOOST_WINDOWS_PATH and BOOST_POSIX_PATH are defined +# elif !defined(BOOST_WINDOWS_PATH) && !defined(BOOST_POSIX_PATH) +# if !defined(BOOST_POSIX_PATH) && (defined(_WIN32) || defined(__CYGWIN__)) +# define BOOST_WINDOWS_PATH +# else +# define BOOST_POSIX_PATH +# endif +# endif + +// throw an exception ----------------------------------------------------------------// +// +// Exceptions were originally thrown via boost::throw_exception(). +// As throw_exception() became more complex, it caused user error reporting +// to be harder to interpret, since the exception reported became much more complex. +// The immediate fix was to throw directly, wrapped in a macro to make any later change +// easier. + +#define BOOST_FILESYSTEM_THROW(EX) throw EX + +// narrow support only for badly broken compilers or libraries -------------// + +# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE) || BOOST_WORKAROUND(__BORLANDC__, <0x610) +# define BOOST_FILESYSTEM2_NARROW_ONLY +# endif + +// This header implements separate compilation features as described in +// http://www.boost.org/more/separate_compilation.html + +// enable dynamic linking ---------------------------------------------------// + +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) +# if defined(BOOST_FILESYSTEM_SOURCE) +# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT +# endif +#else +# 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 +#endif // auto-linking disabled + +#endif // BOOST_FILESYSTEM2_CONFIG_HPP diff --git a/external/boost/filesystem/v2/convenience.hpp b/external/boost/filesystem/v2/convenience.hpp new file mode 100644 index 0000000..30b6ade --- /dev/null +++ b/external/boost/filesystem/v2/convenience.hpp @@ -0,0 +1,339 @@ +// 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_FILESYSTEM2_CONVENIENCE_HPP +#define BOOST_FILESYSTEM2_CONVENIENCE_HPP + +#include +#include +#include +#include +#include + +#include // must be the last #include + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY +# define BOOST_FS_FUNC(BOOST_FS_TYPE) \ + template typename boost::enable_if, \ + 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 inline std::string +# define BOOST_FS_TYPENAME +# endif + +namespace boost +{ + namespace filesystem2 + { + + 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( + "boost::filesystem::create_directories", ph, + make_error_code( boost::system::errc::file_exists ) ) ); + return false; + } + + // First create branch, by calling ourself recursively + create_directories(ph.parent_path()); + // Now that parent's path exists, create the directory + create_directory(ph); + return true; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + + BOOST_FS_FUNC_STRING extension(const Path& ph) + { + typedef BOOST_FS_TYPENAME Path::string_type string_type; + string_type filename = ph.filename(); + + BOOST_FS_TYPENAME string_type::size_type n = filename.rfind('.'); + if (n != string_type::npos) + return filename.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 filename = ph.filename(); + BOOST_FS_TYPENAME string_type::size_type n = filename.rfind('.'); + return filename.substr(0, n); + } + + + BOOST_FS_FUNC(Path) change_extension( const Path & ph, + const BOOST_FS_TYPENAME Path::string_type & new_extension ) + { +# if !defined(_STLPORT_VERSION) + return ph.parent_path() / (basename(ph) + new_extension); +# else + typedef BOOST_FS_TYPENAME Path::string_type string_type; + string_type filename = basename(ph) + new_extension; + return ph.parent_path() / filename; +# endif + } +# endif + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + // "do-the-right-thing" overloads ---------------------------------------// + + inline bool create_directories(const path& ph) + { return create_directories(ph); } + inline bool create_directories(const wpath& ph) + { return create_directories(ph); } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline std::string extension(const path& ph) + { return extension(ph); } + inline std::wstring extension(const wpath& ph) + { return extension(ph); } + + inline std::string basename(const path& ph) + { return basename( ph ); } + inline std::wstring basename(const wpath& ph) + { return basename( ph ); } + + inline path change_extension( const path & ph, const std::string& new_ex ) + { return change_extension( ph, new_ex ); } + inline wpath change_extension( const wpath & ph, const std::wstring& new_ex ) + { return change_extension( ph, new_ex ); } +# endif + +# 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, + basic_directory_entry, + 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_code & 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, + basic_directory_entry, + 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 recursive_directory_iterator; +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + typedef basic_recursive_directory_iterator wrecursive_directory_iterator; +# endif + + // basic_recursive_directory_iterator implementation -------------------// + + // constructors + template + basic_recursive_directory_iterator:: + basic_recursive_directory_iterator( const Path & dir_path ) + : m_imp( new detail::recur_dir_itr_imp ) + { + m_imp->m_stack.push( basic_directory_iterator( dir_path ) ); + if ( m_imp->m_stack.top () == basic_directory_iterator() ) + { m_imp.reset (); } + } + + template + basic_recursive_directory_iterator:: + basic_recursive_directory_iterator( const Path & dir_path, + system::error_code & ec ) + : m_imp( new detail::recur_dir_itr_imp ) + { + m_imp->m_no_throw = true; + m_imp->m_stack.push( basic_directory_iterator( dir_path, ec ) ); + if ( m_imp->m_stack.top () == basic_directory_iterator() ) + { m_imp.reset (); } + } + + // increment + template + void basic_recursive_directory_iterator::increment() + { + BOOST_ASSERT( m_imp.get() && "increment on end iterator" ); + + static const basic_directory_iterator 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_code ec; +#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610)) + if( m_imp->m_no_throw ) { + m_imp->m_stack.push( + basic_directory_iterator( *m_imp->m_stack.top(), ec ) + ); + } + else { + m_imp->m_stack.push( + basic_directory_iterator( *m_imp->m_stack.top() ) + ); + } +#else + m_imp->m_stack.push( + m_imp->m_no_throw + ? basic_directory_iterator( *m_imp->m_stack.top(), ec ) + : basic_directory_iterator( *m_imp->m_stack.top() ) ); +#endif + 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 + void basic_recursive_directory_iterator::pop() + { + BOOST_ASSERT( m_imp.get() && "pop on end iterator" ); + BOOST_ASSERT( m_imp->m_level > 0 && "pop with level < 1" ); + + static const basic_directory_iterator end_itr; + + do + { + m_imp->m_stack.pop(); + --m_imp->m_level; + } + while ( !m_imp->m_stack.empty() + && ++m_imp->m_stack.top() == end_itr ); + + if ( m_imp->m_stack.empty() ) m_imp.reset(); // done, so make end iterator + } + + } // namespace filesystem2 +} // namespace boost + +#undef BOOST_FS_FUNC_STRING +#undef BOOST_FS_FUNC + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + using filesystem2::create_directories; + using filesystem2::basic_recursive_directory_iterator; + using filesystem2::recursive_directory_iterator; + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + using filesystem2::extension; + using filesystem2::basename; + using filesystem2::change_extension; +# endif + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + using filesystem2::wrecursive_directory_iterator; +# endif + + } +} + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM2_CONVENIENCE_HPP diff --git a/external/boost/filesystem/v2/fstream.hpp b/external/boost/filesystem/v2/fstream.hpp new file mode 100644 index 0000000..887d59d --- /dev/null +++ b/external/boost/filesystem/v2/fstream.hpp @@ -0,0 +1,613 @@ +// 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_FILESYSTEM2_FSTREAM_HPP +#define BOOST_FILESYSTEM2_FSTREAM_HPP + +#include +#include // for 8.3 hack (see below) +#include +#include + +#include +#include + +#include // 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 filesystem2 + { + namespace detail + { +# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM2_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 > + class basic_filebuf : public std::basic_filebuf + { + private: // disallow copying + basic_filebuf( const basic_filebuf & ); + const basic_filebuf & operator=( const basic_filebuf & ); + public: + basic_filebuf() {} + virtual ~basic_filebuf() {} + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + template + typename boost::enable_if, + basic_filebuf *>::type + open( const Path & file_ph, std::ios_base::openmode mode ); + + basic_filebuf * + 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 * + open( const path & file_ph, std::ios_base::openmode mode ); +# endif + }; + + template < class charT, class traits = std::char_traits > + class basic_ifstream : public std::basic_ifstream + { + 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_FILESYSTEM2_NARROW_ONLY + template + explicit basic_ifstream( const Path & file_ph, + typename boost::enable_if >::type* dummy = 0 ); + + template + basic_ifstream( const Path & file_ph, std::ios_base::openmode mode, + typename boost::enable_if >::type* dummy = 0 ); + + template + typename boost::enable_if, void>::type + open( const Path & file_ph ); + + template + typename boost::enable_if, 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 > + class basic_ofstream : public std::basic_ofstream + { + 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_FILESYSTEM2_NARROW_ONLY + + template + explicit basic_ofstream( const Path & file_ph, + typename boost::enable_if >::type* dummy = 0 ); + explicit basic_ofstream( const wpath & file_ph ); + + template + basic_ofstream( const Path & file_ph, std::ios_base::openmode mode, + typename boost::enable_if >::type* dummy = 0 ); + basic_ofstream( const wpath & file_ph, std::ios_base::openmode mode ); + + template + typename boost::enable_if, void>::type + open( const Path & file_ph ); + void open( const wpath & file_ph ); + + template + typename boost::enable_if, 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 > + class basic_fstream : public std::basic_fstream + { + 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_FILESYSTEM2_NARROW_ONLY + + template + explicit basic_fstream( const Path & file_ph, + typename boost::enable_if >::type* dummy = 0 ); + explicit basic_fstream( const wpath & file_ph ); + + template + basic_fstream( const Path & file_ph, std::ios_base::openmode mode, + typename boost::enable_if >::type* dummy = 0 ); + basic_fstream( const wpath & file_ph, std::ios_base::openmode mode ); + + template + typename boost::enable_if, void>::type + open( const Path & file_ph ); + void open( const wpath & file_ph ); + + template + typename boost::enable_if, 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 filebuf; + typedef basic_ifstream ifstream; + typedef basic_ofstream ofstream; + typedef basic_fstream fstream; + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + typedef basic_filebuf wfilebuf; + typedef basic_ifstream wifstream; + typedef basic_fstream wfstream; + typedef basic_ofstream wofstream; +# endif + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + +// basic_filebuf definitions -----------------------------------------------// + + template + template + typename boost::enable_if, + basic_filebuf *>::type + basic_filebuf::open( const Path & file_ph, + std::ios_base::openmode mode ) + { + return (std::basic_filebuf::open( detail::path_proxy( + file_ph.external_file_string(), mode ).c_str(), mode ) + == 0) ? 0 : this; + } + + template + basic_filebuf * + basic_filebuf::open( const wpath & file_ph, + std::ios_base::openmode mode ) + { + return this->BOOST_NESTED_TEMPLATE open( file_ph, mode ); + } + +// basic_ifstream definitions ----------------------------------------------// + + template template + basic_ifstream::basic_ifstream(const Path & file_ph, + typename boost::enable_if >::type* ) + : std::basic_ifstream( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::in ).c_str(), std::ios_base::in ) {} + + template + basic_ifstream::basic_ifstream( const wpath & file_ph ) + : std::basic_ifstream( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::in ).c_str(), std::ios_base::in ) {} + + template template + basic_ifstream::basic_ifstream( const Path & file_ph, + std::ios_base::openmode mode, + typename boost::enable_if >::type* ) + : std::basic_ifstream( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ) {} + + template + basic_ifstream::basic_ifstream( const wpath & file_ph, + std::ios_base::openmode mode ) + : std::basic_ifstream( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ) {} + + template template + typename boost::enable_if, void>::type + basic_ifstream::open( const Path & file_ph ) + { + std::basic_ifstream::open( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::in ).c_str(), std::ios_base::in ); + } + + template + void basic_ifstream::open( const wpath & file_ph ) + { + std::basic_ifstream::open( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::in ).c_str(), std::ios_base::in ); + } + + template template + typename boost::enable_if, void>::type + basic_ifstream::open( const Path & file_ph, + std::ios_base::openmode mode ) + { + std::basic_ifstream::open( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ); + } + + template + void basic_ifstream::open( const wpath & file_ph, + std::ios_base::openmode mode ) + { + std::basic_ifstream::open( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ); + } + +// basic_ofstream definitions ----------------------------------------------// + + template template + basic_ofstream::basic_ofstream(const Path & file_ph, + typename boost::enable_if >::type* ) + : std::basic_ofstream( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::out ).c_str(), std::ios_base::out ) {} + + template + basic_ofstream::basic_ofstream( const wpath & file_ph ) + : std::basic_ofstream( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::out ).c_str(), std::ios_base::out ) {} + + template template + basic_ofstream::basic_ofstream( const Path & file_ph, + std::ios_base::openmode mode, + typename boost::enable_if >::type* ) + : std::basic_ofstream( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ) {} + + template + basic_ofstream::basic_ofstream( const wpath & file_ph, + std::ios_base::openmode mode ) + : std::basic_ofstream( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ) {} + + template template + typename boost::enable_if, void>::type + basic_ofstream::open( const Path & file_ph ) + { + std::basic_ofstream::open( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::out ).c_str(), std::ios_base::out ); + } + + template + void basic_ofstream::open( const wpath & file_ph ) + { + std::basic_ofstream::open( + detail::path_proxy( file_ph.external_file_string(), + std::ios_base::out ).c_str(), std::ios_base::out ); + } + + template template + typename boost::enable_if, void>::type + basic_ofstream::open( const Path & file_ph, + std::ios_base::openmode mode ) + { + std::basic_ofstream::open( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ); + } + + template + void basic_ofstream::open( const wpath & file_ph, + std::ios_base::openmode mode ) + { + std::basic_ofstream::open( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ); + } + +// basic_fstream definitions -----------------------------------------------// + + template template + basic_fstream::basic_fstream(const Path & file_ph, + typename boost::enable_if >::type* ) + : std::basic_fstream( + 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 + basic_fstream::basic_fstream( const wpath & file_ph ) + : std::basic_fstream( + 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 template + basic_fstream::basic_fstream( const Path & file_ph, + std::ios_base::openmode mode, + typename boost::enable_if >::type* ) + : std::basic_fstream( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ) {} + + template + basic_fstream::basic_fstream( const wpath & file_ph, + std::ios_base::openmode mode ) + : std::basic_fstream( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ) {} + + template template + typename boost::enable_if, void>::type + basic_fstream::open( const Path & file_ph ) + { + std::basic_fstream::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 + void basic_fstream::open( const wpath & file_ph ) + { + std::basic_fstream::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 template + typename boost::enable_if, void>::type + basic_fstream::open( const Path & file_ph, + std::ios_base::openmode mode ) + { + std::basic_fstream::open( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ); + } + + template + void basic_fstream::open( const wpath & file_ph, + std::ios_base::openmode mode ) + { + std::basic_fstream::open( + detail::path_proxy( file_ph.external_file_string(), + mode ).c_str(), mode ); + } + +# endif + +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this + template + basic_filebuf * + basic_filebuf::open( const path & file_ph, + std::ios_base::openmode mode ) + { + return std::basic_filebuf::open( + file_ph.file_string().c_str(), mode ) == 0 ? 0 : this; + } +# endif + + template + basic_ifstream::basic_ifstream( const path & file_ph ) + : std::basic_ifstream( + file_ph.file_string().c_str(), std::ios_base::in ) {} + + template + basic_ifstream::basic_ifstream( const path & file_ph, + std::ios_base::openmode mode ) + : std::basic_ifstream( + file_ph.file_string().c_str(), mode ) {} + +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this + template + void basic_ifstream::open( const path & file_ph ) + { + std::basic_ifstream::open( + file_ph.file_string().c_str(), std::ios_base::in ); + } + + template + void basic_ifstream::open( const path & file_ph, + std::ios_base::openmode mode ) + { + std::basic_ifstream::open( + file_ph.file_string().c_str(), mode ); + } +# endif + + template + basic_ofstream::basic_ofstream( const path & file_ph ) + : std::basic_ofstream( + file_ph.file_string().c_str(), std::ios_base::out ) {} + + template + basic_ofstream::basic_ofstream( const path & file_ph, + std::ios_base::openmode mode ) + : std::basic_ofstream( + file_ph.file_string().c_str(), mode ) {} + +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this + template + void basic_ofstream::open( const path & file_ph ) + { + std::basic_ofstream::open( + file_ph.file_string().c_str(), std::ios_base::out ); + } + + template + void basic_ofstream::open( const path & file_ph, + std::ios_base::openmode mode ) + { + std::basic_ofstream::open( + file_ph.file_string().c_str(), mode ); + } +# endif + + template + basic_fstream::basic_fstream( const path & file_ph ) + : std::basic_fstream( + file_ph.file_string().c_str(), + std::ios_base::in|std::ios_base::out ) {} + + + template + basic_fstream::basic_fstream( const path & file_ph, + std::ios_base::openmode mode ) + : std::basic_fstream( + file_ph.file_string().c_str(), mode ) {} + +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this + template + void basic_fstream::open( const path & file_ph ) + { + std::basic_fstream::open( + file_ph.file_string().c_str(), std::ios_base::in|std::ios_base::out ); + } + + template + void basic_fstream::open( const path & file_ph, + std::ios_base::openmode mode ) + { + std::basic_fstream::open( + file_ph.file_string().c_str(), mode ); + } +# endif + } // namespace filesystem2 +} // namespace boost + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + using filesystem2::wfilebuf; + using filesystem2::wifstream; + using filesystem2::wfstream; + using filesystem2::wofstream; +# endif + using filesystem2::filebuf; + using filesystem2::ifstream; + using filesystem2::ofstream; + using filesystem2::fstream; + using filesystem2::basic_filebuf; + using filesystem2::basic_ifstream; + using filesystem2::basic_ofstream; + using filesystem2::basic_fstream; + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# endif + } +} + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM2_FSTREAM_HPP diff --git a/external/boost/filesystem/v2/operations.hpp b/external/boost/filesystem/v2/operations.hpp new file mode 100644 index 0000000..57c406d --- /dev/null +++ b/external/boost/filesystem/v2/operations.hpp @@ -0,0 +1,1245 @@ +// boost/filesystem/operations.hpp -----------------------------------------// + +// Copyright 2002-2005 Beman Dawes +// Copyright 2002 Jan Langer +// Copyright 2001 Dietmar Kuehl +// +// Distributed under the Boost 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_FILESYSTEM2_OPERATIONS_HPP +#define BOOST_FILESYSTEM2_OPERATIONS_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include // for pair +#include + +#ifdef BOOST_WINDOWS_API +# include +# if !defined(_WIN32_WINNT) || _WIN32_WINNT >= 0x0500 +# define BOOST_FS_HARD_LINK // Default for Windows 2K or later +# endif +#endif + +#include // must be the last #include + +# ifdef BOOST_NO_STDC_NAMESPACE + namespace std { using ::time_t; } +# endif + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem2 + { + +// typedef boost::filesystem::path Path; needs to be in namespace boost::filesystem +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY +# define BOOST_FS_FUNC(BOOST_FS_TYPE) \ + template typename boost::enable_if, \ + BOOST_FS_TYPE>::type +# define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) \ + template inline typename boost::enable_if, \ + 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::filesystem2::path Path; +# define BOOST_FS_TYPENAME +# endif + + template class basic_directory_iterator; + + // BOOST_FILESYSTEM2_NARROW_ONLY needs this: + typedef basic_directory_iterator directory_iterator; + + template 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 or + // we don't have strong enough permission to find its type + }; + + 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(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_file(f) && !is_directory(f) && !is_symlink(f); } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline bool is_regular( file_status f ) { return f.type() == regular_file; } +# endif + + 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< system::error_code, bool > + query_pair; + + typedef std::pair< system::error_code, boost::uintmax_t > + uintmax_pair; + + typedef std::pair< system::error_code, std::time_t > + time_pair; + + typedef std::pair< system::error_code, space_info > + space_pair; + + template< class Path > + struct directory_pair + { + typedef std::pair< system::error_code, + 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_code & ec ); +# ifndef BOOST_WINDOWS_API + BOOST_FILESYSTEM_DECL file_status + symlink_status_api( const std::string & ph, system::error_code & 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 system::error_code + last_write_time_api( const std::string & ph, std::time_t new_value ); + BOOST_FILESYSTEM_DECL system::error_code + get_current_path_api( std::string & ph ); + BOOST_FILESYSTEM_DECL system::error_code + set_current_path_api( const std::string & ph ); + BOOST_FILESYSTEM_DECL query_pair + create_directory_api( const std::string & ph ); + BOOST_FILESYSTEM_DECL system::error_code + create_hard_link_api( const std::string & to_ph, + const std::string & from_ph ); + BOOST_FILESYSTEM_DECL system::error_code + create_symlink_api( const std::string & to_ph, + const std::string & from_ph ); + BOOST_FILESYSTEM_DECL system::error_code + remove_api( const std::string & ph ); + BOOST_FILESYSTEM_DECL system::error_code + rename_api( const std::string & from, const std::string & to ); + BOOST_FILESYSTEM_DECL system::error_code + copy_file_api( const std::string & from, const std::string & to, bool fail_if_exists ); + +# if defined(BOOST_WINDOWS_API) + + BOOST_FILESYSTEM_DECL system::error_code + get_full_path_name_api( const std::string & ph, std::string & target ); + +# if !defined(BOOST_FILESYSTEM2_NARROW_ONLY) + + BOOST_FILESYSTEM_DECL boost::filesystem2::file_status + status_api( const std::wstring & ph, system::error_code & 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 system::error_code + 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 system::error_code + last_write_time_api( const std::wstring & ph, std::time_t new_value ); + BOOST_FILESYSTEM_DECL system::error_code + get_current_path_api( std::wstring & ph ); + BOOST_FILESYSTEM_DECL system::error_code + set_current_path_api( const std::wstring & ph ); + BOOST_FILESYSTEM_DECL query_pair + create_directory_api( const std::wstring & ph ); +# ifdef BOOST_FS_HARD_LINK + BOOST_FILESYSTEM_DECL system::error_code + create_hard_link_api( const std::wstring & existing_ph, + const std::wstring & new_ph ); +# endif + BOOST_FILESYSTEM_DECL system::error_code + create_symlink_api( const std::wstring & to_ph, + const std::wstring & from_ph ); + BOOST_FILESYSTEM_DECL system::error_code + remove_api( const std::wstring & ph ); + BOOST_FILESYSTEM_DECL system::error_code + rename_api( const std::wstring & from, const std::wstring & to ); + BOOST_FILESYSTEM_DECL system::error_code + copy_file_api( const std::wstring & from, const std::wstring & to, bool fail_if_exists ); + +# endif +# endif + + template + bool remove_aux( const Path & ph, file_status f ); + + template + unsigned long remove_all_aux( const Path & ph, file_status f ); + + } // 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_code & ec ) + { return detail::status_api( ph.external_file_string(), ec ); } + + BOOST_FS_FUNC(file_status) + status( const Path & ph ) + { + system::error_code ec; + file_status result( detail::status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::status", ph, ec ) ); + return result; + } + + BOOST_INLINE_FS_FUNC(file_status) + symlink_status( const Path & ph, system::error_code & 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_code ec; + file_status result( symlink_status( ph, ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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_code ec; + file_status result( detail::status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::exists", ph, ec ) ); + return exists( result ); + } + + BOOST_FS_FUNC(bool) is_directory( const Path & ph ) + { + system::error_code ec; + file_status result( detail::status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::is_directory", ph, ec ) ); + return is_directory( result ); + } + + BOOST_FS_FUNC(bool) is_regular_file( const Path & ph ) + { + system::error_code ec; + file_status result( detail::status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::is_regular_file", ph, ec ) ); + return is_regular_file( result ); + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + BOOST_FS_FUNC(bool) is_regular( const Path & ph ) + { + system::error_code ec; + file_status result( detail::status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::is_regular", ph, ec ) ); + return is_regular( result ); + } +# endif + + BOOST_FS_FUNC(bool) is_other( const Path & ph ) + { + system::error_code ec; + file_status result( detail::status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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_code ec; + file_status result( detail::symlink_status_api( ph.external_file_string(), ec ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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::filesystem2::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 ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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 ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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 ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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 ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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 ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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 ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "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_code ec( + detail::create_hard_link_api( + to_ph.external_file_string(), + from_ph.external_file_string() ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::create_hard_link", + to_ph, from_ph, ec ) ); + } + + BOOST_FS_FUNC(system::error_code) + create_hard_link( const Path & to_ph, const Path & from_ph, + system::error_code & 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_code ec( + detail::create_symlink_api( + to_ph.external_file_string(), + from_ph.external_file_string() ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::create_symlink", + to_ph, from_ph, ec ) ); + } + + BOOST_FS_FUNC(system::error_code) + create_symlink( const Path & to_ph, const Path & from_ph, + system::error_code & 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 ) + { + system::error_code ec; + file_status f = symlink_status( ph, ec ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::remove", ph, ec ) ); + return detail::remove_aux( ph, f ); + } + + BOOST_FS_FUNC(unsigned long) remove_all( const Path & ph ) + { + system::error_code ec; + file_status f = symlink_status( ph, ec ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::remove_all", ph, ec ) ); + return exists( f ) ? detail::remove_all_aux( ph, f ) : 0; + } + + BOOST_FS_FUNC(void) rename( const Path & from_path, const Path & to_path ) + { + system::error_code ec( detail::rename_api( + from_path.external_directory_string(), + to_path.external_directory_string() ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::rename", + from_path, to_path, ec ) ); + } + + BOOST_SCOPED_ENUM_START(copy_option) + { fail_if_exists, overwrite_if_exists }; + BOOST_SCOPED_ENUM_END + + BOOST_FS_FUNC(void) copy_file( const Path & from_path, const Path & to_path, + BOOST_SCOPED_ENUM(copy_option) option = copy_option::fail_if_exists ) + { + system::error_code ec( detail::copy_file_api( + from_path.external_directory_string(), + to_path.external_directory_string(), option == copy_option::fail_if_exists ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::copy_file", + from_path, to_path, ec ) ); + } + + template< class Path > + Path current_path() + { + typename Path::external_string_type ph; + system::error_code ec( detail::get_current_path_api( ph ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::current_path", ec ) ); + return Path( Path::traits_type::to_internal( ph ) ); + } + + BOOST_FS_FUNC(void) current_path( const Path & ph ) + { + system::error_code ec( detail::set_current_path_api( + ph.external_directory_string() ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::current_path", ph, ec ) ); + } + + template< class Path > + const Path & initial_path() + { + static Path init_path; + if ( init_path.empty() ) init_path = current_path(); + return init_path; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + // legacy support + inline path current_path() // overload supports pre-i18n apps + { return current_path(); } + inline const path & initial_path() // overload supports pre-i18n apps + { return initial_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; + system::error_code ec( detail::get_full_path_name_api( ph.external_file_string(), + sys_ph ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::system_complete", ph, ec ) ); + return Path( Path::traits_type::to_internal( sys_ph ) ); +# else + return (ph.empty() || ph.is_complete()) + ? ph : current_path() / ph; +# endif + } + + BOOST_FS_FUNC(Path) + complete( const Path & ph, + const Path & base/* = initial_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() ); } + + BOOST_FS_FUNC(void) + last_write_time( const Path & ph, const std::time_t new_time ) + { + system::error_code ec( detail::last_write_time_api( ph.external_file_string(), + new_time ) ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::last_write_time", ph, ec ) ); + } + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + // "do-the-right-thing" overloads ---------------------------------------// + + inline file_status status( const path & ph ) + { return status( ph ); } + inline file_status status( const wpath & ph ) + { return status( ph ); } + + inline file_status status( const path & ph, system::error_code & ec ) + { return status( ph, ec ); } + inline file_status status( const wpath & ph, system::error_code & ec ) + { return status( ph, ec ); } + + inline file_status symlink_status( const path & ph ) + { return symlink_status( ph ); } + inline file_status symlink_status( const wpath & ph ) + { return symlink_status( ph ); } + + inline file_status symlink_status( const path & ph, system::error_code & ec ) + { return symlink_status( ph, ec ); } + inline file_status symlink_status( const wpath & ph, system::error_code & ec ) + { return symlink_status( ph, ec ); } + + inline bool exists( const path & ph ) { return exists( ph ); } + inline bool exists( const wpath & ph ) { return exists( ph ); } + + inline bool is_directory( const path & ph ) + { return is_directory( ph ); } + inline bool is_directory( const wpath & ph ) + { return is_directory( ph ); } + + inline bool is_regular_file( const path & ph ) + { return is_regular_file( ph ); } + inline bool is_regular_file( const wpath & ph ) + { return is_regular_file( ph ); } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline bool is_regular( const path & ph ) + { return is_regular( ph ); } + inline bool is_regular( const wpath & ph ) + { return is_regular( ph ); } +# endif + + inline bool is_other( const path & ph ) + { return is_other( ph ); } + inline bool is_other( const wpath & ph ) + { return is_other( ph ); } + + inline bool is_symlink( const path & ph ) + { return is_symlink( ph ); } + inline bool is_symlink( const wpath & ph ) + { return is_symlink( ph ); } + + inline bool is_empty( const path & ph ) + { return boost::filesystem2::is_empty( ph ); } + inline bool is_empty( const wpath & ph ) + { return boost::filesystem2::is_empty( ph ); } + + inline bool equivalent( const path & ph1, const path & ph2 ) + { return equivalent( ph1, ph2 ); } + inline bool equivalent( const wpath & ph1, const wpath & ph2 ) + { return equivalent( ph1, ph2 ); } + + inline boost::uintmax_t file_size( const path & ph ) + { return file_size( ph ); } + inline boost::uintmax_t file_size( const wpath & ph ) + { return file_size( ph ); } + + inline space_info space( const path & ph ) + { return space( ph ); } + inline space_info space( const wpath & ph ) + { return space( ph ); } + + inline std::time_t last_write_time( const path & ph ) + { return last_write_time( ph ); } + inline std::time_t last_write_time( const wpath & ph ) + { return last_write_time( ph ); } + + inline bool create_directory( const path & dir_ph ) + { return create_directory( dir_ph ); } + inline bool create_directory( const wpath & dir_ph ) + { return create_directory( 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( to_ph, from_ph ); } + inline void create_hard_link( const wpath & to_ph, + const wpath & from_ph ) + { return create_hard_link( to_ph, from_ph ); } + + inline system::error_code create_hard_link( const path & to_ph, + const path & from_ph, system::error_code & ec ) + { return create_hard_link( to_ph, from_ph, ec ); } + inline system::error_code create_hard_link( const wpath & to_ph, + const wpath & from_ph, system::error_code & ec ) + { return create_hard_link( to_ph, from_ph, ec ); } +#endif + + inline void create_symlink( const path & to_ph, + const path & from_ph ) + { return create_symlink( to_ph, from_ph ); } + inline void create_symlink( const wpath & to_ph, + const wpath & from_ph ) + { return create_symlink( to_ph, from_ph ); } + + inline system::error_code create_symlink( const path & to_ph, + const path & from_ph, system::error_code & ec ) + { return create_symlink( to_ph, from_ph, ec ); } + inline system::error_code create_symlink( const wpath & to_ph, + const wpath & from_ph, system::error_code & ec ) + { return create_symlink( to_ph, from_ph, ec ); } + + inline bool remove( const path & ph ) + { return remove( ph ); } + inline bool remove( const wpath & ph ) + { return remove( ph ); } + + inline unsigned long remove_all( const path & ph ) + { return remove_all( ph ); } + inline unsigned long remove_all( const wpath & ph ) + { return remove_all( ph ); } + + inline void rename( const path & from_path, const path & to_path ) + { return rename( from_path, to_path ); } + inline void rename( const wpath & from_path, const wpath & to_path ) + { return rename( from_path, to_path ); } + + inline void copy_file( const path & from_path, const path & to_path ) + { return copy_file( from_path, to_path ); } + inline void copy_file( const wpath & from_path, const wpath & to_path ) + { return copy_file( from_path, to_path ); } + + inline path system_complete( const path & ph ) + { return system_complete( ph ); } + inline wpath system_complete( const wpath & ph ) + { return system_complete( ph ); } + + inline path complete( const path & ph, + const path & base/* = initial_path()*/ ) + { return complete( ph, base ); } + inline wpath complete( const wpath & ph, + const wpath & base/* = initial_path()*/ ) + { return complete( ph, base ); } + + inline path complete( const path & ph ) + { return complete( ph, initial_path() ); } + inline wpath complete( const wpath & ph ) + { return complete( ph, initial_path() ); } + + inline void last_write_time( const path & ph, const std::time_t new_time ) + { last_write_time( ph, new_time ); } + inline void last_write_time( const wpath & ph, const std::time_t new_time ) + { last_write_time( ph, new_time ); } + + inline void current_path( const path & ph ) + { current_path( ph ); } + inline void current_path( const wpath & ph ) + { current_path( ph ); } + +# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + namespace detail + { + template + bool remove_aux( const Path & ph, file_status f ) + { + if ( exists( f ) ) + { + system::error_code ec = remove_api( ph.external_file_string() ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::remove", ph, ec ) ); + return true; + } + return false; + } + + template + unsigned long remove_all_aux( const Path & ph, file_status f ) + { + static const boost::filesystem2::basic_directory_iterator end_itr; + unsigned long count = 1; + if ( !boost::filesystem2::is_symlink( f ) // don't recurse symbolic links + && boost::filesystem2::is_directory( f ) ) + { + for ( boost::filesystem2::basic_directory_iterator itr( ph ); + itr != end_itr; ++itr ) + { + boost::system::error_code ec; + boost::filesystem2::file_status fn = boost::filesystem2::symlink_status( itr->path(), ec ); + if ( ec ) + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem:remove_all", ph, ec ) ); + count += remove_all_aux( itr->path(), fn ); + } + } + remove_aux( ph, f ); + 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 system::error_code + 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 system::error_code + 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 system::error_code + 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_FILESYSTEM2_NARROW_ONLY) + BOOST_FILESYSTEM_DECL system::error_code + dir_itr_first( void *& handle, const std::wstring & ph, + std::wstring & target, file_status & fs, file_status & symlink_fs ); + BOOST_FILESYSTEM_DECL system::error_code + 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 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 system::error_code not_found_error(); + + } // namespace detail + +// basic_directory_iterator ------------------------------------------------// + + template< class Path > + class basic_directory_iterator + : public boost::iterator_facade< + basic_directory_iterator, + basic_directory_entry, + 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_code & 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, + basic_directory_entry, + 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_code m_init( const Path & dir_path ); + }; + + typedef basic_directory_iterator< path > directory_iterator; +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + typedef basic_directory_iterator< wpath > wdirectory_iterator; +# endif + + // basic_directory_iterator implementation ---------------------------// + + template + system::error_code basic_directory_iterator::m_init( + const Path & dir_path ) + { + if ( dir_path.empty() ) + { + m_imp.reset(); + return detail::not_found_error(); + } + typename Path::external_string_type name; + file_status fs, symlink_fs; + system::error_code ec( 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 ) ); + + if ( ec ) + { + m_imp.reset(); + return ec; + } + + 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::value // dot or dot-dot + && (name.size() == 1 + || (name[1] == dot::value + && name.size() == 2)) ) + { increment(); } + } + return boost::system::error_code(); + } + + template + basic_directory_iterator::basic_directory_iterator( + const Path & dir_path ) + : m_imp( new detail::dir_itr_imp ) + { + system::error_code ec( m_init(dir_path) ); + if ( ec ) + { + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::basic_directory_iterator constructor", + dir_path, ec ) ); + } + } + + template + basic_directory_iterator::basic_directory_iterator( + const Path & dir_path, system::error_code & ec ) + : m_imp( new detail::dir_itr_imp ) + { + ec = m_init(dir_path); + } + + template + void basic_directory_iterator::increment() + { + BOOST_ASSERT( m_imp.get() && "attempt to increment end iterator" ); + BOOST_ASSERT( m_imp->m_handle != 0 && "internal program error" ); + + typename Path::external_string_type name; + file_status fs, symlink_fs; + system::error_code ec; + + for (;;) + { + ec = detail::dir_itr_increment( m_imp->m_handle, +#if defined(BOOST_POSIX_API) + m_imp->m_buffer, +#endif + name, fs, symlink_fs ); + if ( ec ) + { + BOOST_FILESYSTEM_THROW( basic_filesystem_error( + "boost::filesystem::basic_directory_iterator increment", + m_imp->m_directory_entry.path().parent_path(), ec ) ); + } + if ( m_imp->m_handle == 0 ) { m_imp.reset(); return; } // eof, make end + if ( !(name[0] == dot::value // !(dot or dot-dot) + && (name.size() == 1 + || (name[1] == dot::value + && name.size() == 2))) ) + { + m_imp->m_directory_entry.replace_filename( + Path::traits_type::to_internal( name ), fs, symlink_fs ); + return; + } + } + } + + // basic_directory_entry -----------------------------------------------// + + template + 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_filename( const string_type & s, + file_status st, file_status symlink_st ) + { + m_path.remove_filename(); + m_path /= s; + m_status = st; + m_symlink_status = symlink_st; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + void replace_leaf( const string_type & s, + file_status st, file_status symlink_st ) + { replace_filename( s, st, symlink_st ); } +# endif + + const Path & path() const { return m_path; } + file_status status() const; + file_status status( system::error_code & ec ) const; + file_status symlink_status() const; + file_status symlink_status( system::error_code & 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 filename() const + { + return path().filename(); + } + typename Path::string_type leaf() const + { + return path().filename(); + } + 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 directory_entry; +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + typedef basic_directory_entry wdirectory_entry; +# endif + + // basic_directory_entry implementation --------------------------------// + + template + file_status + basic_directory_entry::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::filesystem2::status( m_path ); } +# else + m_status = boost::filesystem2::status( m_path ); +# endif + } + return m_status; + } + + template + file_status + basic_directory_entry::status( system::error_code & ec ) const + { + if ( !status_known( m_status ) ) + { +# ifndef BOOST_WINDOWS_API + if ( status_known( m_symlink_status ) + && !is_symlink( m_symlink_status ) ) + { ec = boost::system::error_code();; m_status = m_symlink_status; } + else { m_status = boost::filesystem2::status( m_path, ec ); } +# else + m_status = boost::filesystem2::status( m_path, ec ); +# endif + } + else ec = boost::system::error_code();; + return m_status; + } + + template + file_status + basic_directory_entry::symlink_status() const + { +# ifndef BOOST_WINDOWS_API + if ( !status_known( m_symlink_status ) ) + { m_symlink_status = boost::filesystem2::symlink_status( m_path ); } + return m_symlink_status; +# else + return status(); +# endif + } + + template + file_status + basic_directory_entry::symlink_status( system::error_code & ec ) const + { +# ifndef BOOST_WINDOWS_API + if ( !status_known( m_symlink_status ) ) + { m_symlink_status = boost::filesystem2::symlink_status( m_path, ec ); } + else ec = boost::system::error_code();; + return m_symlink_status; +# else + return status( ec ); +# endif + } + } // namespace filesystem2 +} // namespace boost + +#undef BOOST_FS_FUNC + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + using filesystem2::basic_directory_entry; + using filesystem2::basic_directory_iterator; + using filesystem2::block_file; + using filesystem2::character_file; + using filesystem2::complete; + using filesystem2::copy_file; + using filesystem2::copy_option; + using filesystem2::create_directory; +# if !defined(BOOST_WINDOWS_API) || defined(BOOST_FS_HARD_LINK) + using filesystem2::create_hard_link; +# endif + using filesystem2::create_symlink; + using filesystem2::current_path; + using filesystem2::directory_entry; + using filesystem2::directory_file; + using filesystem2::directory_iterator; + using filesystem2::equivalent; + using filesystem2::exists; + using filesystem2::fifo_file; + using filesystem2::file_not_found; + using filesystem2::file_size; + using filesystem2::file_status; + using filesystem2::file_type; + using filesystem2::initial_path; + using filesystem2::is_directory; + using filesystem2::is_directory; + using filesystem2::is_empty; + using filesystem2::is_other; + using filesystem2::is_regular_file; + using filesystem2::is_symlink; + using filesystem2::last_write_time; + using filesystem2::regular_file; + using filesystem2::remove; + using filesystem2::remove_all; + using filesystem2::rename; + using filesystem2::socket_file; + using filesystem2::space; + using filesystem2::space_info; + using filesystem2::status; + using filesystem2::status_known; + using filesystem2::symlink_file; + using filesystem2::symlink_status; + using filesystem2::system_complete; + using filesystem2::type_unknown; +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + using filesystem2::is_regular; + using filesystem2::symbolic_link_exists; +# endif +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + using filesystem2::wdirectory_iterator; + using filesystem2::wdirectory_entry; +# endif + namespace detail + { + using filesystem2::detail::not_found_error; + using filesystem2::detail::possible_large_file_size_support; + } + } +} + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM2_OPERATIONS_HPP diff --git a/external/boost/filesystem/v2/path.hpp b/external/boost/filesystem/v2/path.hpp new file mode 100644 index 0000000..615b89c --- /dev/null +++ b/external/boost/filesystem/v2/path.hpp @@ -0,0 +1,1571 @@ +// boost/filesystem/path.hpp -----------------------------------------------// + +// Copyright Beman Dawes 2002-2005 +// 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) + +// See library home page at http://www.boost.org/libs/filesystem + +// basic_path's stem(), extension(), and replace_extension() are based on +// basename(), extension(), and change_extension() from the original +// filesystem/convenience.hpp header by Vladimir Prus. + +//----------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM2_PATH_HPP +#define BOOST_FILESYSTEM2_PATH_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include +#include // for lexicographical_compare +#include // needed by basic_path inserter and extractor +#include + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY +# include +# endif + +#include // must be the last #include + +namespace boost +{ + namespace BOOST_FILESYSTEM2_NAMESPACE + { + template 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_FILESYSTEM2_NARROW_ONLY + + struct BOOST_FILESYSTEM_DECL wpath_traits; + + typedef basic_path< std::wstring, wpath_traits > wpath; + + struct BOOST_FILESYSTEM_DECL 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_FILESYSTEM2_NARROW_ONLY + + // path traits ---------------------------------------------------------// + + template struct is_basic_path + { BOOST_STATIC_CONSTANT( bool, value = false ); }; + template<> struct is_basic_path + { BOOST_STATIC_CONSTANT( bool, value = true ); }; +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + template<> struct is_basic_path + { BOOST_STATIC_CONSTANT( bool, value = true ); }; +# endif + + // These only have to be specialized if Path::string_type::value_type + // is not convertible from char, although specializations may eliminate + // compiler warnings. See ticket 2543. + template struct slash + { BOOST_STATIC_CONSTANT( char, value = '/' ); }; + + template struct dot + { BOOST_STATIC_CONSTANT( char, value = '.' ); }; + + template struct colon + { BOOST_STATIC_CONSTANT( char, value = ':' ); }; + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + template<> struct slash + { BOOST_STATIC_CONSTANT( wchar_t, value = L'/' ); }; + template<> struct dot + { BOOST_STATIC_CONSTANT( wchar_t, value = L'.' ); }; + template<> struct colon + { BOOST_STATIC_CONSTANT( wchar_t, value = L':' ); }; +# endif + +# ifdef BOOST_WINDOWS_PATH + template struct path_alt_separator + { BOOST_STATIC_CONSTANT( char, value = '\\' ); }; +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + template<> struct path_alt_separator + { BOOST_STATIC_CONSTANT( wchar_t, value = L'\\' ); }; +# endif +# endif + + // workaround for VC++ 7.0 and earlier issues with nested classes + namespace detail + { + template + 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 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::value ); +// BOOST_STATIC_ASSERT( ::boost::is_same::value || ::boost::is_same::value ); + + public: + // compiler generates copy constructor and copy assignment + + typedef basic_path 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 + 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 + 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 + basic_path & append( InputIterator first, InputIterator last ); +# endif + + void clear() + { +# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, >= 310) + m_path.clear(); +# else + m_path.erase( m_path.begin(), m_path.end() ); +# 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_filename(); + basic_path & replace_extension( const string_type & new_extension = string_type() ); + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + basic_path & remove_leaf() { return remove_filename(); } +# endif + + // 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; + basic_path parent_path() const; + string_type filename() const; + string_type stem() const; + string_type extension() const; + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + string_type leaf() const { return filename(); } + basic_path branch_path() const { return parent_path(); } + bool has_leaf() const { return !m_path.empty(); } + bool has_branch_path() const { return !parent_path().empty(); } +# endif + + 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_filename() const { return !m_path.empty(); } + bool has_parent_path() const { return !parent_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_FILESYSTEM2_NAMESPACE::basic_path; + + 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_FILESYSTEM2_NAMESPACE::detail::iterator_helper; + + void increment() + { + boost::BOOST_FILESYSTEM2_NAMESPACE::detail::iterator_helper::do_increment( + *this ); + } + void decrement() + { + boost::BOOST_FILESYSTEM2_NAMESPACE::detail::iterator_helper::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_FILESYSTEM2_NAMESPACE::detail::iterator_helper; + + // 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 & lhs, + basic_path & rhs ) { lhs.swap( rhs ); } + + template< class String, class Traits > + bool operator<( const basic_path & lhs, const basic_path & 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_type::value_type * lhs, + const basic_path & rhs ) + { + basic_path 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_type & lhs, + const basic_path & rhs ) + { + basic_path tmp( lhs ); + return std::lexicographical_compare( + tmp.begin(), tmp.end(), rhs.begin(), rhs.end() ); + } + + template< class String, class Traits > + bool operator<( const basic_path & lhs, + const typename basic_path::string_type::value_type * rhs ) + { + basic_path tmp( rhs ); + return std::lexicographical_compare( + lhs.begin(), lhs.end(), tmp.begin(), tmp.end() ); + } + + template< class String, class Traits > + bool operator<( const basic_path & lhs, + const typename basic_path::string_type & rhs ) + { + basic_path tmp( rhs ); + return std::lexicographical_compare( + lhs.begin(), lhs.end(), tmp.begin(), tmp.end() ); + } + + // operator == uses hand-written compare rather than !(lhs < rhs) && !(rhs < lhs) + // because the result is the same yet the direct compare is much more efficient + // than lexicographical_compare, which would also be called twice. + + template< class String, class Traits > + inline bool operator==( const basic_path & lhs, + const typename basic_path::string_type::value_type * rhs ) + { + typedef typename + boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path path_type; + const typename path_type::string_type::value_type * l (lhs.string().c_str()); + while ( (*l == *rhs +# ifdef BOOST_WINDOWS_PATH + || (*l == path_alt_separator::value && *rhs == slash::value) + || (*l == slash::value && *rhs == path_alt_separator::value) +# endif + ) && *l ) { ++l; ++rhs; } + return *l == *rhs +# ifdef BOOST_WINDOWS_PATH + || (*l == path_alt_separator::value && *rhs == slash::value) + || (*l == slash::value && *rhs == path_alt_separator::value) +# endif + ; + } + + template< class String, class Traits > + inline bool operator==( const basic_path & lhs, + const basic_path & rhs ) + { + return lhs == rhs.string().c_str(); + } + + template< class String, class Traits > + inline bool operator==( const typename basic_path::string_type::value_type * lhs, + const basic_path & rhs ) + { + return rhs == lhs; + } + + template< class String, class Traits > + inline bool operator==( const typename basic_path::string_type & lhs, + const basic_path & rhs ) + { + return rhs == lhs.c_str(); + } + + template< class String, class Traits > + inline bool operator==( const basic_path & lhs, + const typename basic_path::string_type & rhs ) + { + return lhs == rhs.c_str(); + } + + template< class String, class Traits > + inline bool operator!=( const basic_path & lhs, + const basic_path & rhs ) + { return !(lhs == rhs); } + + template< class String, class Traits > + inline bool operator!=( const typename basic_path::string_type::value_type * lhs, + const basic_path & rhs ) + { return !(lhs == rhs); } + + template< class String, class Traits > + inline bool operator!=( const typename basic_path::string_type & lhs, + const basic_path & rhs ) + { return !(lhs == rhs); } + + template< class String, class Traits > + inline bool operator!=( const basic_path & lhs, + const typename basic_path::string_type::value_type * rhs ) + { return !(lhs == rhs); } + + template< class String, class Traits > + inline bool operator!=( const basic_path & lhs, + const typename basic_path::string_type & rhs ) + { return !(lhs == rhs); } + + template< class String, class Traits > + inline bool operator>( const basic_path & lhs, const basic_path & rhs ) { return rhs < lhs; } + + template< class String, class Traits > + inline bool operator>( const typename basic_path::string_type::value_type * lhs, + const basic_path & rhs ) { return rhs < basic_path(lhs); } + + template< class String, class Traits > + inline bool operator>( const typename basic_path::string_type & lhs, + const basic_path & rhs ) { return rhs < basic_path(lhs); } + + template< class String, class Traits > + inline bool operator>( const basic_path & lhs, + const typename basic_path::string_type::value_type * rhs ) + { return basic_path(rhs) < lhs; } + + template< class String, class Traits > + inline bool operator>( const basic_path & lhs, + const typename basic_path::string_type & rhs ) + { return basic_path(rhs) < lhs; } + + template< class String, class Traits > + inline bool operator<=( const basic_path & lhs, const basic_path & rhs ) { return !(rhs < lhs); } + + template< class String, class Traits > + inline bool operator<=( const typename basic_path::string_type::value_type * lhs, + const basic_path & rhs ) { return !(rhs < basic_path(lhs)); } + + template< class String, class Traits > + inline bool operator<=( const typename basic_path::string_type & lhs, + const basic_path & rhs ) { return !(rhs < basic_path(lhs)); } + + template< class String, class Traits > + inline bool operator<=( const basic_path & lhs, + const typename basic_path::string_type::value_type * rhs ) + { return !(basic_path(rhs) < lhs); } + + template< class String, class Traits > + inline bool operator<=( const basic_path & lhs, + const typename basic_path::string_type & rhs ) + { return !(basic_path(rhs) < lhs); } + + template< class String, class Traits > + inline bool operator>=( const basic_path & lhs, const basic_path & rhs ) { return !(lhs < rhs); } + + template< class String, class Traits > + inline bool operator>=( const typename basic_path::string_type::value_type * lhs, + const basic_path & rhs ) { return !(lhs < basic_path(rhs)); } + + template< class String, class Traits > + inline bool operator>=( const typename basic_path::string_type & lhs, + const basic_path & rhs ) { return !(lhs < basic_path(rhs)); } + + template< class String, class Traits > + inline bool operator>=( const basic_path & lhs, + const typename basic_path::string_type::value_type * rhs ) + { return !(basic_path(lhs) < rhs); } + + template< class String, class Traits > + inline bool operator>=( const basic_path & lhs, + const typename basic_path::string_type & rhs ) + { return !(basic_path(lhs) < rhs); } + + // operator / + + template< class String, class Traits > + inline basic_path operator/( + const basic_path & lhs, + const basic_path & rhs ) + { return basic_path( lhs ) /= rhs; } + + template< class String, class Traits > + inline basic_path operator/( + const basic_path & lhs, + const typename String::value_type * rhs ) + { return basic_path( lhs ) /= + basic_path( rhs ); } + + template< class String, class Traits > + inline basic_path operator/( + const basic_path & lhs, const String & rhs ) + { return basic_path( lhs ) /= + basic_path( rhs ); } + + template< class String, class Traits > + inline basic_path operator/( + const typename String::value_type * lhs, + const basic_path & rhs ) + { return basic_path( lhs ) /= rhs; } + + template< class String, class Traits > + inline basic_path operator/( + const String & lhs, const basic_path & rhs ) + { return basic_path( lhs ) /= rhs; } + + // inserters and extractors --------------------------------------------// + +// bypass VC++ 7.0 and earlier, and broken Borland compilers +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__BORLANDC__, < 0x610) + 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; + std::getline(is, str); // See ticket 3863 + 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; + std::getline(is, str); // See ticket 3863 + ph = str; + return is; + } +# endif + + // basic_filesystem_error helpers --------------------------------------// + + // Originally choice of implementation was done via specialization of + // basic_filesystem_error::what(). Several compilers (GCC, aCC, etc.) + // couldn't handle that, so the choice is now accomplished by overloading. + + namespace detail + { + // BOOST_FILESYSTEM_DECL version works for VC++ but not GCC. Go figure! + inline + const char * what( const char * sys_err_what, + const path & path1_arg, const path & path2_arg, std::string & target ) + { + try + { + if ( target.empty() ) + { + target = sys_err_what; + if ( !path1_arg.empty() ) + { + target += ": \""; + target += path1_arg.file_string(); + target += "\""; + } + if ( !path2_arg.empty() ) + { + target += ", \""; + target += path2_arg.file_string(); + target += "\""; + } + } + return target.c_str(); + } + catch (...) + { + return sys_err_what; + } + } + + template + const char * what( const char * sys_err_what, + const Path & /*path1_arg*/, const Path & /*path2_arg*/, std::string & /*target*/ ) + { + return sys_err_what; + } + } + + // basic_filesystem_error ----------------------------------------------// + + template + class basic_filesystem_error : public system::system_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_arg, + system::error_code ec ); + + basic_filesystem_error( const std::string & what_arg, + const path_type & path1_arg, system::error_code ec ); + + basic_filesystem_error( const std::string & what_arg, const path_type & path1_arg, + const path_type & path2_arg, system::error_code ec ); + + ~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 ; + } + + const char * what() const throw() + { + if ( !m_imp_ptr.get() ) + return system::system_error::what(); + return detail::what( system::system_error::what(), m_imp_ptr->m_path1, + m_imp_ptr->m_path2, m_imp_ptr->m_what ); + } + + private: + struct m_imp + { + path_type m_path1; // may be empty() + path_type m_path2; // may be empty() + std::string m_what; // not built until needed + }; + boost::shared_ptr m_imp_ptr; + }; + + typedef basic_filesystem_error filesystem_error; + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + typedef basic_filesystem_error wfilesystem_error; +# 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 + inline bool is_separator( typename Path::string_type::value_type c ) + { + return c == slash::value +# ifdef BOOST_WINDOWS_PATH + || c == path_alt_separator::value +# endif + ; + } + + // filename_pos helper ----------------------------------------------------// + + template + typename String::size_type filename_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 filename (or empty) + { + typedef typename + boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path path_type; + + // case: "//" + if ( end_pos == 2 + && str[0] == slash::value + && str[1] == slash::value ) return 0; + + // case: ends in "/" + if ( end_pos && str[end_pos-1] == slash::value ) + return end_pos-1; + + // set pos to start of last element + typename String::size_type pos( + str.find_last_of( slash::value, end_pos-1 ) ); +# ifdef BOOST_WINDOWS_PATH + if ( pos == String::npos ) + pos = str.find_last_of( path_alt_separator::value, end_pos-1 ); + if ( pos == String::npos ) + pos = str.find_last_of( colon::value, end_pos-2 ); +# endif + + return ( pos == String::npos // path itself must be a filename (or empty) + || (pos == 1 && str[0] == slash::value) ) // or net + ? 0 // so filename 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 + 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_FILESYSTEM2_NAMESPACE::basic_path path_type; + + typename String::size_type cur(0); + + // deal with // [network] + if ( size >= 2 && src[0] == slash::value + && src[1] == slash::value + && (size == 2 + || src[2] != slash::value) ) + { + cur += 2; + element_size += 2; + } + + // leading (not non-network) separator + else if ( src[0] == slash::value ) + { + ++element_size; + // bypass extra leading separators + while ( cur+1 < size + && src[cur+1] == slash::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::value +# endif + && src[cur] != slash::value ) + { + ++cur; + ++element_size; + } + +# ifdef BOOST_WINDOWS_PATH + if ( cur == size ) return; + // include device delimiter + if ( src[cur] == colon::value ) + { ++element_size; } +# endif + + return; + } + + // root_directory_start helper ----------------------------------------// + + template + 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_FILESYSTEM2_NAMESPACE::basic_path path_type; + +# ifdef BOOST_WINDOWS_PATH + // case "c:/" + if ( size > 2 + && s[1] == colon::value + && s[2] == slash::value ) return 2; +# endif + + // case "//" + if ( size == 2 + && s[0] == slash::value + && s[1] == slash::value ) return String::npos; + + // case "//net {/}" + if ( size > 3 + && s[0] == slash::value + && s[1] == slash::value + && s[2] != slash::value ) + { + typename String::size_type pos( + s.find( slash::value, 2 ) ); + return pos < size ? pos : String::npos; + } + + // case "/" + if ( size > 0 && s[0] == slash::value ) return 0; + + return String::npos; + } + + // is_non_root_slash helper -------------------------------------------// + + template + bool is_non_root_slash( const String & str, + typename String::size_type pos ) // pos is position of the slash + { + typedef typename + boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path + path_type; + + BOOST_ASSERT( !str.empty() && str[pos] == slash::value + && "precondition violation" ); + + // subsequent logic expects pos to be for leftmost slash of a set + while ( pos > 0 && str[pos-1] == slash::value ) + --pos; + + return pos != 0 + && (pos <= 2 || str[1] != slash::value + || str.find( slash::value, 2 ) != pos) +# ifdef BOOST_WINDOWS_PATH + && (pos !=2 || str[1] != colon::value) +# endif + ; + } + } // namespace detail + + // decomposition functions ----------------------------------------------// + + template + String basic_path::filename() const + { + typename String::size_type end_pos( + detail::filename_pos( m_path, m_path.size() ) ); + return (m_path.size() + && end_pos + && m_path[end_pos] == slash::value + && detail::is_non_root_slash< String, Traits >(m_path, end_pos)) + ? String( 1, dot::value ) + : m_path.substr( end_pos ); + } + + template + String basic_path::stem() const + { + string_type name = filename(); + typename string_type::size_type n = name.rfind(dot::value); + return name.substr(0, n); + } + + template + String basic_path::extension() const + { + string_type name = filename(); + typename string_type::size_type n = name.rfind(dot::value); + if (n != string_type::npos) + return name.substr(n); + else + return string_type(); + } + + template + basic_path basic_path::parent_path() const + { + typename String::size_type end_pos( + detail::filename_pos( m_path, m_path.size() ) ); + + bool filename_was_separator( m_path.size() + && m_path[end_pos] == slash::value ); + + // skip separators unless root directory + typename string_type::size_type root_dir_pos( detail::root_directory_start + ( m_path, end_pos ) ); + for ( ; + end_pos > 0 + && (end_pos-1) != root_dir_pos + && m_path[end_pos-1] == slash::value + ; + --end_pos ) {} + + return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator) + ? path_type() + : path_type( m_path.substr( 0, end_pos ) ); + } + + template + basic_path basic_path::relative_path() const + { + iterator itr( begin() ); + for ( ; itr.m_pos != m_path.size() + && (itr.m_name[0] == slash::value +# ifdef BOOST_WINDOWS_PATH + || itr.m_name[itr.m_name.size()-1] + == colon::value +# endif + ); ++itr ) {} + + return basic_path( m_path.substr( itr.m_pos ) ); + } + + template + String basic_path::root_name() const + { + iterator itr( begin() ); + + return ( itr.m_pos != m_path.size() + && ( + ( itr.m_name.size() > 1 + && itr.m_name[0] == slash::value + && itr.m_name[1] == slash::value + ) +# ifdef BOOST_WINDOWS_PATH + || itr.m_name[itr.m_name.size()-1] + == colon::value +# endif + ) ) + ? *itr + : String(); + } + + template + String basic_path::root_directory() const + { + typename string_type::size_type start( + detail::root_directory_start( m_path, m_path.size() ) ); + + return start == string_type::npos + ? string_type() + : m_path.substr( start, 1 ); + } + + template + basic_path basic_path::root_path() const + { + // even on POSIX, root_name() is non-empty() on network paths + return basic_path( root_name() ) /= root_directory(); + } + + // path query functions -------------------------------------------------// + + template + inline bool basic_path::is_complete() const + { +# ifdef BOOST_WINDOWS_PATH + return has_root_name() && has_root_directory(); +# else + return has_root_directory(); +# endif + } + + template + inline bool basic_path::has_root_path() const + { + return !root_path().empty(); + } + + template + inline bool basic_path::has_root_name() const + { + return !root_name().empty(); + } + + template + inline bool basic_path::has_root_directory() const + { + return !root_directory().empty(); + } + + // append ---------------------------------------------------------------// + + template + void basic_path::m_append_separator_if_needed() + // requires: !empty() + { + if ( +# ifdef BOOST_WINDOWS_PATH + *(m_path.end()-1) != colon::value && +# endif + *(m_path.end()-1) != slash::value ) + { + m_path += slash::value; + } + } + + template + void basic_path::m_append( value_type value ) + { +# ifdef BOOST_CYGWIN_PATH + if ( m_path.empty() ) m_cygwin_root = (value == slash::value); +# endif + +# ifdef BOOST_WINDOWS_PATH + // for BOOST_WINDOWS_PATH, convert alt_separator ('\') to separator ('/') + m_path += ( value == path_alt_separator::value + ? slash::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 + basic_path & basic_path::operator /= + ( const value_type * next_p ) + { + // ignore escape sequence on POSIX or Windows + if ( *next_p == slash::value + && *(next_p+1) == slash::value + && *(next_p+2) == colon::value ) next_p += 3; + + // append slash::value if needed + if ( !empty() && *next_p != 0 + && !detail::is_separator( *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 template + basic_path & basic_path::append( + InputIterator first, InputIterator last ) + { + // append slash::value if needed + if ( !empty() && first != last + && !detail::is_separator( *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::value ) + was_escape_sequence = false; + if ( append_count == 1 && *first != slash::value ) + was_escape_sequence = false; + if ( append_count == 2 && *first != colon::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 + basic_path & basic_path::canonize() + { + static const typename string_type::value_type dot_str[] + = { dot::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 + basic_path & basic_path::normalize() + { + static const typename string_type::value_type dot_str[] + = { dot::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::value + && itr != start + && itr != last ) continue; + + // ignore a name and following ".." + if ( !temp.empty() + && itr->size() == 2 + && (*itr)[0] == dot::value + && (*itr)[1] == dot::value ) // dot dot + { + string_type lf( temp.filename() ); + if ( lf.size() > 0 + && (lf.size() != 1 + || (lf[0] != dot::value + && lf[0] != slash::value)) + && (lf.size() != 2 + || (lf[0] != dot::value + && lf[1] != dot::value +# ifdef BOOST_WINDOWS_PATH + && lf[1] != colon::value +# endif + ) + ) + ) + { + temp.remove_filename(); + // if not root directory, must also remove "/" if any + if ( temp.m_path.size() > 0 + && temp.m_path[temp.m_path.size()-1] + == slash::value ) + { + typename string_type::size_type rds( + detail::root_directory_start( 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 + + // modifiers ------------------------------------------------------------// + + template + basic_path & basic_path::remove_filename() + { + m_path.erase( + detail::filename_pos( m_path, m_path.size() ) ); + return *this; + } + + template + basic_path & + basic_path::replace_extension( const string_type & new_ext ) + { + // erase existing extension if any + string_type old_ext = extension(); + if ( !old_ext.empty() ) + m_path.erase( m_path.size() - old_ext.size() ); + + if ( !new_ext.empty() && new_ext[0] != dot::value ) + m_path += dot::value; + + m_path += new_ext; + + return *this; + } + + + // path conversion functions --------------------------------------------// + + template + const String + basic_path::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( 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::value + && m_path[1] == slash::value + && ( m_path.size() == 2 + || !detail::is_separator( m_path[2] ) + ) ) + { + ++pos; + s += path_alt_separator::value; + s += path_alt_separator::value; + continue; + } + + // bypass extra root separators + if ( in_root ) + { + if ( s.size() > 0 + && s[s.size()-1] == path_alt_separator::value + && m_path[pos] == slash::value + ) continue; + } + + if ( m_path[pos] == slash::value ) + s += path_alt_separator::value; + else + s += m_path[pos]; + + if ( pos > root_dir_start + && m_path[pos] == slash::value ) + { in_root = false; } + } +# ifdef BOOST_CYGWIN_PATH + if ( m_cygwin_root ) s[0] = slash::value; +# endif + return s; +# else + return m_path; +# endif + } + + // iterator functions ---------------------------------------------------// + + template + typename basic_path::iterator basic_path::begin() const + { + iterator itr; + itr.m_path_ptr = this; + typename string_type::size_type element_size; + detail::first_element( m_path, itr.m_pos, element_size ); + itr.m_name = m_path.substr( itr.m_pos, element_size ); + return itr; + } + + template + typename basic_path::iterator basic_path::end() const + { + iterator itr; + itr.m_path_ptr = this; + itr.m_pos = m_path.size(); + return itr; + } + + namespace detail + { + // do_increment ------------------------------------------------------// + + template + void iterator_helper::do_increment( iterator & itr ) + { + typedef typename Path::string_type string_type; + typedef typename Path::traits_type traits_type; + + BOOST_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::value + && itr.m_name[1] == slash::value + && itr.m_name[2] != slash::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::value ) + { + // detect root directory + if ( was_net + # ifdef BOOST_WINDOWS_PATH + // case "c:/" + || itr.m_name[itr.m_name.size()-1] == colon::value + # endif + ) + { + itr.m_name = slash::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::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::value; + return; + } + } + + // get next element + typename string_type::size_type end_pos( + itr.m_path_ptr->m_path.find( slash::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 + void iterator_helper::do_decrement( iterator & itr ) + { + BOOST_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( + 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::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::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::value + ; + --end_pos ) {} + + itr.m_pos = detail::filename_pos + ( 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 + basic_filesystem_error::basic_filesystem_error( + const std::string & what_arg, system::error_code ec ) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset( new m_imp ); + } + catch (...) { m_imp_ptr.reset(); } + } + + template + basic_filesystem_error::basic_filesystem_error( + const std::string & what_arg, const path_type & path1_arg, + system::error_code ec ) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset( new m_imp ); + m_imp_ptr->m_path1 = path1_arg; + } + catch (...) { m_imp_ptr.reset(); } + } + + template + basic_filesystem_error::basic_filesystem_error( + const std::string & what_arg, const path_type & path1_arg, + const path_type & path2_arg, system::error_code ec ) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset( new m_imp ); + m_imp_ptr->m_path1 = path1_arg; + m_imp_ptr->m_path2 = path2_arg; + } + catch (...) { m_imp_ptr.reset(); } + } + + } // namespace BOOST_FILESYSTEM2_NAMESPACE +} // namespace boost + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + using filesystem2::basic_path; + using filesystem2::path_traits; + + using filesystem2::slash; + using filesystem2::dot; + using filesystem2::colon; + + using filesystem2::path; +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + using filesystem2::wpath_traits; + using filesystem2::wpath; + using filesystem2::wfilesystem_error; +# endif + using filesystem2::basic_filesystem_error; + using filesystem2::filesystem_error; + using filesystem2::portable_posix_name; + using filesystem2::windows_name; + using filesystem2::portable_name; + using filesystem2::portable_directory_name; + using filesystem2::portable_file_name; + using filesystem2::native; + using filesystem2::no_check; + using filesystem2::swap; + using filesystem2::operator<; + using filesystem2::operator==; + using filesystem2::operator!=; + using filesystem2::operator>; + using filesystem2::operator<=; + using filesystem2::operator>=; + using filesystem2::operator/; + using filesystem2::operator<<; + using filesystem2::operator>>; + } +} + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas + +#endif // BOOST_FILESYSTEM2_PATH_HPP diff --git a/external/boost/filesystem/v3/config.hpp b/external/boost/filesystem/v3/config.hpp new file mode 100644 index 0000000..13fc308 --- /dev/null +++ b/external/boost/filesystem/v3/config.hpp @@ -0,0 +1,85 @@ +// boost/filesystem/v3/config.hpp ----------------------------------------------------// + +// Copyright Beman Dawes 2003 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM3_CONFIG_HPP +#define BOOST_FILESYSTEM3_CONFIG_HPP + +# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 3 +# error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3 +# endif + +# if !defined(BOOST_FILESYSTEM_VERSION) +# define BOOST_FILESYSTEM_VERSION 3 +# endif + +#define BOOST_FILESYSTEM_I18N // aid users wishing to compile several versions + +// This header implements separate compilation features as described in +// http://www.boost.org/more/separate_compilation.html + +#include +#include // for BOOST_POSIX_API or BOOST_WINDOWS_API +#include + +// BOOST_FILESYSTEM_DEPRECATED needed for source compiles -----------------------------// + +# ifdef BOOST_FILESYSTEM_SOURCE +# define BOOST_FILESYSTEM_DEPRECATED +# endif + +// throw an exception ----------------------------------------------------------------// +// +// Exceptions were originally thrown via boost::throw_exception(). +// As throw_exception() became more complex, it caused user error reporting +// to be harder to interpret, since the exception reported became much more complex. +// The immediate fix was to throw directly, wrapped in a macro to make any later change +// easier. + +#define BOOST_FILESYSTEM_THROW(EX) throw EX + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +// enable dynamic linking -------------------------------------------------------------// + +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) +# if defined(BOOST_FILESYSTEM_SOURCE) +# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT +# endif +#else +# 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 +#endif // auto-linking disabled + +#endif // BOOST_FILESYSTEM3_CONFIG_HPP diff --git a/external/boost/filesystem/v3/convenience.hpp b/external/boost/filesystem/v3/convenience.hpp new file mode 100644 index 0000000..1a1f943 --- /dev/null +++ b/external/boost/filesystem/v3/convenience.hpp @@ -0,0 +1,74 @@ +// 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_FILESYSTEM3_CONVENIENCE_HPP +#define BOOST_FILESYSTEM3_CONVENIENCE_HPP + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include +#include + +#include // must be the last #include + +namespace boost +{ + namespace filesystem3 + { + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + + inline std::string extension(const path & p) + { + return p.extension().string(); + } + + inline std::string basename(const path & p) + { + return p.stem().string(); + } + + inline path change_extension( const path & p, const path & new_extension ) + { + path new_p( p ); + new_p.replace_extension( new_extension ); + return new_p; + } + +# endif + + + } // namespace filesystem3 +} // namespace boost + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + using filesystem3::extension; + using filesystem3::basename; + using filesystem3::change_extension; +# endif + } +} + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM3_CONVENIENCE_HPP diff --git a/external/boost/filesystem/v3/fstream.hpp b/external/boost/filesystem/v3/fstream.hpp new file mode 100644 index 0000000..60a2a3b --- /dev/null +++ b/external/boost/filesystem/v3/fstream.hpp @@ -0,0 +1,208 @@ +// boost/filesystem/fstream.hpp ------------------------------------------------------// + +// Copyright Beman Dawes 2002 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM3_FSTREAM_HPP +#define BOOST_FILESYSTEM3_FSTREAM_HPP + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include +#include +#include + +#include // must be the last #include + +// on Windows, except for standard libaries known to have wchar_t overloads for +// file stream I/O, use path::string() to get a narrow character c_str() +#if defined(BOOST_WINDOWS_API) \ + && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION)) + // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware +# define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available +#else // use the native c_str, which will be narrow on POSIX, wide on Windows +# define BOOST_FILESYSTEM_C_STR c_str() +#endif + +namespace boost +{ +namespace filesystem3 +{ + +//--------------------------------------------------------------------------------------// +// basic_filebuf // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_filebuf : public std::basic_filebuf + { + private: // disallow copying + basic_filebuf(const basic_filebuf&); + const basic_filebuf& operator=(const basic_filebuf&); + + public: + basic_filebuf() {} + virtual ~basic_filebuf() {} + + basic_filebuf* + open(const path& p, std::ios_base::openmode mode) + { + return std::basic_filebuf::open(p.BOOST_FILESYSTEM_C_STR, mode) + ? this : 0; + } + }; + +//--------------------------------------------------------------------------------------// +// basic_ifstream // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_ifstream : public std::basic_ifstream + { + 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) + + explicit basic_ifstream(const path& p) + : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {} + + basic_ifstream(const path& p, std::ios_base::openmode mode) + : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, mode) {} + + void open(const path& p) + { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); } + + void open(const path& p, std::ios_base::openmode mode) + { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } + + virtual ~basic_ifstream() {} + }; + +//--------------------------------------------------------------------------------------// +// basic_ofstream // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_ofstream : public std::basic_ofstream + { + 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) + + explicit basic_ofstream(const path& p) + : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {} + + basic_ofstream(const path& p, std::ios_base::openmode mode) + : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, mode) {} + + void open(const path& p) + { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); } + + void open(const path& p, std::ios_base::openmode mode) + { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } + + virtual ~basic_ofstream() {} + }; + +//--------------------------------------------------------------------------------------// +// basic_fstream // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_fstream : public std::basic_fstream + { + 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) + + explicit basic_fstream(const path& p) + : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, + std::ios_base::in | std::ios_base::out) {} + + basic_fstream(const path& p, std::ios_base::openmode mode) + : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, mode) {} + + void open(const path& p) + { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, + std::ios_base::in | std::ios_base::out); } + + void open(const path& p, std::ios_base::openmode mode) + { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } + + virtual ~basic_fstream() {} + + }; + +//--------------------------------------------------------------------------------------// +// typedefs // +//--------------------------------------------------------------------------------------// + + typedef basic_filebuf filebuf; + typedef basic_ifstream ifstream; + typedef basic_ofstream ofstream; + typedef basic_fstream fstream; + + typedef basic_filebuf wfilebuf; + typedef basic_ifstream wifstream; + typedef basic_ofstream wofstream; + typedef basic_fstream wfstream; + +} // namespace filesystem3 +} // namespace boost + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + using filesystem3::filebuf; + using filesystem3::ifstream; + using filesystem3::ofstream; + using filesystem3::fstream; + using filesystem3::wfilebuf; + using filesystem3::wifstream; + using filesystem3::wfstream; + using filesystem3::wofstream; + using filesystem3::basic_filebuf; + using filesystem3::basic_ifstream; + using filesystem3::basic_ofstream; + using filesystem3::basic_fstream; + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# endif + } +} + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM3_FSTREAM_HPP diff --git a/external/boost/filesystem/v3/operations.hpp b/external/boost/filesystem/v3/operations.hpp new file mode 100644 index 0000000..ace3bc8 --- /dev/null +++ b/external/boost/filesystem/v3/operations.hpp @@ -0,0 +1,1199 @@ +// boost/filesystem/operations.hpp ---------------------------------------------------// + +// Copyright Beman Dawes 2002-2009 +// Copyright Jan Langer 2002 +// Copyright Dietmar Kuehl 2001 +// Copyright Vladimir Prus 2002 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM3_OPERATIONS_HPP +#define BOOST_FILESYSTEM3_OPERATIONS_HPP + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include // for pair +#include +#include +#include + +#ifdef BOOST_WINDOWS_API +# include +#endif + +#include // must be the last #include + +//--------------------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem3 + { + +//--------------------------------------------------------------------------------------// +// file_type // +//--------------------------------------------------------------------------------------// + + enum file_type + { + status_error, +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + status_unknown = status_error, +# endif + file_not_found, + regular_file, + directory_file, + // the following may not apply to some operating systems or file systems + symlink_file, + block_file, + character_file, + fifo_file, + socket_file, + reparse_file, // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink + type_unknown, // file does exist, but isn't one of the above types or + // we don't have strong enough permission to find its type + + _detail_directory_symlink // internal use only; never exposed to users + }; + +//--------------------------------------------------------------------------------------// +// perms // +//--------------------------------------------------------------------------------------// + + enum perms + { + no_perms = 0, // file_not_found is no_perms rather than perms_not_known + + // POSIX equivalent macros given in comments. + // Values are from POSIX and are given in octal per the POSIX standard. + + // permission bits + + owner_read = 0400, // S_IRUSR, Read permission, owner + owner_write = 0200, // S_IWUSR, Write permission, owner + owner_exe = 0100, // S_IXUSR, Execute/search permission, owner + owner_all = 0700, // S_IRWXU, Read, write, execute/search by owner + + group_read = 040, // S_IRGRP, Read permission, group + group_write = 020, // S_IWGRP, Write permission, group + group_exe = 010, // S_IXGRP, Execute/search permission, group + group_all = 070, // S_IRWXG, Read, write, execute/search by group + + others_read = 04, // S_IROTH, Read permission, others + others_write = 02, // S_IWOTH, Write permission, others + others_exe = 01, // S_IXOTH, Execute/search permission, others + others_all = 07, // S_IRWXO, Read, write, execute/search by others + + all_all = owner_all|group_all|others_all, // 0777 + + // other POSIX bits + + set_uid_on_exe = 04000, // S_ISUID, Set-user-ID on execution + set_gid_on_exe = 02000, // S_ISGID, Set-group-ID on execution + sticky_bit = 01000, // S_ISVTX, + // (POSIX XSI) On directories, restricted deletion flag + // (V7) 'sticky bit': save swapped text even after use + // (SunOS) On non-directories: don't cache this file + // (SVID-v4.2) On directories: restricted deletion flag + // Also see http://en.wikipedia.org/wiki/Sticky_bit + + perms_mask = all_all|set_uid_on_exe|set_gid_on_exe|sticky_bit, // 07777 + + perms_not_known = 0xFFFF, // present when directory_entry cache not loaded + + // options for permissions() function + + add_perms = 0x1000, // adds the given permission bits to the current bits + remove_perms = 0x2000, // removes the given permission bits from the current bits; + // choose add_perms or remove_perms, not both; if neither add_perms + // nor remove_perms is given, replace the current bits with + // the given bits. + + symlink_perms = 0x4000 // on POSIX, don't resolve symlinks; implied on Windows + }; + + BOOST_BITMASK(perms) + +//--------------------------------------------------------------------------------------// +// file_status // +//--------------------------------------------------------------------------------------// + + class BOOST_FILESYSTEM_DECL file_status + { + public: + file_status() : m_value(status_error), m_perms(perms_not_known) {} + explicit file_status(file_type v, perms prms = perms_not_known) + : m_value(v), m_perms(prms) {} + + // observers + file_type type() const { return m_value; } + perms permissions() const { return m_perms; } + + // modifiers + void type(file_type v) { m_value = v; } + void permissions(perms prms) { m_perms = prms; } + + bool operator==(const file_status& rhs) const { return type() == rhs.type() && + permissions() == rhs.permissions(); } + bool operator!=(const file_status& rhs) const { return !(*this == rhs); } + + private: + file_type m_value; + enum perms m_perms; + }; + + inline bool type_present(file_status f) { return f.type() != status_error; } + inline bool permissions_present(file_status f) + {return f.permissions() != perms_not_known;} + inline bool status_known(file_status f) { return type_present(f) && permissions_present(f); } + inline bool exists(file_status f) { return f.type() != status_error + && f.type() != file_not_found; } + inline bool is_regular_file(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_file(f) + && !is_directory(f) && !is_symlink(f); } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline bool is_regular(file_status f) { return f.type() == regular_file; } +# endif + + struct space_info + { + // all values are byte counts + boost::uintmax_t capacity; + boost::uintmax_t free; // <= capacity + boost::uintmax_t available; // <= free + }; + + BOOST_SCOPED_ENUM_START(copy_option) + {none, fail_if_exists = none, overwrite_if_exists}; + BOOST_SCOPED_ENUM_END + +//--------------------------------------------------------------------------------------// +// implementation details // +//--------------------------------------------------------------------------------------// + + namespace detail + { + BOOST_FILESYSTEM_DECL + file_status status(const path&p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + file_status symlink_status(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool is_empty(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path initial_path(system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path canonical(const path& p, const path& base, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy(const path& from, const path& to, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy_directory(const path& from, const path& to, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy_file(const path& from, const path& to, + BOOST_SCOPED_ENUM(copy_option) option, // See ticket #2925 + system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool create_directories(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool create_directory(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void create_directory_symlink(const path& to, const path& from, + system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void create_hard_link(const path& to, const path& from, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void create_symlink(const path& to, const path& from, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path current_path(system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void current_path(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool equivalent(const path& p1, const path& p2, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + boost::uintmax_t file_size(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + boost::uintmax_t hard_link_count(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + std::time_t last_write_time(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void last_write_time(const path& p, const std::time_t new_time, + system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void permissions(const path& p, perms prms, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path read_symlink(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + // For standardization, if the committee doesn't like "remove", consider "eliminate" + bool remove(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + boost::uintmax_t remove_all(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void rename(const path& old_p, const path& new_p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void resize_file(const path& p, uintmax_t size, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + space_info space(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path system_complete(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path temp_directory_path(system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path unique_path(const path& p, system::error_code* ec=0); + } // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// status query functions // +// // +//--------------------------------------------------------------------------------------// + + inline + file_status status(const path& p) {return detail::status(p);} + inline + file_status status(const path& p, system::error_code& ec) + {return detail::status(p, &ec);} + inline + file_status symlink_status(const path& p) {return detail::symlink_status(p);} + inline + file_status symlink_status(const path& p, system::error_code& ec) + {return detail::symlink_status(p, &ec);} + inline + bool exists(const path& p) {return exists(detail::status(p));} + inline + bool exists(const path& p, system::error_code& ec) + {return exists(detail::status(p, &ec));} + inline + bool is_directory(const path& p) {return is_directory(detail::status(p));} + inline + bool is_directory(const path& p, system::error_code& ec) + {return is_directory(detail::status(p, &ec));} + inline + bool is_regular_file(const path& p) {return is_regular_file(detail::status(p));} + inline + bool is_regular_file(const path& p, system::error_code& ec) + {return is_regular_file(detail::status(p, &ec));} + inline + bool is_other(const path& p) {return is_other(detail::status(p));} + inline + bool is_other(const path& p, system::error_code& ec) + {return is_other(detail::status(p, &ec));} + inline + bool is_symlink(const path& p) {return is_symlink(detail::symlink_status(p));} + inline + bool is_symlink(const path& p, system::error_code& ec) + {return is_symlink(detail::symlink_status(p, &ec));} +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline + bool is_regular(const path& p) {return is_regular(detail::status(p));} + inline + bool is_regular(const path& p, system::error_code& ec) + {return is_regular(detail::status(p, &ec));} +# endif + + inline + bool is_empty(const path& p) {return detail::is_empty(p);} + inline + bool is_empty(const path& p, system::error_code& ec) + {return detail::is_empty(p, &ec);} + +//--------------------------------------------------------------------------------------// +// // +// operational functions // +// in alphabetical order, unless otherwise noted // +// // +//--------------------------------------------------------------------------------------// + + // forward declarations + path current_path(); // fwd declaration + path initial_path(); + + BOOST_FILESYSTEM_DECL + path absolute(const path& p, const path& base=current_path()); + // If base.is_absolute(), throws nothing. Thus no need for ec argument + + inline + path canonical(const path& p, const path& base=current_path()) + {return detail::canonical(p, base);} + inline + path canonical(const path& p, system::error_code& ec) + {return detail::canonical(p, current_path(), &ec);} + inline + path canonical(const path& p, const path& base, system::error_code& ec) + {return detail::canonical(p, base, &ec);} + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline + path complete(const path& p) + { + return absolute(p, initial_path()); + } + + inline + path complete(const path& p, const path& base) + { + return absolute(p, base); + } +# endif + + inline + void copy(const path& from, const path& to) {detail::copy(from, to);} + + inline + void copy(const path& from, const path& to, system::error_code& ec) + {detail::copy(from, to, &ec);} + inline + void copy_directory(const path& from, const path& to) + {detail::copy_directory(from, to);} + inline + void copy_directory(const path& from, const path& to, system::error_code& ec) + {detail::copy_directory(from, to, &ec);} + inline + void copy_file(const path& from, const path& to, // See ticket #2925 + BOOST_SCOPED_ENUM(copy_option) option) + {detail::copy_file(from, to, option);} + inline + void copy_file(const path& from, const path& to) + {detail::copy_file(from, to, copy_option::fail_if_exists);} + inline + void copy_file(const path& from, const path& to, // See ticket #2925 + BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec) + {detail::copy_file(from, to, option, &ec);} + inline + void copy_file(const path& from, const path& to, system::error_code& ec) + {detail::copy_file(from, to, copy_option::fail_if_exists, &ec);} + inline + void copy_symlink(const path& existing_symlink, const path& new_symlink) {detail::copy_symlink(existing_symlink, new_symlink);} + + inline + void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec) + {detail::copy_symlink(existing_symlink, new_symlink, &ec);} + inline + bool create_directories(const path& p) {return detail::create_directories(p);} + + inline + bool create_directories(const path& p, system::error_code& ec) + {return detail::create_directories(p, &ec);} + inline + bool create_directory(const path& p) {return detail::create_directory(p);} + + inline + bool create_directory(const path& p, system::error_code& ec) + {return detail::create_directory(p, &ec);} + inline + void create_directory_symlink(const path& to, const path& from) + {detail::create_directory_symlink(to, from);} + inline + void create_directory_symlink(const path& to, const path& from, system::error_code& ec) + {detail::create_directory_symlink(to, from, &ec);} + inline + void create_hard_link(const path& to, const path& new_hard_link) {detail::create_hard_link(to, new_hard_link);} + + inline + void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec) + {detail::create_hard_link(to, new_hard_link, &ec);} + inline + void create_symlink(const path& to, const path& new_symlink) {detail::create_symlink(to, new_symlink);} + + inline + void create_symlink(const path& to, const path& new_symlink, system::error_code& ec) + {detail::create_symlink(to, new_symlink, &ec);} + inline + path current_path() {return detail::current_path();} + + inline + path current_path(system::error_code& ec) {return detail::current_path(&ec);} + + inline + void current_path(const path& p) {detail::current_path(p);} + + inline + void current_path(const path& p, system::error_code& ec) {detail::current_path(p, &ec);} + + inline + bool equivalent(const path& p1, const path& p2) {return detail::equivalent(p1, p2);} + + inline + bool equivalent(const path& p1, const path& p2, system::error_code& ec) + {return detail::equivalent(p1, p2, &ec);} + inline + boost::uintmax_t file_size(const path& p) {return detail::file_size(p);} + + inline + boost::uintmax_t file_size(const path& p, system::error_code& ec) + {return detail::file_size(p, &ec);} + inline + boost::uintmax_t hard_link_count(const path& p) {return detail::hard_link_count(p);} + + inline + boost::uintmax_t hard_link_count(const path& p, system::error_code& ec) + {return detail::hard_link_count(p, &ec);} + inline + path initial_path() {return detail::initial_path();} + + inline + path initial_path(system::error_code& ec) {return detail::initial_path(&ec);} + + template + path initial_path() {return initial_path();} + template + path initial_path(system::error_code& ec) {return detail::initial_path(&ec);} + + inline + std::time_t last_write_time(const path& p) {return detail::last_write_time(p);} + + inline + std::time_t last_write_time(const path& p, system::error_code& ec) + {return detail::last_write_time(p, &ec);} + inline + void last_write_time(const path& p, const std::time_t new_time) + {detail::last_write_time(p, new_time);} + inline + void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec) + {detail::last_write_time(p, new_time, &ec);} + inline + void permissions(const path& p, perms prms) + {detail::permissions(p, prms);} + inline + void permissions(const path& p, perms prms, system::error_code& ec) + {detail::permissions(p, prms, &ec);} + + inline + path read_symlink(const path& p) {return detail::read_symlink(p);} + + inline + path read_symlink(const path& p, system::error_code& ec) + {return detail::read_symlink(p, &ec);} + inline + // For standardization, if the committee doesn't like "remove", consider "eliminate" + bool remove(const path& p) {return detail::remove(p);} + + inline + bool remove(const path& p, system::error_code& ec) {return detail::remove(p, &ec);} + + inline + boost::uintmax_t remove_all(const path& p) {return detail::remove_all(p);} + + inline + boost::uintmax_t remove_all(const path& p, system::error_code& ec) + {return detail::remove_all(p, &ec);} + inline + void rename(const path& old_p, const path& new_p) {detail::rename(old_p, new_p);} + + inline + void rename(const path& old_p, const path& new_p, system::error_code& ec) + {detail::rename(old_p, new_p, &ec);} + inline // name suggested by Scott McMurray + void resize_file(const path& p, uintmax_t size) {detail::resize_file(p, size);} + + inline + void resize_file(const path& p, uintmax_t size, system::error_code& ec) + {detail::resize_file(p, size, &ec);} + inline + space_info space(const path& p) {return detail::space(p);} + + inline + space_info space(const path& p, system::error_code& ec) {return detail::space(p, &ec);} + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline bool symbolic_link_exists(const path& p) + { return is_symlink(symlink_status(p)); } +# endif + + inline + path system_complete(const path& p) {return detail::system_complete(p);} + + inline + path system_complete(const path& p, system::error_code& ec) + {return detail::system_complete(p, &ec);} + inline + path temp_directory_path() {return detail::temp_directory_path();} + + inline + path temp_directory_path(system::error_code& ec) + {return detail::temp_directory_path(&ec);} + inline + path unique_path(const path& p="%%%%-%%%%-%%%%-%%%%") + { return detail::unique_path(p); } + inline + path unique_path(const path& p, system::error_code& ec) + { return detail::unique_path(p, &ec); } + +//--------------------------------------------------------------------------------------// +// // +// directory_entry // +// // +//--------------------------------------------------------------------------------------// + +// GCC has a problem with a member function named path within a namespace or +// sub-namespace that also has a class named path. The workaround is to always +// fully qualify the name path when it refers to the class name. + +class BOOST_FILESYSTEM_DECL directory_entry +{ +public: + + // compiler generated copy constructor, copy assignment, and destructor apply + + directory_entry() {} + explicit directory_entry(const boost::filesystem::path& 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 boost::filesystem::path& p, + file_status st = file_status(), file_status symlink_st = file_status()) + { m_path = p; m_status = st; m_symlink_status = symlink_st; } + + void replace_filename(const boost::filesystem::path& p, + file_status st = file_status(), file_status symlink_st = file_status()) + { + m_path.remove_filename(); + m_path /= p; + m_status = st; + m_symlink_status = symlink_st; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + void replace_leaf(const boost::filesystem::path& p, + file_status st, file_status symlink_st) + { replace_filename(p, st, symlink_st); } +# endif + + const boost::filesystem::path& path() const {return m_path;} + file_status status() const {return m_get_status();} + file_status status(system::error_code& ec) const {return m_get_status(&ec);} + file_status symlink_status() const {return m_get_symlink_status();} + file_status symlink_status(system::error_code& ec) const {return m_get_symlink_status(&ec);} + + bool operator==(const directory_entry& rhs) {return m_path == rhs.m_path;} + bool operator!=(const directory_entry& rhs) {return m_path != rhs.m_path;} + bool operator< (const directory_entry& rhs) {return m_path < rhs.m_path;} + bool operator<=(const directory_entry& rhs) {return m_path <= rhs.m_path;} + bool operator> (const directory_entry& rhs) {return m_path > rhs.m_path;} + bool operator>=(const directory_entry& rhs) {return m_path >= rhs.m_path;} + +private: + boost::filesystem::path m_path; + mutable file_status m_status; // stat()-like + mutable file_status m_symlink_status; // lstat()-like + + file_status m_get_status(system::error_code* ec=0) const; + file_status m_get_symlink_status(system::error_code* ec=0) const; +}; // directory_entry + +//--------------------------------------------------------------------------------------// +// // +// directory_iterator helpers // +// // +//--------------------------------------------------------------------------------------// + +class directory_iterator; + +namespace detail +{ + BOOST_FILESYSTEM_DECL + system::error_code dir_itr_close(// never throws() + void *& handle +# if defined(BOOST_POSIX_API) + , void *& buffer +# endif + ); + + struct dir_itr_imp + { + directory_entry dir_entry; + void* handle; + +# ifdef BOOST_POSIX_API + void* buffer; // see dir_itr_increment implementation +# endif + + dir_itr_imp() : handle(0) +# ifdef BOOST_POSIX_API + , buffer(0) +# endif + {} + + ~dir_itr_imp() // never throws + { + dir_itr_close(handle +# if defined(BOOST_POSIX_API) + , buffer +# endif + ); + } + }; + + // see path::iterator: comment below + BOOST_FILESYSTEM_DECL void directory_iterator_construct(directory_iterator& it, + const path& p, system::error_code* ec); + BOOST_FILESYSTEM_DECL void directory_iterator_increment(directory_iterator& it, + system::error_code* ec); + +} // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// directory_iterator // +// // +//--------------------------------------------------------------------------------------// + + class directory_iterator + : public boost::iterator_facade< directory_iterator, + directory_entry, + boost::single_pass_traversal_tag > + { + public: + + directory_iterator(){} // creates the "end" iterator + + // iterator_facade derived classes don't seem to like implementations in + // separate translation unit dll's, so forward to detail functions + explicit directory_iterator(const path& p) + : m_imp(new detail::dir_itr_imp) + { detail::directory_iterator_construct(*this, p, 0); } + + directory_iterator(const path& p, system::error_code& ec) + : m_imp(new detail::dir_itr_imp) + { detail::directory_iterator_construct(*this, p, &ec); } + + ~directory_iterator() {} // never throws + + directory_iterator& increment(system::error_code& ec) + { + detail::directory_iterator_increment(*this, &ec); + return *this; + } + + private: + friend struct detail::dir_itr_imp; + friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_construct(directory_iterator& it, + const path& p, system::error_code* ec); + friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_increment(directory_iterator& it, + system::error_code* ec); + + // shared_ptr provides shallow-copy semantics required for InputIterators. + // m_imp.get()==0 indicates the end iterator. + boost::shared_ptr< detail::dir_itr_imp > m_imp; + + friend class boost::iterator_core_access; + + boost::iterator_facade< + directory_iterator, + directory_entry, + boost::single_pass_traversal_tag >::reference dereference() const + { + BOOST_ASSERT_MSG(m_imp.get(), "attempt to dereference end iterator"); + return m_imp->dir_entry; + } + + void increment() { detail::directory_iterator_increment(*this, 0); } + + bool equal(const directory_iterator& rhs) const + { return m_imp == rhs.m_imp; } + }; + +//--------------------------------------------------------------------------------------// +// // +// recursive_directory_iterator helpers // +// // +//--------------------------------------------------------------------------------------// + + BOOST_SCOPED_ENUM_START(symlink_option) + { + none, + no_recurse = none, // don't follow directory symlinks (default behavior) + recurse, // follow directory symlinks + _detail_no_push = recurse << 1 // internal use only + }; + BOOST_SCOPED_ENUM_END + + BOOST_BITMASK(BOOST_SCOPED_ENUM(symlink_option)) + + namespace detail + { + struct recur_dir_itr_imp + { + typedef directory_iterator element_type; + std::stack< element_type, std::vector< element_type > > m_stack; + int m_level; + BOOST_SCOPED_ENUM(symlink_option) m_options; + + recur_dir_itr_imp() : m_level(0), m_options(symlink_option::none) {} + + void increment(system::error_code* ec); // ec == 0 means throw on error + + void pop(); + + }; + + // Implementation is inline to avoid dynamic linking difficulties with m_stack: + // Microsoft warning C4251, m_stack needs to have dll-interface to be used by + // clients of struct 'boost::filesystem::detail::recur_dir_itr_imp' + + inline + void recur_dir_itr_imp::increment(system::error_code* ec) + // ec == 0 means throw on error + { + if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push) + m_options &= ~symlink_option::_detail_no_push; + + else + { + // Logic for following predicate was contributed by Daniel Aarno to handle cyclic + // symlinks correctly and efficiently, fixing ticket #5652. + // if (((m_options & symlink_option::recurse) == symlink_option::recurse + // || !is_symlink(m_stack.top()->symlink_status())) + // && is_directory(m_stack.top()->status())) ... + // The predicate code has since been rewritten to pass error_code arguments, + // per ticket #5653. + bool or_pred = (m_options & symlink_option::recurse) == symlink_option::recurse + || (ec == 0 ? !is_symlink(m_stack.top()->symlink_status()) + : !is_symlink(m_stack.top()->symlink_status(*ec))); + if (ec != 0 && *ec) + return; + bool and_pred = or_pred && (ec == 0 ? is_directory(m_stack.top()->status()) + : is_directory(m_stack.top()->status(*ec))); + if (ec != 0 && *ec) + return; + + if (and_pred) + { + if (ec == 0) + m_stack.push(directory_iterator(m_stack.top()->path())); + else + { + m_stack.push(directory_iterator(m_stack.top()->path(), *ec)); + if (*ec) + return; + } + if (m_stack.top() != directory_iterator()) + { + ++m_level; + return; + } + m_stack.pop(); + } + } + + while (!m_stack.empty() && ++m_stack.top() == directory_iterator()) + { + m_stack.pop(); + --m_level; + } + } + + inline + void recur_dir_itr_imp::pop() + { + BOOST_ASSERT_MSG(m_level > 0, + "pop() on recursive_directory_iterator with level < 1"); + + do + { + m_stack.pop(); + --m_level; + } + while (!m_stack.empty() && ++m_stack.top() == directory_iterator()); + } + } // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// recursive_directory_iterator // +// // +//--------------------------------------------------------------------------------------// + + class recursive_directory_iterator + : public boost::iterator_facade< + recursive_directory_iterator, + directory_entry, + boost::single_pass_traversal_tag > + { + public: + + recursive_directory_iterator(){} // creates the "end" iterator + + explicit recursive_directory_iterator(const path& dir_path, + BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none) + : m_imp(new detail::recur_dir_itr_imp) + { + m_imp->m_options = opt; + m_imp->m_stack.push(directory_iterator(dir_path)); + if (m_imp->m_stack.top() == directory_iterator()) + { m_imp.reset (); } + } + + recursive_directory_iterator(const path& dir_path, + BOOST_SCOPED_ENUM(symlink_option) opt, + system::error_code & ec) + : m_imp(new detail::recur_dir_itr_imp) + { + m_imp->m_options = opt; + m_imp->m_stack.push(directory_iterator(dir_path, ec)); + if (m_imp->m_stack.top() == directory_iterator()) + { m_imp.reset (); } + } + + recursive_directory_iterator(const path& dir_path, + system::error_code & ec) + : m_imp(new detail::recur_dir_itr_imp) + { + m_imp->m_options = symlink_option::none; + m_imp->m_stack.push(directory_iterator(dir_path, ec)); + if (m_imp->m_stack.top() == directory_iterator()) + { m_imp.reset (); } + } + + recursive_directory_iterator& increment(system::error_code& ec) + { + BOOST_ASSERT_MSG(m_imp.get(), + "increment() on end recursive_directory_iterator"); + m_imp->increment(&ec); + if (m_imp->m_stack.empty()) + m_imp.reset(); // done, so make end iterator + return *this; + } + + int level() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "level() on end recursive_directory_iterator"); + return m_imp->m_level; + } + + bool no_push_pending() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "is_no_push_requested() on end recursive_directory_iterator"); + return (m_imp->m_options & symlink_option::_detail_no_push) + == symlink_option::_detail_no_push; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + bool no_push_request() const { return no_push_pending(); } +# endif + + void pop() + { + BOOST_ASSERT_MSG(m_imp.get(), + "pop() on end recursive_directory_iterator"); + m_imp->pop(); + if (m_imp->m_stack.empty()) m_imp.reset(); // done, so make end iterator + } + + void no_push(bool value=true) + { + BOOST_ASSERT_MSG(m_imp.get(), + "no_push() on end recursive_directory_iterator"); + if (value) + m_imp->m_options |= symlink_option::_detail_no_push; + else + m_imp->m_options &= ~symlink_option::_detail_no_push; + } + + file_status status() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "status() on end recursive_directory_iterator"); + return m_imp->m_stack.top()->status(); + } + + file_status symlink_status() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "symlink_status() on end recursive_directory_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 > m_imp; + + friend class boost::iterator_core_access; + + boost::iterator_facade< + recursive_directory_iterator, + directory_entry, + boost::single_pass_traversal_tag >::reference + dereference() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "dereference of end recursive_directory_iterator"); + return *m_imp->m_stack.top(); + } + + void increment() + { + BOOST_ASSERT_MSG(m_imp.get(), + "increment of end recursive_directory_iterator"); + m_imp->increment(0); + if (m_imp->m_stack.empty()) + m_imp.reset(); // done, so make end iterator + } + + bool equal(const recursive_directory_iterator& rhs) const + { return m_imp == rhs.m_imp; } + + }; + +# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) + typedef recursive_directory_iterator wrecursive_directory_iterator; +# endif + +//--------------------------------------------------------------------------------------// +// // +// class filesystem_error // +// // +//--------------------------------------------------------------------------------------// + + class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error + { + // see http://www.boost.org/more/error_handling.html for design rationale + + // all functions are inline to avoid issues with crossing dll boundaries + + public: + // compiler generates copy constructor and copy assignment + + filesystem_error( + const std::string & what_arg, system::error_code ec) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset(new m_imp); + } + catch (...) { m_imp_ptr.reset(); } + } + + filesystem_error( + const std::string & what_arg, const path& path1_arg, + system::error_code ec) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset(new m_imp); + m_imp_ptr->m_path1 = path1_arg; + } + catch (...) { m_imp_ptr.reset(); } + } + + filesystem_error( + const std::string & what_arg, const path& path1_arg, + const path& path2_arg, system::error_code ec) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset(new m_imp); + m_imp_ptr->m_path1 = path1_arg; + m_imp_ptr->m_path2 = path2_arg; + } + catch (...) { m_imp_ptr.reset(); } + } + + ~filesystem_error() throw() {} + + const path& path1() const + { + static const path empty_path; + return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ; + } + const path& path2() const + { + static const path empty_path; + return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ; + } + + const char* what() const throw() + { + if (!m_imp_ptr.get()) + return system::system_error::what(); + + try + { + if (m_imp_ptr->m_what.empty()) + { + m_imp_ptr->m_what = system::system_error::what(); + if (!m_imp_ptr->m_path1.empty()) + { + m_imp_ptr->m_what += ": \""; + m_imp_ptr->m_what += m_imp_ptr->m_path1.string(); + m_imp_ptr->m_what += "\""; + } + if (!m_imp_ptr->m_path2.empty()) + { + m_imp_ptr->m_what += ", \""; + m_imp_ptr->m_what += m_imp_ptr->m_path2.string(); + m_imp_ptr->m_what += "\""; + } + } + return m_imp_ptr->m_what.c_str(); + } + catch (...) + { + return system::system_error::what(); + } + } + + private: + struct m_imp + { + path m_path1; // may be empty() + path m_path2; // may be empty() + std::string m_what; // not built until needed + }; + boost::shared_ptr m_imp_ptr; + }; + +// test helper -----------------------------------------------------------------------// + +// Not part of the documented interface since false positives are possible; +// there is no law that says that an OS that has large stat.st_size +// actually supports large file sizes. + + namespace detail + { + BOOST_FILESYSTEM_DECL bool possible_large_file_size_support(); + } + + } // namespace filesystem3 +} // namespace boost + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + // permissions + using filesystem3::no_perms; + using filesystem3::owner_read; + using filesystem3::owner_write; + using filesystem3::owner_exe; + using filesystem3::owner_all; + using filesystem3::group_read; + using filesystem3::group_write; + using filesystem3::group_exe; + using filesystem3::group_all; + using filesystem3::others_read; + using filesystem3::others_write; + using filesystem3::others_exe; + using filesystem3::others_all; + using filesystem3::all_all; + using filesystem3::set_uid_on_exe; + using filesystem3::set_gid_on_exe; + using filesystem3::sticky_bit; + using filesystem3::perms_mask; + using filesystem3::perms_not_known; + using filesystem3::add_perms; + using filesystem3::remove_perms; + using filesystem3::symlink_perms; + + using filesystem3::absolute; + using filesystem3::block_file; + using filesystem3::canonical; + using filesystem3::character_file; +// using filesystem3::copy; + using filesystem3::copy_file; + using filesystem3::copy_option; + using filesystem3::copy_symlink; + using filesystem3::create_directories; + using filesystem3::create_directory; + using filesystem3::create_hard_link; + using filesystem3::create_symlink; + using filesystem3::create_directory_symlink; + using filesystem3::current_path; + using filesystem3::directory_entry; + using filesystem3::directory_file; + using filesystem3::directory_iterator; + using filesystem3::equivalent; + using filesystem3::exists; + using filesystem3::fifo_file; + using filesystem3::file_not_found; + using filesystem3::file_size; + using filesystem3::file_status; + using filesystem3::file_type; + using filesystem3::filesystem_error; + using filesystem3::hard_link_count; + using filesystem3::initial_path; + using filesystem3::is_directory; + using filesystem3::is_directory; + using filesystem3::is_empty; + using filesystem3::is_other; + using filesystem3::is_regular_file; + using filesystem3::is_symlink; + using filesystem3::last_write_time; + using filesystem3::permissions; + using filesystem3::permissions_present; + using filesystem3::perms; + using filesystem3::read_symlink; + using filesystem3::recursive_directory_iterator; + using filesystem3::regular_file; + using filesystem3::reparse_file; + using filesystem3::remove; + using filesystem3::remove_all; + using filesystem3::rename; + using filesystem3::resize_file; + using filesystem3::socket_file; + using filesystem3::space; + using filesystem3::space_info; + using filesystem3::status; + using filesystem3::status_error; + using filesystem3::status_known; + using filesystem3::symlink_file; + using filesystem3::symlink_option; + using filesystem3::symlink_status; + using filesystem3::system_complete; + using filesystem3::temp_directory_path; + using filesystem3::type_present; + using filesystem3::type_unknown; + using filesystem3::unique_path; +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + using filesystem3::is_regular; + using filesystem3::status_unknown; + using filesystem3::symbolic_link_exists; + //using filesystem3::wdirectory_iterator; + //using filesystem3::wdirectory_entry; +# endif + namespace detail + { + using filesystem3::detail::possible_large_file_size_support; + } + } +} + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM3_OPERATIONS_HPP diff --git a/external/boost/filesystem/v3/path.hpp b/external/boost/filesystem/v3/path.hpp new file mode 100644 index 0000000..c483671 --- /dev/null +++ b/external/boost/filesystem/v3/path.hpp @@ -0,0 +1,760 @@ +// filesystem path.hpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2002-2005, 2009 +// Copyright Vladimir Prus 2002 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +// path::stem(), extension(), and replace_extension() are based on +// basename(), extension(), and change_extension() from the original +// filesystem/convenience.hpp header by Vladimir Prus. + +#ifndef BOOST_FILESYSTEM_PATH_HPP +#define BOOST_FILESYSTEM_PATH_HPP + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include +#include // includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // must be the last #include + +namespace boost +{ +namespace filesystem3 +{ + //------------------------------------------------------------------------------------// + // // + // class path // + // // + //------------------------------------------------------------------------------------// + + class BOOST_FILESYSTEM_DECL path + { + public: + + // value_type is the character type used by the operating system API to + // represent paths. + +# ifdef BOOST_WINDOWS_API + typedef wchar_t value_type; +# else + typedef char value_type; +# endif + typedef std::basic_string string_type; + typedef std::codecvt codecvt_type; + + + // ----- character encoding conversions ----- + + // Following the principle of least astonishment, path input arguments + // passed to or obtained from the operating system via objects of + // class path behave as if they were directly passed to or + // obtained from the O/S API, unless conversion is explicitly requested. + // + // POSIX specfies that path strings are passed unchanged to and from the + // API. Note that this is different from the POSIX command line utilities, + // which convert according to a locale. + // + // Thus for POSIX, char strings do not undergo conversion. wchar_t strings + // are converted to/from char using the path locale or, if a conversion + // argument is given, using a conversion object modeled on + // std::wstring_convert. + // + // The path locale, which is global to the thread, can be changed by the + // imbue() function. It is initialized to an implementation defined locale. + // + // For Windows, wchar_t strings do not undergo conversion. char strings + // are converted using the "ANSI" or "OEM" code pages, as determined by + // the AreFileApisANSI() function, or, if a conversion argument is given, + // using a conversion object modeled on std::wstring_convert. + // + // See m_pathname comments for further important rationale. + + // TODO: rules needed for operating systems that use / or . + // differently, or format directory paths differently from file paths. + // + // ********************************************************************************** + // + // More work needed: How to handle an operating system that may have + // slash characters or dot characters in valid filenames, either because + // it doesn't follow the POSIX standard, or because it allows MBCS + // filename encodings that may contain slash or dot characters. For + // example, ISO/IEC 2022 (JIS) encoding which allows switching to + // JIS x0208-1983 encoding. A valid filename in this set of encodings is + // 0x1B 0x24 0x42 [switch to X0208-1983] 0x24 0x2F [U+304F Kiragana letter KU] + // ^^^^ + // Note that 0x2F is the ASCII slash character + // + // ********************************************************************************** + + // Supported source arguments: half-open iterator range, container, c-array, + // and single pointer to null terminated string. + + // All source arguments except pointers to null terminated byte strings support + // multi-byte character strings which may have embedded nulls. Embedded null + // support is required for some Asian languages on Windows. + + // [defaults] "const codecvt_type& cvt=codecvt()" default arguments are not used + // because some compilers, such as Microsoft prior to VC++ 10, do not handle defaults + // correctly in templates. + + // ----- constructors ----- + + path(){} + + path(const path& p) : m_pathname(p.m_pathname) {} + + template + path(Source const& source, + typename boost::enable_if::type> >::type* =0) + { + path_traits::dispatch(source, m_pathname, codecvt()); + } + + // Overloads for the operating system API's native character type. Rationale: + // - Avoids use of codecvt() for native value_type strings. This limits the + // impact of locale("") initialization failures on POSIX systems to programs + // that actually depend on locale(""). It further ensures that exceptions thrown + // as a result of such failues occur after main() has started, so can be caught. + // This is a partial resolution of tickets 4688, 5100, and 5289. + // - A slight optimization for a common use case, particularly on POSIX since + // value_type is char and that is the most common useage. + path(const value_type* s) : m_pathname(s) {} + path(const std::basic_string& s) : m_pathname(s) {} + + template + path(Source const& source, const codecvt_type& cvt) + // see [defaults] note above explaining why codecvt() default arguments are not used + { + path_traits::dispatch(source, m_pathname, cvt); + } + + template + path(InputIterator begin, InputIterator end) + { + if (begin != end) + { + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, codecvt()); + } + } + + template + path(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + if (begin != end) + { + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + } + } + + // ----- assignments ----- + + path& operator=(const path& p) + { + m_pathname = p.m_pathname; + return *this; + } + + path& operator=(const value_type* ptr) // required in case ptr overlaps *this + { + m_pathname = ptr; + return *this; + } + + template + typename boost::enable_if::type>, path&>::type + operator=(Source const& source) + { + m_pathname.clear(); + path_traits::dispatch(source, m_pathname, codecvt()); + return *this; + } + + path& assign(const value_type* ptr, const codecvt_type&) // required in case ptr overlaps *this + { + m_pathname = ptr; + return *this; + } + + template + path& assign(Source const& source, const codecvt_type& cvt) + { + m_pathname.clear(); + path_traits::dispatch(source, m_pathname, cvt); + return *this; + } + + template + path& assign(InputIterator begin, InputIterator end) + { + return assign(begin, end, codecvt()); + } + + template + path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + m_pathname.clear(); + if (begin != end) + { + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + } + return *this; + } + + // ----- appends ----- + + // if a separator is added, it is the preferred separator for the platform; + // slash for POSIX, backslash for Windows + + path& operator/=(const path& p); + + path& operator/=(const value_type* ptr); + + template + typename boost::enable_if::type>, path&>::type + operator/=(Source const& source) + { + return append(source, codecvt()); + } + + path& append(const value_type* ptr, const codecvt_type&) // required in case ptr overlaps *this + { + this->operator/=(ptr); + return *this; + } + + template + path& append(Source const& source, const codecvt_type& cvt); + + template + path& append(InputIterator begin, InputIterator end) + { + return append(begin, end, codecvt()); + } + + template + path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt); + + // ----- modifiers ----- + + void clear() { m_pathname.clear(); } + path& make_preferred() +# ifdef BOOST_POSIX_API + { return *this; } // POSIX no effect +# else // BOOST_WINDOWS_API + ; // change slashes to backslashes +# endif + path& remove_filename(); + path& replace_extension(const path& new_extension = path()); + void swap(path& rhs) { m_pathname.swap(rhs.m_pathname); } + + // ----- observers ----- + + // For operating systems that format file paths differently than directory + // paths, return values from observers are formatted as file names unless there + // is a trailing separator, in which case returns are formatted as directory + // paths. POSIX and Windows make no such distinction. + + // Implementations are permitted to return const values or const references. + + // The string or path returned by an observer are specified as being formatted + // as "native" or "generic". + // + // For POSIX, these are all the same format; slashes and backslashes are as input and + // are not modified. + // + // For Windows, native: as input; slashes and backslashes are not modified; + // this is the format of the internally stored string. + // generic: backslashes are converted to slashes + + // ----- native format observers ----- + + const string_type& native() const { return m_pathname; } // Throws: nothing + const value_type* c_str() const { return m_pathname.c_str(); } // Throws: nothing + + template + String string() const; + + template + String string(const codecvt_type& cvt) const; + +# ifdef BOOST_WINDOWS_API + const std::string string() const { return string(codecvt()); } + const std::string string(const codecvt_type& cvt) const + { + std::string tmp; + if (!m_pathname.empty()) + path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(), + tmp, cvt); + return tmp; + } + + // string_type is std::wstring, so there is no conversion + const std::wstring& wstring() const { return m_pathname; } + const std::wstring& wstring(const codecvt_type&) const { return m_pathname; } + +# else // BOOST_POSIX_API + // string_type is std::string, so there is no conversion + const std::string& string() const { return m_pathname; } + const std::string& string(const codecvt_type&) const { return m_pathname; } + + const std::wstring wstring() const { return wstring(codecvt()); } + const std::wstring wstring(const codecvt_type& cvt) const + { + std::wstring tmp; + if (!m_pathname.empty()) + path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(), + tmp, cvt); + return tmp; + } + +# endif + + // ----- generic format observers ----- + + template + String generic_string() const; + + template + String generic_string(const codecvt_type& cvt) const; + +# ifdef BOOST_WINDOWS_API + const std::string generic_string() const { return generic_string(codecvt()); } + const std::string generic_string(const codecvt_type& cvt) const; + const std::wstring generic_wstring() const; + const std::wstring generic_wstring(const codecvt_type&) const { return generic_wstring(); }; + +# else // BOOST_POSIX_API + // On POSIX-like systems, the generic format is the same as the native format + const std::string& generic_string() const { return m_pathname; } + const std::string& generic_string(const codecvt_type&) const { return m_pathname; } + const std::wstring generic_wstring() const { return wstring(codecvt()); } + const std::wstring generic_wstring(const codecvt_type& cvt) const { return wstring(cvt); } + +# endif + + // ----- decomposition ----- + + path root_path() const; + path root_name() const; // returns 0 or 1 element path + // even on POSIX, root_name() is non-empty() for network paths + path root_directory() const; // returns 0 or 1 element path + path relative_path() const; + path parent_path() const; + path filename() const; // returns 0 or 1 element path + path stem() const; // returns 0 or 1 element path + path extension() const; // returns 0 or 1 element path + + // ----- query ----- + + bool empty() const { return m_pathname.empty(); } // name consistent with std containers + bool has_root_path() const { return has_root_directory() || has_root_name(); } + bool has_root_name() const { return !root_name().empty(); } + bool has_root_directory() const { return !root_directory().empty(); } + bool has_relative_path() const { return !relative_path().empty(); } + bool has_parent_path() const { return !parent_path().empty(); } + bool has_filename() const { return !m_pathname.empty(); } + bool has_stem() const { return !stem().empty(); } + bool has_extension() const { return !extension().empty(); } + bool is_absolute() const + { +# ifdef BOOST_WINDOWS_API + return has_root_name() && has_root_directory(); +# else + return has_root_directory(); +# endif + } + bool is_relative() const { return !is_absolute(); } + + // ----- iterators ----- + + class iterator; + typedef iterator const_iterator; + + iterator begin() const; + iterator end() const; + + // ----- static members ----- + + // ----- imbue ----- + + static std::locale imbue(const std::locale& loc); + + // ----- codecvt ----- + + static const codecvt_type& codecvt() + { + return *wchar_t_codecvt_facet(); + } + + // ----- deprecated functions ----- + +# if defined(BOOST_FILESYSTEM_DEPRECATED) && defined(BOOST_FILESYSTEM_NO_DEPRECATED) +# error both BOOST_FILESYSTEM_DEPRECATED and BOOST_FILESYSTEM_NO_DEPRECATED are defined +# endif + +# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) + // recently deprecated functions supplied by default + path& normalize() { return m_normalize(); } + path& remove_leaf() { return remove_filename(); } + path leaf() const { return filename(); } + path branch_path() const { return parent_path(); } + bool has_leaf() const { return !m_pathname.empty(); } + bool has_branch_path() const { return !parent_path().empty(); } + bool is_complete() const { return is_absolute(); } +# endif + +# if defined(BOOST_FILESYSTEM_DEPRECATED) + // deprecated functions with enough signature or semantic changes that they are + // not supplied by default + const std::string file_string() const { return string(); } + const std::string directory_string() const { return string(); } + const std::string native_file_string() const { return string(); } + const std::string native_directory_string() const { return string(); } + const string_type external_file_string() const { return native(); } + const string_type external_directory_string() const { return native(); } + + // older functions no longer supported + //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);} + //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(); +# endif + +//--------------------------------------------------------------------------------------// +// class path private members // +//--------------------------------------------------------------------------------------// + + private: +# if defined(_MSC_VER) +# pragma warning(push) // Save warning settings +# pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>' +# endif // needs to have dll-interface... +/* + m_pathname has the type, encoding, and format required by the native + operating system. Thus for POSIX and Windows there is no conversion for + passing m_pathname.c_str() to the O/S API or when obtaining a path from the + O/S API. POSIX encoding is unspecified other than for dot and slash + characters; POSIX just treats paths as a sequence of bytes. Windows + encoding is UCS-2 or UTF-16 depending on the version. +*/ + string_type m_pathname; // Windows: as input; backslashes NOT converted to slashes, + // slashes NOT converted to backslashes +# if defined(_MSC_VER) +# pragma warning(pop) // restore warning settings. +# endif + + string_type::size_type m_append_separator_if_needed(); + // Returns: If separator is to be appended, m_pathname.size() before append. Otherwise 0. + // Note: An append is never performed if size()==0, so a returned 0 is unambiguous. + + void m_erase_redundant_separator(string_type::size_type sep_pos); + string_type::size_type m_parent_path_end() const; + + path& m_normalize(); + + // Was qualified; como433beta8 reports: + // warning #427-D: qualified name is not allowed in member declaration + friend class iterator; + friend bool operator<(const path& lhs, const path& rhs); + + // see path::iterator::increment/decrement comment below + static void m_path_iterator_increment(path::iterator & it); + static void m_path_iterator_decrement(path::iterator & it); + + static const codecvt_type *& wchar_t_codecvt_facet(); + + }; // class path + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + typedef path wpath; +# endif + + //------------------------------------------------------------------------------------// + // class path::iterator // + //------------------------------------------------------------------------------------// + + class path::iterator + : public boost::iterator_facade< + path::iterator, + path const, + boost::bidirectional_traversal_tag > + { + private: + friend class boost::iterator_core_access; + friend class boost::filesystem3::path; + friend void m_path_iterator_increment(path::iterator & it); + friend void m_path_iterator_decrement(path::iterator & it); + + const path& dereference() const { return m_element; } + + bool equal(const iterator & rhs) const + { + return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos; + } + + // iterator_facade derived classes don't seem to like implementations in + // separate translation unit dll's, so forward to class path static members + void increment() { m_path_iterator_increment(*this); } + void decrement() { m_path_iterator_decrement(*this); } + + path m_element; // current element + const path * m_path_ptr; // path being iterated over + string_type::size_type m_pos; // position of name in + // m_path_ptr->m_pathname. The + // end() iterator is indicated by + // m_pos == m_path_ptr->m_pathname.size() + }; // path::iterator + + //------------------------------------------------------------------------------------// + // // + // non-member functions // + // // + //------------------------------------------------------------------------------------// + + // std::lexicographical_compare would infinately recurse because path iterators + // yield paths, so provide a path aware version + inline bool lexicographical_compare(path::iterator first1, path::iterator last1, + path::iterator first2, path::iterator last2) + { + for (; first1 != last1 && first2 != last2 ; ++first1, ++first2) + { + if (first1->native() < first2->native()) return true; + if (first2->native() < first1->native()) return false; + } + return first1 == last1 && first2 != last2; + } + + inline bool operator<(const path& lhs, const path& rhs) + { + return lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); + } + + inline bool operator<=(const path& lhs, const path& rhs) { return !(rhs < lhs); } + inline bool operator> (const path& lhs, const path& rhs) { return rhs < lhs; } + inline bool operator>=(const path& lhs, const path& rhs) { return !(lhs < rhs); } + + // equality operators act as if comparing generic format strings, to achieve the + // effect of lexicographical_compare element by element compare. + // operator==() efficiency is a concern; a user reported the original version 2 + // !(lhs < rhs) && !(rhs < lhs) implementation caused a serious performance problem + // for a map of 10,000 paths. + +# ifdef BOOST_WINDOWS_API + inline bool operator==(const path& lhs, const path::value_type* rhs) + { + const path::value_type* l(lhs.c_str()); + while ((*l == *rhs || (*l == L'\\' && *rhs == L'/') || (*l == L'/' && *rhs == L'\\')) + && *l) { ++l; ++rhs; } + return *l == *rhs; + } + inline bool operator==(const path& lhs, const path& rhs) { return lhs == rhs.c_str(); } + inline bool operator==(const path& lhs, const path::string_type& rhs) { return lhs == rhs.c_str(); } + inline bool operator==(const path::string_type& lhs, const path& rhs) { return rhs == lhs.c_str(); } + inline bool operator==(const path::value_type* lhs, const path& rhs) { return rhs == lhs; } + + inline std::size_t hash_value(const path& x) + { + std::size_t seed = 0; + for(const path::value_type* it = x.c_str(); *it; ++it) + hash_combine(seed, *it == '/' ? L'\\' : *it); + return seed; + } +# else // BOOST_POSIX_API + inline bool operator==(const path& lhs, const path& rhs) { return lhs.native() == rhs.native(); } + inline bool operator==(const path& lhs, const path::string_type& rhs) { return lhs.native() == rhs; } + inline bool operator==(const path& lhs, const path::value_type* rhs) { return lhs.native() == rhs; } + inline bool operator==(const path::string_type& lhs, const path& rhs) { return lhs == rhs.native(); } + inline bool operator==(const path::value_type* lhs, const path& rhs) { return lhs == rhs.native(); } + + inline std::size_t hash_value(const path& x) + { + return hash_range(x.native().begin(), x.native().end()); + } +# endif + + inline bool operator!=(const path& lhs, const path& rhs) { return !(lhs == rhs); } + inline bool operator!=(const path& lhs, const path::string_type& rhs) { return !(lhs == rhs); } + inline bool operator!=(const path& lhs, const path::value_type* rhs) { return !(lhs == rhs); } + inline bool operator!=(const path::string_type& lhs, const path& rhs) { return !(lhs == rhs); } + inline bool operator!=(const path::value_type* lhs, const path& rhs) { return !(lhs == rhs); } + + inline void swap(path& lhs, path& rhs) { lhs.swap(rhs); } + + inline path operator/(const path& lhs, const path& rhs) { return path(lhs) /= rhs; } + + // inserters and extractors + // use boost::io::quoted() to handle spaces in paths + // use '&' as escape character to ease use for Windows paths + + template + inline std::basic_ostream& + operator<<(std::basic_ostream& os, const path& p) + { + return os + << boost::io::quoted(p.template string >(), static_cast('&')); + } + + template + inline std::basic_istream& + operator>>(std::basic_istream& is, path& p) + { + std::basic_string str; + is >> boost::io::quoted(str, static_cast('&')); + p = str; + return is; + } + + // name_checks + + // These functions are holdovers from version 1. It isn't clear they have much + // usefulness, or how to generalize them for later versions. + + 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); + +//--------------------------------------------------------------------------------------// +// class path member template implementation // +//--------------------------------------------------------------------------------------// + + template + path& path::append(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + if (begin == end) + return *this; + string_type::size_type sep_pos(m_append_separator_if_needed()); + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + if (sep_pos) + m_erase_redundant_separator(sep_pos); + return *this; + } + + template + path& path::append(Source const& source, const codecvt_type& cvt) + { + if (path_traits::empty(source)) + return *this; + string_type::size_type sep_pos(m_append_separator_if_needed()); + path_traits::dispatch(source, m_pathname, cvt); + if (sep_pos) + m_erase_redundant_separator(sep_pos); + return *this; + } + +//--------------------------------------------------------------------------------------// +// class path member template specializations // +//--------------------------------------------------------------------------------------// + + template <> inline + std::string path::string() const + { return string(); } + + template <> inline + std::wstring path::string() const + { return wstring(); } + + template <> inline + std::string path::string(const codecvt_type& cvt) const + { return string(cvt); } + + template <> inline + std::wstring path::string(const codecvt_type& cvt) const + { return wstring(cvt); } + + template <> inline + std::string path::generic_string() const + { return generic_string(); } + + template <> inline + std::wstring path::generic_string() const + { return generic_wstring(); } + + template <> inline + std::string path::generic_string(const codecvt_type& cvt) const + { return generic_string(cvt); } + + template <> inline + std::wstring path::generic_string(const codecvt_type& cvt) const + { return generic_wstring(cvt); } + + +} // namespace filesystem3 +} // namespace boost + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + using filesystem3::path; +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + using filesystem3::wpath; +# endif + using filesystem3::lexicographical_compare; + using filesystem3::portable_posix_name; + using filesystem3::windows_name; + using filesystem3::portable_name; + using filesystem3::portable_directory_name; + using filesystem3::portable_file_name; + using filesystem3::native; + using filesystem3::swap; + using filesystem3::operator<; + using filesystem3::operator==; + using filesystem3::operator!=; + using filesystem3::operator>; + using filesystem3::operator<=; + using filesystem3::operator>=; + using filesystem3::operator/; + using filesystem3::operator<<; + using filesystem3::operator>>; + } +} + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas + +#endif // BOOST_FILESYSTEM_PATH_HPP diff --git a/external/boost/filesystem/v3/path_traits.hpp b/external/boost/filesystem/v3/path_traits.hpp new file mode 100644 index 0000000..13f1b20 --- /dev/null +++ b/external/boost/filesystem/v3/path_traits.hpp @@ -0,0 +1,247 @@ +// filesystem path_traits.hpp --------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#ifndef BOOST_FILESYSTEM_PATH_TRAITS_HPP +#define BOOST_FILESYSTEM_PATH_TRAITS_HPP + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include +#include +#include +#include +#include +#include // for mbstate_t +#include +#include +#include +#include +#include +#include +// #include //**** comment me out **** + +#include // must be the last #include + +namespace boost { namespace filesystem3 { + + BOOST_FILESYSTEM_DECL const system::error_category& codecvt_error_category(); + // uses std::codecvt_base::result used for error codes: + // + // ok: Conversion successful. + // partial: Not all source characters converted; one or more additional source + // characters are needed to produce the final target character, or the + // size of the target intermediate buffer was too small to hold the result. + // error: A character in the source could not be converted to the target encoding. + // noconv: The source and target characters have the same type and encoding, so no + // conversion was necessary. + + class directory_entry; + +namespace path_traits { + + typedef std::codecvt codecvt_type; + + // is_pathable type trait; allows disabling over-agressive class path member templates + + template + struct is_pathable { static const bool value = false; }; + + template<> struct is_pathable { static const bool value = true; }; + template<> struct is_pathable { static const bool value = true; }; + template<> struct is_pathable { static const bool value = true; }; + template<> struct is_pathable { static const bool value = true; }; + template<> struct is_pathable { static const bool value = true; }; + template<> struct is_pathable { static const bool value = true; }; + template<> struct is_pathable > { static const bool value = true; }; + template<> struct is_pathable > { static const bool value = true; }; + template<> struct is_pathable > { static const bool value = true; }; + template<> struct is_pathable > { static const bool value = true; }; + template<> struct is_pathable { static const bool value = true; }; + + // Pathable empty + + template inline + // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for + // conforming compilers. Replace by plain "bool" at some future date (2012?) + typename boost::disable_if, bool>::type + empty(const Container & c) + { return c.begin() == c.end(); } + + template inline + bool empty(T * const & c_str) + { + BOOST_ASSERT(c_str); + return !*c_str; + } + + template inline + bool empty(T (&)[N]) + { return N <= 1; } + + // value types differ ---------------------------------------------------------------// + // + // A from_end argument of 0 is less efficient than a known end, so use only if needed + + BOOST_FILESYSTEM_DECL + void convert(const char* from, + const char* from_end, // 0 for null terminated MBCS + std::wstring & to, + const codecvt_type& cvt); + + BOOST_FILESYSTEM_DECL + void convert(const wchar_t* from, + const wchar_t* from_end, // 0 for null terminated MBCS + std::string & to, + const codecvt_type& cvt); + + inline + void convert(const char* from, + std::wstring & to, + const codecvt_type& cvt) + { + BOOST_ASSERT(from); + convert(from, 0, to, cvt); + } + + inline + void convert(const wchar_t* from, + std::string & to, + const codecvt_type& cvt) + { + BOOST_ASSERT(from); + convert(from, 0, to, cvt); + } + + // value types same -----------------------------------------------------------------// + + // char + + inline + void convert(const char* from, const char* from_end, std::string & to, + const codecvt_type&) + { + BOOST_ASSERT(from); + BOOST_ASSERT(from_end); + to.append(from, from_end); + } + + inline + void convert(const char* from, + std::string & to, + const codecvt_type&) + { + BOOST_ASSERT(from); + to += from; + } + + // wchar_t + + inline + void convert(const wchar_t* from, const wchar_t* from_end, std::wstring & to, + const codecvt_type&) + { + BOOST_ASSERT(from); + BOOST_ASSERT(from_end); + to.append(from, from_end); + } + + inline + void convert(const wchar_t* from, + std::wstring & to, + const codecvt_type&) + { + BOOST_ASSERT(from); + to += from; + } + + // Source dispatch -----------------------------------------------------------------// + + // contiguous containers + template inline + void dispatch(const std::string& c, U& to, const codecvt_type& cvt) + { + if (c.size()) + convert(&*c.begin(), &*c.begin() + c.size(), to, cvt); + } + template inline + void dispatch(const std::wstring& c, U& to, const codecvt_type& cvt) + { + if (c.size()) + convert(&*c.begin(), &*c.begin() + c.size(), to, cvt); + } + template inline + void dispatch(const std::vector& c, U& to, const codecvt_type& cvt) + { + if (c.size()) + convert(&*c.begin(), &*c.begin() + c.size(), to, cvt); + } + template inline + void dispatch(const std::vector& c, U& to, const codecvt_type& cvt) + { + if (c.size()) + convert(&*c.begin(), &*c.begin() + c.size(), to, cvt); + } + + // non-contiguous containers + template inline + // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for + // conforming compilers. Replace by plain "void" at some future date (2012?) + typename boost::disable_if, void>::type + dispatch(const Container & c, U& to, const codecvt_type& cvt) + { + if (c.size()) + { + std::basic_string s(c.begin(), c.end()); + convert(s.c_str(), s.c_str()+s.size(), to, cvt); + } + } + + // c_str + template inline + void dispatch(T * const & c_str, U& to, const codecvt_type& cvt) + { +// std::cout << "dispatch() const T *\n"; + BOOST_ASSERT(c_str); + convert(c_str, to, cvt); + } + + // Note: there is no dispatch on C-style arrays because the array may + // contain a string smaller than the array size. + + BOOST_FILESYSTEM_DECL + void dispatch(const directory_entry & de, +# ifdef BOOST_WINDOWS_API + std::wstring & to, +# else + std::string & to, +# endif + const codecvt_type&); + + +}}} // namespace boost::filesystem::path_traits + +//----------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + using filesystem3::codecvt_error_category; +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# endif + } +} + +#include // pops abi_prefix.hpp pragmas + +#endif // BOOST_FILESYSTEM_PATH_TRAITS_HPP diff --git a/external/boost/format.hpp b/external/boost/format.hpp new file mode 100644 index 0000000..73464a8 --- /dev/null +++ b/external/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 +#include +#include +#include + +#ifndef BOOST_NO_STD_LOCALE +#include +#endif + +// *** Compatibility framework +#include + +#ifdef BOOST_NO_LOCALE_ISIDIGIT +#include // we'll use the non-locale 's std::isdigit(int) +#endif + +// **** Forward declarations ---------------------------------- +#include // basic_format, and other frontends +#include // misc forward declarations for internal use + +// **** Auxiliary structs (stream_format_state , and format_item ) +#include + +// **** Format class interface -------------------------------- +#include + +// **** Exceptions ----------------------------------------------- +#include + +// **** Implementation ------------------------------------------- +#include // member functions +#include // class for grouping arguments +#include // argument-feeding functions +#include // format-string parsing (member-)functions + +// **** Implementation of the free functions ---------------------- +#include + + +// *** Undefine 'local' macros : +#include + +#endif // BOOST_FORMAT_HPP diff --git a/external/boost/format/alt_sstream.hpp b/external/boost/format/alt_sstream.hpp new file mode 100644 index 0000000..e236be3 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +namespace boost { + namespace io { + + template, + class Alloc=::std::allocator > + class basic_altstringbuf; + + template, + class Alloc=::std::allocator > + class basic_oaltstringstream; + + + template + class basic_altstringbuf + : public ::std::basic_streambuf + { + typedef ::std::basic_streambuf streambuf_t; + typedef typename CompatAlloc::compatible_type compat_allocator_type; + typedef typename CompatTraits::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 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( 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 basic_oaltstringstream + : private base_from_member< shared_ptr< basic_altstringbuf< Ch, Tr, Alloc> > >, + public ::std::basic_ostream + { + class No_Op { + // used as no-op deleter for (not-owner) shared_pointers + public: + template + const T & operator()(const T & arg) { return arg; } + }; + typedef ::std::basic_ostream stream_t; + typedef boost::base_from_member > > + pbase_type; + typedef ::std::basic_string string_type; + typedef typename string_type::size_type size_type; + typedef basic_altstringbuf stringbuf_t; + public: + typedef Alloc allocator_type; + basic_oaltstringstream() + : pbase_type(new stringbuf_t), stream_t(rdbuf()) + { } + basic_oaltstringstream(::boost::shared_ptr 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 + +#endif // include guard + diff --git a/external/boost/format/alt_sstream_impl.hpp b/external/boost/format/alt_sstream_impl.hpp new file mode 100644 index 0000000..9975e4f --- /dev/null +++ b/external/boost/format/alt_sstream_impl.hpp @@ -0,0 +1,313 @@ +// ---------------------------------------------------------------------------- +// 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 + void basic_altstringbuf:: + 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 + void basic_altstringbuf:: + str (const string_type& s) { + size_type sz=s.size(); + if(sz != 0 && mode_ & (::std::ios_base::in | ::std::ios_base::out) ) { +#ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC + void *vd_ptr = alloc_.allocate(sz, is_allocated_? eback() : 0); + Ch *new_ptr = static_cast(vd_ptr); +#else + Ch *new_ptr = alloc_.allocate(sz, is_allocated_? eback() : 0); +#endif + // 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(sz)); + if(gptr() == NULL) + streambuf_t::setg(new_ptr, NULL, new_ptr); + } + is_allocated_ = true; + } + else + dealloc(); + } + template + Ch* basic_altstringbuf:: + 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 + typename std::basic_string::size_type + basic_altstringbuf:: + size () const { + if(mode_ & ::std::ios_base::out && pptr()) + return static_cast(pend() - pbase()); + else if(mode_ & ::std::ios_base::in && gptr()) + return static_cast(egptr() - eback()); + else + return 0; + } + + template + typename std::basic_string::size_type + basic_altstringbuf:: + cur_size () const { + if(mode_ & ::std::ios_base::out && pptr()) + return static_cast( pptr() - pbase()); + else if(mode_ & ::std::ios_base::in && gptr()) + return static_cast( gptr() - eback()); + else + return 0; + } + + template + typename basic_altstringbuf::pos_type + basic_altstringbuf:: + 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(putend_ - gptr()); + else if(way == ::std::ios_base::beg) + off += static_cast(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(static_cast(off)); + if(which & ::std::ios_base::out && pptr() != NULL) + // update pptr to match gptr + streambuf_t::pbump(static_cast(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(putend_ - pptr()); + else if(way == ::std::ios_base::beg) + off += static_cast(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(static_cast(off)); + else + off = off_type(-1); + } + else // neither in nor out + off = off_type(-1); + return (pos_type(off)); + } + //- end seekoff(..) + + + template + typename basic_altstringbuf::pos_type + basic_altstringbuf:: + 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(eback() - gptr() + off)); + if(which & ::std::ios_base::out && pptr() != NULL) { + // update pptr to match gptr + streambuf_t::pbump(static_cast(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(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 + typename basic_altstringbuf::int_type + basic_altstringbuf:: + 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 + typename basic_altstringbuf::int_type + basic_altstringbuf:: + 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 + typename basic_altstringbuf::int_type + basic_altstringbuf:: + overflow (int_type meta) { +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4996) +#endif + 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::max)() + - add_size < new_size) ) + add_size /= 2; + if(0 < add_size) { + new_size += add_size; +#ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC + void *vdptr = alloc_.allocate(new_size, is_allocated_? oldptr : 0); + newptr = static_cast(vdptr); +#else + newptr = alloc_.allocate(new_size, is_allocated_? oldptr : 0); +#endif + } + + 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(pptr()-pbase()); + int gptr_count = static_cast(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; + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + } + // -end overflow(..) + + template + void basic_altstringbuf:: 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/external/boost/format/detail/compat_workarounds.hpp b/external/boost/format/detail/compat_workarounds.hpp new file mode 100644 index 0000000..8e51514 --- /dev/null +++ b/external/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 CompatTraits; + + // std::allocator 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 CompatAlloc; + } // N.S. io +}// N.S. boost + + +#include + // 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 +#endif + +#if !defined(BOOST_FORMAT_OSTREAM_DEFINED) +// workarounds-gcc-2.95 might already have included +#include +#endif + + + +namespace boost { + namespace io { + + // **** CompatTraits general definitions : ---------------------------- + template + class CompatTraits + { // general case : be transparent + public: + typedef Tr compatible_type; + }; + + // **** CompatAlloc general definitions : ----------------------------- + template + class CompatAlloc + { // general case : be transparent + public: + typedef Alloc compatible_type; + }; + + } //N.S. io +} // N.S. boost +#endif // include guard diff --git a/external/boost/format/detail/config_macros.hpp b/external/boost/format/detail/config_macros.hpp new file mode 100644 index 0000000..1f01b17 --- /dev/null +++ b/external/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 +#include + +// 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 +#include + +#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/external/boost/format/detail/msvc_disambiguater.hpp b/external/boost/format/detail/msvc_disambiguater.hpp new file mode 100644 index 0000000..f12e5e9 --- /dev/null +++ b/external/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 +#include + +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& os, group1 const& x, long) + { + os << group_head(x.a1_); + } + static void put_head(BOOST_IO_STD basic_ostream& os, T const& x, int) + { + } + template< typename U > + static void put_last(BOOST_IO_STD basic_ostream& os, group1 const& x, long) + { + os << group_last(x.a1_); + } + static void put_last(BOOST_IO_STD basic_ostream& os, T const& x, int) + { + os << x; + } +}; + +} // namespace detail +} // namespace io +} // namespace boost + +#endif // -BOOST_MSVC + +#endif // -BOOST_MSVC_DISAMBIGUATER_HPP diff --git a/external/boost/format/detail/unset_macros.hpp b/external/boost/format/detail/unset_macros.hpp new file mode 100644 index 0000000..b3ac47b --- /dev/null +++ b/external/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/external/boost/format/detail/workarounds_gcc-2_95.hpp b/external/boost/format/detail/workarounds_gcc-2_95.hpp new file mode 100644 index 0000000..8c49d42 --- /dev/null +++ b/external/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 where gcc only supplies foo. +// i.e : +// - basic_ios from ios +// - basic_ostream from ostream +// - basic_srteambuf 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 and others, so we need iostream. +#include +#define BOOST_FORMAT_OSTREAM_DEFINED + +#include +#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 char_traits; // no definition here, we will just use it as a tag. + + template + class basic_streambuf; + + template + class basic_streambuf : public streambuf { + }; + + template > + class basic_ios; + + template + class basic_ios : 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 basic_ostream; + + template + class basic_ostream : public basic_ios + { + public: + basic_ostream(streambuf * p) : basic_ios (p) {} + }; + +} // namespace std + + +namespace boost { + namespace io { + + + // ** CompatTraits gcc2.95 specialisations ---------------------------- + template + class CompatTraits< ::std::string_char_traits > + : public ::std::string_char_traits + { + 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(meta); } + static int_type + to_int_type(const char_type& ch) { + return static_cast(static_cast(ch) );} + static bool + eq_int_type(const int_type& left, const int_type& right) { + return left == right; } + static int_type + eof() { + return static_cast(EOF); + } + static int_type + not_eof(const int_type& meta) { + return (meta == eof()) ? 0 : meta; + } + }; + + template + class CompatTraits< ::std::char_traits > { + public: + typedef CompatTraits< ::std::string_char_traits > compatible_type; + }; + + // ** CompatAlloc gcc-2.95 specialisations --------------------------- + template<> + class CompatAlloc< ::std::alloc> + { + public: + typedef ::std::allocator compatible_type; + }; + + } // N.S. io +} // N.S. boost + + + + + +#endif // include guard + +#endif // if workaround diff --git a/external/boost/format/detail/workarounds_stlport.hpp b/external/boost/format/detail/workarounds_stlport.hpp new file mode 100644 index 0000000..eb35dc1 --- /dev/null +++ b/external/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/external/boost/format/exceptions.hpp b/external/boost/format/exceptions.hpp new file mode 100644 index 0000000..9b2de83 --- /dev/null +++ b/external/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 + + +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/external/boost/format/feed_args.hpp b/external/boost/format/feed_args.hpp new file mode 100644 index 0000000..53243dc --- /dev/null +++ b/external/boost/format/feed_args.hpp @@ -0,0 +1,277 @@ +// ---------------------------------------------------------------------------- +// 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 +#include +#include + +#include +#include +#include + +namespace boost { +namespace io { +namespace detail { + + template + void mk_str( std::basic_string & res, + const Ch * beg, + typename std::basic_string::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::size_type size_type; + res.resize(0); + if(w<=0 || static_cast(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(w-size-!!prefix_space); + std::streamsize n_after = 0, n_before = 0; + res.reserve(static_cast(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(static_cast(n_before), fill_char); + if(prefix_space) + res.append(1, prefix_space); + if (size) + res.append(beg, size); + if(n_after) res.append(static_cast(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 & os, const T& x ) { + disambiguater::put_head(os, x, 1L); + } + template< class Ch, class Tr, class T> inline + void put_last (BOOST_IO_STD basic_ostream & os, const T& x ) { + disambiguater::put_last(os, x, 1L); + } + +#else + + template< class Ch, class Tr, class T> inline + void put_head (BOOST_IO_STD basic_ostream &, const T& ) { + } + + template< class Ch, class Tr, class T> inline + void put_head( BOOST_IO_STD basic_ostream & os, const group1& 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 & os, const T& x ) { + os << x ; + } + + template< class Ch, class Tr, class T> inline + void put_last( BOOST_IO_STD basic_ostream & os, const group1& 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 &, T& ) { + } + + template< class Ch, class Tr, class T> inline + void put_last( BOOST_IO_STD basic_ostream & 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& specs, + typename basic_format::string_type& res, + typename basic_format::internal_streambuf_t & buf, + io::detail::locale_t *loc_p = NULL) + { +#ifdef BOOST_MSVC + // If std::min or std::max are already instantiated + // at this point then we get a blizzard of warning messages when we call + // those templates with std::size_t as arguments. Weird and very annoyning... +#pragma warning(push) +#pragma warning(disable:4267) +#endif + // does the actual conversion of x, with given params, into a string + // using the supplied stringbuf. + + typedef typename basic_format::string_type string_type; + typedef typename basic_format::format_item_t format_item_t; + typedef typename string_type::size_type size_type; + + basic_oaltstringstream 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(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(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 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(specs.truncate_), + buf.pcount() ); + + + if(static_cast(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 ? 1 : 0), tmp_size); + size_type i = prefix_space; + for(; i=tmp_size) i=prefix_space; + res.assign(tmp_beg, i); + std::streamsize d = w - static_cast(tmp_size); + BOOST_ASSERT(d>0); + res.append(static_cast( 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(w)); + BOOST_ASSERT(res.size() == static_cast(w)); + } + } + } + buf.clear_buffer(); +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + } // end- put(..) + + + template< class Ch, class Tr, class Alloc, class T> + void distribute (basic_format& 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 (x, self.items_[i], self.items_[i].res_, + self.buf_, boost::get_pointer(self.loc_) ); + } + } + } + + template + basic_format& + feed (basic_format& self, T x) { + if(self.dumped_) self.clear(); + distribute (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/external/boost/format/format_class.hpp b/external/boost/format/format_class.hpp new file mode 100644 index 0000000..4555e56 --- /dev/null +++ b/external/boost/format/format_class.hpp @@ -0,0 +1,168 @@ +// ---------------------------------------------------------------------------- +// 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 +#include + +#include // to store locale when needed + +#include +#include +#include +#include + +namespace boost { + + template + class basic_format + { + typedef typename io::CompatTraits::compatible_type compat_traits; + public: + typedef Ch CharT; // borland fails in operator% if we use Ch and Tr directly + typedef std::basic_string string_type; + typedef typename string_type::size_type size_type; + typedef io::detail::format_item format_item_t; + typedef io::basic_altstringbuf 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 + basic_format& operator%(const T& x) + { return io::detail::feed(*this,x); } + +#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST + template basic_format& operator%(T& x) + { return io::detail::feed(*this,x); } +#endif + +#if defined(__GNUC__) + // GCC can't handle anonymous enums without some help + // ** arguments passing ** // + basic_format& operator%(const int& x) + { return io::detail::feed(*this,x); } + +#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST + basic_format& operator%(int& x) + { return io::detail::feed(*this,x); } +#endif +#endif + + // The total number of arguments expected to be passed to the format objectt + int expected_args() const + { return num_args_; } + // The number of arguments currently bound (see bind_arg(..) ) + int bound_args() const; + // The number of arguments currently fed to the format object + int fed_args() const; + // The index (1-based) of the current argument (i.e. next to be formatted) + int cur_arg() const; + // The number of arguments still required to be fed + int remaining_args() const; // same as expected_args() - bound_args() - fed_args() + + + // ** object modifying **// + template + 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 + basic_format& modify_item(int itemN, T manipulator) + { return io::detail::modify_item_body (*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 + friend std::basic_ostream & + operator<<( std::basic_ostream & , + const basic_format& ); +#else + template + friend std::ostream & + operator<<( std::ostream & , + const basic_format& ); +#endif + + template + friend basic_format& + io::detail::feed (basic_format&, T); + + template friend + void io::detail::distribute (basic_format&, T); + + template friend + basic_format& + io::detail::modify_item_body (basic_format&, int, T); + + template friend + basic_format& + io::detail::bind_arg_body (basic_format&, int, const T&); + + private: +#endif + typedef io::detail::stream_format_state 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 items_; // each '%..' directive leads to a format_item + std::vector 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 loc_; + }; // class basic_format + +} // namespace boost + + +#endif // BOOST_FORMAT_CLASS_HPP diff --git a/external/boost/format/format_fwd.hpp b/external/boost/format/format_fwd.hpp new file mode 100644 index 0000000..be3228a --- /dev/null +++ b/external/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 +#include + +#include + +namespace boost { + + template , class Alloc = std::allocator > +#else + class Tr = std::string_char_traits, class Alloc = std::alloc > +#endif + class basic_format; + + typedef basic_format format; + +#if !defined(BOOST_NO_STD_WSTRING) && !defined(BOOST_NO_STD_WSTREAMBUF) \ + && !defined(BOOST_FORMAT_IGNORE_STRINGSTREAM) + typedef basic_format 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/external/boost/format/format_implementation.hpp b/external/boost/format/format_implementation.hpp new file mode 100644 index 0000000..2abb5c4 --- /dev/null +++ b/external/boost/format/format_implementation.hpp @@ -0,0 +1,329 @@ +// ---------------------------------------------------------------------------- +// 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 +#include +#include +#include +#include // std::swap + +namespace boost { + +// --- basic_format implementation -----------------------------------------// + + template< class Ch, class Tr, class Alloc> + basic_format:: basic_format(const Ch* s) + : style_(0), cur_arg_(0), num_args_(0), dumped_(false), + exceptions_(io::all_error_bits) + { + if( s) + parse( s ); + } + +#if !defined(BOOST_NO_STD_LOCALE) + template< class Ch, class Tr, class Alloc> + basic_format:: basic_format(const Ch* s, const std::locale & loc) + : style_(0), cur_arg_(0), num_args_(0), dumped_(false), + exceptions_(io::all_error_bits), loc_(loc) + { + if(s) parse( s ); + } + + template< class Ch, class Tr, class Alloc> + basic_format:: basic_format(const string_type& s, const std::locale & loc) + : style_(0), cur_arg_(0), num_args_(0), dumped_(false), + exceptions_(io::all_error_bits), loc_(loc) + { + parse(s); + } +#endif // ! BOOST_NO_STD_LOCALE + template< class Ch, class Tr, class Alloc> + io::detail::locale_t basic_format:: + getloc() const { + return loc_ ? loc_.get() : io::detail::locale_t(); + } + + template< class Ch, class Tr, class Alloc> + basic_format:: 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:: 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_(x.dumped_), + 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& basic_format:: + operator= (const basic_format& x) { + if(this == &x) + return *this; + (basic_format(x)).swap(*this); + return *this; + } + template< class Ch, class Tr, class Alloc> + void basic_format:: + 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:: exceptions() const { + return exceptions_; + } + + template< class Ch, class Tr, class Alloc> + unsigned char basic_format:: exceptions(unsigned char newexcept) { + unsigned char swp = exceptions_; + exceptions_ = newexcept; + return swp; + } + + template + void basic_format:: + make_or_reuse_data (std::size_t nbitems) { +#if !defined(BOOST_NO_STD_LOCALE) + Ch fill = ( BOOST_USE_FACET(std::ctype, 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 + } + prefix_.resize(0); + } + + template< class Ch, class Tr, class Alloc> + basic_format& basic_format:: + 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(bound_.size()) ); + + for(unsigned long i=0; i + basic_format& basic_format:: + clear_binds () { + // remove all binds, then clear() + bound_.resize(0); + clear(); + return *this; + } + + template< class Ch, class Tr, class Alloc> + basic_format& basic_format:: + 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> + int basic_format:: + bound_args() const { + if(bound_.size()==0) + return 0; + int n=0; + for(int i=0; i + int basic_format:: + fed_args() const { + if(bound_.size()==0) + return cur_arg_; + int n=0; + for(int i=0; i + int basic_format:: + cur_arg() const { + return cur_arg_+1; } + + template< class Ch, class Tr, class Alloc> + int basic_format:: + remaining_args() const { + if(bound_.size()==0) + return num_args_-cur_arg_; + int n=0; + for(int i=cur_arg_; i + typename basic_format::string_type + basic_format:: + 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(item.fmtstate_.width_) > res.size() ) + res.append( static_cast(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::size_type basic_format:: + size () const { +#ifdef BOOST_MSVC + // If std::min or std::max are already instantiated + // at this point then we get a blizzard of warning messages when we call + // those templates with std::size_t as arguments. Weird and very annoyning... +#pragma warning(push) +#pragma warning(disable:4267) +#endif + 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(item.fmtstate_.width_) ); + sz += item.appendix_.size(); + } + return sz; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + } + +namespace io { +namespace detail { + + template + basic_format& + bind_arg_body (basic_format& 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(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 an unbound arg : + BOOST_ASSERT( self.cur_arg_ >= self.num_args_ || ! self.bound_[self.cur_arg_]); + return self; + } + + template basic_format& + modify_item_body (basic_format& 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(self.items_.size() )) { + if( self.exceptions() & io::out_of_range_bit ) + boost::throw_exception(io::out_of_range(itemN, 1, static_cast(self.items_.size()) )); + else return self; + } + self.items_[itemN-1].fmtstate_. template apply_manip ( manipulator ); + return self; + } + +} // namespace detail +} // namespace io +} // namespace boost + + + +#endif // BOOST_FORMAT_IMPLEMENTATION_HPP diff --git a/external/boost/format/free_funcs.hpp b/external/boost/format/free_funcs.hpp new file mode 100644 index 0000000..3a51545 --- /dev/null +++ b/external/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 +#include + +namespace boost { + + template inline + std::basic_string str(const basic_format& 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 + std::basic_ostream & + operator<<( std::basic_ostream & os, + const basic_format& f) +#else + template + std::ostream & + operator<<( std::ostream & os, + const basic_format& f) +#endif + // effect: "return os << str(f);" but we can do it faster + { + typedef boost::basic_format 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 + + +namespace boost { +namespace io { + + +namespace detail { + + +// empty group, but useful even though. +struct group0 +{ + group0() {} +}; + +template +inline +BOOST_IO_STD basic_ostream& +operator << ( BOOST_IO_STD basic_ostream& os, + const group0& ) +{ + return os; +} + +template +struct group1 +{ + T1 a1_; + group1(T1 a1) + : a1_(a1) + {} +private: + group1& operator=(const group1&); +}; + +template +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group1& x) +{ + os << x.a1_; + return os; +} + + + + +template +struct group2 +{ + T1 a1_; + T2 a2_; + group2(T1 a1,T2 a2) + : a1_(a1),a2_(a2) + {} +private: + group2& operator=(const group2&); +}; + +template +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group2& x) +{ + os << x.a1_<< x.a2_; + return os; +} + +template +struct group3 +{ + T1 a1_; + T2 a2_; + T3 a3_; + group3(T1 a1,T2 a2,T3 a3) + : a1_(a1),a2_(a2),a3_(a3) + {} +private: + group3& operator=(const group3&); +}; + +template +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group3& x) +{ + os << x.a1_<< x.a2_<< x.a3_; + return os; +} + +template +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) + {} +private: + group4& operator=(const group4&); +}; + +template +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group4& x) +{ + os << x.a1_<< x.a2_<< x.a3_<< x.a4_; + return os; +} + +template +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 +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group5& x) +{ + os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_; + return os; +} + +template +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 +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group6& x) +{ + os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_; + return os; +} + +template +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 +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group7& x) +{ + os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_; + return os; +} + +template +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 +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group8& x) +{ + os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_; + return os; +} + +template +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 +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group9& x) +{ + os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_; + return os; +} + +template +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 +inline +BOOST_IO_STD basic_ostream& +operator << (BOOST_IO_STD basic_ostream& os, + const group10& 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 +inline +group1 +group_head( group2 const& x) +{ + return group1 (x.a1_); +} + +template +inline +group1 +group_last( group2 const& x) +{ + return group1 (x.a2_); +} + + + +template +inline +group2 +group_head( group3 const& x) +{ + return group2 (x.a1_,x.a2_); +} + +template +inline +group1 +group_last( group3 const& x) +{ + return group1 (x.a3_); +} + + + +template +inline +group3 +group_head( group4 const& x) +{ + return group3 (x.a1_,x.a2_,x.a3_); +} + +template +inline +group1 +group_last( group4 const& x) +{ + return group1 (x.a4_); +} + + + +template +inline +group4 +group_head( group5 const& x) +{ + return group4 (x.a1_,x.a2_,x.a3_,x.a4_); +} + +template +inline +group1 +group_last( group5 const& x) +{ + return group1 (x.a5_); +} + + + +template +inline +group5 +group_head( group6 const& x) +{ + return group5 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_); +} + +template +inline +group1 +group_last( group6 const& x) +{ + return group1 (x.a6_); +} + + + +template +inline +group6 +group_head( group7 const& x) +{ + return group6 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_); +} + +template +inline +group1 +group_last( group7 const& x) +{ + return group1 (x.a7_); +} + + + +template +inline +group7 +group_head( group8 const& x) +{ + return group7 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_); +} + +template +inline +group1 +group_last( group8 const& x) +{ + return group1 (x.a8_); +} + + + +template +inline +group8 +group_head( group9 const& x) +{ + return group8 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_); +} + +template +inline +group1 +group_last( group9 const& x) +{ + return group1 (x.a9_); +} + + + +template +inline +group9 +group_head( group10 const& x) +{ + return group9 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_,x.a9_); +} + +template +inline +group1 +group_last( group10 const& x) +{ + return group1 (x.a10_); +} + + + + + +} // namespace detail + + + +// helper functions + + +inline detail::group1< detail::group0 > +group() { return detail::group1< detail::group0 > ( detail::group0() ); } + +template +inline +detail::group1< detail::group2 > + group(T1 a1, Var const& var) +{ + return detail::group1< detail::group2 > + ( detail::group2 + (a1, var) + ); +} + +template +inline +detail::group1< detail::group3 > + group(T1 a1,T2 a2, Var const& var) +{ + return detail::group1< detail::group3 > + ( detail::group3 + (a1,a2, var) + ); +} + +template +inline +detail::group1< detail::group4 > + group(T1 a1,T2 a2,T3 a3, Var const& var) +{ + return detail::group1< detail::group4 > + ( detail::group4 + (a1,a2,a3, var) + ); +} + +template +inline +detail::group1< detail::group5 > + group(T1 a1,T2 a2,T3 a3,T4 a4, Var const& var) +{ + return detail::group1< detail::group5 > + ( detail::group5 + (a1,a2,a3,a4, var) + ); +} + +template +inline +detail::group1< detail::group6 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var const& var) +{ + return detail::group1< detail::group6 > + ( detail::group6 + (a1,a2,a3,a4,a5, var) + ); +} + +template +inline +detail::group1< detail::group7 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var const& var) +{ + return detail::group1< detail::group7 > + ( detail::group7 + (a1,a2,a3,a4,a5,a6, var) + ); +} + +template +inline +detail::group1< detail::group8 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var const& var) +{ + return detail::group1< detail::group8 > + ( detail::group8 + (a1,a2,a3,a4,a5,a6,a7, var) + ); +} + +template +inline +detail::group1< detail::group9 > + 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 > + ( detail::group9 + (a1,a2,a3,a4,a5,a6,a7,a8, var) + ); +} + +template +inline +detail::group1< detail::group10 > + 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 > + ( detail::group10 + (a1,a2,a3,a4,a5,a6,a7,a8,a9, var) + ); +} + + +#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST + +template +inline +detail::group1< detail::group2 > + group(T1 a1, Var& var) +{ + return detail::group1< detail::group2 > + ( detail::group2 + (a1, var) + ); +} + +template +inline +detail::group1< detail::group3 > + group(T1 a1,T2 a2, Var& var) +{ + return detail::group1< detail::group3 > + ( detail::group3 + (a1,a2, var) + ); +} + +template +inline +detail::group1< detail::group4 > + group(T1 a1,T2 a2,T3 a3, Var& var) +{ + return detail::group1< detail::group4 > + ( detail::group4 + (a1,a2,a3, var) + ); +} + +template +inline +detail::group1< detail::group5 > + group(T1 a1,T2 a2,T3 a3,T4 a4, Var& var) +{ + return detail::group1< detail::group5 > + ( detail::group5 + (a1,a2,a3,a4, var) + ); +} + +template +inline +detail::group1< detail::group6 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var& var) +{ + return detail::group1< detail::group6 > + ( detail::group6 + (a1,a2,a3,a4,a5, var) + ); +} + +template +inline +detail::group1< detail::group7 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var& var) +{ + return detail::group1< detail::group7 > + ( detail::group7 + (a1,a2,a3,a4,a5,a6, var) + ); +} + +template +inline +detail::group1< detail::group8 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var& var) +{ + return detail::group1< detail::group8 > + ( detail::group8 + (a1,a2,a3,a4,a5,a6,a7, var) + ); +} + +template +inline +detail::group1< detail::group9 > + group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var& var) +{ + return detail::group1< detail::group9 > + ( detail::group9 + (a1,a2,a3,a4,a5,a6,a7,a8, var) + ); +} + +template +inline +detail::group1< detail::group10 > + 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 > + ( detail::group10 + (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/external/boost/format/internals.hpp b/external/boost/format/internals.hpp new file mode 100644 index 0000000..b0d874a --- /dev/null +++ b/external/boost/format/internals.hpp @@ -0,0 +1,201 @@ +// ---------------------------------------------------------------------------- +// 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 +#include +#include +#include +#include +#include // 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 + struct stream_format_state + { + typedef BOOST_IO_STD basic_ios 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 + void apply_manip(T manipulator) //- modifies state by applying manipulator + { apply_manip_body( *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 loc_; + }; + + +//---- format_item ---------------------------------------------------------// + +// stores all parameters that can be specified in format strings + template + 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 basic_ios; + typedef detail::stream_format_state stream_format_state; + typedef ::std::basic_string 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::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 + void stream_format_state:: 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); +#else + (void) loc_default; // keep compiler quiet if we don't support locales +#endif + } + + template + void stream_format_state:: 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 + void apply_manip_body( stream_format_state& self, + T manipulator) { + // modify our params according to the manipulator + basic_oaltstringstream ss; + self.apply_on( ss ); + ss << manipulator; + self.set_by_stream( ss ); + } + + template inline + void stream_format_state:: 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 + void format_item:: + reset (Ch fill) { + argN_=argN_no_posit; truncate_ = max_streamsize(); pad_scheme_ =0; + res_.resize(0); appendix_.resize(0); + fmtstate_.reset(fill); + } + + template + void format_item:: + 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/external/boost/format/internals_fwd.hpp b/external/boost/format/internals_fwd.hpp new file mode 100644 index 0000000..e44eb3c --- /dev/null +++ b/external/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 +#include + + +namespace boost { +namespace io { + +namespace detail { + template struct stream_format_state; + template struct format_item; + + + // these functions were intended as methods, + // but MSVC have problems with template member functions : + // defined in format_implementation.hpp : + template + basic_format& + modify_item_body (basic_format& self, + int itemN, T manipulator); + + template + basic_format& + bind_arg_body (basic_format& self, + int argN, const T& val); + + // in internals.hpp : + template + void apply_manip_body (stream_format_state& self, + T manipulator); + + // argument feeding (defined in feed_args.hpp ) : + template + void distribute (basic_format& self, T x); + + template + basic_format& + feed (basic_format& self, T x); + +} // namespace detail + +} // namespace io +} // namespace boost + + +#endif // BOOST_FORMAT_INTERNAL_FWD_HPP diff --git a/external/boost/format/parsing.hpp b/external/boost/format/parsing.hpp new file mode 100644 index 0000000..b14ca82 --- /dev/null +++ b/external/boost/format/parsing.hpp @@ -0,0 +1,504 @@ +// ---------------------------------------------------------------------------- +// 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 +#include +#include +#include + + +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 + T& const_or_not(const T& x) { + return const_cast (x); + } +#else + template + const T& const_or_not(const T& x) { + return x; + } +#endif + + template inline + char wrap_narrow(const Facet& fac, Ch c, char deflt) { + return const_or_not(fac).narrow(c, deflt); + } + + template inline + bool wrap_isdigit(const Facet& fac, Ch c) { +#if ! defined( BOOST_NO_LOCALE_ISDIGIT ) + return fac.is(std::ctype::digit, c); +# else + (void) fac; // remove "unused parameter" warning + using namespace std; + return isdigit(c); +#endif + } + + template + 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 + 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 + 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 + bool parse_printf_directive(Iter & start, const Iter& last, + detail::format_item * fpar, + const Facet& fac, + std::size_t offset, unsigned char exceptions) + { + typedef typename basic_format::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>= last) { // empty directive : this is a trailing % + maybe_throw_exception(exceptions, start-start0 + offset, fstring_size); + return false; + } + + 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 + 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 { + ++num_items; + break; + } + } + 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 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 + basic_format& basic_format:: + parse (const string_type& buf) { + // parse the format-string + using namespace std; +#if !defined(BOOST_NO_STD_LOCALE) + const std::ctype & fac = BOOST_USE_FACET( std::ctype, getloc()); +#else + io::basic_oaltstringstream 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(cur_item) < items_.size() || cur_item==0); + + if(i1!=i0) { + io::detail::append_string(piece, buf, i0, i1); + 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/external/boost/function.hpp b/external/boost/function.hpp new file mode 100644 index 0000000..b72842b --- /dev/null +++ b/external/boost/function.hpp @@ -0,0 +1,66 @@ +// 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 // unary_function, binary_function + +#include +#include + +#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 + +// Older Visual Age C++ version do not handle the file iteration well +#if BOOST_WORKAROUND(__IBMCPP__, >= 500) && BOOST_WORKAROUND(__IBMCPP__, < 800) +# if BOOST_FUNCTION_MAX_ARGS >= 0 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 1 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 2 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 3 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 4 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 5 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 6 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 7 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 8 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 9 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 10 +# include +# endif +#else +// What is the '3' for? +# define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_FUNCTION_MAX_ARGS,)) +# include BOOST_PP_ITERATE() +# undef BOOST_PP_ITERATION_PARAMS_1 +#endif diff --git a/external/boost/function/detail/function_iterate.hpp b/external/boost/function/detail/function_iterate.hpp new file mode 100644 index 0000000..5370b36 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS + diff --git a/external/boost/function/detail/gen_maybe_include.pl b/external/boost/function/detail/gen_maybe_include.pl new file mode 100644 index 0000000..d062920 --- /dev/null +++ b/external/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 \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/external/boost/function/detail/maybe_include.hpp b/external/boost/function/detail/maybe_include.hpp new file mode 100644 index 0000000..92f71bb --- /dev/null +++ b/external/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 +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 1 +# ifndef BOOST_FUNCTION_1 +# define BOOST_FUNCTION_1 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 2 +# ifndef BOOST_FUNCTION_2 +# define BOOST_FUNCTION_2 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 3 +# ifndef BOOST_FUNCTION_3 +# define BOOST_FUNCTION_3 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 4 +# ifndef BOOST_FUNCTION_4 +# define BOOST_FUNCTION_4 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 5 +# ifndef BOOST_FUNCTION_5 +# define BOOST_FUNCTION_5 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 6 +# ifndef BOOST_FUNCTION_6 +# define BOOST_FUNCTION_6 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 7 +# ifndef BOOST_FUNCTION_7 +# define BOOST_FUNCTION_7 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 8 +# ifndef BOOST_FUNCTION_8 +# define BOOST_FUNCTION_8 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 9 +# ifndef BOOST_FUNCTION_9 +# define BOOST_FUNCTION_9 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 10 +# ifndef BOOST_FUNCTION_10 +# define BOOST_FUNCTION_10 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 11 +# ifndef BOOST_FUNCTION_11 +# define BOOST_FUNCTION_11 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 12 +# ifndef BOOST_FUNCTION_12 +# define BOOST_FUNCTION_12 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 13 +# ifndef BOOST_FUNCTION_13 +# define BOOST_FUNCTION_13 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 14 +# ifndef BOOST_FUNCTION_14 +# define BOOST_FUNCTION_14 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 15 +# ifndef BOOST_FUNCTION_15 +# define BOOST_FUNCTION_15 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 16 +# ifndef BOOST_FUNCTION_16 +# define BOOST_FUNCTION_16 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 17 +# ifndef BOOST_FUNCTION_17 +# define BOOST_FUNCTION_17 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 18 +# ifndef BOOST_FUNCTION_18 +# define BOOST_FUNCTION_18 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 19 +# ifndef BOOST_FUNCTION_19 +# define BOOST_FUNCTION_19 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 20 +# ifndef BOOST_FUNCTION_20 +# define BOOST_FUNCTION_20 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 21 +# ifndef BOOST_FUNCTION_21 +# define BOOST_FUNCTION_21 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 22 +# ifndef BOOST_FUNCTION_22 +# define BOOST_FUNCTION_22 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 23 +# ifndef BOOST_FUNCTION_23 +# define BOOST_FUNCTION_23 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 24 +# ifndef BOOST_FUNCTION_24 +# define BOOST_FUNCTION_24 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 25 +# ifndef BOOST_FUNCTION_25 +# define BOOST_FUNCTION_25 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 26 +# ifndef BOOST_FUNCTION_26 +# define BOOST_FUNCTION_26 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 27 +# ifndef BOOST_FUNCTION_27 +# define BOOST_FUNCTION_27 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 28 +# ifndef BOOST_FUNCTION_28 +# define BOOST_FUNCTION_28 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 29 +# ifndef BOOST_FUNCTION_29 +# define BOOST_FUNCTION_29 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 30 +# ifndef BOOST_FUNCTION_30 +# define BOOST_FUNCTION_30 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 31 +# ifndef BOOST_FUNCTION_31 +# define BOOST_FUNCTION_31 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 32 +# ifndef BOOST_FUNCTION_32 +# define BOOST_FUNCTION_32 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 33 +# ifndef BOOST_FUNCTION_33 +# define BOOST_FUNCTION_33 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 34 +# ifndef BOOST_FUNCTION_34 +# define BOOST_FUNCTION_34 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 35 +# ifndef BOOST_FUNCTION_35 +# define BOOST_FUNCTION_35 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 36 +# ifndef BOOST_FUNCTION_36 +# define BOOST_FUNCTION_36 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 37 +# ifndef BOOST_FUNCTION_37 +# define BOOST_FUNCTION_37 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 38 +# ifndef BOOST_FUNCTION_38 +# define BOOST_FUNCTION_38 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 39 +# ifndef BOOST_FUNCTION_39 +# define BOOST_FUNCTION_39 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 40 +# ifndef BOOST_FUNCTION_40 +# define BOOST_FUNCTION_40 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 41 +# ifndef BOOST_FUNCTION_41 +# define BOOST_FUNCTION_41 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 42 +# ifndef BOOST_FUNCTION_42 +# define BOOST_FUNCTION_42 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 43 +# ifndef BOOST_FUNCTION_43 +# define BOOST_FUNCTION_43 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 44 +# ifndef BOOST_FUNCTION_44 +# define BOOST_FUNCTION_44 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 45 +# ifndef BOOST_FUNCTION_45 +# define BOOST_FUNCTION_45 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 46 +# ifndef BOOST_FUNCTION_46 +# define BOOST_FUNCTION_46 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 47 +# ifndef BOOST_FUNCTION_47 +# define BOOST_FUNCTION_47 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 48 +# ifndef BOOST_FUNCTION_48 +# define BOOST_FUNCTION_48 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 49 +# ifndef BOOST_FUNCTION_49 +# define BOOST_FUNCTION_49 +# include +# endif +#elif BOOST_FUNCTION_NUM_ARGS == 50 +# ifndef BOOST_FUNCTION_50 +# define BOOST_FUNCTION_50 +# include +# endif +#else +# error Cannot handle Boost.Function objects that accept more than 50 arguments! +#endif diff --git a/external/boost/function/detail/prologue.hpp b/external/boost/function/detail/prologue.hpp new file mode 100644 index 0000000..53d0f05 --- /dev/null +++ b/external/boost/function/detail/prologue.hpp @@ -0,0 +1,26 @@ +// 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 +# include +# include // unary_function, binary_function +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif // BOOST_FUNCTION_PROLOGUE_HPP diff --git a/external/boost/function/function0.hpp b/external/boost/function/function0.hpp new file mode 100644 index 0000000..65a02e5 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function1.hpp b/external/boost/function/function1.hpp new file mode 100644 index 0000000..9089715 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function10.hpp b/external/boost/function/function10.hpp new file mode 100644 index 0000000..6562724 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function2.hpp b/external/boost/function/function2.hpp new file mode 100644 index 0000000..dc8bf97 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function3.hpp b/external/boost/function/function3.hpp new file mode 100644 index 0000000..19d1a49 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function4.hpp b/external/boost/function/function4.hpp new file mode 100644 index 0000000..f3349e2 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function5.hpp b/external/boost/function/function5.hpp new file mode 100644 index 0000000..a1305eb --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function6.hpp b/external/boost/function/function6.hpp new file mode 100644 index 0000000..1f60914 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function7.hpp b/external/boost/function/function7.hpp new file mode 100644 index 0000000..68542ed --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function8.hpp b/external/boost/function/function8.hpp new file mode 100644 index 0000000..cf2c376 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function9.hpp b/external/boost/function/function9.hpp new file mode 100644 index 0000000..590e088 --- /dev/null +++ b/external/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 +#undef BOOST_FUNCTION_NUM_ARGS diff --git a/external/boost/function/function_base.hpp b/external/boost/function/function_base.hpp new file mode 100644 index 0000000..78b7dd1 --- /dev/null +++ b/external/boost/function/function_base.hpp @@ -0,0 +1,910 @@ +// Boost.Function library + +// Copyright Douglas Gregor 2001-2006 +// Copyright Emil Dotchevski 2007 +// Use, modification and distribution is subject to the 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_NO_SFINAE +# include "boost/utility/enable_if.hpp" +#else +# include "boost/mpl/bool.hpp" +#endif +#include +#include + +#if defined(BOOST_MSVC) +# pragma warning( push ) +# pragma warning( disable : 4793 ) // complaint about native code generation +# pragma warning( disable : 4127 ) // "conditional expression is constant" +#endif + +// Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info. +#ifdef BOOST_NO_STD_TYPEINFO +// Embedded VC++ does not have type_info in namespace std +# define BOOST_FUNCTION_STD_NS +#else +# define BOOST_FUNCTION_STD_NS std +#endif + +// Borrowed from Boost.Python library: determines the cases where we +// need to use std::type_info::name to compare instead of operator==. +#if defined( BOOST_NO_TYPEID ) +# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y)) +#elif (defined(__GNUC__) && __GNUC__ >= 3) \ + || defined(_AIX) \ + || ( defined(__sgi) && defined(__host_mips)) +# include +# 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 !BOOST_WORKAROUND(__BORLANDC__, < 0x5A0) +# define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type) \ + typename ::boost::enable_if_c<(::boost::type_traits::ice_not< \ + (::boost::is_integral::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::value)>::value), \ + Type>::type +#endif + +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 + mutable void* obj_ptr; + + // For pointers to std::type_info objects + struct type_t { + // (get_functor_type_tag, check_functor_type_tag). + const detail::sp_typeinfo* type; + + // Whether the type is const-qualified. + bool const_qualified; + // Whether the type is volatile-qualified. + bool volatile_qualified; + } type; + + // 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; + + // For references to function objects. We explicitly keep + // track of the cv-qualifiers on the object referenced. + struct obj_ref_t { + mutable void* obj_ptr; + bool is_const_qualified; + bool is_volatile_qualified; + } obj_ref; + + // 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 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 struct function_return_type { typedef T type; }; + + template<> + struct function_return_type + { + typedef unusable type; + }; + + // The operation type to perform on the given functor/function pointer + enum functor_manager_operation_type { + clone_functor_tag, + move_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 + class get_function_tag + { + typedef typename mpl::if_c<(is_pointer::value), + function_ptr_tag, + function_obj_tag>::type ptr_or_obj_tag; + + typedef typename mpl::if_c<(is_member_pointer::value), + member_ptr_tag, + ptr_or_obj_tag>::type ptr_or_obj_or_mem_tag; + + typedef typename mpl::if_c<(is_reference_wrapper::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 + struct reference_manager + { + static inline void + manage(const function_buffer& in_buffer, function_buffer& out_buffer, + functor_manager_operation_type op) + { + switch (op) { + case clone_functor_tag: + out_buffer.obj_ref = in_buffer.obj_ref; + return; + + case move_functor_tag: + out_buffer.obj_ref = in_buffer.obj_ref; + in_buffer.obj_ref.obj_ptr = 0; + return; + + case destroy_functor_tag: + out_buffer.obj_ref.obj_ptr = 0; + return; + + case check_functor_type_tag: + { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; + + // Check whether we have the same type. We can add + // cv-qualifiers, but we can't take them away. + if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(F)) + && (!in_buffer.obj_ref.is_const_qualified + || out_buffer.type.const_qualified) + && (!in_buffer.obj_ref.is_volatile_qualified + || out_buffer.type.volatile_qualified)) + out_buffer.obj_ptr = in_buffer.obj_ref.obj_ptr; + else + out_buffer.obj_ptr = 0; + } + return; + + case get_functor_type_tag: + out_buffer.type.type = &BOOST_SP_TYPEID(F); + out_buffer.type.const_qualified = in_buffer.obj_ref.is_const_qualified; + out_buffer.type.volatile_qualified = in_buffer.obj_ref.is_volatile_qualified; + return; + } + } + }; + + /** + * Determine if boost::function can use the small-object + * optimization with the function object type F. + */ + template + struct function_allows_small_object_optimization + { + BOOST_STATIC_CONSTANT + (bool, + value = ((sizeof(F) <= sizeof(function_buffer) && + (alignment_of::value + % alignment_of::value == 0)))); + }; + + template + struct functor_wrapper: public F, public A + { + functor_wrapper( F f, A a ): + F(f), + A(a) + { + } + + functor_wrapper(const functor_wrapper& f) : + F(static_cast(f)), + A(static_cast(f)) + { + } + }; + + /** + * The functor_manager class contains a static function "manage" which + * can clone or destroy the given function/function object pointer. + */ + template + struct functor_manager_common + { + typedef Functor functor_type; + + // Function pointers + static inline void + manage_ptr(const function_buffer& in_buffer, function_buffer& out_buffer, + functor_manager_operation_type op) + { + if (op == clone_functor_tag) + out_buffer.func_ptr = in_buffer.func_ptr; + else if (op == move_functor_tag) { + out_buffer.func_ptr = in_buffer.func_ptr; + in_buffer.func_ptr = 0; + } else if (op == destroy_functor_tag) + out_buffer.func_ptr = 0; + else if (op == check_functor_type_tag) { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; + if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) + out_buffer.obj_ptr = &in_buffer.func_ptr; + else + out_buffer.obj_ptr = 0; + } else /* op == get_functor_type_tag */ { + out_buffer.type.type = &BOOST_SP_TYPEID(Functor); + out_buffer.type.const_qualified = false; + out_buffer.type.volatile_qualified = false; + } + } + + // Function objects that fit in the small-object buffer. + static inline void + manage_small(const function_buffer& in_buffer, function_buffer& out_buffer, + functor_manager_operation_type op) + { + if (op == clone_functor_tag || op == move_functor_tag) { + const functor_type* in_functor = + reinterpret_cast(&in_buffer.data); + new (reinterpret_cast(&out_buffer.data)) functor_type(*in_functor); + + if (op == move_functor_tag) { + functor_type* f = reinterpret_cast(&in_buffer.data); + (void)f; // suppress warning about the value of f not being used (MSVC) + f->~Functor(); + } + } else if (op == destroy_functor_tag) { + // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type. + functor_type* f = reinterpret_cast(&out_buffer.data); + (void)f; // suppress warning about the value of f not being used (MSVC) + f->~Functor(); + } else if (op == check_functor_type_tag) { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; + if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) + out_buffer.obj_ptr = &in_buffer.data; + else + out_buffer.obj_ptr = 0; + } else /* op == get_functor_type_tag */ { + out_buffer.type.type = &BOOST_SP_TYPEID(Functor); + out_buffer.type.const_qualified = false; + out_buffer.type.volatile_qualified = false; + } + } + }; + + template + struct functor_manager + { + private: + typedef Functor functor_type; + + // Function pointers + static inline void + manager(const function_buffer& in_buffer, function_buffer& out_buffer, + functor_manager_operation_type op, function_ptr_tag) + { + functor_manager_common::manage_ptr(in_buffer,out_buffer,op); + } + + // 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_) + { + functor_manager_common::manage_small(in_buffer,out_buffer,op); + } + + // 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_) + { + if (op == clone_functor_tag) { + // Clone the functor + // GCC 2.95.3 gets the CV qualifiers wrong here, so we + // can't do the static_cast that we should do. + // jewillco: Changing this to static_cast because GCC 2.95.3 is + // obsolete. + const functor_type* f = + static_cast(in_buffer.obj_ptr); + functor_type* new_f = new functor_type(*f); + out_buffer.obj_ptr = new_f; + } else if (op == move_functor_tag) { + out_buffer.obj_ptr = in_buffer.obj_ptr; + in_buffer.obj_ptr = 0; + } else if (op == destroy_functor_tag) { + /* Cast from the void pointer to the functor pointer type */ + functor_type* f = + static_cast(out_buffer.obj_ptr); + delete f; + out_buffer.obj_ptr = 0; + } else if (op == check_functor_type_tag) { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; + if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) + out_buffer.obj_ptr = in_buffer.obj_ptr; + else + out_buffer.obj_ptr = 0; + } else /* op == get_functor_type_tag */ { + out_buffer.type.type = &BOOST_SP_TYPEID(Functor); + out_buffer.type.const_qualified = false; + out_buffer.type.volatile_qualified = false; + } + } + + // 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::value)>()); + } + + // For member pointers, we use the small-object optimization buffer. + static inline void + manager(const function_buffer& in_buffer, function_buffer& out_buffer, + functor_manager_operation_type op, member_ptr_tag) + { + manager(in_buffer, out_buffer, op, mpl::true_()); + } + + 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::type tag_type; + switch (op) { + case get_functor_type_tag: + out_buffer.type.type = &BOOST_SP_TYPEID(functor_type); + out_buffer.type.const_qualified = false; + out_buffer.type.volatile_qualified = false; + return; + + default: + manager(in_buffer, out_buffer, op, tag_type()); + return; + } + } + }; + + template + struct functor_manager_a + { + private: + typedef Functor functor_type; + + // Function pointers + static inline void + manager(const function_buffer& in_buffer, function_buffer& out_buffer, + functor_manager_operation_type op, function_ptr_tag) + { + functor_manager_common::manage_ptr(in_buffer,out_buffer,op); + } + + // 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_) + { + functor_manager_common::manage_small(in_buffer,out_buffer,op); + } + + // 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_) + { + typedef functor_wrapper functor_wrapper_type; + typedef typename Allocator::template rebind::other + wrapper_allocator_type; + typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type; + + if (op == clone_functor_tag) { + // Clone the functor + // GCC 2.95.3 gets the CV qualifiers wrong here, so we + // can't do the static_cast that we should do. + const functor_wrapper_type* f = + static_cast(in_buffer.obj_ptr); + wrapper_allocator_type wrapper_allocator(static_cast(*f)); + wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1); + wrapper_allocator.construct(copy, *f); + + // Get back to the original pointer type + functor_wrapper_type* new_f = static_cast(copy); + out_buffer.obj_ptr = new_f; + } else if (op == move_functor_tag) { + out_buffer.obj_ptr = in_buffer.obj_ptr; + in_buffer.obj_ptr = 0; + } else if (op == destroy_functor_tag) { + /* Cast from the void pointer to the functor_wrapper_type */ + functor_wrapper_type* victim = + static_cast(in_buffer.obj_ptr); + wrapper_allocator_type wrapper_allocator(static_cast(*victim)); + wrapper_allocator.destroy(victim); + wrapper_allocator.deallocate(victim,1); + out_buffer.obj_ptr = 0; + } else if (op == check_functor_type_tag) { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; + if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) + out_buffer.obj_ptr = in_buffer.obj_ptr; + else + out_buffer.obj_ptr = 0; + } else /* op == get_functor_type_tag */ { + out_buffer.type.type = &BOOST_SP_TYPEID(Functor); + out_buffer.type.const_qualified = false; + out_buffer.type.volatile_qualified = false; + } + } + + // 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::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::type tag_type; + switch (op) { + case get_functor_type_tag: + out_buffer.type.type = &BOOST_SP_TYPEID(functor_type); + out_buffer.type.const_qualified = false; + out_buffer.type.volatile_qualified = false; + 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_) or against zero (when the + // last parameter is mpl::bool_). They are only necessary + // for compilers that don't support SFINAE. + template + bool + compare_equal(const Function& f, const Functor&, int, mpl::bool_) + { return f.empty(); } + + template + bool + compare_not_equal(const Function& f, const Functor&, int, + mpl::bool_) + { return !f.empty(); } + + template + bool + compare_equal(const Function& f, const Functor& g, long, + mpl::bool_) + { + if (const Functor* fp = f.template target()) + return function_equal(*fp, g); + else return false; + } + + template + bool + compare_equal(const Function& f, const reference_wrapper& g, + int, mpl::bool_) + { + if (const Functor* fp = f.template target()) + return fp == g.get_pointer(); + else return false; + } + + template + bool + compare_not_equal(const Function& f, const Functor& g, long, + mpl::bool_) + { + if (const Functor* fp = f.template target()) + return !function_equal(*fp, g); + else return true; + } + + template + bool + compare_not_equal(const Function& f, + const reference_wrapper& g, int, + mpl::bool_) + { + if (const Functor* fp = f.template target()) + 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 + { + 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 BOOST_SP_TYPEID(void) + if this is empty. */ + const detail::sp_typeinfo& target_type() const + { + if (!vtable) return BOOST_SP_TYPEID(void); + + detail::function::function_buffer type; + get_vtable()->manager(functor, type, detail::function::get_functor_type_tag); + return *type.type.type; + } + + template + Functor* target() + { + if (!vtable) return 0; + + detail::function::function_buffer type_result; + type_result.type.type = &BOOST_SP_TYPEID(Functor); + type_result.type.const_qualified = is_const::value; + type_result.type.volatile_qualified = is_volatile::value; + get_vtable()->manager(functor, type_result, + detail::function::check_functor_type_tag); + return static_cast(type_result.obj_ptr); + } + + template +#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.type.type = &BOOST_SP_TYPEID(Functor); + type_result.type.const_qualified = true; + type_result.type.volatile_qualified = is_volatile::value; + get_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 static_cast(type_result.obj_ptr); + } + + template + 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()) +#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 + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator==(Functor g) const + { + if (const Functor* fp = target()) + return function_equal(*fp, g); + else return false; + } + + template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator!=(Functor g) const + { + if (const Functor* fp = target()) + 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* get_vtable() const { + return reinterpret_cast( + reinterpret_cast(vtable) & ~static_cast(0x01)); + } + + bool has_trivial_copy_and_destroy() const { + return reinterpret_cast(vtable) & 0x01; + } + + 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 + inline bool operator==(const function_base& f, Functor g) + { + typedef mpl::bool_<(is_integral::value)> integral; + return detail::function::compare_equal(f, g, 0, integral()); + } + +template + inline bool operator==(Functor g, const function_base& f) + { + typedef mpl::bool_<(is_integral::value)> integral; + return detail::function::compare_equal(f, g, 0, integral()); + } + +template + inline bool operator!=(const function_base& f, Functor g) + { + typedef mpl::bool_<(is_integral::value)> integral; + return detail::function::compare_not_equal(f, g, 0, integral()); + } + +template + inline bool operator!=(Functor g, const function_base& f) + { + typedef mpl::bool_<(is_integral::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 + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator==(const function_base& f, Functor g) + { + if (const Functor* fp = f.template target()) + return function_equal(*fp, g); + else return false; + } + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator==(Functor g, const function_base& f) + { + if (const Functor* fp = f.template target()) + return function_equal(g, *fp); + else return false; + } + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator!=(const function_base& f, Functor g) + { + if (const Functor* fp = f.template target()) + return !function_equal(*fp, g); + else return true; + } + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator!=(Functor g, const function_base& f) + { + if (const Functor* fp = f.template target()) + return !function_equal(g, *fp); + else return true; + } +# endif + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator==(const function_base& f, reference_wrapper g) + { + if (const Functor* fp = f.template target()) + return fp == g.get_pointer(); + else return false; + } + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator==(reference_wrapper g, const function_base& f) + { + if (const Functor* fp = f.template target()) + return g.get_pointer() == fp; + else return false; + } + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator!=(const function_base& f, reference_wrapper g) + { + if (const Functor* fp = f.template target()) + return fp != g.get_pointer(); + else return true; + } + +template + BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool) + operator!=(reference_wrapper g, const function_base& f) + { + if (const Functor* fp = f.template target()) + 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 + +#if defined(BOOST_MSVC) +# pragma warning( pop ) +#endif + +#endif // BOOST_FUNCTION_BASE_HEADER diff --git a/external/boost/function/function_fwd.hpp b/external/boost/function/function_fwd.hpp new file mode 100644 index 0000000..fb318c9 --- /dev/null +++ b/external/boost/function/function_fwd.hpp @@ -0,0 +1,70 @@ +// Boost.Function library +// Copyright (C) Douglas Gregor 2008 +// +// Use, modification and distribution is subject to the 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_FWD_HPP +#define BOOST_FUNCTION_FWD_HPP +#include + +#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) \ + || !(defined(BOOST_STRICT_CONFIG) || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540) +# define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX +#endif + +namespace boost { + class bad_function_call; + +#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX) + // Preferred syntax + template class function; + + template + inline void swap(function& f1, function& f2) + { + f1.swap(f2); + } +#endif // have partial specialization + + // Portable syntax + template class function0; + template class function1; + template class function2; + template class function3; + template + class function4; + template + class function5; + template + class function6; + template + class function7; + template + class function8; + template + class function9; + template + class function10; +} + +#endif diff --git a/external/boost/function/function_template.hpp b/external/boost/function/function_template.hpp new file mode 100644 index 0000000..bf139a0 --- /dev/null +++ b/external/boost/function/function_template.hpp @@ -0,0 +1,1136 @@ +// Boost.Function library + +// Copyright Douglas Gregor 2001-2006 +// Copyright Emil Dotchevski 2007 +// Use, modification and distribution is subject to the 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 +#include + +#if defined(BOOST_MSVC) +# pragma warning( push ) +# pragma warning( disable : 4127 ) // "conditional expression is constant" +#endif + +#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) + +// 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_MEMBER_INVOKER \ + BOOST_JOIN(function_mem_invoker,BOOST_FUNCTION_NUM_ARGS) +#define BOOST_FUNCTION_VOID_MEMBER_INVOKER \ + BOOST_JOIN(function_void_mem_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_GET_MEMBER_INVOKER \ + BOOST_JOIN(get_member_invoker,BOOST_FUNCTION_NUM_ARGS) +#define BOOST_FUNCTION_GET_INVOKER \ + BOOST_JOIN(get_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 + +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(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(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::value) + f = reinterpret_cast(&function_obj_ptr.data); + else + f = reinterpret_cast(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::value) + f = reinterpret_cast(&function_obj_ptr.data); + else + f = reinterpret_cast(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(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(function_obj_ptr.obj_ptr); + BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS)); + } + }; + +#if BOOST_FUNCTION_NUM_ARGS > 0 + /* Handle invocation of member pointers. */ + template< + typename MemberPtr, + typename R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_PARMS + > + struct BOOST_FUNCTION_MEMBER_INVOKER + { + static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA + BOOST_FUNCTION_PARMS) + + { + MemberPtr* f = + reinterpret_cast(&function_obj_ptr.data); + return boost::mem_fn(*f)(BOOST_FUNCTION_ARGS); + } + }; + + template< + typename MemberPtr, + typename R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_PARMS + > + struct BOOST_FUNCTION_VOID_MEMBER_INVOKER + { + static BOOST_FUNCTION_VOID_RETURN_TYPE + invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA + BOOST_FUNCTION_PARMS) + + { + MemberPtr* f = + reinterpret_cast(&function_obj_ptr.data); + BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS)); + } + }; +#endif + + 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::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::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::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; + }; + +#if BOOST_FUNCTION_NUM_ARGS > 0 + /* Retrieve the appropriate invoker for a member pointer. */ + template< + typename MemberPtr, + typename R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_PARMS + > + struct BOOST_FUNCTION_GET_MEMBER_INVOKER + { + typedef typename mpl::if_c<(is_void::value), + BOOST_FUNCTION_VOID_MEMBER_INVOKER< + MemberPtr, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >, + BOOST_FUNCTION_MEMBER_INVOKER< + MemberPtr, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + > + >::type type; + }; +#endif + + /* Given the tag returned by get_function_tag, retrieve the + actual invoker that will be used for the given function + object. + + Each specialization contains an "apply" nested class template + that accepts the function object, return type, function + argument types, and allocator. The resulting "apply" class + contains two typedefs, "invoker_type" and "manager_type", + which correspond to the invoker and manager types. */ + template + struct BOOST_FUNCTION_GET_INVOKER { }; + + /* Retrieve the invoker for a function pointer. */ + template<> + struct BOOST_FUNCTION_GET_INVOKER + { + template + struct apply + { + typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER< + FunctionPtr, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef functor_manager manager_type; + }; + + template + struct apply_a + { + typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER< + FunctionPtr, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef functor_manager manager_type; + }; + }; + +#if BOOST_FUNCTION_NUM_ARGS > 0 + /* Retrieve the invoker for a member pointer. */ + template<> + struct BOOST_FUNCTION_GET_INVOKER + { + template + struct apply + { + typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER< + MemberPtr, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef functor_manager manager_type; + }; + + template + struct apply_a + { + typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER< + MemberPtr, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef functor_manager manager_type; + }; + }; +#endif + + /* Retrieve the invoker for a function object. */ + template<> + struct BOOST_FUNCTION_GET_INVOKER + { + template + struct apply + { + typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER< + FunctionObj, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef functor_manager manager_type; + }; + + template + struct apply_a + { + typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER< + FunctionObj, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef functor_manager_a manager_type; + }; + }; + + /* Retrieve the invoker for a reference to a function object. */ + template<> + struct BOOST_FUNCTION_GET_INVOKER + { + template + struct apply + { + typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER< + typename RefWrapper::type, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef reference_manager manager_type; + }; + + template + struct apply_a + { + typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER< + typename RefWrapper::type, + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >::type + invoker_type; + + typedef reference_manager manager_type; + }; + }; + + + /** + * vtable for a specific boost::function instance. This + * structure must be an aggregate so that we can use static + * initialization in boost::function's assign_to and assign_to_a + * members. It therefore cannot have any constructors, + * destructors, base classes, etc. + */ + template + struct BOOST_FUNCTION_VTABLE + { +#ifndef BOOST_NO_VOID_RETURNS + typedef R result_type; +#else + typedef typename function_return_type::type result_type; +#endif // BOOST_NO_VOID_RETURNS + + typedef result_type (*invoker_type)(function_buffer& + BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS); + + template + bool assign_to(F f, function_buffer& functor) const + { + typedef typename get_function_tag::type tag; + return assign_to(f, functor, tag()); + } + template + bool assign_to_a(F f, function_buffer& functor, Allocator a) const + { + typedef typename get_function_tag::type tag; + return assign_to_a(f, functor, a, tag()); + } + + void clear(function_buffer& functor) const + { + if (base.manager) + base.manager(functor, functor, destroy_functor_tag); + } + + private: + // Function pointers + template + bool + assign_to(FunctionPtr f, function_buffer& functor, function_ptr_tag) const + { + this->clear(functor); + if (f) { + // should be a reinterpret cast, but some compilers insist + // on giving cv-qualifiers to free functions + functor.func_ptr = reinterpret_cast(f); + return true; + } else { + return false; + } + } + template + bool + assign_to_a(FunctionPtr f, function_buffer& functor, Allocator, function_ptr_tag) const + { + return assign_to(f,functor,function_ptr_tag()); + } + + // Member pointers +#if BOOST_FUNCTION_NUM_ARGS > 0 + template + bool assign_to(MemberPtr f, function_buffer& functor, member_ptr_tag) const + { + // 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(boost::mem_fn(f), functor); + return true; + } else { + return false; + } + } + template + bool assign_to_a(MemberPtr f, function_buffer& functor, Allocator a, member_ptr_tag) const + { + // 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_a(boost::mem_fn(f), functor, a); + return true; + } else { + return false; + } + } +#endif // BOOST_FUNCTION_NUM_ARGS > 0 + + // Function objects + // Assign to a function object using the small object optimization + template + void + assign_functor(FunctionObj f, function_buffer& functor, mpl::true_) const + { + new (reinterpret_cast(&functor.data)) FunctionObj(f); + } + template + void + assign_functor_a(FunctionObj f, function_buffer& functor, Allocator, mpl::true_) const + { + assign_functor(f,functor,mpl::true_()); + } + + // Assign to a function object allocated on the heap. + template + void + assign_functor(FunctionObj f, function_buffer& functor, mpl::false_) const + { + functor.obj_ptr = new FunctionObj(f); + } + template + void + assign_functor_a(FunctionObj f, function_buffer& functor, Allocator a, mpl::false_) const + { + typedef functor_wrapper functor_wrapper_type; + typedef typename Allocator::template rebind::other + wrapper_allocator_type; + typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type; + wrapper_allocator_type wrapper_allocator(a); + wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1); + wrapper_allocator.construct(copy, functor_wrapper_type(f,a)); + functor_wrapper_type* new_f = static_cast(copy); + functor.obj_ptr = new_f; + } + + template + bool + assign_to(FunctionObj f, function_buffer& functor, function_obj_tag) const + { + if (!boost::detail::function::has_empty_target(boost::addressof(f))) { + assign_functor(f, functor, + mpl::bool_<(function_allows_small_object_optimization::value)>()); + return true; + } else { + return false; + } + } + template + bool + assign_to_a(FunctionObj f, function_buffer& functor, Allocator a, function_obj_tag) const + { + if (!boost::detail::function::has_empty_target(boost::addressof(f))) { + assign_functor_a(f, functor, a, + mpl::bool_<(function_allows_small_object_optimization::value)>()); + return true; + } else { + return false; + } + } + + // Reference to a function object + template + bool + assign_to(const reference_wrapper& f, + function_buffer& functor, function_obj_ref_tag) const + { + functor.obj_ref.obj_ptr = (void *)(f.get_pointer()); + functor.obj_ref.is_const_qualified = is_const::value; + functor.obj_ref.is_volatile_qualified = is_volatile::value; + return true; + } + template + bool + assign_to_a(const reference_wrapper& f, + function_buffer& functor, Allocator, function_obj_ref_tag) const + { + return assign_to(f,functor,function_obj_ref_tag()); + } + + public: + vtable_base base; + invoker_type invoker; + }; + } // end namespace function + } // end namespace detail + + template< + typename R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_PARMS + > + class BOOST_FUNCTION_FUNCTION : public function_base + +#if BOOST_FUNCTION_NUM_ARGS == 1 + + , public std::unary_function + +#elif BOOST_FUNCTION_NUM_ARGS == 2 + + , public std::binary_function + +#endif + + { + public: +#ifndef BOOST_NO_VOID_RETURNS + typedef R result_type; +#else + typedef typename boost::detail::function::function_return_type::type + result_type; +#endif // BOOST_NO_VOID_RETURNS + + private: + typedef boost::detail::function::BOOST_FUNCTION_VTABLE< + R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS> + vtable_type; + + vtable_type* get_vtable() const { + return reinterpret_cast( + reinterpret_cast(vtable) & ~static_cast(0x01)); + } + + struct clear_type {}; + + public: + BOOST_STATIC_CONSTANT(int, args = BOOST_FUNCTION_NUM_ARGS); + + // add signature for boost::lambda + template + 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 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 + 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::value)>::value), + int>::type = 0 +#endif // BOOST_NO_SFINAE + ) : + function_base() + { + this->assign_to(f); + } + template + BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a +#ifndef BOOST_NO_SFINAE + ,typename enable_if_c< + (boost::type_traits::ice_not< + (is_integral::value)>::value), + int>::type = 0 +#endif // BOOST_NO_SFINAE + ) : + function_base() + { + this->assign_to_a(f,a); + } + +#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(); } + + result_type operator()(BOOST_FUNCTION_PARMS) const + { + if (this->empty()) + boost::throw_exception(bad_function_call()); + + return get_vtable()->invoker + (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS); + } + + // 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 +#ifndef BOOST_NO_SFINAE + typename enable_if_c< + (boost::type_traits::ice_not< + (is_integral::value)>::value), + BOOST_FUNCTION_FUNCTION&>::type +#else + BOOST_FUNCTION_FUNCTION& +#endif + operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f) + { + this->clear(); + BOOST_TRY { + this->assign_to(f); + } BOOST_CATCH (...) { + vtable = 0; + BOOST_RETHROW; + } + BOOST_CATCH_END + return *this; + } + template + void assign(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a) + { + this->clear(); + BOOST_TRY{ + this->assign_to_a(f,a); + } BOOST_CATCH (...) { + vtable = 0; + BOOST_RETHROW; + } + BOOST_CATCH_END + } + +#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(); + BOOST_TRY { + this->assign_to_own(f); + } BOOST_CATCH (...) { + vtable = 0; + BOOST_RETHROW; + } + BOOST_CATCH_END + return *this; + } + + void swap(BOOST_FUNCTION_FUNCTION& other) + { + if (&other == this) + return; + + BOOST_FUNCTION_FUNCTION tmp; + tmp.move_assign(*this); + this->move_assign(other); + other.move_assign(tmp); + } + + // Clear out a target, if there is one + void clear() + { + if (vtable) { + if (!this->has_trivial_copy_and_destroy()) + get_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; + if (this->has_trivial_copy_and_destroy()) + this->functor = f.functor; + else + get_vtable()->base.manager(f.functor, this->functor, + boost::detail::function::clone_functor_tag); + } + } + + template + void assign_to(Functor f) + { + using detail::function::vtable_base; + + typedef typename detail::function::get_function_tag::type tag; + typedef detail::function::BOOST_FUNCTION_GET_INVOKER get_invoker; + typedef typename get_invoker:: + template apply + handler_type; + + typedef typename handler_type::invoker_type invoker_type; + typedef typename handler_type::manager_type manager_type; + + // Note: it is extremely important that this initialization use + // static initialization. Otherwise, we will have a race + // condition here in multi-threaded code. See + // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/. + static const vtable_type stored_vtable = + { { &manager_type::manage }, &invoker_type::invoke }; + + if (stored_vtable.assign_to(f, functor)) { + std::size_t value = reinterpret_cast(&stored_vtable.base); + if (boost::has_trivial_copy_constructor::value && + boost::has_trivial_destructor::value && + detail::function::function_allows_small_object_optimization::value) + value |= static_cast(0x01); + vtable = reinterpret_cast(value); + } else + vtable = 0; + } + + template + void assign_to_a(Functor f,Allocator a) + { + using detail::function::vtable_base; + + typedef typename detail::function::get_function_tag::type tag; + typedef detail::function::BOOST_FUNCTION_GET_INVOKER get_invoker; + typedef typename get_invoker:: + template apply_a + handler_type; + + typedef typename handler_type::invoker_type invoker_type; + typedef typename handler_type::manager_type manager_type; + + // Note: it is extremely important that this initialization use + // static initialization. Otherwise, we will have a race + // condition here in multi-threaded code. See + // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/. + static const vtable_type stored_vtable = + { { &manager_type::manage }, &invoker_type::invoke }; + + if (stored_vtable.assign_to_a(f, functor, a)) { + std::size_t value = reinterpret_cast(&stored_vtable.base); + if (boost::has_trivial_copy_constructor::value && + boost::has_trivial_destructor::value && + detail::function::function_allows_small_object_optimization::value) + value |= static_cast(0x01); + vtable = reinterpret_cast(value); + } else + vtable = 0; + } + + // Moves the value from the specified argument to *this. If the argument + // has its function object allocated on the heap, move_assign will pass + // its buffer to *this, and set the argument's buffer pointer to NULL. + void move_assign(BOOST_FUNCTION_FUNCTION& f) + { + if (&f == this) + return; + + BOOST_TRY { + if (!f.empty()) { + this->vtable = f.vtable; + if (this->has_trivial_copy_and_destroy()) + this->functor = f.functor; + else + get_vtable()->base.manager(f.functor, this->functor, + boost::detail::function::move_functor_tag); + f.vtable = 0; + } else { + clear(); + } + } BOOST_CATCH (...) { + vtable = 0; + BOOST_RETHROW; + } + BOOST_CATCH_END + } + }; + + template + inline void swap(BOOST_FUNCTION_FUNCTION< + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >& f1, + BOOST_FUNCTION_FUNCTION< + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS + >& f2) + { + f1.swap(f2); + } + +// Poison comparisons between boost::function objects of the same type. +template + void operator==(const BOOST_FUNCTION_FUNCTION< + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS>&, + const BOOST_FUNCTION_FUNCTION< + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS>&); +template + void operator!=(const BOOST_FUNCTION_FUNCTION< + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS>&, + const BOOST_FUNCTION_FUNCTION< + R BOOST_FUNCTION_COMMA + BOOST_FUNCTION_TEMPLATE_ARGS>& ); + +#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 +class function + : public BOOST_FUNCTION_FUNCTION +{ + typedef BOOST_FUNCTION_FUNCTION base_type; + typedef function self_type; + + struct clear_type {}; + +public: + + function() : base_type() {} + + template + function(Functor f +#ifndef BOOST_NO_SFINAE + ,typename enable_if_c< + (boost::type_traits::ice_not< + (is_integral::value)>::value), + int>::type = 0 +#endif + ) : + base_type(f) + { + } + template + function(Functor f, Allocator a +#ifndef BOOST_NO_SFINAE + ,typename enable_if_c< + (boost::type_traits::ice_not< + (is_integral::value)>::value), + int>::type = 0 +#endif + ) : + base_type(f,a) + { + } + +#ifndef BOOST_NO_SFINAE + function(clear_type*) : base_type() {} +#endif + + function(const self_type& f) : base_type(static_cast(f)){} + + function(const base_type& f) : base_type(static_cast(f)){} + + self_type& operator=(const self_type& f) + { + self_type(f).swap(*this); + return *this; + } + + template +#ifndef BOOST_NO_SFINAE + typename enable_if_c< + (boost::type_traits::ice_not< + (is_integral::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; + } +}; + +#undef BOOST_FUNCTION_PARTIAL_SPEC +#endif // have partial specialization + +} // end namespace boost + +// Cleanup after ourselves... +#undef BOOST_FUNCTION_VTABLE +#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_MEMBER_INVOKER +#undef BOOST_FUNCTION_VOID_MEMBER_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_GET_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 + +#if defined(BOOST_MSVC) +# pragma warning( pop ) +#endif diff --git a/external/boost/function_equal.hpp b/external/boost/function_equal.hpp new file mode 100644 index 0000000..2d76c75 --- /dev/null +++ b/external/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 + 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 + 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/external/boost/functional/hash.hpp b/external/boost/functional/hash.hpp new file mode 100644 index 0000000..44983f1 --- /dev/null +++ b/external/boost/functional/hash.hpp @@ -0,0 +1,7 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the 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 + diff --git a/external/boost/functional/hash/detail/float_functions.hpp b/external/boost/functional/hash/detail/float_functions.hpp new file mode 100644 index 0000000..ae03ff0 --- /dev/null +++ b/external/boost/functional/hash/detail/float_functions.hpp @@ -0,0 +1,246 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software 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_HASH_DETAIL_FLOAT_FUNCTIONS_HPP) +#define BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP + +#include +#include + +#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. +// +// The following tries to automatically detect which are available. + +namespace boost { + namespace hash_detail { + + // Returned by dummy versions of the float functions. + + struct not_found { + // Implicitly convertible to float and long double in order to avoid + // a compile error when the dummy float functions are used. + + inline operator float() const { return 0; } + inline operator long double() const { return 0; } + }; + + // A type for detecting the return type of functions. + + template struct is; + template <> struct is { char x[10]; }; + template <> struct is { char x[20]; }; + template <> struct is { char x[30]; }; + template <> struct is { char x[40]; }; + + // Used to convert the return type of a function to a type for sizeof. + + template is float_type(T); + + // call_ldexp + // + // This will get specialized for float and long double + + template struct call_ldexp + { + typedef double float_type; + + inline double operator()(double a, int b) const + { + using namespace std; + return ldexp(a, b); + } + }; + + // call_frexp + // + // This will get specialized for float and long double + + template struct call_frexp + { + typedef double float_type; + + inline double operator()(double a, int* b) const + { + using namespace std; + return frexp(a, b); + } + }; + } +} + +// A namespace for dummy functions to detect when the actual function we want +// isn't available. ldexpl, ldexpf etc. might be added tby the macros below. +// +// AFAICT these have to be outside of the boost namespace, as if they're in +// the boost namespace they'll always be preferable to any other function +// (since the arguments are built in types, ADL can't be used). + +namespace boost_hash_detect_float_functions { + template boost::hash_detail::not_found ldexp(Float, int); + template boost::hash_detail::not_found frexp(Float, int*); +} + +// Macros for generating specializations of call_ldexp and call_frexp. +// +// check_cpp and check_c99 check if the C++ or C99 functions are available. +// +// Then the call_* functions select an appropriate implementation. +// +// I used c99_func in a few places just to get a unique name. +// +// Important: when using 'using namespace' at namespace level, include as +// little as possible in that namespace, as Visual C++ has an odd bug which +// can cause the namespace to be imported at the global level. This seems to +// happen mainly when there's a template in the same namesapce. + +#define BOOST_HASH_CALL_FLOAT_FUNC(cpp_func, c99_func, type1, type2) \ +namespace boost_hash_detect_float_functions { \ + template \ + boost::hash_detail::not_found c99_func(Float, type2); \ +} \ + \ +namespace boost { \ + namespace hash_detail { \ + namespace c99_func##_detect { \ + using namespace std; \ + using namespace boost_hash_detect_float_functions; \ + \ + struct check { \ + static type1 x; \ + static type2 y; \ + BOOST_STATIC_CONSTANT(bool, cpp = \ + sizeof(float_type(cpp_func(x,y))) \ + == sizeof(is)); \ + BOOST_STATIC_CONSTANT(bool, c99 = \ + sizeof(float_type(c99_func(x,y))) \ + == sizeof(is)); \ + }; \ + } \ + \ + template \ + struct call_c99_##c99_func : \ + boost::hash_detail::call_##cpp_func {}; \ + \ + template <> \ + struct call_c99_##c99_func { \ + typedef type1 float_type; \ + \ + template \ + inline type1 operator()(type1 a, T b) const \ + { \ + using namespace std; \ + return c99_func(a, b); \ + } \ + }; \ + \ + template \ + struct call_cpp_##c99_func : \ + call_c99_##c99_func< \ + ::boost::hash_detail::c99_func##_detect::check::c99 \ + > {}; \ + \ + template <> \ + struct call_cpp_##c99_func { \ + typedef type1 float_type; \ + \ + template \ + inline type1 operator()(type1 a, T b) const \ + { \ + using namespace std; \ + return cpp_func(a, b); \ + } \ + }; \ + \ + template <> \ + struct call_##cpp_func : \ + call_cpp_##c99_func< \ + ::boost::hash_detail::c99_func##_detect::check::cpp \ + > {}; \ + } \ +} + +#define BOOST_HASH_CALL_FLOAT_MACRO(cpp_func, c99_func, type1, type2) \ +namespace boost { \ + namespace hash_detail { \ + \ + template <> \ + struct call_##cpp_func { \ + typedef type1 float_type; \ + inline type1 operator()(type1 x, type2 y) const { \ + return c99_func(x, y); \ + } \ + }; \ + } \ +} + +#if defined(ldexpf) +BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpf, float, int) +#else +BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpf, float, int) +#endif + +#if defined(ldexpl) +BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpl, long double, int) +#else +BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpl, long double, int) +#endif + +#if defined(frexpf) +BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpf, float, int*) +#else +BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpf, float, int*) +#endif + +#if defined(frexpl) +BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpl, long double, int*) +#else +BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpl, long double, int*) +#endif + +#undef BOOST_HASH_CALL_FLOAT_MACRO +#undef BOOST_HASH_CALL_FLOAT_FUNC + + +namespace boost +{ + namespace hash_detail + { + template + struct select_hash_type_impl { + typedef double type; + }; + + template <> + struct select_hash_type_impl { + typedef float type; + }; + + template <> + struct select_hash_type_impl { + typedef long double type; + }; + + + // select_hash_type + // + // If there is support for a particular floating point type, use that + // otherwise use double (there's always support for double). + + template + struct select_hash_type : select_hash_type_impl< + BOOST_DEDUCED_TYPENAME call_ldexp::float_type, + BOOST_DEDUCED_TYPENAME call_frexp::float_type + > {}; + } +} + +#endif diff --git a/external/boost/functional/hash/detail/hash_float.hpp b/external/boost/functional/hash/detail/hash_float.hpp new file mode 100644 index 0000000..ea1bc25 --- /dev/null +++ b/external/boost/functional/hash/detail/hash_float.hpp @@ -0,0 +1,101 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software 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_HASH_DETAIL_HASH_FLOAT_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include + +// Include hash implementation for the current platform. + +// Cygwn +#if defined(__CYGWIN__) +# if defined(__i386__) || defined(_M_IX86) +# include +# else +# include +# endif +#else +# include +#endif + +// Can we use fpclassify? + +// STLport +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +#define BOOST_HASH_USE_FPCLASSIFY 0 + +// GNU libstdc++ 3 +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +# if (defined(__USE_ISOC99) || defined(_GLIBCXX_USE_C99_MATH)) && \ + !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) +# define BOOST_HASH_USE_FPCLASSIFY 1 +# else +# define BOOST_HASH_USE_FPCLASSIFY 0 +# endif + +// Everything else +#else +# define BOOST_HASH_USE_FPCLASSIFY 0 +#endif + +#if BOOST_HASH_USE_FPCLASSIFY + +#include + +namespace boost +{ + namespace hash_detail + { + template + inline std::size_t float_hash_value(T v) + { + 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; + } + } + } +} + +#else // !BOOST_HASH_USE_FPCLASSIFY + +namespace boost +{ + namespace hash_detail + { + template + inline std::size_t float_hash_value(T v) + { + return v == 0 ? 0 : float_hash_impl(v); + } + } +} + +#endif // BOOST_HASH_USE_FPCLASSIFY + +#undef BOOST_HASH_USE_FPCLASSIFY + +#endif diff --git a/external/boost/functional/hash/detail/hash_float_generic.hpp b/external/boost/functional/hash/detail/hash_float_generic.hpp new file mode 100644 index 0000000..1278c2f --- /dev/null +++ b/external/boost/functional/hash/detail/hash_float_generic.hpp @@ -0,0 +1,91 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// A general purpose hash function for non-zero floating point values. + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_GENERIC_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_GENERIC_HEADER + +#include +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does + // not satisfy test. Loop body not executed +#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 + inline std::size_t float_hash_impl2(T v) + { + boost::hash_detail::call_frexp frexp; + boost::hash_detail::call_ldexp ldexp; + + int exp = 0; + + v = frexp(v, &exp); + + // A postive value is easier to hash, so combine the + // sign with the exponent and use the absolute value. + if(v < 0) { + v = -v; + exp += limits::max_exponent - + limits::min_exponent; + } + + v = ldexp(v, limits::digits); + std::size_t seed = static_cast(v); + v -= static_cast(seed); + + // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1; + std::size_t const length + = (limits::digits * + boost::static_log2::radix>::value + + limits::digits - 1) + / limits::digits; + + for(std::size_t i = 0; i != length; ++i) + { + v = ldexp(v, limits::digits); + std::size_t part = static_cast(v); + v -= static_cast(part); + hash_float_combine(seed, part); + } + + hash_float_combine(seed, exp); + + return seed; + } + + template + inline std::size_t float_hash_impl(T v) + { + typedef BOOST_DEDUCED_TYPENAME select_hash_type::type type; + return float_hash_impl2(static_cast(v)); + } + } +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif diff --git a/external/boost/functional/hash/detail/hash_float_x86.hpp b/external/boost/functional/hash/detail/hash_float_x86.hpp new file mode 100644 index 0000000..b39bb0d --- /dev/null +++ b/external/boost/functional/hash/detail/hash_float_x86.hpp @@ -0,0 +1,56 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// A non-portable hash function form non-zero floats on x86. +// +// Even if you're on an x86 platform, this might not work if their floating +// point isn't set up as this expects. So this should only be used if it's +// absolutely certain that it will work. + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_X86_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_X86_HEADER + +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#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); + } + + inline std::size_t float_hash_impl(float v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr; + return seed; + } + + inline std::size_t float_hash_impl(double v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr++; + hash_float_combine(seed, *ptr); + return seed; + } + + inline std::size_t float_hash_impl(long double v) + { + boost::uint32_t* ptr = (boost::uint32_t*)&v; + std::size_t seed = *ptr++; + hash_float_combine(seed, *ptr++); + hash_float_combine(seed, *(boost::uint16_t*)ptr); + return seed; + } + } +} + +#endif diff --git a/external/boost/functional/hash/detail/limits.hpp b/external/boost/functional/hash/detail/limits.hpp new file mode 100644 index 0000000..f5b520e --- /dev/null +++ b/external/boost/functional/hash/detail/limits.hpp @@ -0,0 +1,61 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// On some platforms std::limits gives incorrect values for long double. +// This tries to work around them. + +#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER) +#define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +// On OpenBSD, numeric_limits is not reliable for long doubles, but +// the macros defined in are and support long double when STLport +// doesn't. + +#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) +#include +#endif + +namespace boost +{ + namespace hash_detail + { + template + struct limits : std::numeric_limits {}; + +#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) + template <> + struct limits + : std::numeric_limits + { + static long double epsilon() { + return LDBL_EPSILON; + } + + static long double (max)() { + return LDBL_MAX; + } + + static long double (min)() { + return LDBL_MIN; + } + + BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG); + BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP); + BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP); +#if defined(_STLP_NO_LONG_DOUBLE) + BOOST_STATIC_CONSTANT(int, radix = FLT_RADIX); +#endif + }; +#endif // __OpenBSD__ + } +} + +#endif diff --git a/external/boost/functional/hash/extensions.hpp b/external/boost/functional/hash/extensions.hpp new file mode 100644 index 0000000..3c587a3 --- /dev/null +++ b/external/boost/functional/hash/extensions.hpp @@ -0,0 +1,286 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the 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. + +// This implements the extensions to the standard. +// It's undocumented, so you shouldn't use it.... + +#if !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP) +#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP + +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) +#include +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#include +#endif + +namespace boost +{ + template + std::size_t hash_value(std::pair const&); + template + std::size_t hash_value(std::vector const&); + template + std::size_t hash_value(std::list const& v); + template + std::size_t hash_value(std::deque const& v); + template + std::size_t hash_value(std::set const& v); + template + std::size_t hash_value(std::multiset const& v); + template + std::size_t hash_value(std::map const& v); + template + std::size_t hash_value(std::multimap const& v); + + template + std::size_t hash_value(std::complex const&); + + template + std::size_t hash_value(std::pair const& v) + { + std::size_t seed = 0; + hash_combine(seed, v.first); + hash_combine(seed, v.second); + return seed; + } + + template + std::size_t hash_value(std::vector const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::list const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::deque const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::set const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::multiset const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::map const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::multimap const& v) + { + return hash_range(v.begin(), v.end()); + } + + template + std::size_t hash_value(std::complex const& v) + { + boost::hash hasher; + std::size_t seed = hasher(v.imag()); + seed ^= hasher(v.real()) + (seed<<6) + (seed>>2); + return seed; + } + + // + // call_hash_impl + // + + // On compilers without function template ordering, this deals with arrays. + +#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) + namespace hash_detail + { + template + struct call_hash_impl + { + template + struct inner + { + static std::size_t call(T const& v) + { + using namespace boost; + return hash_value(v); + } + }; + }; + + template <> + struct call_hash_impl + { + template + 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 + struct call_hash + : public call_hash_impl::value> + ::BOOST_NESTED_TEMPLATE inner + { + }; + } +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + + // + // boost::hash + // + + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + + template struct hash + : std::unary_function + { +#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::call(val); + } +#endif + }; + +#if BOOST_WORKAROUND(__DMC__, <= 0x848) + template struct hash + : std::unary_function + { + 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 + // has already been declared to deal with pointers, so just + // need to supply the non-pointer version of hash_impl. + + namespace hash_detail + { + template + struct hash_impl; + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + + template <> + struct hash_impl + { + template + struct inner + : std::unary_function + { +#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::call(val); + } +#endif + }; + }; + +#else // Visual C++ 6.5 + + // Visual C++ 6.5 has problems with nested member functions and + // applying const to const types in templates. So we get this: + + template + struct hash_impl_msvc + { + template + struct inner + : public std::unary_function + { + std::size_t operator()(T const& val) const + { + return hash_detail::call_hash::call(val); + } + + std::size_t operator()(T& val) const + { + return hash_detail::call_hash::call(val); + } + }; + }; + + template <> + struct hash_impl_msvc + { + template + struct inner + : public std::unary_function + { + std::size_t operator()(T& val) const + { + return hash_detail::call_hash::call(val); + } + }; + }; + + template + struct hash_impl_msvc2 + : public hash_impl_msvc::value> + ::BOOST_NESTED_TEMPLATE inner {}; + + template <> + struct hash_impl + { + template + struct inner : public hash_impl_msvc2 {}; + }; + +#endif // Visual C++ 6.5 + } +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +} + +#endif diff --git a/external/boost/functional/hash/hash.hpp b/external/boost/functional/hash/hash.hpp new file mode 100644 index 0000000..51ec860 --- /dev/null +++ b/external/boost/functional/hash/hash.hpp @@ -0,0 +1,536 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the 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 +#include +#include +#include +#include + +#if defined(BOOST_HASH_NO_IMPLICIT_CASTS) +#include +#endif + +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#include +#endif + +#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) +#include +#endif + +#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 + +namespace boost +{ +#if defined(BOOST_HASH_NO_IMPLICIT_CASTS) + + // If you get a static assertion here, it's because hash_value + // isn't declared for your type. + template + std::size_t hash_value(T const&) { + BOOST_STATIC_ASSERT((T*) 0 && false); + return 0; + } + +#endif + + std::size_t hash_value(bool); + std::size_t hash_value(char); + std::size_t hash_value(unsigned char); + std::size_t hash_value(signed char); + std::size_t hash_value(short); + std::size_t hash_value(unsigned short); + 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_NO_INTRINSIC_WCHAR_T) + std::size_t hash_value(wchar_t); +#endif + +#if !defined(BOOST_NO_LONG_LONG) + std::size_t hash_value(boost::long_long_type); + std::size_t hash_value(boost::ulong_long_type); +#endif + +#if !BOOST_WORKAROUND(__DMC__, <= 0x848) + template std::size_t hash_value(T* const&); +#else + template 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 (&x)[N]); + + template< class T, unsigned N > + std::size_t hash_value(T (&x)[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 + std::size_t hash_value( + std::basic_string, A> const&); + +#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) + std::size_t hash_value(std::type_index); +#endif + + // Implementation + + namespace hash_detail + { + template + inline std::size_t hash_value_signed(T val) + { + const int size_t_bits = std::numeric_limits::digits; + // ceiling(std::numeric_limits::digits / size_t_bits) - 1 + const int length = (std::numeric_limits::digits - 1) + / size_t_bits; + + std::size_t seed = 0; + T positive = val < 0 ? -1 - val : val; + + // Hopefully, this loop can be unrolled. + for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits) + { + seed ^= (std::size_t) (positive >> i) + (seed<<6) + (seed>>2); + } + seed ^= (std::size_t) val + (seed<<6) + (seed>>2); + + return seed; + } + + template + inline std::size_t hash_value_unsigned(T val) + { + const int size_t_bits = std::numeric_limits::digits; + // ceiling(std::numeric_limits::digits / size_t_bits) - 1 + const int length = (std::numeric_limits::digits - 1) + / size_t_bits; + + std::size_t seed = 0; + + // Hopefully, this loop can be unrolled. + for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits) + { + seed ^= (std::size_t) (val >> i) + (seed<<6) + (seed>>2); + } + seed ^= (std::size_t) val + (seed<<6) + (seed>>2); + + return seed; + } + } + + inline std::size_t hash_value(bool v) + { + return static_cast(v); + } + + inline std::size_t hash_value(char v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned char v) + { + return static_cast(v); + } + + inline std::size_t hash_value(signed char v) + { + return static_cast(v); + } + + inline std::size_t hash_value(short v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned short v) + { + return static_cast(v); + } + + inline std::size_t hash_value(int v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned int v) + { + return static_cast(v); + } + + inline std::size_t hash_value(long v) + { + return static_cast(v); + } + + inline std::size_t hash_value(unsigned long v) + { + return static_cast(v); + } + +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) + inline std::size_t hash_value(wchar_t v) + { + return static_cast(v); + } +#endif + +#if !defined(BOOST_NO_LONG_LONG) + inline std::size_t hash_value(boost::long_long_type v) + { + return hash_detail::hash_value_signed(v); + } + + inline std::size_t hash_value(boost::ulong_long_type v) + { + return hash_detail::hash_value_unsigned(v); + } +#endif + + // Implementation by Alberto Barbati and Dave Harris. +#if !BOOST_WORKAROUND(__DMC__, <= 0x848) + template std::size_t hash_value(T* const& v) +#else + template std::size_t hash_value(T* v) +#endif + { +#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 + // for some reason ptrdiff_t on OpenVMS compiler with + // 64 bit is not 64 bit !!! + std::size_t x = static_cast( + reinterpret_cast(v)); +#else + std::size_t x = static_cast( + reinterpret_cast(v)); +#endif + return x + (x >> 3); + } + +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC <= 1400 +#pragma warning(disable:4267) // 'argument' : conversion from 'size_t' to + // 'unsigned int', possible loss of data + // A misguided attempt to detect 64-bit + // incompatability. +#endif +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template + inline void hash_combine(std::size_t& seed, T& v) +#else + template + inline void hash_combine(std::size_t& seed, T const& v) +#endif + { + boost::hash hasher; + seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2); + } + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + + template + 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 + 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 + inline std::size_t hash_range(T* first, T* last) + { + std::size_t seed = 0; + + for(; first != last; ++first) + { + boost::hash hasher; + seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2); + } + + return seed; + } + + template + inline void hash_range(std::size_t& seed, T* first, T* last) + { + for(; first != last; ++first) + { + boost::hash 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 (&x)[N]) + { + return hash_range(x, x + N); + } + + template< class T, unsigned N > + inline std::size_t hash_value(T (&x)[N]) + { + return hash_range(x, x + N); + } +#endif + + template + inline std::size_t hash_value( + std::basic_string, 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); + } + +#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) + inline std::size_t hash_value(std::type_index v) + { + return v.hash_code(); + } +#endif + + // + // boost::hash + // + + // Define the specializations required by the standard. The general purpose + // boost::hash is defined later in extensions.hpp if + // BOOST_HASH_NO_EXTENSIONS is not defined. + + // BOOST_HASH_SPECIALIZE - define a specialization for a type which is + // passed by copy. + // + // BOOST_HASH_SPECIALIZE_REF - define a specialization for a type which is + // passed by copy. + // + // These are undefined later. + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#define BOOST_HASH_SPECIALIZE(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; + +#define BOOST_HASH_SPECIALIZE_REF(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type const& v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; +#else +#define BOOST_HASH_SPECIALIZE(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; \ + \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(const type v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; + +#define BOOST_HASH_SPECIALIZE_REF(type) \ + template <> struct hash \ + : public std::unary_function \ + { \ + std::size_t operator()(type const& v) const \ + { \ + return boost::hash_value(v); \ + } \ + }; \ + \ + template <> struct hash \ + : public std::unary_function \ + { \ + 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 + +#if !defined(BOOST_NO_LONG_LONG) + BOOST_HASH_SPECIALIZE(boost::long_long_type) + BOOST_HASH_SPECIALIZE(boost::ulong_long_type) +#endif + +#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) + BOOST_HASH_SPECIALIZE(std::type_index) +#endif + +#undef BOOST_HASH_SPECIALIZE +#undef BOOST_HASH_SPECIALIZE_REF + +// Specializing boost::hash for pointers. + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + + template + struct hash + : public std::unary_function + { + std::size_t operator()(T* v) const + { +#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) + return boost::hash_value(v); +#else + std::size_t x = static_cast( + reinterpret_cast(v)); + + return x + (x >> 3); +#endif + } + }; + +#else + + // For compilers without partial specialization, we define a + // boost::hash for all remaining types. But hash_impl is only defined + // for pointers in 'extensions.hpp' - so when BOOST_HASH_NO_EXTENSIONS + // is defined there will still be a compile error for types not supported + // in the standard. + + namespace hash_detail + { + template + struct hash_impl; + + template <> + struct hash_impl + { + template + struct inner + : public std::unary_function + { + std::size_t operator()(T val) const + { +#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 590) + return boost::hash_value(val); +#else + std::size_t x = static_cast( + reinterpret_cast(val)); + + return x + (x >> 3); +#endif + } + }; + }; + } + + template struct hash + : public boost::hash_detail::hash_impl::value> + ::BOOST_NESTED_TEMPLATE inner + { + }; + +#endif +} + +#undef BOOST_HASH_CHAR_TRAITS + +#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP + +// Include this outside of the include guards in case the file is included +// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it +// undefined. + +#if !defined(BOOST_HASH_NO_EXTENSIONS) \ + && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP) +#include +#endif diff --git a/external/boost/functional/hash/hash_fwd.hpp b/external/boost/functional/hash/hash_fwd.hpp new file mode 100644 index 0000000..1d51b07 --- /dev/null +++ b/external/boost/functional/hash/hash_fwd.hpp @@ -0,0 +1,40 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the 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 +#include +#include + +namespace boost +{ + template struct hash; + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template void hash_combine(std::size_t& seed, T& v); +#else + template void hash_combine(std::size_t& seed, T const& v); +#endif + + template std::size_t hash_range(It, It); + template void hash_range(std::size_t&, It, It); + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) + template inline std::size_t hash_range(T*, T*); + template inline void hash_range(std::size_t&, T*, T*); +#endif +} + +#endif diff --git a/external/boost/functional/hash_fwd.hpp b/external/boost/functional/hash_fwd.hpp new file mode 100644 index 0000000..b640988 --- /dev/null +++ b/external/boost/functional/hash_fwd.hpp @@ -0,0 +1,7 @@ + +// Copyright 2005-2009 Daniel James. +// Distributed under the 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 + diff --git a/external/boost/get_pointer.hpp b/external/boost/get_pointer.hpp new file mode 100644 index 0000000..a0cd5c0 --- /dev/null +++ b/external/boost/get_pointer.hpp @@ -0,0 +1,33 @@ +// 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 + +// In order to avoid circular dependencies with Boost.TR1 +// we make sure that our include of doesn't try to +// pull in the TR1 headers: that's why we use this header +// rather than including directly: +# include // std::auto_ptr + +namespace boost { + +// get_pointer(p) extracts a ->* capable pointer from p + +template T * get_pointer(T * p) +{ + return p; +} + +// get_pointer(shared_ptr const & p) has been moved to shared_ptr.hpp + +template T * get_pointer(std::auto_ptr const& p) +{ + return p.get(); +} + + +} // namespace boost + +#endif // GET_POINTER_DWA20021219_HPP diff --git a/external/boost/implicit_cast.hpp b/external/boost/implicit_cast.hpp new file mode 100644 index 0000000..5b1cd92 --- /dev/null +++ b/external/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 + +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 +inline T implicit_cast (typename mpl::identity::type x) { + return x; +} + +// incomplete return type now is here +//template +//void implicit_cast (...); + +} // namespace boost + + +#endif // IMPLICIT_CAST_DWA200356_HPP diff --git a/external/boost/integer.hpp b/external/boost/integer.hpp new file mode 100644 index 0000000..fc0b398 --- /dev/null +++ b/external/boost/integer.hpp @@ -0,0 +1,257 @@ +// 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 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 // self include + +#include // for boost::::boost::integer_traits +#include // for ::std::numeric_limits +#include // for boost::int64_t and BOOST_NO_INTEGRAL_INT64_T + +// +// We simply cannot include this header on gcc without getting copious warnings of the kind: +// +// boost/integer.hpp:77:30: warning: use of C99 long long integer constant +// +// And yet there is no other reasonable implementation, so we declare this a system header +// to suppress these warnings. +// +#if defined(__GNUC__) && (__GNUC__ >= 4) +#pragma GCC system_header +#endif + +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; + typedef fast type; + }; // imps may specialize + + namespace detail{ + + // 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 char + // no specializations for 0 and 5: requests for a type > long are in error +#ifdef BOOST_HAS_LONG_LONG + template<> struct int_least_helper<1> { typedef boost::long_long_type least; }; +#elif defined(BOOST_HAS_MS_INT64) + template<> struct int_least_helper<1> { typedef __int64 least; }; +#endif + template<> struct int_least_helper<2> { typedef long least; }; + template<> struct int_least_helper<3> { typedef int least; }; + template<> struct int_least_helper<4> { typedef short least; }; + template<> struct int_least_helper<5> { typedef signed char least; }; +#ifdef BOOST_HAS_LONG_LONG + template<> struct int_least_helper<6> { typedef boost::ulong_long_type least; }; +#elif defined(BOOST_HAS_MS_INT64) + template<> struct int_least_helper<6> { typedef unsigned __int64 least; }; +#endif + template<> struct int_least_helper<7> { typedef unsigned long least; }; + template<> struct int_least_helper<8> { typedef unsigned int least; }; + template<> struct int_least_helper<9> { typedef unsigned short least; }; + template<> struct int_least_helper<10> { typedef unsigned char least; }; + + template + struct exact_signed_base_helper{}; + template + struct exact_unsigned_base_helper{}; + + template <> struct exact_signed_base_helper { typedef signed char exact; }; + template <> struct exact_unsigned_base_helper { typedef unsigned char exact; }; +#if USHRT_MAX != UCHAR_MAX + template <> struct exact_signed_base_helper { typedef short exact; }; + template <> struct exact_unsigned_base_helper { typedef unsigned short exact; }; +#endif +#if UINT_MAX != USHRT_MAX + template <> struct exact_signed_base_helper { typedef int exact; }; + template <> struct exact_unsigned_base_helper { typedef unsigned int exact; }; +#endif +#if ULONG_MAX != UINT_MAX + template <> struct exact_signed_base_helper { typedef long exact; }; + template <> struct exact_unsigned_base_helper { typedef unsigned long exact; }; +#endif +#if defined(BOOST_HAS_LONG_LONG) &&\ + ((defined(ULLONG_MAX) && (ULLONG_MAX != ULONG_MAX)) ||\ + (defined(ULONG_LONG_MAX) && (ULONG_LONG_MAX != ULONG_MAX)) ||\ + (defined(ULONGLONG_MAX) && (ULONGLONG_MAX != ULONG_MAX)) ||\ + (defined(_ULLONG_MAX) && (_ULLONG_MAX != ULONG_MAX))) + template <> struct exact_signed_base_helper { typedef boost::long_long_type exact; }; + template <> struct exact_unsigned_base_helper { typedef boost::ulong_long_type exact; }; +#endif + + + } // namespace detail + + // integer templates specifying number of bits ---------------------------// + + // signed + template< int Bits > // bits (including sign) required + struct int_t : public detail::exact_signed_base_helper + { + typedef typename detail::int_least_helper + < +#ifdef BOOST_HAS_LONG_LONG + (Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) + +#else + 1 + +#endif + (Bits-1 <= ::std::numeric_limits::digits) + + (Bits-1 <= ::std::numeric_limits::digits) + + (Bits-1 <= ::std::numeric_limits::digits) + + (Bits-1 <= ::std::numeric_limits::digits) + >::least least; + typedef typename int_fast_t::type fast; + }; + + // unsigned + template< int Bits > // bits required + struct uint_t : public detail::exact_unsigned_base_helper + { +#if (defined(__BORLANDC__) || defined(__CODEGEAR__)) && defined(BOOST_NO_INTEGRAL_INT64_T) + // It's really not clear why this workaround should be needed... shrug I guess! JM + BOOST_STATIC_CONSTANT(int, s = + 6 + + (Bits <= ::std::numeric_limits::digits) + + (Bits <= ::std::numeric_limits::digits) + + (Bits <= ::std::numeric_limits::digits) + + (Bits <= ::std::numeric_limits::digits)); + typedef typename detail::int_least_helper< ::boost::uint_t::s>::least least; +#else + typedef typename detail::int_least_helper + < + 5 + +#ifdef BOOST_HAS_LONG_LONG + (Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) + +#else + 1 + +#endif + (Bits <= ::std::numeric_limits::digits) + + (Bits <= ::std::numeric_limits::digits) + + (Bits <= ::std::numeric_limits::digits) + + (Bits <= ::std::numeric_limits::digits) + >::least least; +#endif + typedef typename int_fast_t::type fast; + // int_fast_t<> works correctly for unsigned too, in spite of the name. + }; + + // integer templates specifying extreme value ----------------------------// + + // signed +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + template< boost::long_long_type MaxValue > // maximum value to require support +#else + template< long MaxValue > // maximum value to require support +#endif + struct int_max_value_t + { + typedef typename detail::int_least_helper + < +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + (MaxValue <= ::boost::integer_traits::const_max) + +#else + 1 + +#endif + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + >::least least; + typedef typename int_fast_t::type fast; + }; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + template< boost::long_long_type MinValue > // minimum value to require support +#else + template< long MinValue > // minimum value to require support +#endif + struct int_min_value_t + { + typedef typename detail::int_least_helper + < +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + (MinValue >= ::boost::integer_traits::const_min) + +#else + 1 + +#endif + (MinValue >= ::boost::integer_traits::const_min) + + (MinValue >= ::boost::integer_traits::const_min) + + (MinValue >= ::boost::integer_traits::const_min) + + (MinValue >= ::boost::integer_traits::const_min) + >::least least; + typedef typename int_fast_t::type fast; + }; + + // unsigned +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + template< boost::ulong_long_type MaxValue > // minimum value to require support +#else + template< unsigned long MaxValue > // minimum value to require support +#endif + struct uint_value_t + { +#if (defined(__BORLANDC__) || defined(__CODEGEAR__)) + // It's really not clear why this workaround should be needed... shrug I guess! JM +#if defined(BOOST_NO_INTEGRAL_INT64_T) + BOOST_STATIC_CONSTANT(unsigned, which = + 6 + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max)); + typedef typename detail::int_least_helper< ::boost::uint_value_t::which>::least least; +#else // BOOST_NO_INTEGRAL_INT64_T + BOOST_STATIC_CONSTANT(unsigned, which = + 5 + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max)); + typedef typename detail::int_least_helper< ::boost::uint_value_t::which>::least least; +#endif // BOOST_NO_INTEGRAL_INT64_T +#else + typedef typename detail::int_least_helper + < + 5 + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + (MaxValue <= ::boost::integer_traits::const_max) + +#else + 1 + +#endif + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + + (MaxValue <= ::boost::integer_traits::const_max) + >::least least; +#endif + typedef typename int_fast_t::type fast; + }; + + +} // namespace boost + +#endif // BOOST_INTEGER_HPP diff --git a/external/boost/integer/integer_mask.hpp b/external/boost/integer/integer_mask.hpp new file mode 100644 index 0000000..2acf7f7 --- /dev/null +++ b/external/boost/integer/integer_mask.hpp @@ -0,0 +1,126 @@ +// 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 // self include + +#include // for BOOST_STATIC_CONSTANT +#include // for boost::uint_t + +#include // for UCHAR_MAX, etc. +#include // for std::size_t + +#include // for std::numeric_limits + +// +// We simply cannot include this header on gcc without getting copious warnings of the kind: +// +// boost/integer/integer_mask.hpp:93:35: warning: use of C99 long long integer constant +// +// And yet there is no other reasonable implementation, so we declare this a system header +// to suppress these warnings. +// +#if defined(__GNUC__) && (__GNUC__ >= 4) +#pragma GCC system_header +#endif + +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::least least; + typedef typename uint_t::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::digits > { \ + typedef std::numeric_limits limits_type; \ + typedef uint_t::least least; \ + typedef uint_t::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 ); \ + } + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4245) // 'initializing' : conversion from 'int' to 'const boost::low_bits_mask_t<8>::least', signed/unsigned mismatch +#endif + +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 + +#if defined(BOOST_HAS_LONG_LONG) + #if ((defined(ULLONG_MAX) && (ULLONG_MAX > ULONG_MAX)) ||\ + (defined(ULONG_LONG_MAX) && (ULONG_LONG_MAX > ULONG_MAX)) ||\ + (defined(ULONGLONG_MAX) && (ULONGLONG_MAX > ULONG_MAX)) ||\ + (defined(_ULLONG_MAX) && (_ULLONG_MAX > ULONG_MAX))) + BOOST_LOW_BITS_MASK_SPECIALIZE( boost::ulong_long_type ); + #endif +#elif defined(BOOST_HAS_MS_INT64) + #if 18446744073709551615ui64 > ULONG_MAX + BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned __int64 ); + #endif +#endif + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#undef BOOST_LOW_BITS_MASK_SPECIALIZE + + +} // namespace boost + + +#endif // BOOST_INTEGER_INTEGER_MASK_HPP diff --git a/external/boost/integer/static_log2.hpp b/external/boost/integer/static_log2.hpp new file mode 100644 index 0000000..56c7a00 --- /dev/null +++ b/external/boost/integer/static_log2.hpp @@ -0,0 +1,127 @@ +// -------------- 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/integer_fwd.hpp" // for boost::intmax_t + +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 boost::static_log2_argument_type argument_type; + typedef boost::static_log2_result_type result_type; + + template + struct choose_initial_n { + + BOOST_STATIC_CONSTANT(bool, 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::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 + struct static_log2_impl { + + BOOST_STATIC_CONSTANT(bool, 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 + // ---------------------------------------- + + template + struct static_log2 { + + BOOST_STATIC_CONSTANT( + static_log2_result_type, + value = detail::static_log2_impl::static_log2_impl::value + ); + + }; + + + template <> + struct static_log2<0> { }; + +} + + + +#endif // include guard diff --git a/external/boost/integer_fwd.hpp b/external/boost/integer_fwd.hpp new file mode 100644 index 0000000..20eff2b --- /dev/null +++ b/external/boost/integer_fwd.hpp @@ -0,0 +1,164 @@ +// 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 // for UCHAR_MAX, etc. +#include // for std::size_t + +#include // for BOOST_NO_INTRINSIC_WCHAR_T +#include // for std::numeric_limits +#include // For intmax_t + + +namespace boost +{ + +#ifdef BOOST_NO_INTEGRAL_INT64_T + typedef unsigned long static_log2_argument_type; + typedef int static_log2_result_type; + typedef long static_min_max_signed_type; + typedef unsigned long static_min_max_unsigned_type; +#else + typedef boost::uintmax_t static_min_max_unsigned_type; + typedef boost::intmax_t static_min_max_signed_type; + typedef boost::uintmax_t static_log2_argument_type; + typedef int static_log2_result_type; +#endif + +// From ------------------------------------------------// + +// Only has typedefs or using statements, with #conditionals + + +// From -----------------------------------------// + +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 >; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG) +template < > +class integer_traits< ::boost::long_long_type>; + +template < > +class integer_traits< ::boost::ulong_long_type >; +#elif !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_MS_INT64) +template < > +class integer_traits<__int64>; + +template < > +class integer_traits; +#endif + + +// From ------------------------------------------------// + +template < typename LeastInt > + struct int_fast_t; + +template< int Bits > + struct int_t; + +template< int Bits > + struct uint_t; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + template< boost::long_long_type MaxValue > // maximum value to require support +#else + template< long MaxValue > // maximum value to require support +#endif + struct int_max_value_t; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + template< boost::long_long_type MinValue > // minimum value to require support +#else + template< long MinValue > // minimum value to require support +#endif + struct int_min_value_t; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) + template< boost::ulong_long_type MaxValue > // maximum value to require support +#else + template< unsigned long MaxValue > // maximum value to require support +#endif + struct uint_value_t; + + +// From -----------------------------------// + +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::digits >; + +// From ------------------------------------// + +template + struct static_log2; + +template <> struct static_log2<0u>; + + +// From ---------------------------------// + +template + struct static_signed_min; + +template + struct static_signed_max; + +template + struct static_unsigned_min; + +template + struct static_unsigned_max; + +} // namespace boost + + +#endif // BOOST_INTEGER_FWD_HPP diff --git a/external/boost/integer_traits.hpp b/external/boost/integer_traits.hpp new file mode 100644 index 0000000..c6d761a --- /dev/null +++ b/external/boost/integer_traits.hpp @@ -0,0 +1,261 @@ +/* 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 76784 2012-01-29 21:58:13Z eric_niebler $ + * + * 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 +#include + +// These are an implementation detail and not part of the interface +#include +// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it, +// and some may have but not ... +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__)) +#include +#endif + +// +// We simply cannot include this header on gcc without getting copious warnings of the kind: +// +// ../../../boost/integer_traits.hpp:164:66: warning: use of C99 long long integer constant +// +// And yet there is no other reasonable implementation, so we declare this a system header +// to suppress these warnings. +// +#if defined(__GNUC__) && (__GNUC__ >= 4) +#pragma GCC system_header +#endif + +namespace boost { +template +class integer_traits : public std::numeric_limits +{ +public: + BOOST_STATIC_CONSTANT(bool, is_integral = false); +}; + +namespace detail { +template +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 +const bool integer_traits_base::is_integral; + +template +const T integer_traits_base::const_min; + +template +const T integer_traits_base::const_max; +#endif + +} // namespace detail + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +template<> +class integer_traits + : public std::numeric_limits, + // 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 +#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 +#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 +#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 appears to return the wrong values). + public detail::integer_traits_base +#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 + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +#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) * CHAR_BIT - 1)), ~(1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 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> +{ }; + +#elif defined(BOOST_HAS_MS_INT64) + +template<> +class integer_traits< __int64> + : public std::numeric_limits< __int64>, + public detail::integer_traits_base< __int64, _I64_MIN, _I64_MAX> +{ }; + +template<> +class integer_traits< unsigned __int64> + : public std::numeric_limits< unsigned __int64>, + public detail::integer_traits_base< unsigned __int64, 0, _UI64_MAX> +{ }; + +#endif +#endif + +} // namespace boost + +#endif /* BOOST_INTEGER_TRAITS_HPP */ + + + diff --git a/external/boost/interprocess/creation_tags.hpp b/external/boost/interprocess/creation_tags.hpp new file mode 100644 index 0000000..374829a --- /dev/null +++ b/external/boost/interprocess/creation_tags.hpp @@ -0,0 +1,77 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_CREATION_TAGS_HPP +#define BOOST_INTERPROCESS_CREATION_TAGS_HPP + +#include +#include + +namespace boost { +namespace interprocess { + +//!Tag to indicate that the resource must +//!be only created +struct create_only_t {}; + +//!Tag to indicate that the resource must +//!be only opened +struct open_only_t {}; + +//!Tag to indicate that the resource must +//!be only opened for reading +struct open_read_only_t {}; + +//!Tag to indicate that the resource must +//!be only opened privately for reading +struct open_read_private_t {}; + +//!Tag to indicate that the resource must +//!be only opened for reading +struct open_copy_on_write_t {}; + +//!Tag to indicate that the resource must +//!be created. If already created, it must be opened. +struct open_or_create_t {}; + +//!Value to indicate that the resource must +//!be only created +static const create_only_t create_only = create_only_t(); + +//!Value to indicate that the resource must +//!be only opened +static const open_only_t open_only = open_only_t(); + +//!Value to indicate that the resource must +//!be only opened for reading +static const open_read_only_t open_read_only = open_read_only_t(); + +//!Value to indicate that the resource must +//!be created. If already created, it must be opened. +static const open_or_create_t open_or_create = open_or_create_t(); + +//!Value to indicate that the resource must +//!be only opened for reading +static const open_copy_on_write_t open_copy_on_write = open_copy_on_write_t(); + +namespace ipcdetail { + +enum create_enum_t +{ DoCreate, DoOpen, DoOpenOrCreate }; + +} //namespace ipcdetail { + +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //#ifndef BOOST_INTERPROCESS_CREATION_TAGS_HPP + diff --git a/external/boost/interprocess/detail/atomic.hpp b/external/boost/interprocess/detail/atomic.hpp new file mode 100644 index 0000000..f7551f3 --- /dev/null +++ b/external/boost/interprocess/detail/atomic.hpp @@ -0,0 +1,593 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2006-2011 +// (C) Copyright Markus Schoepflin 2007 +// (C) Copyright Bryce Lelbach 2010 +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_ATOMIC_HPP +#define BOOST_INTERPROCESS_DETAIL_ATOMIC_HPP + +#include +#include +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +//! Atomically increment an boost::uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem); + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem); + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val); + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with": what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp); + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#if (defined BOOST_INTERPROCESS_WINDOWS) + +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return winapi::interlocked_decrement(reinterpret_cast(mem)) + 1; } + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return winapi::interlocked_increment(reinterpret_cast(mem))-1; } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ winapi::interlocked_exchange(reinterpret_cast(mem), val); } + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with": what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ return winapi::interlocked_compare_exchange(reinterpret_cast(mem), with, cmp); } + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + +namespace boost { +namespace interprocess { +namespace ipcdetail{ + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ + boost::uint32_t prev = cmp; + // This version by Mans Rullgard of Pathscale + __asm__ __volatile__ ( "lock\n\t" + "cmpxchg %2,%0" + : "+m"(*mem), "+a"(prev) + : "r"(with) + : "cc"); + + return prev; +/* + asm volatile( "lock\n\t" + "cmpxchg %3,%1" + : "=a" (prev), "=m" (*(mem)) + : "0" (prev), "r" (with) + : "memory", "cc"); +*/ +/* + boost::uint32_t prev; + + asm volatile ("lock; cmpxchgl %1, %2" + : "=a" (prev) + : "r" (with), "m" (*(mem)), "0"(cmp)); + asm volatile("" : : : "memory"); + + return prev; +*/ +} + +//! Atomically add 'val' to an boost::uint32_t +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32 + (volatile boost::uint32_t *mem, boost::uint32_t val) +{ + // int r = *pw; + // *mem += val; + // return r; + int r; + + asm volatile + ( + "lock\n\t" + "xadd %1, %0": + "+m"( *mem ), "=r"( r ): // outputs (%0, %1) + "1"( val ): // inputs (%2 == %1) + "memory", "cc" // clobbers + ); + + return r; +/* + asm volatile( "lock\n\t; xaddl %0,%1" + : "=r"(val), "=m"(*mem) + : "0"(val), "m"(*mem)); + asm volatile("" : : : "memory"); + + return val; +*/ +} + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, (boost::uint32_t)-1); } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#elif defined(__GNUC__) && (defined(__PPC__) || defined(__ppc__)) + +namespace boost { +namespace interprocess { +namespace ipcdetail{ + +//! Atomically add 'val' to an boost::uint32_t +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ + boost::uint32_t prev, temp; + + asm volatile ("0:\n\t" // retry local label + "lwarx %0,0,%2\n\t" // load prev and reserve + "add %1,%0,%3\n\t" // temp = prev + val + "stwcx. %1,0,%2\n\t" // conditionally store + "bne- 0b" // start over if we lost + // the reservation + //XXX find a cleaner way to define the temp + //it's not an output + : "=&r" (prev), "=&r" (temp) // output, temp + : "b" (mem), "r" (val) // inputs + : "memory", "cc"); // clobbered + return prev; +} + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ + boost::uint32_t prev; + + asm volatile ("0:\n\t" // retry local label + "lwarx %0,0,%1\n\t" // load prev and reserve + "cmpw %0,%3\n\t" // does it match cmp? + "bne- 1f\n\t" // ...no, bail out + "stwcx. %2,0,%1\n\t" // ...yes, conditionally + // store with + "bne- 0b\n\t" // start over if we lost + // the reservation + "1:" // exit local label + + : "=&r"(prev) // output + : "b" (mem), "r" (with), "r"(cmp) // inputs + : "memory", "cc"); // clobbered + return prev; +} + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, boost::uint32_t(-1u)); } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#elif defined(__GNUC__) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) + +namespace boost { +namespace interprocess { +namespace ipcdetail{ + +//! Atomically add 'val' to an boost::uint32_t +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32 + (volatile boost::uint32_t *mem, boost::uint32_t val) +{ return __sync_fetch_and_add(const_cast(mem), val); } + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, (boost::uint32_t)-1); } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ return __sync_val_compare_and_swap(const_cast(mem), cmp, with); } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#elif (defined(sun) || defined(__sun)) + +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +//! Atomically add 'val' to an boost::uint32_t +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ return atomic_add_32_nv(reinterpret_cast(mem), (int32_t)val) - val; } + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ return atomic_cas_32(reinterpret_cast(mem), cmp, with); } + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add_32_nv(reinterpret_cast(mem), 1) - 1; } + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add_32_nv(reinterpret_cast(mem), (boost::uint32_t)-1) + 1; } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#elif defined(__osf__) && defined(__DECCXX) + +#include +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +//! Atomically decrement a uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +//! Acquire, memory barrier after decrement. +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ boost::uint32_t old_val = __ATOMIC_DECREMENT_LONG(mem); __MB(); return old_val; } + +//! Atomically increment a uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +//! Release, memory barrier before increment. +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ __MB(); return __ATOMIC_INCREMENT_LONG(mem); } + +// Rational for the implementation of the atomic read and write functions. +// +// 1. The Alpha Architecture Handbook requires that access to a byte, +// an aligned word, an aligned longword, or an aligned quadword is +// atomic. (See 'Alpha Architecture Handbook', version 4, chapter 5.2.2.) +// +// 2. The CXX User's Guide states that volatile quantities are accessed +// with single assembler instructions, and that a compilation error +// occurs when declaring a quantity as volatile which is not properly +// aligned. + +//! Atomically read an boost::uint32_t from memory +//! Acquire, memory barrier after load. +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ boost::uint32_t old_val = *mem; __MB(); return old_val; } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +//! Release, memory barrier before store. +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ __MB(); *mem = val; } + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +//! Memory barrier between load and store. +inline boost::uint32_t atomic_cas32( + volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ + // Note: + // + // Branch prediction prefers backward branches, and the Alpha Architecture + // Handbook explicitely states that the loop should not be implemented like + // it is below. (See chapter 4.2.5.) Therefore the code should probably look + // like this: + // + // return asm( + // "10: ldl_l %v0,(%a0) ;" + // " cmpeq %v0,%a2,%t0 ;" + // " beq %t0,20f ;" + // " mb ;" + // " mov %a1,%t0 ;" + // " stl_c %t0,(%a0) ;" + // " beq %t0,30f ;" + // "20: ret ;" + // "30: br 10b;", + // mem, with, cmp); + // + // But as the compiler always transforms this into the form where a backward + // branch is taken on failure, we can as well implement it in the straight + // forward form, as this is what it will end up in anyway. + + return asm( + "10: ldl_l %v0,(%a0) ;" // load prev value from mem and lock mem + " cmpeq %v0,%a2,%t0 ;" // compare with given value + " beq %t0,20f ;" // if not equal, we're done + " mb ;" // memory barrier + " mov %a1,%t0 ;" // load new value into scratch register + " stl_c %t0,(%a0) ;" // store new value to locked mem (overwriting scratch) + " beq %t0,10b ;" // store failed because lock has been stolen, retry + "20: ", + mem, with, cmp); +} + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#elif defined(__IBMCPP__) && (__IBMCPP__ >= 800) && defined(_AIX) + +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail{ + +//first define boost::uint32_t versions of __lwarx and __stwcx to avoid poluting +//all the functions with casts + +//! From XLC documenation : +//! This function can be used with a subsequent stwcxu call to implement a +//! read-modify-write on a specified memory location. The two functions work +//! together to ensure that if the store is successfully performed, no other +//! processor or mechanism can modify the target doubleword between the time +//! lwarxu function is executed and the time the stwcxu functio ncompletes. +//! "mem" : pointer to the object +//! Returns the value at pointed to by mem +inline boost::uint32_t lwarxu(volatile boost::uint32_t *mem) +{ + return static_cast(__lwarx(reinterpret_cast(mem))); +} + +//! "mem" : pointer to the object +//! "val" : the value to store +//! Returns true if the update of mem is successful and false if it is +//!unsuccessful +inline bool stwcxu(volatile boost::uint32_t* mem, boost::uint32_t val) +{ + return (__stwcx(reinterpret_cast(mem), static_cast(val)) != 0); +} + +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32 + (volatile boost::uint32_t *mem, boost::uint32_t val) +{ + boost::uint32_t oldValue; + do + { + oldValue = lwarxu(mem); + }while (!stwcxu(mem, oldValue+val)); + return oldValue; +} + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, (boost::uint32_t)-1); } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ + boost::uint32_t oldValue; + boost::uint32_t valueToStore; + do + { + oldValue = lwarxu(mem); + } while (!stwcxu(mem, (oldValue == with) ? cmp : oldValue)); + + return oldValue; +} + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#else + +#error No atomic operations implemented for this platform, sorry! + +#endif + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +inline bool atomic_add_unless32 + (volatile boost::uint32_t *mem, boost::uint32_t value, boost::uint32_t unless_this) +{ + boost::uint32_t old, c(atomic_read32(mem)); + while(c != unless_this && (old = atomic_cas32(mem, c + value, c)) != c){ + c = old; + } + return c != unless_this; +} + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_ATOMIC_HPP diff --git a/external/boost/interprocess/detail/config_begin.hpp b/external/boost/interprocess/detail/config_begin.hpp new file mode 100644 index 0000000..559331a --- /dev/null +++ b/external/boost/interprocess/detail/config_begin.hpp @@ -0,0 +1,47 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_INTERPROCESS_CONFIG_INCLUDED +#define BOOST_INTERPROCESS_CONFIG_INCLUDED +#include +#endif + +#ifdef BOOST_MSVC + #ifndef _CRT_SECURE_NO_DEPRECATE + #define BOOST_INTERPROCESS_CRT_SECURE_NO_DEPRECATE + #define _CRT_SECURE_NO_DEPRECATE + #endif + #pragma warning (push) + #pragma warning (disable : 4702) // unreachable code + #pragma warning (disable : 4706) // assignment within conditional expression + #pragma warning (disable : 4127) // conditional expression is constant + #pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned + #pragma warning (disable : 4284) // odd return type for operator-> + #pragma warning (disable : 4244) // possible loss of data + #pragma warning (disable : 4251) // "identifier" : class "type" needs to have dll-interface to be used by clients of class "type2" + #pragma warning (disable : 4267) // conversion from "X" to "Y", possible loss of data + #pragma warning (disable : 4275) // non DLL-interface classkey "identifier" used as base for DLL-interface classkey "identifier" + #pragma warning (disable : 4355) // "this" : used in base member initializer list + #pragma warning (disable : 4503) // "identifier" : decorated name length exceeded, name was truncated + #pragma warning (disable : 4511) // copy constructor could not be generated + #pragma warning (disable : 4512) // assignment operator could not be generated + #pragma warning (disable : 4514) // unreferenced inline removed + #pragma warning (disable : 4521) // Disable "multiple copy constructors specified" + #pragma warning (disable : 4522) // "class" : multiple assignment operators specified + #pragma warning (disable : 4675) // "method" should be declared "static" and have exactly one parameter + #pragma warning (disable : 4710) // function not inlined + #pragma warning (disable : 4711) // function selected for automatic inline expansion + #pragma warning (disable : 4786) // identifier truncated in debug info + #pragma warning (disable : 4996) // "function": was declared deprecated + #pragma warning (disable : 4197) // top-level volatile in cast is ignored + #pragma warning (disable : 4541) // 'typeid' used on polymorphic type 'boost::exception' + // with /GR-; unpredictable behavior may result + #pragma warning (disable : 4673) // throwing '' the following types will not be considered at the catch site + #pragma warning (disable : 4671) // the copy constructor is inaccessible +#endif diff --git a/external/boost/interprocess/detail/config_end.hpp b/external/boost/interprocess/detail/config_end.hpp new file mode 100644 index 0000000..422458e --- /dev/null +++ b/external/boost/interprocess/detail/config_end.hpp @@ -0,0 +1,17 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#if defined BOOST_MSVC + #pragma warning (pop) + #ifdef BOOST_INTERPROCESS_CRT_SECURE_NO_DEPRECATE + #undef BOOST_INTERPROCESS_CRT_SECURE_NO_DEPRECATE + #undef _CRT_SECURE_NO_DEPRECATE + #endif +#endif + diff --git a/external/boost/interprocess/detail/os_file_functions.hpp b/external/boost/interprocess/detail/os_file_functions.hpp new file mode 100644 index 0000000..b680c57 --- /dev/null +++ b/external/boost/interprocess/detail/os_file_functions.hpp @@ -0,0 +1,696 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_OS_FILE_FUNCTIONS_HPP +#define BOOST_INTERPROCESS_DETAIL_OS_FILE_FUNCTIONS_HPP + +#include +#include +#include +#include + +#include +#include +#include + +#if (defined BOOST_INTERPROCESS_WINDOWS) +# include +#else +# ifdef BOOST_HAS_UNISTD_H +# include +# include +# include +# include +# include +# include +# include +# if 0 +# include +# endif +# else +# error Unknown platform +# endif +#endif + +#include +#include + +namespace boost { +namespace interprocess { + +#if (defined BOOST_INTERPROCESS_WINDOWS) + +typedef void * file_handle_t; +typedef long long offset_t; +typedef struct mapping_handle_impl_t{ + void * handle; + bool is_shm; +} mapping_handle_t; + +typedef enum { read_only = winapi::generic_read + , read_write = winapi::generic_read | winapi::generic_write + , copy_on_write + , read_private + , invalid_mode = 0xffff + } mode_t; + +typedef enum { file_begin = winapi::file_begin + , file_end = winapi::file_end + , file_current = winapi::file_current + } file_pos_t; + +namespace ipcdetail{ + +inline mapping_handle_t mapping_handle_from_file_handle(file_handle_t hnd) +{ + mapping_handle_t ret; + ret.handle = hnd; + ret.is_shm = false; + return ret; +} + +inline mapping_handle_t mapping_handle_from_shm_handle(file_handle_t hnd) +{ + mapping_handle_t ret; + ret.handle = hnd; + ret.is_shm = true; + return ret; +} + +inline file_handle_t file_handle_from_mapping_handle(mapping_handle_t hnd) +{ return hnd.handle; } + +inline bool create_directory(const char *path) +{ return winapi::create_directory(path); } + +inline const char *get_temporary_path() +{ return std::getenv("TMP"); } + + +inline file_handle_t create_new_file + (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) +{ + unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; + return winapi::create_file + ( name, (unsigned int)mode, winapi::create_new, attr + , (winapi::interprocess_security_attributes*)perm.get_permissions()); +} + +inline file_handle_t create_or_open_file + (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) +{ + unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; + return winapi::create_file + ( name, (unsigned int)mode, winapi::open_always, attr + , (winapi::interprocess_security_attributes*)perm.get_permissions()); +} + +inline file_handle_t open_existing_file + (const char *name, mode_t mode, bool temporary = false) +{ + unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; + return winapi::create_file + (name, (unsigned int)mode, winapi::open_existing, attr, 0); +} + +inline bool delete_file(const char *name) +{ return winapi::unlink_file(name); } + +inline bool truncate_file (file_handle_t hnd, std::size_t size) +{ + offset_t filesize; + if(!winapi::get_file_size(hnd, filesize)) + return false; + + const offset_t max_filesize = (std::numeric_limits::max)(); + //Avoid unused variable warnings in 32 bit systems + (void)max_filesize; + if( sizeof(std::size_t) >= sizeof(offset_t) && size > std::size_t(max_filesize) ){ + winapi::set_last_error(winapi::error_file_too_large); + return false; + } + + if(offset_t(size) > filesize){ + if(!winapi::set_file_pointer_ex(hnd, filesize, 0, winapi::file_begin)){ + return false; + } + //We will write zeros in the end of the file + //since set_end_of_file does not guarantee this + for(std::size_t remaining = size - filesize, write_size = 0 + ;remaining > 0 + ;remaining -= write_size){ + const std::size_t DataSize = 512; + static char data [DataSize]; + write_size = DataSize < remaining ? DataSize : remaining; + unsigned long written; + winapi::write_file(hnd, data, (unsigned long)write_size, &written, 0); + if(written != write_size){ + return false; + } + } + } + else{ + if(!winapi::set_file_pointer_ex(hnd, size, 0, winapi::file_begin)){ + return false; + } + if(!winapi::set_end_of_file(hnd)){ + return false; + } + } + return true; +} + +inline bool get_file_size(file_handle_t hnd, offset_t &size) +{ return winapi::get_file_size(hnd, size); } + +inline bool set_file_pointer(file_handle_t hnd, offset_t off, file_pos_t pos) +{ return winapi::set_file_pointer_ex(hnd, off, 0, (unsigned long) pos); } + +inline bool get_file_pointer(file_handle_t hnd, offset_t &off) +{ return winapi::set_file_pointer_ex(hnd, 0, &off, winapi::file_current); } + +inline bool write_file(file_handle_t hnd, const void *data, std::size_t numdata) +{ + unsigned long written; + return 0 != winapi::write_file(hnd, data, (unsigned long)numdata, &written, 0); +} + +inline file_handle_t invalid_file() +{ return winapi::invalid_handle_value; } + +inline bool close_file(file_handle_t hnd) +{ return 0 != winapi::close_handle(hnd); } + +inline bool acquire_file_lock(file_handle_t hnd) +{ + static winapi::interprocess_overlapped overlapped; + const unsigned long len = 0xffffffff; +// winapi::interprocess_overlapped overlapped; +// std::memset(&overlapped, 0, sizeof(overlapped)); + return winapi::lock_file_ex + (hnd, winapi::lockfile_exclusive_lock, 0, len, len, &overlapped); +} + +inline bool try_acquire_file_lock(file_handle_t hnd, bool &acquired) +{ + const unsigned long len = 0xffffffff; + winapi::interprocess_overlapped overlapped; + std::memset(&overlapped, 0, sizeof(overlapped)); + if(!winapi::lock_file_ex + (hnd, winapi::lockfile_exclusive_lock | winapi::lockfile_fail_immediately, + 0, len, len, &overlapped)){ + return winapi::get_last_error() == winapi::error_lock_violation ? + acquired = false, true : false; + + } + return (acquired = true); +} + +inline bool release_file_lock(file_handle_t hnd) +{ + const unsigned long len = 0xffffffff; + winapi::interprocess_overlapped overlapped; + std::memset(&overlapped, 0, sizeof(overlapped)); + return winapi::unlock_file_ex(hnd, 0, len, len, &overlapped); +} + +inline bool acquire_file_lock_sharable(file_handle_t hnd) +{ + const unsigned long len = 0xffffffff; + winapi::interprocess_overlapped overlapped; + std::memset(&overlapped, 0, sizeof(overlapped)); + return winapi::lock_file_ex(hnd, 0, 0, len, len, &overlapped); +} + +inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) +{ + const unsigned long len = 0xffffffff; + winapi::interprocess_overlapped overlapped; + std::memset(&overlapped, 0, sizeof(overlapped)); + if(!winapi::lock_file_ex + (hnd, winapi::lockfile_fail_immediately, 0, len, len, &overlapped)){ + return winapi::get_last_error() == winapi::error_lock_violation ? + acquired = false, true : false; + } + return (acquired = true); +} + +inline bool release_file_lock_sharable(file_handle_t hnd) +{ return release_file_lock(hnd); } + +inline bool delete_subdirectories_recursive + (const std::string &refcstrRootDirectory, const char *dont_delete_this, unsigned int count) +{ + bool bSubdirectory = false; // Flag, indicating whether + // subdirectories have been found + void * hFile; // Handle to directory + std::string strFilePath; // Filepath + std::string strPattern; // Pattern + winapi::win32_find_data_t FileInformation; // File information + + //Find all files and directories + strPattern = refcstrRootDirectory + "\\*.*"; + hFile = winapi::find_first_file(strPattern.c_str(), &FileInformation); + if(hFile != winapi::invalid_handle_value){ + do{ + //If it's not "." or ".." or the pointed root_level dont_delete_this erase it + if(FileInformation.cFileName[0] != '.' && + !(dont_delete_this && count == 0 && std::strcmp(dont_delete_this, FileInformation.cFileName) == 0)){ + strFilePath.erase(); + strFilePath = refcstrRootDirectory + "\\" + FileInformation.cFileName; + + //If it's a directory, go recursive + if(FileInformation.dwFileAttributes & winapi::file_attribute_directory){ + // Delete subdirectory + if(!delete_subdirectories_recursive(strFilePath, dont_delete_this, count+1)) + return false; + } + //If it's a file, just delete it + else{ + // Set file attributes + //if(::SetFileAttributes(strFilePath.c_str(), winapi::file_attribute_normal) == 0) + //return winapi::get_last_error(); + // Delete file + winapi::delete_file(strFilePath.c_str()); + } + } + //Go to the next file + } while(winapi::find_next_file(hFile, &FileInformation) == 1); + + // Close handle + winapi::find_close(hFile); + + //See if the loop has ended with an error or just because we've traversed all the files + if(winapi::get_last_error() != winapi::error_no_more_files){ + return false; + } + else + { + //Erase empty subdirectories or original refcstrRootDirectory + if(!bSubdirectory && count) + { + // Set directory attributes + //if(::SetFileAttributes(refcstrRootDirectory.c_str(), FILE_ATTRIBUTE_NORMAL) == 0) + //return ::GetLastError(); + // Delete directory + if(winapi::remove_directory(refcstrRootDirectory.c_str()) == 0) + return false; + } + } + } + return true; +} + +//This function erases all the subdirectories of a directory except the one pointed by "dont_delete_this" +inline bool delete_subdirectories(const std::string &refcstrRootDirectory, const char *dont_delete_this) +{ + return delete_subdirectories_recursive(refcstrRootDirectory, dont_delete_this, 0u); +} + + +template +inline bool for_each_file_in_dir(const char *dir, Function f) +{ + void * hFile; // Handle to directory + winapi::win32_find_data_t FileInformation; // File information + + //Get base directory + std::string str(dir); + const std::size_t base_root_dir_len = str.size(); + + //Find all files and directories + str += "\\*.*"; + hFile = winapi::find_first_file(str.c_str(), &FileInformation); + if(hFile != winapi::invalid_handle_value){ + do{ //Now loop every file + str.erase(base_root_dir_len); + //If it's not "." or ".." skip it + if(FileInformation.cFileName[0] != '.'){ + str += "\\"; str += FileInformation.cFileName; + //If it's a file, apply erase logic + if(!(FileInformation.dwFileAttributes & winapi::file_attribute_directory)){ + f(str.c_str(), FileInformation.cFileName); + } + } + //Go to the next file + } while(winapi::find_next_file(hFile, &FileInformation) == 1); + + // Close handle and see if the loop has ended with an error + winapi::find_close(hFile); + if(winapi::get_last_error() != winapi::error_no_more_files){ + return false; + } + } + return true; +} + + +#else //#if (defined BOOST_INTERPROCESS_WINDOWS) + +typedef int file_handle_t; +typedef off_t offset_t; + +typedef struct mapping_handle_impl_t +{ + file_handle_t handle; + bool is_xsi; +} mapping_handle_t; + +typedef enum { read_only = O_RDONLY + , read_write = O_RDWR + , copy_on_write + , read_private + , invalid_mode = 0xffff + } mode_t; + +typedef enum { file_begin = SEEK_SET + , file_end = SEEK_END + , file_current = SEEK_CUR + } file_pos_t; + +namespace ipcdetail{ + +inline mapping_handle_t mapping_handle_from_file_handle(file_handle_t hnd) +{ + mapping_handle_t ret; + ret.handle = hnd; + ret.is_xsi = false; + return ret; +} + +inline file_handle_t file_handle_from_mapping_handle(mapping_handle_t hnd) +{ return hnd.handle; } + +inline bool create_directory(const char *path) +{ return ::mkdir(path, 0777) == 0 && ::chmod(path, 0777) == 0; } + +inline const char *get_temporary_path() +{ + const char *names[] = {"/tmp", "TMPDIR", "TMP", "TEMP" }; + const int names_size = sizeof(names)/sizeof(names[0]); + struct stat data; + for(int i = 0; i != names_size; ++i){ + if(::stat(names[i], &data) == 0){ + return names[i]; + } + } + return "/tmp"; +} + +inline file_handle_t create_new_file + (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) +{ + (void)temporary; + int ret = ::open(name, ((int)mode) | O_EXCL | O_CREAT, perm.get_permissions()); + if(ret >= 0){ + ::fchmod(ret, perm.get_permissions()); + } + return ret; +} + +inline file_handle_t create_or_open_file + (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) +{ + (void)temporary; + int ret = -1; + //We need a loop to change permissions correctly using fchmod, since + //with "O_CREAT only" ::open we don't know if we've created or opened the file. + while(1){ + ret = ::open(name, ((int)mode) | O_EXCL | O_CREAT, perm.get_permissions()); + if(ret >= 0){ + ::fchmod(ret, perm.get_permissions()); + break; + } + else if(errno == EEXIST){ + if((ret = ::open(name, (int)mode)) >= 0 || errno != ENOENT){ + break; + } + } + } + return ret; +} + +inline file_handle_t open_existing_file + (const char *name, mode_t mode, bool temporary = false) +{ + (void)temporary; + return ::open(name, (int)mode); +} + +inline bool delete_file(const char *name) +{ return ::unlink(name) == 0; } + +inline bool truncate_file (file_handle_t hnd, std::size_t size) +{ + if(sizeof(off_t) == sizeof(std::size_t)){ + if(size > ((~std::size_t(0)) >> 1)){ + errno = EINVAL; + return false; + } + } + return 0 == ::ftruncate(hnd, off_t(size)); +} + +inline bool get_file_size(file_handle_t hnd, offset_t &size) +{ + struct stat data; + bool ret = 0 == ::fstat(hnd, &data); + if(ret){ + size = data.st_size; + } + return ret; +} + +inline bool set_file_pointer(file_handle_t hnd, offset_t off, file_pos_t pos) +{ return ((off_t)(-1)) != ::lseek(hnd, off, (int)pos); } + +inline bool get_file_pointer(file_handle_t hnd, offset_t &off) +{ + off = ::lseek(hnd, 0, SEEK_CUR); + return off != ((off_t)-1); +} + +inline bool write_file(file_handle_t hnd, const void *data, std::size_t numdata) +{ return (ssize_t(numdata)) == ::write(hnd, data, numdata); } + +inline file_handle_t invalid_file() +{ return -1; } + +inline bool close_file(file_handle_t hnd) +{ return ::close(hnd) == 0; } + +inline bool acquire_file_lock(file_handle_t hnd) +{ + struct ::flock lock; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + return -1 != ::fcntl(hnd, F_SETLKW, &lock); +} + +inline bool try_acquire_file_lock(file_handle_t hnd, bool &acquired) +{ + struct ::flock lock; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + int ret = ::fcntl(hnd, F_SETLK, &lock); + if(ret == -1){ + return (errno == EAGAIN || errno == EACCES) ? + acquired = false, true : false; + } + return (acquired = true); +} + +inline bool release_file_lock(file_handle_t hnd) +{ + struct ::flock lock; + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + return -1 != ::fcntl(hnd, F_SETLK, &lock); +} + +inline bool acquire_file_lock_sharable(file_handle_t hnd) +{ + struct ::flock lock; + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + return -1 != ::fcntl(hnd, F_SETLKW, &lock); +} + +inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) +{ + struct flock lock; + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + int ret = ::fcntl(hnd, F_SETLK, &lock); + if(ret == -1){ + return (errno == EAGAIN || errno == EACCES) ? + acquired = false, true : false; + } + return (acquired = true); +} + +inline bool release_file_lock_sharable(file_handle_t hnd) +{ return release_file_lock(hnd); } + +#if 0 +inline bool acquire_file_lock(file_handle_t hnd) +{ return 0 == ::flock(hnd, LOCK_EX); } + +inline bool try_acquire_file_lock(file_handle_t hnd, bool &acquired) +{ + int ret = ::flock(hnd, LOCK_EX | LOCK_NB); + acquired = ret == 0; + return (acquired || errno == EWOULDBLOCK); +} + +inline bool release_file_lock(file_handle_t hnd) +{ return 0 == ::flock(hnd, LOCK_UN); } + +inline bool acquire_file_lock_sharable(file_handle_t hnd) +{ return 0 == ::flock(hnd, LOCK_SH); } + +inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) +{ + int ret = ::flock(hnd, LOCK_SH | LOCK_NB); + acquired = ret == 0; + return (acquired || errno == EWOULDBLOCK); +} + +inline bool release_file_lock_sharable(file_handle_t hnd) +{ return 0 == ::flock(hnd, LOCK_UN); } +#endif + +inline bool delete_subdirectories_recursive + (const std::string &refcstrRootDirectory, const char *dont_delete_this) +{ + DIR *d = opendir(refcstrRootDirectory.c_str()); + if(!d) { + return false; + } + + struct dir_close + { + DIR *d_; + dir_close(DIR *d) : d_(d) {} + ~dir_close() { ::closedir(d_); } + } dc(d); (void)dc; + + struct ::dirent *de; + struct ::stat st; + std::string fn; + + while((de=::readdir(d))) { + if( de->d_name[0] == '.' && ( de->d_name[1] == '\0' + || (de->d_name[1] == '.' && de->d_name[2] == '\0' )) ){ + continue; + } + if(dont_delete_this && std::strcmp(dont_delete_this, de->d_name) == 0){ + continue; + } + fn = refcstrRootDirectory; + fn += '/'; + fn += de->d_name; + + if(std::remove(fn.c_str())) { + if(::stat(fn.c_str(), & st)) { + return false; + } + if(S_ISDIR(st.st_mode)) { + if(!delete_subdirectories_recursive(fn, 0) ){ + return false; + } + } else { + return false; + } + } + } + return std::remove(refcstrRootDirectory.c_str()) ? false : true; +} + +template +inline bool for_each_file_in_dir(const char *dir, Function f) +{ + std::string refcstrRootDirectory(dir); + + DIR *d = opendir(refcstrRootDirectory.c_str()); + if(!d) { + return false; + } + + struct dir_close + { + DIR *d_; + dir_close(DIR *d) : d_(d) {} + ~dir_close() { ::closedir(d_); } + } dc(d); (void)dc; + + struct ::dirent *de; + struct ::stat st; + std::string fn; + + while((de=::readdir(d))) { + if( de->d_name[0] == '.' && ( de->d_name[1] == '\0' + || (de->d_name[1] == '.' && de->d_name[2] == '\0' )) ){ + continue; + } + fn = refcstrRootDirectory; + fn += '/'; + fn += de->d_name; + + if(::stat(fn.c_str(), & st)) { + return false; + } + //If it's a file, apply erase logic + if(!S_ISDIR(st.st_mode)) { + f(fn.c_str(), de->d_name); + } + } + return true; +} + + +//This function erases all the subdirectories of a directory except the one pointed by "dont_delete_this" +inline bool delete_subdirectories(const std::string &refcstrRootDirectory, const char *dont_delete_this) +{ + return delete_subdirectories_recursive(refcstrRootDirectory, dont_delete_this ); +} + +#endif //#if (defined BOOST_INTERPROCESS_WINDOWS) + +inline bool open_or_create_directory(const char *dir_name) +{ + //If fails, check that it's because it already exists + if(!create_directory(dir_name)){ + error_info info(system_error_code()); + if(info.get_error_code() != already_exists_error){ + return false; + } + } + return true; +} + + +} //namespace ipcdetail{ +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_OS_FILE_FUNCTIONS_HPP diff --git a/external/boost/interprocess/detail/os_thread_functions.hpp b/external/boost/interprocess/detail/os_thread_functions.hpp new file mode 100644 index 0000000..e49e82c --- /dev/null +++ b/external/boost/interprocess/detail/os_thread_functions.hpp @@ -0,0 +1,211 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_OS_THREAD_FUNCTIONS_HPP +#define BOOST_INTERPROCESS_DETAIL_OS_THREAD_FUNCTIONS_HPP + +#include +#include +#include +#include + +#if (defined BOOST_INTERPROCESS_WINDOWS) +# include +#else +# ifdef BOOST_HAS_UNISTD_H +# include +# include +# include +# include +# else +# error Unknown platform +# endif +#endif + +namespace boost { +namespace interprocess { +namespace ipcdetail{ + +#if (defined BOOST_INTERPROCESS_WINDOWS) + +typedef unsigned long OS_process_id_t; +typedef unsigned long OS_thread_id_t; +typedef OS_thread_id_t OS_systemwide_thread_id_t; + +//process +inline OS_process_id_t get_current_process_id() +{ return winapi::get_current_process_id(); } + +inline OS_process_id_t get_invalid_process_id() +{ return OS_process_id_t(0); } + +//thread +inline OS_thread_id_t get_current_thread_id() +{ return winapi::get_current_thread_id(); } + +inline OS_thread_id_t get_invalid_thread_id() +{ return OS_thread_id_t(0xffffffff); } + +inline bool equal_thread_id(OS_thread_id_t id1, OS_thread_id_t id2) +{ return id1 == id2; } + +inline void thread_yield() +{ winapi::sched_yield(); } + +inline void thread_sleep(unsigned int ms) +{ winapi::Sleep(ms); } + +//systemwide thread +inline OS_systemwide_thread_id_t get_current_systemwide_thread_id() +{ + return get_current_thread_id(); +} + +inline void systemwide_thread_id_copy + (const volatile OS_systemwide_thread_id_t &from, volatile OS_systemwide_thread_id_t &to) +{ + to = from; +} + +inline bool equal_systemwide_thread_id(const OS_systemwide_thread_id_t &id1, const OS_systemwide_thread_id_t &id2) +{ + return equal_thread_id(id1, id2); +} + +inline OS_systemwide_thread_id_t get_invalid_systemwide_thread_id() +{ + return get_invalid_thread_id(); +} + +inline long double get_current_process_creation_time() +{ + winapi::interprocess_filetime CreationTime, ExitTime, KernelTime, UserTime; + + get_process_times + ( winapi::get_current_process(), &CreationTime, &ExitTime, &KernelTime, &UserTime); + + typedef long double ldouble_t; + const ldouble_t resolution = (100.0l/1000000000.0l); + return CreationTime.dwHighDateTime*(ldouble_t(1u<<31u)*2.0l*resolution) + + CreationTime.dwLowDateTime*resolution; +} + + +#else //#if (defined BOOST_INTERPROCESS_WINDOWS) + +typedef pthread_t OS_thread_id_t; +typedef pid_t OS_process_id_t; + +struct OS_systemwide_thread_id_t +{ + OS_systemwide_thread_id_t() + : pid(), tid() + {} + + OS_systemwide_thread_id_t(pid_t p, pthread_t t) + : pid(p), tid(t) + {} + + OS_systemwide_thread_id_t(const OS_systemwide_thread_id_t &x) + : pid(x.pid), tid(x.tid) + {} + + OS_systemwide_thread_id_t(const volatile OS_systemwide_thread_id_t &x) + : pid(x.pid), tid(x.tid) + {} + + OS_systemwide_thread_id_t & operator=(const OS_systemwide_thread_id_t &x) + { pid = x.pid; tid = x.tid; return *this; } + + OS_systemwide_thread_id_t & operator=(const volatile OS_systemwide_thread_id_t &x) + { pid = x.pid; tid = x.tid; return *this; } + + void operator=(const OS_systemwide_thread_id_t &x) volatile + { pid = x.pid; tid = x.tid; } + + pid_t pid; + pthread_t tid; +}; + +inline void systemwide_thread_id_copy + (const volatile OS_systemwide_thread_id_t &from, volatile OS_systemwide_thread_id_t &to) +{ + to.pid = from.pid; + to.tid = from.tid; +} + +//process +inline OS_process_id_t get_current_process_id() +{ return ::getpid(); } + +inline OS_process_id_t get_invalid_process_id() +{ return pid_t(0); } + +//thread +inline OS_thread_id_t get_current_thread_id() +{ return ::pthread_self(); } + +inline OS_thread_id_t get_invalid_thread_id() +{ + static pthread_t invalid_id; + return invalid_id; +} + +inline bool equal_thread_id(OS_thread_id_t id1, OS_thread_id_t id2) +{ return 0 != pthread_equal(id1, id2); } + +inline void thread_yield() +{ ::sched_yield(); } + +inline void thread_sleep(unsigned int ms) +{ + const struct timespec rqt = { ms/1000u, (ms%1000u)*1000000u }; + ::nanosleep(&rqt, 0); +} + +//systemwide thread +inline OS_systemwide_thread_id_t get_current_systemwide_thread_id() +{ + return OS_systemwide_thread_id_t(::getpid(), ::pthread_self()); +} + +inline bool equal_systemwide_thread_id(const OS_systemwide_thread_id_t &id1, const OS_systemwide_thread_id_t &id2) +{ + return (0 != pthread_equal(id1.tid, id2.tid)) && (id1.pid == id2.pid); +} + +inline OS_systemwide_thread_id_t get_invalid_systemwide_thread_id() +{ + return OS_systemwide_thread_id_t(get_invalid_process_id(), get_invalid_thread_id()); +} + +inline long double get_current_process_creation_time() +{ return 0.0L; } + +#endif //#if (defined BOOST_INTERPROCESS_WINDOWS) + +typedef char pid_str_t[sizeof(OS_process_id_t)*3+1]; + +inline void get_pid_str(pid_str_t &pid_str, OS_process_id_t pid) +{ + bufferstream bstream(pid_str, sizeof(pid_str)); + bstream << pid << std::ends; +} + +inline void get_pid_str(pid_str_t &pid_str) +{ get_pid_str(pid_str, get_current_process_id()); } + +} //namespace ipcdetail{ +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_OS_THREAD_FUNCTIONS_HPP diff --git a/external/boost/interprocess/detail/posix_time_types_wrk.hpp b/external/boost/interprocess/detail/posix_time_types_wrk.hpp new file mode 100644 index 0000000..c1276f0 --- /dev/null +++ b/external/boost/interprocess/detail/posix_time_types_wrk.hpp @@ -0,0 +1,42 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_TIMES_WRK_HPP +#define BOOST_INTERPROCESS_POSIX_TIMES_WRK_HPP + +//workaround to avoid winsock redefines when using date-time + +#ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#define BOOST_INTERPROCESS_WIN32_LEAN_AND_MEAN +#endif //#ifndef WIN32_LEAN_AND_MEAN +#endif //#ifdef _WIN32 + +#include +#include + +namespace boost { +namespace interprocess { + +typedef boost::date_time::microsec_clock microsec_clock; + +} +} + +#ifdef _WIN32 +#ifdef BOOST_INTERPROCESS_WIN32_LEAN_AND_MEAN +#undef WIN32_LEAN_AND_MEAN +#undef BOOST_INTERPROCESS_WIN32_LEAN_AND_MEAN +#endif //#ifdef BOOST_INTERPROCESS_WIN32_LEAN_AND_MEAN +#endif //#ifdef _WIN32 + +#endif //#ifndef BOOST_INTERPROCESS_POSIX_TIMES_WRK_HPP + diff --git a/external/boost/interprocess/detail/tmp_dir_helpers.hpp b/external/boost/interprocess/detail/tmp_dir_helpers.hpp new file mode 100644 index 0000000..38aafb2 --- /dev/null +++ b/external/boost/interprocess/detail/tmp_dir_helpers.hpp @@ -0,0 +1,174 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2007-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_TMP_DIR_HELPERS_HPP +#define BOOST_INTERPROCESS_DETAIL_TMP_DIR_HELPERS_HPP + +#include +#include +#include +#include +#include +#include + +#if defined(BOOST_INTERPROCESS_WINDOWS) + //#define BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME + //#define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME + //#include +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) + //#include + //#if defined(CTL_KERN) && defined (KERN_BOOTTIME) + //#define BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME + //#define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME + //#endif +#endif + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +#if defined (BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME) +inline void get_bootstamp(std::string &s, bool add = false) +{ + std::string bootstamp; + winapi::get_last_bootup_time(bootstamp); + if(add){ + s += bootstamp; + } + else{ + s.swap(bootstamp); + } +} +#elif defined(BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME) +inline void get_bootstamp(std::string &s, bool add = false) +{ + // FreeBSD specific: sysctl "kern.boottime" + int request[2] = { CTL_KERN, KERN_BOOTTIME }; + struct ::timeval result; + std::size_t result_len = sizeof result; + + if (::sysctl (request, 2, &result, &result_len, NULL, 0) < 0) + return; + + char bootstamp_str[256]; + + const char Characters [] = + { '0', '1', '2', '3', '4', '5', '6', '7' + , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + std::size_t char_counter = 0; + //32 bit values to allow 32 and 64 bit process IPC + boost::uint32_t fields[2] = { boost::uint32_t(result.tv_sec), boost::uint32_t(result.tv_usec) }; + for(std::size_t field = 0; field != 2; ++field){ + for(std::size_t i = 0; i != sizeof(fields[0]); ++i){ + const char *ptr = (const char *)&fields[field]; + bootstamp_str[char_counter++] = Characters[(ptr[i]&0xF0)>>4]; + bootstamp_str[char_counter++] = Characters[(ptr[i]&0x0F)]; + } + } + bootstamp_str[char_counter] = 0; + if(add){ + s += bootstamp_str; + } + else{ + s = bootstamp_str; + } +} +#endif + +inline void get_tmp_base_dir(std::string &tmp_name) +{ + #if defined (BOOST_INTERPROCESS_WINDOWS) + winapi::get_shared_documents_folder(tmp_name); + if(tmp_name.empty() || !winapi::is_directory(tmp_name.c_str())){ + tmp_name = get_temporary_path(); + } + #else + tmp_name = get_temporary_path(); + #endif + if(tmp_name.empty()){ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + //Remove final null. + tmp_name += "/boost_interprocess"; +} + +inline void tmp_folder(std::string &tmp_name) +{ + get_tmp_base_dir(tmp_name); + #ifdef BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME + tmp_name += "/"; + get_bootstamp(tmp_name, true); + #endif +} + +inline void tmp_filename(const char *filename, std::string &tmp_name) +{ + tmp_folder(tmp_name); + tmp_name += "/"; + tmp_name += filename; +} + +inline void create_tmp_and_clean_old(std::string &tmp_name) +{ + //First get the temp directory + std::string root_tmp_name; + get_tmp_base_dir(root_tmp_name); + + //If fails, check that it's because already exists + if(!create_directory(root_tmp_name.c_str())){ + error_info info(system_error_code()); + if(info.get_error_code() != already_exists_error){ + throw interprocess_exception(info); + } + } + + #ifdef BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME + tmp_folder(tmp_name); + + //If fails, check that it's because already exists + if(!create_directory(tmp_name.c_str())){ + error_info info(system_error_code()); + if(info.get_error_code() != already_exists_error){ + throw interprocess_exception(info); + } + } + //Now erase all old directories created in the previous boot sessions + std::string subdir = tmp_name; + subdir.erase(0, root_tmp_name.size()+1); + delete_subdirectories(root_tmp_name, subdir.c_str()); + #else + tmp_name = root_tmp_name; + #endif +} + +inline void create_tmp_and_clean_old_and_get_filename(const char *filename, std::string &tmp_name) +{ + create_tmp_and_clean_old(tmp_name); + tmp_name += "/"; + tmp_name += filename; +} + +inline void add_leading_slash(const char *name, std::string &new_name) +{ + if(name[0] != '/'){ + new_name = '/'; + } + new_name += name; +} + +} //namespace boost{ +} //namespace interprocess { +} //namespace ipcdetail { + +#include + +#endif //ifndef BOOST_INTERPROCESS_DETAIL_TMP_DIR_HELPERS_HPP diff --git a/external/boost/interprocess/detail/win32_api.hpp b/external/boost/interprocess/detail/win32_api.hpp new file mode 100644 index 0000000..b420c3d --- /dev/null +++ b/external/boost/interprocess/detail/win32_api.hpp @@ -0,0 +1,1766 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_WIN32_PRIMITIVES_HPP +#define BOOST_INTERPROCESS_WIN32_PRIMITIVES_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +# pragma comment( lib, "advapi32.lib" ) +# pragma comment( lib, "oleaut32.lib" ) +# pragma comment( lib, "Ole32.lib" ) +# pragma comment( lib, "Psapi.lib" ) +#endif + +#if (defined BOOST_INTERPROCESS_WINDOWS) +# include +# include +#else +# error "This file can only be included in Windows OS" +#endif + + +//The structures used in Interprocess with the +//same binary interface as windows ones +namespace boost { +namespace interprocess { +namespace winapi { + +//Some used constants +static const unsigned long infinite_time = 0xFFFFFFFF; +static const unsigned long error_already_exists = 183L; +static const unsigned long error_sharing_violation = 32L; +static const unsigned long error_file_not_found = 2u; +static const unsigned long error_no_more_files = 18u; +//Retries in CreateFile, see http://support.microsoft.com/kb/316609 +static const unsigned int error_sharing_violation_tries = 3u; +static const unsigned int error_sharing_violation_sleep_ms = 250u; +static const unsigned int error_file_too_large = 223u; + +static const unsigned long semaphore_all_access = (0x000F0000L)|(0x00100000L)|0x3; +static const unsigned long mutex_all_access = (0x000F0000L)|(0x00100000L)|0x0001; + +static const unsigned long page_readonly = 0x02; +static const unsigned long page_readwrite = 0x04; +static const unsigned long page_writecopy = 0x08; + +static const unsigned long standard_rights_required = 0x000F0000L; +static const unsigned long section_query = 0x0001; +static const unsigned long section_map_write = 0x0002; +static const unsigned long section_map_read = 0x0004; +static const unsigned long section_map_execute = 0x0008; +static const unsigned long section_extend_size = 0x0010; +static const unsigned long section_all_access = standard_rights_required | + section_query | + section_map_write | + section_map_read | + section_map_execute | + section_extend_size; + +static const unsigned long file_map_copy = section_query; +static const unsigned long file_map_write = section_map_write; +static const unsigned long file_map_read = section_map_read; +static const unsigned long file_map_all_access = section_all_access; +static const unsigned long delete_access = 0x00010000L; +static const unsigned long file_flag_backup_semantics = 0x02000000; +static const long file_flag_delete_on_close = 0x04000000; + +//Native API constants +static const unsigned long file_open_for_backup_intent = 0x00004000; +static const int file_share_valid_flags = 0x00000007; +static const long file_delete_on_close = 0x00001000L; +static const long obj_case_insensitive = 0x00000040L; + +static const unsigned long movefile_copy_allowed = 0x02; +static const unsigned long movefile_delay_until_reboot = 0x04; +static const unsigned long movefile_replace_existing = 0x01; +static const unsigned long movefile_write_through = 0x08; +static const unsigned long movefile_create_hardlink = 0x10; +static const unsigned long movefile_fail_if_not_trackable = 0x20; + +static const unsigned long file_share_read = 0x00000001; +static const unsigned long file_share_write = 0x00000002; +static const unsigned long file_share_delete = 0x00000004; + +static const unsigned long file_attribute_readonly = 0x00000001; +static const unsigned long file_attribute_hidden = 0x00000002; +static const unsigned long file_attribute_system = 0x00000004; +static const unsigned long file_attribute_directory = 0x00000010; +static const unsigned long file_attribute_archive = 0x00000020; +static const unsigned long file_attribute_device = 0x00000040; +static const unsigned long file_attribute_normal = 0x00000080; +static const unsigned long file_attribute_temporary = 0x00000100; + +static const unsigned long generic_read = 0x80000000L; +static const unsigned long generic_write = 0x40000000L; + +static const unsigned long wait_object_0 = 0; +static const unsigned long wait_abandoned = 0x00000080L; +static const unsigned long wait_timeout = 258L; +static const unsigned long wait_failed = (unsigned long)0xFFFFFFFF; + +static const unsigned long duplicate_close_source = (unsigned long)0x00000001; +static const unsigned long duplicate_same_access = (unsigned long)0x00000002; + +static const unsigned long format_message_allocate_buffer + = (unsigned long)0x00000100; +static const unsigned long format_message_ignore_inserts + = (unsigned long)0x00000200; +static const unsigned long format_message_from_string + = (unsigned long)0x00000400; +static const unsigned long format_message_from_hmodule + = (unsigned long)0x00000800; +static const unsigned long format_message_from_system + = (unsigned long)0x00001000; +static const unsigned long format_message_argument_array + = (unsigned long)0x00002000; +static const unsigned long format_message_max_width_mask + = (unsigned long)0x000000FF; +static const unsigned long lang_neutral = (unsigned long)0x00; +static const unsigned long sublang_default = (unsigned long)0x01; +static const unsigned long invalid_file_size = (unsigned long)0xFFFFFFFF; +static const unsigned long invalid_file_attributes = ((unsigned long)-1); +static void * const invalid_handle_value = (void*)(long)(-1); +static const unsigned long create_new = 1; +static const unsigned long create_always = 2; +static const unsigned long open_existing = 3; +static const unsigned long open_always = 4; +static const unsigned long truncate_existing = 5; + +static const unsigned long file_begin = 0; +static const unsigned long file_current = 1; +static const unsigned long file_end = 2; + +static const unsigned long lockfile_fail_immediately = 1; +static const unsigned long lockfile_exclusive_lock = 2; +static const unsigned long error_lock_violation = 33; +static const unsigned long security_descriptor_revision = 1; + +//Own defines +static const long SystemTimeOfDayInfoLength = 48; +static const long BootAndSystemstampLength = 16; +static const long BootstampLength = 8; +static const unsigned long MaxPath = 260; + + +//Keys +static void * const hkey_local_machine = (void*)(unsigned long*)(long)(0x80000002); +static unsigned long key_query_value = 0x0001; + +//COM API +const unsigned long RPC_C_AUTHN_LEVEL_PKT_BIPC = 4; +const unsigned long RPC_C_AUTHN_DEFAULT_BIPC = 0xffffffffL; +const unsigned long RPC_C_AUTHZ_DEFAULT_BIPC = 0xffffffffL; +const unsigned long RPC_C_IMP_LEVEL_IMPERSONATE_BIPC = 3; +const signed long EOAC_NONE_BIPC = 0; +const signed long CLSCTX_INPROC_SERVER_BIPC = 0x1; +const signed long CLSCTX_LOCAL_SERVER_BIPC = 0x4; +const signed long WBEM_FLAG_RETURN_IMMEDIATELY_BIPC = 0x10; +const signed long WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC = 0x0; +const signed long WBEM_FLAG_FORWARD_ONLY_BIPC = 0x20; +const signed long WBEM_INFINITE_BIPC = 0xffffffffL; +const signed long RPC_E_TOO_LATE_BIPC = 0x80010119L; +const signed long S_OK_BIPC = 0L; +const signed long S_FALSE_BIPC = 1; + +} //namespace winapi { +} //namespace interprocess { +} //namespace boost { + + +namespace boost { +namespace interprocess { +namespace winapi { + +struct GUID_BIPC +{ + unsigned long Data1; + unsigned short Data2; + unsigned short Data3; + unsigned char Data4[8]; +}; + +const GUID_BIPC CLSID_WbemAdministrativeLocator = + { 0xcb8555cc, 0x9128, 0x11d1, {0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}}; + +const GUID_BIPC IID_IUnknown = { 0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}; + +struct wchar_variant +{ + unsigned long long dummy; + union value_t{ + wchar_t *pbstrVal; + unsigned long long dummy; + } value; +}; + + struct IUnknown_BIPC + { + public: + virtual long __stdcall QueryInterface( + /* [in] */ const GUID_BIPC &riid, + /* [iid_is][out] */ void **ppvObject) = 0; + + virtual unsigned long __stdcall AddRef( void) = 0; + + virtual unsigned long __stdcall Release( void) = 0; + }; + +struct IWbemClassObject_BIPC : public IUnknown_BIPC +{ + public: + virtual long __stdcall GetQualifierSet( + /* [out] */ void **ppQualSet) = 0; + + virtual long __stdcall Get( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags, + /* [unique][in][out] */ wchar_variant *pVal, + /* [unique][in][out] */ long *pType, + /* [unique][in][out] */ long *plFlavor) = 0; + + virtual long __stdcall Put( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags, + /* [in] */ wchar_variant *pVal, + /* [in] */ long Type) = 0; + + virtual long __stdcall Delete( + /* [string][in] */ const wchar_t * wszName) = 0; + + virtual long __stdcall GetNames( + /* [string][in] */ const wchar_t * wszQualifierName, + /* [in] */ long lFlags, + /* [in] */ wchar_variant *pQualifierVal, + /* [out] */ void * *pNames) = 0; + + virtual long __stdcall BeginEnumeration( + /* [in] */ long lEnumFlags) = 0; + + virtual long __stdcall Next( + /* [in] */ long lFlags, + /* [unique][in][out] */ wchar_t * *strName, + /* [unique][in][out] */ wchar_variant *pVal, + /* [unique][in][out] */ long *pType, + /* [unique][in][out] */ long *plFlavor) = 0; + + virtual long __stdcall EndEnumeration( void) = 0; + + virtual long __stdcall GetPropertyQualifierSet( + /* [string][in] */ const wchar_t * wszProperty, + /* [out] */ void **ppQualSet) = 0; + + virtual long __stdcall Clone( + /* [out] */ IWbemClassObject_BIPC **ppCopy) = 0; + + virtual long __stdcall GetObjectText( + /* [in] */ long lFlags, + /* [out] */ wchar_t * *pstrObjectText) = 0; + + virtual long __stdcall SpawnDerivedClass( + /* [in] */ long lFlags, + /* [out] */ IWbemClassObject_BIPC **ppNewClass) = 0; + + virtual long __stdcall SpawnInstance( + /* [in] */ long lFlags, + /* [out] */ IWbemClassObject_BIPC **ppNewInstance) = 0; + + virtual long __stdcall CompareTo( + /* [in] */ long lFlags, + /* [in] */ IWbemClassObject_BIPC *pCompareTo) = 0; + + virtual long __stdcall GetPropertyOrigin( + /* [string][in] */ const wchar_t * wszName, + /* [out] */ wchar_t * *pstrClassName) = 0; + + virtual long __stdcall InheritsFrom( + /* [in] */ const wchar_t * strAncestor) = 0; + + virtual long __stdcall GetMethod( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags, + /* [out] */ IWbemClassObject_BIPC **ppInSignature, + /* [out] */ IWbemClassObject_BIPC **ppOutSignature) = 0; + + virtual long __stdcall PutMethod( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags, + /* [in] */ IWbemClassObject_BIPC *pInSignature, + /* [in] */ IWbemClassObject_BIPC *pOutSignature) = 0; + + virtual long __stdcall DeleteMethod( + /* [string][in] */ const wchar_t * wszName) = 0; + + virtual long __stdcall BeginMethodEnumeration( + /* [in] */ long lEnumFlags) = 0; + + virtual long __stdcall NextMethod( + /* [in] */ long lFlags, + /* [unique][in][out] */ wchar_t * *pstrName, + /* [unique][in][out] */ IWbemClassObject_BIPC **ppInSignature, + /* [unique][in][out] */ IWbemClassObject_BIPC **ppOutSignature) = 0; + + virtual long __stdcall EndMethodEnumeration( void) = 0; + + virtual long __stdcall GetMethodQualifierSet( + /* [string][in] */ const wchar_t * wszMethod, + /* [out] */ void **ppQualSet) = 0; + + virtual long __stdcall GetMethodOrigin( + /* [string][in] */ const wchar_t * wszMethodName, + /* [out] */ wchar_t * *pstrClassName) = 0; + +}; + + +struct IWbemContext_BIPC : public IUnknown_BIPC +{ +public: + virtual long __stdcall Clone( + /* [out] */ IWbemContext_BIPC **ppNewCopy) = 0; + + virtual long __stdcall GetNames( + /* [in] */ long lFlags, + /* [out] */ void * *pNames) = 0; + + virtual long __stdcall BeginEnumeration( + /* [in] */ long lFlags) = 0; + + virtual long __stdcall Next( + /* [in] */ long lFlags, + /* [out] */ wchar_t * *pstrName, + /* [out] */ wchar_variant *pValue) = 0; + + virtual long __stdcall EndEnumeration( void) = 0; + + virtual long __stdcall SetValue( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags, + /* [in] */ wchar_variant *pValue) = 0; + + virtual long __stdcall GetValue( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags, + /* [out] */ wchar_variant *pValue) = 0; + + virtual long __stdcall DeleteValue( + /* [string][in] */ const wchar_t * wszName, + /* [in] */ long lFlags) = 0; + + virtual long __stdcall DeleteAll( void) = 0; + +}; + + +struct IEnumWbemClassObject_BIPC : public IUnknown_BIPC +{ +public: + virtual long __stdcall Reset( void) = 0; + + virtual long __stdcall Next( + /* [in] */ long lTimeout, + /* [in] */ unsigned long uCount, + /* [length_is][size_is][out] */ IWbemClassObject_BIPC **apObjects, + /* [out] */ unsigned long *puReturned) = 0; + + virtual long __stdcall NextAsync( + /* [in] */ unsigned long uCount, + /* [in] */ void *pSink) = 0; + + virtual long __stdcall Clone( + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall Skip( + /* [in] */ long lTimeout, + /* [in] */ unsigned long nCount) = 0; + +}; + +struct IWbemServices_BIPC : public IUnknown_BIPC +{ +public: + virtual long __stdcall OpenNamespace( + /* [in] */ const wchar_t * strNamespace, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppWorkingNamespace, + /* [unique][in][out] */ void **ppResult) = 0; + + virtual long __stdcall CancelAsyncCall( + /* [in] */ void *pSink) = 0; + + virtual long __stdcall QueryObjectSink( + /* [in] */ long lFlags, + /* [out] */ void **ppResponseHandler) = 0; + + virtual long __stdcall GetObject( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppObject, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall GetObjectAsync( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall PutClass( + /* [in] */ IWbemClassObject_BIPC *pObject, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall PutClassAsync( + /* [in] */ IWbemClassObject_BIPC *pObject, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall DeleteClass( + /* [in] */ const wchar_t * strClass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall DeleteClassAsync( + /* [in] */ const wchar_t * strClass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall CreateClassEnum( + /* [in] */ const wchar_t * strSuperclass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall CreateClassEnumAsync( + /* [in] */ const wchar_t * strSuperclass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall PutInstance( + /* [in] */ void *pInst, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall PutInstanceAsync( + /* [in] */ void *pInst, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall DeleteInstance( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall DeleteInstanceAsync( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall CreateInstanceEnum( + /* [in] */ const wchar_t * strFilter, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall CreateInstanceEnumAsync( + /* [in] */ const wchar_t * strFilter, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall ExecQuery( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [out] */ IEnumWbemClassObject_BIPC **ppEnum) = 0; + + virtual long __stdcall ExecQueryAsync( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall ExecNotificationQuery( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall ExecNotificationQueryAsync( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall ExecMethod( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ const wchar_t * strMethodName, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ IWbemClassObject_BIPC *pInParams, + /* [unique][in][out] */ IWbemClassObject_BIPC **ppOutParams, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall ExecMethodAsync( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ const wchar_t * strMethodName, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ IWbemClassObject_BIPC *pInParams, + /* [in] */ void *pResponseHandler) = 0; + +}; + +struct IWbemLocator_BIPC : public IUnknown_BIPC +{ +public: + virtual long __stdcall ConnectServer( + /* [in] */ const wchar_t * strNetworkResource, + /* [in] */ const wchar_t * strUser, + /* [in] */ const wchar_t * strPassword, + /* [in] */ const wchar_t * strLocale, + /* [in] */ long lSecurityFlags, + /* [in] */ const wchar_t * strAuthority, + /* [in] */ void *pCtx, + /* [out] */ IWbemServices_BIPC **ppNamespace) = 0; + +}; + + + +struct interprocess_overlapped +{ + unsigned long *internal; + unsigned long *internal_high; + union { + struct { + unsigned long offset; + unsigned long offset_high; + }dummy; + void *pointer; + }; + + void *h_event; +}; + +struct interprocess_filetime +{ + unsigned long dwLowDateTime; + unsigned long dwHighDateTime; +}; + +struct win32_find_data_t +{ + unsigned long dwFileAttributes; + interprocess_filetime ftCreationTime; + interprocess_filetime ftLastAccessTime; + interprocess_filetime ftLastWriteTime; + unsigned long nFileSizeHigh; + unsigned long nFileSizeLow; + unsigned long dwReserved0; + unsigned long dwReserved1; + char cFileName[MaxPath]; + char cAlternateFileName[14]; +}; + +struct interprocess_security_attributes +{ + unsigned long nLength; + void *lpSecurityDescriptor; + int bInheritHandle; +}; + +struct system_info { + union { + unsigned long dwOemId; // Obsolete field...do not use + struct { + unsigned short wProcessorArchitecture; + unsigned short wReserved; + } dummy; + }; + unsigned long dwPageSize; + void * lpMinimumApplicationAddress; + void * lpMaximumApplicationAddress; + unsigned long * dwActiveProcessorMask; + unsigned long dwNumberOfProcessors; + unsigned long dwProcessorType; + unsigned long dwAllocationGranularity; + unsigned short wProcessorLevel; + unsigned short wProcessorRevision; +}; + +struct interprocess_memory_basic_information +{ + void * BaseAddress; + void * AllocationBase; + unsigned long AllocationProtect; + unsigned long RegionSize; + unsigned long State; + unsigned long Protect; + unsigned long Type; +}; + +typedef struct _interprocess_acl +{ + unsigned char AclRevision; + unsigned char Sbz1; + unsigned short AclSize; + unsigned short AceCount; + unsigned short Sbz2; +} interprocess_acl; + +typedef struct _interprocess_security_descriptor +{ + unsigned char Revision; + unsigned char Sbz1; + unsigned short Control; + void *Owner; + void *Group; + interprocess_acl *Sacl; + interprocess_acl *Dacl; +} interprocess_security_descriptor; + +enum file_information_class_t { + file_directory_information = 1, + file_full_directory_information, + file_both_directory_information, + file_basic_information, + file_standard_information, + file_internal_information, + file_ea_information, + file_access_information, + file_name_information, + file_rename_information, + file_link_information, + file_names_information, + file_disposition_information, + file_position_information, + file_full_ea_information, + file_mode_information, + file_alignment_information, + file_all_information, + file_allocation_information, + file_end_of_file_information, + file_alternate_name_information, + file_stream_information, + file_pipe_information, + file_pipe_local_information, + file_pipe_remote_information, + file_mailslot_query_information, + file_mailslot_set_information, + file_compression_information, + file_copy_on_write_information, + file_completion_information, + file_move_cluster_information, + file_quota_information, + file_reparse_point_information, + file_network_open_information, + file_object_id_information, + file_tracking_information, + file_ole_directory_information, + file_content_index_information, + file_inherit_content_index_information, + file_ole_information, + file_maximum_information +}; + +struct file_name_information_t { + unsigned long FileNameLength; + wchar_t FileName[1]; +}; + +struct file_rename_information_t { + int Replace; + void *RootDir; + unsigned long FileNameLength; + wchar_t FileName[1]; +}; + +struct unicode_string_t { + unsigned short Length; + unsigned short MaximumLength; + wchar_t *Buffer; +}; + +struct object_attributes_t { + unsigned long Length; + void * RootDirectory; + unicode_string_t *ObjectName; + unsigned long Attributes; + void *SecurityDescriptor; + void *SecurityQualityOfService; +}; + +struct io_status_block_t { + union { + long Status; + void *Pointer; + }; + + unsigned long *Information; +}; + +union system_timeofday_information +{ + struct data_t + { + __int64 liKeBootTime; + __int64 liKeSystemTime; + __int64 liExpTimeZoneBias; + unsigned long uCurrentTimeZoneId; + unsigned long dwReserved; + } data; + unsigned char Reserved1[SystemTimeOfDayInfoLength]; +}; + +struct interprocess_by_handle_file_information +{ + unsigned long dwFileAttributes; + interprocess_filetime ftCreationTime; + interprocess_filetime ftLastAccessTime; + interprocess_filetime ftLastWriteTime; + unsigned long dwVolumeSerialNumber; + unsigned long nFileSizeHigh; + unsigned long nFileSizeLow; + unsigned long nNumberOfLinks; + unsigned long nFileIndexHigh; + unsigned long nFileIndexLow; +}; + +enum system_information_class { + system_basic_information = 0, + system_performance_information = 2, + system_time_of_day_information = 3, + system_process_information = 5, + system_processor_performance_information = 8, + system_interrupt_information = 23, + system_exception_information = 33, + system_registry_quota_information = 37, + system_lookaside_information = 45 +}; + +enum object_information_class +{ + object_basic_information, + object_name_information, + object_type_information, + object_all_information, + object_data_information +}; + +struct object_name_information_t +{ + unicode_string_t Name; + wchar_t NameBuffer[1]; +}; + +//Some windows API declarations +extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentProcessId(); +extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); +extern "C" __declspec(dllimport) int __stdcall GetProcessTimes + ( void *hProcess, interprocess_filetime* lpCreationTime + , interprocess_filetime *lpExitTime,interprocess_filetime *lpKernelTime + , interprocess_filetime *lpUserTime ); +extern "C" __declspec(dllimport) void __stdcall Sleep(unsigned long); +extern "C" __declspec(dllimport) int __stdcall SwitchToThread(); +extern "C" __declspec(dllimport) unsigned long __stdcall GetLastError(); +extern "C" __declspec(dllimport) void __stdcall SetLastError(unsigned long); +extern "C" __declspec(dllimport) void * __stdcall GetCurrentProcess(); +extern "C" __declspec(dllimport) int __stdcall CloseHandle(void*); +extern "C" __declspec(dllimport) int __stdcall DuplicateHandle + ( void *hSourceProcessHandle, void *hSourceHandle + , void *hTargetProcessHandle, void **lpTargetHandle + , unsigned long dwDesiredAccess, int bInheritHandle + , unsigned long dwOptions); +extern "C" __declspec(dllimport) void *__stdcall FindFirstFileA(const char *lpFileName, win32_find_data_t *lpFindFileData); +extern "C" __declspec(dllimport) int __stdcall FindNextFileA(void *hFindFile, win32_find_data_t *lpFindFileData); +extern "C" __declspec(dllimport) int __stdcall FindClose(void *hFindFile); +//extern "C" __declspec(dllimport) void __stdcall GetSystemTimeAsFileTime(interprocess_filetime*); +//extern "C" __declspec(dllimport) int __stdcall FileTimeToLocalFileTime(const interprocess_filetime *in, const interprocess_filetime *out); +extern "C" __declspec(dllimport) void * __stdcall CreateMutexA(interprocess_security_attributes*, int, const char *); +extern "C" __declspec(dllimport) void * __stdcall OpenMutexA(unsigned long, int, const char *); +extern "C" __declspec(dllimport) unsigned long __stdcall WaitForSingleObject(void *, unsigned long); +extern "C" __declspec(dllimport) int __stdcall ReleaseMutex(void *); +extern "C" __declspec(dllimport) int __stdcall UnmapViewOfFile(void *); +extern "C" __declspec(dllimport) void * __stdcall CreateSemaphoreA(interprocess_security_attributes*, long, long, const char *); +extern "C" __declspec(dllimport) int __stdcall ReleaseSemaphore(void *, long, long *); +extern "C" __declspec(dllimport) void * __stdcall OpenSemaphoreA(unsigned long, int, const char *); +extern "C" __declspec(dllimport) void * __stdcall CreateFileMappingA (void *, interprocess_security_attributes*, unsigned long, unsigned long, unsigned long, const char *); +extern "C" __declspec(dllimport) void * __stdcall MapViewOfFileEx (void *, unsigned long, unsigned long, unsigned long, std::size_t, void*); +extern "C" __declspec(dllimport) void * __stdcall OpenFileMappingA (unsigned long, int, const char *); +extern "C" __declspec(dllimport) void * __stdcall CreateFileA (const char *, unsigned long, unsigned long, struct interprocess_security_attributes*, unsigned long, unsigned long, void *); +extern "C" __declspec(dllimport) int __stdcall DeleteFileA (const char *); +extern "C" __declspec(dllimport) int __stdcall MoveFileExA (const char *, const char *, unsigned long); +extern "C" __declspec(dllimport) void __stdcall GetSystemInfo (struct system_info *); +extern "C" __declspec(dllimport) int __stdcall FlushViewOfFile (void *, std::size_t); +extern "C" __declspec(dllimport) int __stdcall FlushFileBuffers (void *); +extern "C" __declspec(dllimport) int __stdcall GetFileSizeEx (void *, __int64 *size); +extern "C" __declspec(dllimport) unsigned long __stdcall FormatMessageA + (unsigned long dwFlags, const void *lpSource, unsigned long dwMessageId, + unsigned long dwLanguageId, char *lpBuffer, unsigned long nSize, + std::va_list *Arguments); +extern "C" __declspec(dllimport) void *__stdcall LocalFree (void *); +extern "C" __declspec(dllimport) unsigned long __stdcall GetFileAttributesA(const char *); +extern "C" __declspec(dllimport) int __stdcall CreateDirectoryA(const char *, interprocess_security_attributes*); +extern "C" __declspec(dllimport) int __stdcall RemoveDirectoryA(const char *lpPathName); +extern "C" __declspec(dllimport) int __stdcall GetTempPathA(unsigned long length, char *buffer); +extern "C" __declspec(dllimport) int __stdcall CreateDirectory(const char *, interprocess_security_attributes*); +extern "C" __declspec(dllimport) int __stdcall SetFileValidData(void *, __int64 size); +extern "C" __declspec(dllimport) int __stdcall SetEndOfFile(void *); +extern "C" __declspec(dllimport) int __stdcall SetFilePointerEx(void *, __int64 distance, __int64 *new_file_pointer, unsigned long move_method); +extern "C" __declspec(dllimport) int __stdcall LockFile (void *hnd, unsigned long offset_low, unsigned long offset_high, unsigned long size_low, unsigned long size_high); +extern "C" __declspec(dllimport) int __stdcall UnlockFile(void *hnd, unsigned long offset_low, unsigned long offset_high, unsigned long size_low, unsigned long size_high); +extern "C" __declspec(dllimport) int __stdcall LockFileEx(void *hnd, unsigned long flags, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped* overlapped); +extern "C" __declspec(dllimport) int __stdcall UnlockFileEx(void *hnd, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped* overlapped); +extern "C" __declspec(dllimport) int __stdcall WriteFile(void *hnd, const void *buffer, unsigned long bytes_to_write, unsigned long *bytes_written, interprocess_overlapped* overlapped); +extern "C" __declspec(dllimport) int __stdcall InitializeSecurityDescriptor(interprocess_security_descriptor *pSecurityDescriptor, unsigned long dwRevision); +extern "C" __declspec(dllimport) int __stdcall SetSecurityDescriptorDacl(interprocess_security_descriptor *pSecurityDescriptor, int bDaclPresent, interprocess_acl *pDacl, int bDaclDefaulted); +extern "C" __declspec(dllimport) void *__stdcall LoadLibraryA(const char *); +extern "C" __declspec(dllimport) int __stdcall FreeLibrary(void *); +extern "C" __declspec(dllimport) void *__stdcall GetProcAddress(void *, const char*); +extern "C" __declspec(dllimport) void *__stdcall GetModuleHandleA(const char*); +extern "C" __declspec(dllimport) void *__stdcall GetFileInformationByHandle(void *, interprocess_by_handle_file_information*); +extern "C" __declspec(dllimport) unsigned long __stdcall GetMappedFileNameW(void *, void *, wchar_t *, unsigned long); +extern "C" __declspec(dllimport) long __stdcall RegOpenKeyExA(void *, const char *, unsigned long, unsigned long, void **); +extern "C" __declspec(dllimport) long __stdcall RegQueryValueExA(void *, const char *, unsigned long*, unsigned long*, unsigned char *, unsigned long*); +extern "C" __declspec(dllimport) long __stdcall RegCloseKey(void *); +extern "C" __declspec(dllimport) int __stdcall QueryPerformanceCounter(__int64 *lpPerformanceCount); + +//COM API +extern "C" __declspec(dllimport) long __stdcall CoInitialize(void *pvReserved); +extern "C" __declspec(dllimport) long __stdcall CoInitializeSecurity( + void* pSecDesc, + long cAuthSvc, + void *asAuthSvc, + void *pReserved1, + unsigned long dwAuthnLevel, + unsigned long dwImpLevel, + void *pAuthList, + unsigned long dwCapabilities, + void *pReserved3 ); + + extern "C" __declspec(dllimport) long __stdcall CoSetProxyBlanket( + IUnknown_BIPC *pProxy, + unsigned long dwAuthnSvc, + unsigned long dwAuthzSvc, + wchar_t *pServerPrincName, + unsigned long dwAuthnLevel, + unsigned long dwImpLevel, + void *pAuthInfo, + unsigned long dwCapabilities); + +extern "C" __declspec(dllimport) long __stdcall VariantClear(wchar_variant * pvarg); +extern "C" __declspec(dllimport) long __stdcall CoCreateInstance(const GUID_BIPC & rclsid, IUnknown_BIPC *pUnkOuter, + unsigned long dwClsContext, const GUID_BIPC & riid, void** ppv); +extern "C" __declspec(dllimport) void __stdcall CoUninitialize(void); + + + +//API function typedefs +//Pointer to functions +typedef long (__stdcall *NtDeleteFile_t)(object_attributes_t *ObjectAttributes); +typedef long (__stdcall *NtSetInformationFile_t)(void *FileHandle, io_status_block_t *IoStatusBlock, void *FileInformation, unsigned long Length, int FileInformationClass ); +typedef long (__stdcall * NtQuerySystemInformation_t)(int, void*, unsigned long, unsigned long *); +typedef long (__stdcall * NtQueryObject_t)(void*, object_information_class, void *, unsigned long, unsigned long *); +typedef long (__stdcall *NtQueryInformationFile_t)(void *,io_status_block_t *,void *, long, int); +typedef long (__stdcall *NtOpenFile_t)(void*,unsigned long ,object_attributes_t*,io_status_block_t*,unsigned long,unsigned long); +typedef long (__stdcall *NtClose_t) (void*); +typedef long (__stdcall *RtlCreateUnicodeStringFromAsciiz_t)(unicode_string_t *, const char *); +typedef void (__stdcall *RtlFreeUnicodeString_t)(unicode_string_t *); +typedef void (__stdcall *RtlInitUnicodeString_t)( unicode_string_t *, const wchar_t * ); +typedef long (__stdcall *RtlAppendUnicodeToString_t)(unicode_string_t *Destination, const wchar_t *Source); +typedef unsigned long (__stdcall * GetMappedFileName_t)(void *, void *, wchar_t *, unsigned long); +typedef long (__stdcall * RegOpenKeyEx_t)(void *, const char *, unsigned long, unsigned long, void **); +typedef long (__stdcall * RegQueryValueEx_t)(void *, const char *, unsigned long*, unsigned long*, unsigned char *, unsigned long*); +typedef long (__stdcall * RegCloseKey_t)(void *); + +} //namespace winapi { +} //namespace interprocess { +} //namespace boost { + +namespace boost { +namespace interprocess { +namespace winapi { + +inline unsigned long get_last_error() +{ return GetLastError(); } + +inline void set_last_error(unsigned long err) +{ return SetLastError(err); } + +inline unsigned long format_message + (unsigned long dwFlags, const void *lpSource, + unsigned long dwMessageId, unsigned long dwLanguageId, + char *lpBuffer, unsigned long nSize, std::va_list *Arguments) +{ + return FormatMessageA + (dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments); +} + +//And now, wrapper functions +inline void * local_free(void *hmem) +{ return LocalFree(hmem); } + +inline unsigned long make_lang_id(unsigned long p, unsigned long s) +{ return ((((unsigned short)(s)) << 10) | (unsigned short)(p)); } + +inline void sched_yield() +{ + if(!SwitchToThread()){ + Sleep(1); + } +} + +inline void sleep(unsigned long ms) +{ Sleep(ms); } + +inline unsigned long get_current_thread_id() +{ return GetCurrentThreadId(); } + +inline bool get_process_times + ( void *hProcess, interprocess_filetime* lpCreationTime + , interprocess_filetime *lpExitTime, interprocess_filetime *lpKernelTime + , interprocess_filetime *lpUserTime ) +{ return 0 != GetProcessTimes(hProcess, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime); } + +inline unsigned long get_current_process_id() +{ return GetCurrentProcessId(); } + +inline unsigned int close_handle(void* handle) +{ return CloseHandle(handle); } + +inline void * find_first_file(const char *lpFileName, win32_find_data_t *lpFindFileData) +{ return FindFirstFileA(lpFileName, lpFindFileData); } + +inline bool find_next_file(void *hFindFile, win32_find_data_t *lpFindFileData) +{ return FindNextFileA(hFindFile, lpFindFileData) != 0; } + +inline bool find_close(void *handle) +{ return FindClose(handle) != 0; } + +inline bool duplicate_current_process_handle + (void *hSourceHandle, void **lpTargetHandle) +{ + return 0 != DuplicateHandle + ( GetCurrentProcess(), hSourceHandle, GetCurrentProcess() + , lpTargetHandle, 0, 0 + , duplicate_same_access); +} +/* +inline void get_system_time_as_file_time(interprocess_filetime *filetime) +{ GetSystemTimeAsFileTime(filetime); } + +inline bool file_time_to_local_file_time + (const interprocess_filetime *in, const interprocess_filetime *out) +{ return 0 != FileTimeToLocalFileTime(in, out); } +*/ +inline void *open_or_create_mutex(const char *name, bool initial_owner, interprocess_security_attributes *attr) +{ return CreateMutexA(attr, (int)initial_owner, name); } + +inline unsigned long wait_for_single_object(void *handle, unsigned long time) +{ return WaitForSingleObject(handle, time); } + +inline int release_mutex(void *handle) +{ return ReleaseMutex(handle); } + +inline int unmap_view_of_file(void *address) +{ return UnmapViewOfFile(address); } + +inline void *open_or_create_semaphore(const char *name, long initial_count, long maximum_count, interprocess_security_attributes *attr) +{ return CreateSemaphoreA(attr, initial_count, maximum_count, name); } + +inline int release_semaphore(void *handle, long release_count, long *prev_count) +{ return ReleaseSemaphore(handle, release_count, prev_count); } + +class interprocess_all_access_security +{ + interprocess_security_attributes sa; + interprocess_security_descriptor sd; + bool initialized; + + public: + interprocess_all_access_security() + : initialized(false) + { + if(!InitializeSecurityDescriptor(&sd, security_descriptor_revision)) + return; + if(!SetSecurityDescriptorDacl(&sd, true, 0, false)) + return; + sa.lpSecurityDescriptor = &sd; + sa.nLength = sizeof(interprocess_security_attributes); + sa.bInheritHandle = false; + initialized = false; + } + + interprocess_security_attributes *get_attributes() + { return &sa; } +}; + +inline void * create_file_mapping (void * handle, unsigned long access, unsigned long high_size, unsigned long low_size, const char * name, interprocess_security_attributes *psec) +{ + return CreateFileMappingA (handle, psec, access, high_size, low_size, name); +} + +inline void * open_file_mapping (unsigned long access, const char *name) +{ return OpenFileMappingA (access, 0, name); } + +inline void *map_view_of_file_ex(void *handle, unsigned long file_access, unsigned long highoffset, unsigned long lowoffset, std::size_t numbytes, void *base_addr) +{ return MapViewOfFileEx(handle, file_access, highoffset, lowoffset, numbytes, base_addr); } + +inline void *create_file(const char *name, unsigned long access, unsigned long creation_flags, unsigned long attributes, interprocess_security_attributes *psec) +{ + for (unsigned int attempt(0); attempt < error_sharing_violation_tries; ++attempt){ + void * const handle = CreateFileA(name, access, + file_share_read | file_share_write | file_share_delete, + psec, creation_flags, attributes, 0); + bool const invalid(invalid_handle_value == handle); + if (!invalid){ + return handle; + } + if (error_sharing_violation != get_last_error()){ + return handle; + } + Sleep(error_sharing_violation_sleep_ms); + } + return invalid_handle_value; +} + +inline bool delete_file(const char *name) +{ return 0 != DeleteFileA(name); } + +inline bool move_file_ex(const char *source_filename, const char *destination_filename, unsigned long flags) +{ return 0 != MoveFileExA(source_filename, destination_filename, flags); } + +inline void get_system_info(system_info *info) +{ GetSystemInfo(info); } + +inline bool flush_view_of_file(void *base_addr, std::size_t numbytes) +{ return 0 != FlushViewOfFile(base_addr, numbytes); } + +inline bool flush_file_buffers(void *handle) +{ return 0 != FlushFileBuffers(handle); } + +inline bool get_file_size(void *handle, __int64 &size) +{ return 0 != GetFileSizeEx(handle, &size); } + +inline bool create_directory(const char *name) +{ + interprocess_all_access_security sec; + return 0 != CreateDirectoryA(name, sec.get_attributes()); +} + +inline bool remove_directory(const char *lpPathName) +{ return 0 != RemoveDirectoryA(lpPathName); } + +inline unsigned long get_temp_path(unsigned long length, char *buffer) +{ return GetTempPathA(length, buffer); } + +inline int set_end_of_file(void *handle) +{ return 0 != SetEndOfFile(handle); } + +inline bool set_file_pointer_ex(void *handle, __int64 distance, __int64 *new_file_pointer, unsigned long move_method) +{ return 0 != SetFilePointerEx(handle, distance, new_file_pointer, move_method); } + +inline bool lock_file_ex(void *hnd, unsigned long flags, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped *overlapped) +{ return 0 != LockFileEx(hnd, flags, reserved, size_low, size_high, overlapped); } + +inline bool unlock_file_ex(void *hnd, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped *overlapped) +{ return 0 != UnlockFileEx(hnd, reserved, size_low, size_high, overlapped); } + +inline bool write_file(void *hnd, const void *buffer, unsigned long bytes_to_write, unsigned long *bytes_written, interprocess_overlapped* overlapped) +{ return 0 != WriteFile(hnd, buffer, bytes_to_write, bytes_written, overlapped); } + +inline bool get_file_information_by_handle(void *hnd, interprocess_by_handle_file_information *info) +{ return 0 != GetFileInformationByHandle(hnd, info); } + +inline long interlocked_increment(long volatile *addr) +{ return BOOST_INTERLOCKED_INCREMENT(addr); } + +inline long interlocked_decrement(long volatile *addr) +{ return BOOST_INTERLOCKED_DECREMENT(addr); } + +inline long interlocked_compare_exchange(long volatile *addr, long val1, long val2) +{ return BOOST_INTERLOCKED_COMPARE_EXCHANGE(addr, val1, val2); } + +inline long interlocked_exchange_add(long volatile* addend, long value) +{ return BOOST_INTERLOCKED_EXCHANGE_ADD(const_cast(addend), value); } + +inline long interlocked_exchange(long volatile* addend, long value) +{ return BOOST_INTERLOCKED_EXCHANGE(const_cast(addend), value); } + +//Forward functions +inline void *load_library(const char *name) +{ return LoadLibraryA(name); } + +inline bool free_library(void *module) +{ return 0 != FreeLibrary(module); } + +inline void *get_proc_address(void *module, const char *name) +{ return GetProcAddress(module, name); } + +inline void *get_current_process() +{ return GetCurrentProcess(); } + +inline void *get_module_handle(const char *name) +{ return GetModuleHandleA(name); } + +inline unsigned long get_mapped_file_name(void *process, void *lpv, wchar_t *lpfilename, unsigned long nSize) +{ return GetMappedFileNameW(process, lpv, lpfilename, nSize); } + +inline long reg_open_key_ex(void *hKey, const char *lpSubKey, unsigned long ulOptions, unsigned long samDesired, void **phkResult) +{ return RegOpenKeyExA(hKey, lpSubKey, ulOptions, samDesired, phkResult); } + +inline long reg_query_value_ex(void *hKey, const char *lpValueName, unsigned long*lpReserved, unsigned long*lpType, unsigned char *lpData, unsigned long*lpcbData) +{ return RegQueryValueExA(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData); } + +inline long reg_close_key(void *hKey) +{ return RegCloseKey(hKey); } + +inline bool query_performance_counter(__int64 *lpPerformanceCount) +{ + return 0 != QueryPerformanceCounter(lpPerformanceCount); +} + +inline void initialize_object_attributes +( object_attributes_t *pobject_attr, unicode_string_t *name + , unsigned long attr, void *rootdir, void *security_descr) + +{ + pobject_attr->Length = sizeof(object_attributes_t); + pobject_attr->RootDirectory = rootdir; + pobject_attr->Attributes = attr; + pobject_attr->ObjectName = name; + pobject_attr->SecurityDescriptor = security_descr; + pobject_attr->SecurityQualityOfService = 0; +} + +inline void rtl_init_empty_unicode_string(unicode_string_t *ucStr, wchar_t *buf, unsigned short bufSize) +{ + ucStr->Buffer = buf; + ucStr->Length = 0; + ucStr->MaximumLength = bufSize; +} + +//A class that locates and caches loaded DLL function addresses. +template +struct function_address_holder +{ + enum { NtSetInformationFile, NtQuerySystemInformation, NtQueryObject, NumFunction }; + enum { NtDll_dll, NumModule }; + + private: + static void *FunctionAddresses[NumFunction]; + static volatile long FunctionStates[NumFunction]; + static void *ModuleAddresses[NumModule]; + static volatile long ModuleStates[NumModule]; + + static void *get_module_from_id(unsigned int id) + { + assert(id < (unsigned int)NumModule); + const char *module[] = { "ntdll.dll" }; + bool compile_check[sizeof(module)/sizeof(module[0]) == NumModule]; + (void)compile_check; + return get_module_handle(module[id]); + } + + static void *get_module(const unsigned int id) + { + assert(id < (unsigned int)NumModule); + while(ModuleStates[id] < 2){ + if(interlocked_compare_exchange(&ModuleStates[id], 1, 0) == 0){ + ModuleAddresses[id] = get_module_from_id(id); + interlocked_increment(&ModuleStates[id]); + break; + } + else{ + sched_yield(); + } + } + return ModuleAddresses[id]; + } + + static void *get_address_from_dll(const unsigned int id) + { + assert(id < (unsigned int)NumFunction); + const char *function[] = { "NtSetInformationFile", "NtQuerySystemInformation", "NtQueryObject" }; + bool compile_check[sizeof(function)/sizeof(function[0]) == NumFunction]; + (void)compile_check; + return get_proc_address(get_module(NtDll_dll), function[id]); + } + + public: + static void *get(const unsigned int id) + { + assert(id < (unsigned int)NumFunction); + while(FunctionStates[id] < 2){ + if(interlocked_compare_exchange(&FunctionStates[id], 1, 0) == 0){ + FunctionAddresses[id] = get_address_from_dll(id); + interlocked_increment(&FunctionStates[id]); + break; + } + else{ + sched_yield(); + } + } + return FunctionAddresses[id]; + } +}; + +template +void *function_address_holder::FunctionAddresses[function_address_holder::NumFunction]; + +template +volatile long function_address_holder::FunctionStates[function_address_holder::NumFunction]; + +template +void *function_address_holder::ModuleAddresses[function_address_holder::NumModule]; + +template +volatile long function_address_holder::ModuleStates[function_address_holder::NumModule]; + + +struct dll_func + : public function_address_holder<0> +{}; + +//Complex winapi based functions... +struct library_unloader +{ + void *lib_; + library_unloader(void *module) : lib_(module){} + ~library_unloader(){ free_library(lib_); } +}; + +//pszFilename must have room for at least MaxPath+1 characters +inline bool get_file_name_from_handle_function + (void * hFile, wchar_t *pszFilename, std::size_t length, std::size_t &out_length) +{ + if(length <= MaxPath){ + return false; + } + +// void *hiPSAPI = load_library("PSAPI.DLL"); +// if (0 == hiPSAPI) +// return 0; +// library_unloader unloader(hiPSAPI); + +// Pointer to function getMappedFileName() in PSAPI.DLL +// GetMappedFileName_t pfGMFN = +// (GetMappedFileName_t)get_proc_address(hiPSAPI, "GetMappedFileNameW"); +// if (! pfGMFN){ +// return 0; // Failed: unexpected error +// } + + bool bSuccess = false; + + // Create a file mapping object. + void * hFileMap = create_file_mapping(hFile, page_readonly, 0, 1, 0, 0); + if(hFileMap){ + // Create a file mapping to get the file name. + void* pMem = map_view_of_file_ex(hFileMap, file_map_read, 0, 0, 1, 0); + + if (pMem){ + //out_length = pfGMFN(get_current_process(), pMem, pszFilename, MaxPath); + out_length = get_mapped_file_name(get_current_process(), pMem, pszFilename, MaxPath); + if(out_length){ + bSuccess = true; + } + unmap_view_of_file(pMem); + } + close_handle(hFileMap); + } + + return(bSuccess); +} + +inline bool get_system_time_of_day_information(system_timeofday_information &info) +{ + NtQuerySystemInformation_t pNtQuerySystemInformation = (NtQuerySystemInformation_t) + //get_proc_address(get_module_handle("ntdll.dll"), "NtQuerySystemInformation"); + dll_func::get(dll_func::NtQuerySystemInformation); + unsigned long res; + long status = pNtQuerySystemInformation(system_time_of_day_information, &info, sizeof(info), &res); + if(status){ + return false; + } + return true; +} + +inline bool get_boot_time(unsigned char (&bootstamp) [BootstampLength]) +{ + system_timeofday_information info; + bool ret = get_system_time_of_day_information(info); + if(!ret){ + return false; + } + std::memcpy(&bootstamp[0], &info.Reserved1, sizeof(bootstamp)); + return true; +} + +inline bool get_boot_and_system_time(unsigned char (&bootsystemstamp) [BootAndSystemstampLength]) +{ + system_timeofday_information info; + bool ret = get_system_time_of_day_information(info); + if(!ret){ + return false; + } + std::memcpy(&bootsystemstamp[0], &info.Reserved1, sizeof(bootsystemstamp)); + return true; +} + +inline bool get_boot_time_str(char *bootstamp_str, std::size_t &s) //will write BootstampLength chars +{ + if(s < (BootstampLength*2)) + return false; + system_timeofday_information info; + bool ret = get_system_time_of_day_information(info); + if(!ret){ + return false; + } + const char Characters [] = + { '0', '1', '2', '3', '4', '5', '6', '7' + , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + std::size_t char_counter = 0; + for(std::size_t i = 0; i != static_cast(BootstampLength); ++i){ + bootstamp_str[char_counter++] = Characters[(info.Reserved1[i]&0xF0)>>4]; + bootstamp_str[char_counter++] = Characters[(info.Reserved1[i]&0x0F)]; + } + s = BootstampLength*2; + return true; +} + +inline bool get_boot_and_system_time_wstr(wchar_t *bootsystemstamp, std::size_t &s) //will write BootAndSystemstampLength chars +{ + if(s < (BootAndSystemstampLength*2)) + return false; + system_timeofday_information info; + bool ret = get_system_time_of_day_information(info); + if(!ret){ + return false; + } + const wchar_t Characters [] = + { L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7' + , L'8', L'9', L'A', L'B', L'C', L'D', L'E', L'F' }; + std::size_t char_counter = 0; + for(std::size_t i = 0; i != static_cast(BootAndSystemstampLength); ++i){ + bootsystemstamp[char_counter++] = Characters[(info.Reserved1[i]&0xF0)>>4]; + bootsystemstamp[char_counter++] = Characters[(info.Reserved1[i]&0x0F)]; + } + s = BootAndSystemstampLength*2; + return true; +} + +class handle_closer +{ + void *handle_; + public: + handle_closer(void *handle) : handle_(handle){} + ~handle_closer(){ close_handle(handle_); } +}; + +union ntquery_mem_t +{ + object_name_information_t name; + struct ren_t + { + file_rename_information_t info; + wchar_t buf[32767]; + } ren; +}; + +inline bool unlink_file(const char *filename) +{ + if(!delete_file(filename)){ + try{ + NtSetInformationFile_t pNtSetInformationFile = + //(NtSetInformationFile_t)get_proc_address(get_module_handle("ntdll.dll"), "NtSetInformationFile"); + (NtSetInformationFile_t)dll_func::get(dll_func::NtSetInformationFile); + if(!pNtSetInformationFile){ + return false; + } + + NtQueryObject_t pNtQueryObject = + //(NtQueryObject_t)get_proc_address(get_module_handle("ntdll.dll"), "NtQueryObject"); + (NtQueryObject_t)dll_func::get(dll_func::NtQueryObject); + + //First step: Obtain a handle to the file using Win32 rules. This resolves relative paths + void *fh = create_file(filename, generic_read | delete_access, open_existing, + file_flag_backup_semantics | file_flag_delete_on_close, 0); + if(fh == invalid_handle_value){ + return false; + } + + handle_closer h_closer(fh); + + std::auto_ptr pmem(new ntquery_mem_t); + file_rename_information_t *pfri = &pmem->ren.info; + const std::size_t RenMaxNumChars = + ((char*)pmem.get() - (char*)&pmem->ren.info.FileName[0])/sizeof(wchar_t); + + //Obtain file name + unsigned long size; + if(pNtQueryObject(fh, object_name_information, pmem.get(), sizeof(ntquery_mem_t), &size)){ + return false; + } + + //Copy filename to the rename member + std::memmove(pmem->ren.info.FileName, pmem->name.Name.Buffer, pmem->name.Name.Length); + std::size_t filename_string_length = pmem->name.Name.Length/sizeof(wchar_t); + + //Second step: obtain the complete native-nt filename + //if(!get_file_name_from_handle_function(fh, pfri->FileName, RenMaxNumChars, filename_string_length)){ + //return 0; + //} + + //Add trailing mark + if((RenMaxNumChars-filename_string_length) < (SystemTimeOfDayInfoLength*2)){ + return false; + } + + //Search '\\' character to replace it + for(std::size_t i = filename_string_length; i != 0; --filename_string_length){ + if(pmem->ren.info.FileName[--i] == L'\\') + break; + } + + //Add random number + std::size_t s = RenMaxNumChars - filename_string_length; + if(!get_boot_and_system_time_wstr(&pfri->FileName[filename_string_length], s)){ + return false; + } + filename_string_length += s; + + //Fill rename information (FileNameLength is in bytes) + pfri->FileNameLength = static_cast(sizeof(wchar_t)*(filename_string_length)); + pfri->Replace = 1; + pfri->RootDir = 0; + + //Final step: change the name of the in-use file: + io_status_block_t io; + if(0 != pNtSetInformationFile(fh, &io, pfri, sizeof(ntquery_mem_t::ren_t), file_rename_information)){ + return false; + } + return true; + } + catch(...){ + return false; + } + } + return true; +} + +struct reg_closer +{ + //reg_closer(RegCloseKey_t func, void *key) : func_(func), key_(key){} + //~reg_closer(){ (*func_)(key_); } + //RegCloseKey_t func_; + void *key_; + reg_closer(void *key) : key_(key){} + ~reg_closer(){ reg_close_key(key_); } +}; + +inline void get_shared_documents_folder(std::string &s) +{ + s.clear(); + //void *hAdvapi = load_library("Advapi32.dll"); + //if (hAdvapi){ + //library_unloader unloader(hAdvapi); + // Pointer to function RegOpenKeyA + //RegOpenKeyEx_t pRegOpenKey = + //(RegOpenKeyEx_t)get_proc_address(hAdvapi, "RegOpenKeyExA"); + //if (pRegOpenKey){ + // Pointer to function RegCloseKey + //RegCloseKey_t pRegCloseKey = + //(RegCloseKey_t)get_proc_address(hAdvapi, "RegCloseKey"); + //if (pRegCloseKey){ + // Pointer to function RegQueryValueA + //RegQueryValueEx_t pRegQueryValue = + //(RegQueryValueEx_t)get_proc_address(hAdvapi, "RegQueryValueExA"); + //if (pRegQueryValue){ + //Open the key + void *key; + //if ((*pRegOpenKey)( hkey_local_machine + //, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" + //, 0 + //, key_query_value + //, &key) == 0){ + //reg_closer key_closer(pRegCloseKey, key); + if (reg_open_key_ex( hkey_local_machine + , "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" + , 0 + , key_query_value + , &key) == 0){ + reg_closer key_closer(key); + + //Obtain the value + unsigned long size; + unsigned long type; + const char *const reg_value = "Common AppData"; + //long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); + long err = reg_query_value_ex( key, reg_value, 0, &type, 0, &size); + if(!err){ + //Size includes terminating NULL + s.resize(size); + //err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + err = reg_query_value_ex( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + if(!err) + s.erase(s.end()-1); + (void)err; + } + } + //} + //} + //} + //} +} + + +inline void get_registry_value(const char *folder, const char *value_key, std::vector &s) +{ + s.clear(); + //void *hAdvapi = load_library("Advapi32.dll"); + //if (hAdvapi){ + //library_unloader unloader(hAdvapi); + // Pointer to function RegOpenKeyA + //RegOpenKeyEx_t pRegOpenKey = + //(RegOpenKeyEx_t)get_proc_address(hAdvapi, "RegOpenKeyExA"); + //if (pRegOpenKey){ + // Pointer to function RegCloseKey + //RegCloseKey_t pRegCloseKey = + //(RegCloseKey_t)get_proc_address(hAdvapi, "RegCloseKey"); + //if (pRegCloseKey){ + // Pointer to function RegQueryValueA + //RegQueryValueEx_t pRegQueryValue = + //(RegQueryValueEx_t)get_proc_address(hAdvapi, "RegQueryValueExA"); + //if (pRegQueryValue){ + //Open the key + void *key; + //if ((*pRegOpenKey)( hkey_local_machine + //, folder + //, 0 + //, key_query_value + //, &key) == 0){ + //reg_closer key_closer(pRegCloseKey, key); + if (reg_open_key_ex( hkey_local_machine + , folder + , 0 + , key_query_value + , &key) == 0){ + reg_closer key_closer(key); + + //Obtain the value + unsigned long size; + unsigned long type; + const char *const reg_value = value_key; + //long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); + long err = reg_query_value_ex( key, reg_value, 0, &type, 0, &size); + if(!err){ + //Size includes terminating NULL + s.resize(size); + //err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + err = reg_query_value_ex( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + if(!err) + s.erase(s.end()-1); + (void)err; + } + } + //} + //} + //} + //} +} + +struct co_uninitializer +{ ~co_uninitializer() { CoUninitialize(); } }; + +template +struct com_releaser +{ + Object *&object_; + com_releaser(Object *&object) : object_(object) {} + ~com_releaser() { object_->Release(); object_ = 0; } +}; + +inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_class, const wchar_t *wmi_class_var) +{ + //See example http://msdn.microsoft.com/en-us/library/aa390423%28v=VS.85%29.aspx + long co_init_ret = CoInitialize(0); + if(co_init_ret != S_OK_BIPC && co_init_ret != S_FALSE_BIPC) + return false; + co_uninitializer co_initialize_end; + (void)co_initialize_end; + + bool bRet = false; + long sec_init_ret = CoInitializeSecurity + ( 0 //pVoid + ,-1 //cAuthSvc + , 0 //asAuthSvc + , 0 //pReserved1 + , RPC_C_AUTHN_LEVEL_PKT_BIPC //dwAuthnLevel + , RPC_C_IMP_LEVEL_IMPERSONATE_BIPC //dwImpLevel + , 0 //pAuthList + , EOAC_NONE_BIPC //dwCapabilities + , 0 //pReserved3 + ); + if( 0 == sec_init_ret || RPC_E_TOO_LATE_BIPC == sec_init_ret) + { + IWbemLocator_BIPC * pIWbemLocator = 0; + const wchar_t * bstrNamespace = L"root\\cimv2"; + + if( 0 != CoCreateInstance( + CLSID_WbemAdministrativeLocator, + 0, + CLSCTX_INPROC_SERVER_BIPC | CLSCTX_LOCAL_SERVER_BIPC, + IID_IUnknown, (void **)&pIWbemLocator)){ + return false; + } + + com_releaser IWbemLocator_releaser(pIWbemLocator); + + IWbemServices_BIPC *pWbemServices = 0; + + if( 0 != pIWbemLocator->ConnectServer( + bstrNamespace, // Namespace + 0, // Userid + 0, // PW + 0, // Locale + 0, // flags + 0, // Authority + 0, // Context + &pWbemServices + ) + ){ + return false; + } + + if( S_OK_BIPC != CoSetProxyBlanket( + pWbemServices, + RPC_C_AUTHN_DEFAULT_BIPC, + RPC_C_AUTHZ_DEFAULT_BIPC, + 0, + RPC_C_AUTHN_LEVEL_PKT_BIPC, + RPC_C_IMP_LEVEL_IMPERSONATE_BIPC, + 0, + EOAC_NONE_BIPC + ) + ){ + return false; + } + + com_releaser IWbemServices_releaser(pWbemServices); + + strValue.clear(); + strValue += L"Select "; + strValue += wmi_class_var; + strValue += L" from "; + strValue += wmi_class; + + IEnumWbemClassObject_BIPC * pEnumObject = 0; + + if ( 0 != pWbemServices->ExecQuery( + L"WQL", + strValue.c_str(), + //WBEM_FLAG_RETURN_IMMEDIATELY_BIPC, + WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC | WBEM_FLAG_FORWARD_ONLY_BIPC, + 0, + &pEnumObject + ) + ){ + return false; + } + + com_releaser IEnumWbemClassObject_releaser(pEnumObject); + + //WBEM_FLAG_FORWARD_ONLY_BIPC incompatible with Reset + //if ( 0 != pEnumObject->Reset() ){ + //return false; + //} + + wchar_variant vwchar; + unsigned long uCount = 1, uReturned; + IWbemClassObject_BIPC * pClassObject = 0; + while( 0 == pEnumObject->Next( WBEM_INFINITE_BIPC, uCount, &pClassObject, &uReturned ) ) + { + com_releaser IWbemClassObject_releaser(pClassObject); + if ( 0 == pClassObject->Get( L"LastBootUpTime", 0, &vwchar, 0, 0 ) ){ + bRet = true; + strValue = vwchar.value.pbstrVal; + VariantClear(&vwchar ); + break; + } + } + } + return bRet; +} + +inline bool get_last_bootup_time( std::wstring& strValue ) +{ + bool ret = get_wmi_class_attribute(strValue, L"Win32_OperatingSystem", L"LastBootUpTime"); + std::size_t timezone = strValue.find(L'+'); + if(timezone != std::wstring::npos){ + strValue.erase(timezone); + } + timezone = strValue.find(L'-'); + if(timezone != std::wstring::npos){ + strValue.erase(timezone); + } + return ret; +} + +inline bool get_last_bootup_time( std::string& str ) +{ + std::wstring wstr; + bool ret = get_last_bootup_time(wstr); + str.resize(wstr.size()); + for(std::size_t i = 0, max = str.size(); i != max; ++i){ + str[i] = '0' + (wstr[i]-L'0'); + } + return ret; +} + +inline bool is_directory(const char *path) +{ + unsigned long attrib = GetFileAttributesA(path); + + return (attrib != invalid_file_attributes && + (attrib & file_attribute_directory)); +} + +} //namespace winapi +} //namespace interprocess +} //namespace boost + +#include + +#endif //#ifdef BOOST_INTERPROCESS_WIN32_PRIMITIVES_HPP diff --git a/external/boost/interprocess/detail/workaround.hpp b/external/boost/interprocess/detail/workaround.hpp new file mode 100644 index 0000000..896a220 --- /dev/null +++ b/external/boost/interprocess/detail/workaround.hpp @@ -0,0 +1,148 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WORKAROUND_HPP +#define BOOST_INTERPROCESS_DETAIL_WORKAROUND_HPP + +#include + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) + +#define BOOST_INTERPROCESS_WINDOWS + +/* +#if !defined(_MSC_EXTENSIONS) +#error "Turn on Microsoft language extensions (_MSC_EXTENSIONS) to be able to call Windows API functions" +#endif +*/ + +#endif + +#if !defined(BOOST_INTERPROCESS_WINDOWS) + + #include + + #if ((_POSIX_THREAD_PROCESS_SHARED - 0) > 0) + //Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not implement it. + //Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but does not seems to work. + # if !defined(__CYGWIN__) && !defined(__APPLE__) + # define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED + # endif + #endif + + #if ((_POSIX_BARRIERS - 0) > 0) + # define BOOST_INTERPROCESS_POSIX_BARRIERS + # endif + + #if ((_POSIX_SEMAPHORES - 0) > 0) + # define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES + # if defined(__CYGWIN__) + #define BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK + # endif + //Some platforms have a limited (name length) named semaphore support + #elif (defined(__FreeBSD__) && (__FreeBSD__ >= 4)) || defined(__APPLE__) + # define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES + #endif + + #if ((defined _V6_ILP32_OFFBIG) &&(_V6_ILP32_OFFBIG - 0 > 0)) ||\ + ((defined _V6_LP64_OFF64) &&(_V6_LP64_OFF64 - 0 > 0)) ||\ + ((defined _V6_LPBIG_OFFBIG) &&(_V6_LPBIG_OFFBIG - 0 > 0)) ||\ + ((defined _XBS5_ILP32_OFFBIG)&&(_XBS5_ILP32_OFFBIG - 0 > 0)) ||\ + ((defined _XBS5_LP64_OFF64) &&(_XBS5_LP64_OFF64 - 0 > 0)) ||\ + ((defined _XBS5_LPBIG_OFFBIG)&&(_XBS5_LPBIG_OFFBIG - 0 > 0)) ||\ + ((defined _FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64))||\ + ((defined _FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64)) + #define BOOST_INTERPROCESS_UNIX_64_BIT_OR_BIGGER_OFF_T + #else + #endif + + //Check for XSI shared memory objects. They are available in nearly all UNIX platforms + #if !defined(__QNXNTO__) + # define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS + #endif + + #if ((_POSIX_SHARED_MEMORY_OBJECTS - 0) > 0) + # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS + #else + //VMS and MACOS don't define it but the have shm_open/close interface + # if defined(__vms) + # if __CRTL_VER >= 70200000 + # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS + # endif + //Mac OS has some non-conformant features like names limited to SHM_NAME_MAX + # elif defined (__APPLE__) +// # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS +// # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS_NO_GROW + # endif + #endif + + //Now check if we have only XSI shared memory + #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) &&\ + !defined(BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS) + //# define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS_ONLY + #endif + + #if ((_POSIX_TIMEOUTS - 0) > 0) + # define BOOST_INTERPROCESS_POSIX_TIMEOUTS + #endif + + + #ifdef BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS + //Some systems have filesystem-based resources, so the + //portable "/shmname" format does not work due to permission issues + //For those systems we need to form a path to a temporary directory: + // hp-ux tru64 vms freebsd + #if defined(__hpux) || defined(__osf__) || defined(__vms) || (defined(__FreeBSD__) && (__FreeBSD__ < 7)) + #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY + #elif defined(__FreeBSD__) + #define BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY + #endif + #endif + + #ifdef BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES + #if defined(__osf__) || defined(__vms) + #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES + #endif + #endif + + #if ((_POSIX_VERSION + 0)>= 200112L || (_XOPEN_VERSION + 0)>= 500) + #define BOOST_INTERPROCESS_POSIX_RECURSIVE_MUTEXES + #endif + +#endif + +#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)\ + && !defined(BOOST_INTERPROCESS_DISABLE_VARIADIC_TMPL) +#define BOOST_INTERPROCESS_PERFECT_FORWARDING +#endif + +//Now declare some Boost.Interprocess features depending on the implementation + +#if defined(BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES) && !defined(BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK) + +#define BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES + +#endif + +#if defined(BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES) && !defined(BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK) + +#define BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES +#define BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES + +#endif + +// Timeout duration use if BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING is set +#ifndef BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS +#define BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS 10000 +#endif + +#include + +#endif //#ifndef BOOST_INTERPROCESS_DETAIL_WORKAROUND_HPP diff --git a/external/boost/interprocess/errors.hpp b/external/boost/interprocess/errors.hpp new file mode 100644 index 0000000..e36b8e4 --- /dev/null +++ b/external/boost/interprocess/errors.hpp @@ -0,0 +1,236 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +// Parts of this code are taken from boost::filesystem library +// +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 Beman Dawes +// Copyright (C) 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_INTERPROCESS_ERRORS_HPP +#define BOOST_INTERPROCESS_ERRORS_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include + +#if (defined BOOST_INTERPROCESS_WINDOWS) +# include +#else +# ifdef BOOST_HAS_UNISTD_H +# include //Errors +# include //strerror +# else //ifdef BOOST_HAS_UNISTD_H +# error Unknown platform +# endif //ifdef BOOST_HAS_UNISTD_H +#endif //#if (defined BOOST_INTERPROCESS_WINDOWS) + +//!\file +//!Describes the error numbering of interprocess classes + +namespace boost { +namespace interprocess { +/// @cond +inline int system_error_code() // artifact of POSIX and WINDOWS error reporting +{ + #if (defined BOOST_INTERPROCESS_WINDOWS) + return winapi::get_last_error(); + #else + return errno; // GCC 3.1 won't accept ::errno + #endif +} + + +#if (defined BOOST_INTERPROCESS_WINDOWS) +inline void fill_system_message(int sys_err_code, std::string &str) +{ + void *lpMsgBuf; + winapi::format_message( + winapi::format_message_allocate_buffer | + winapi::format_message_from_system | + winapi::format_message_ignore_inserts, + 0, + sys_err_code, + winapi::make_lang_id(winapi::lang_neutral, winapi::sublang_default), // Default language + reinterpret_cast(&lpMsgBuf), + 0, + 0 + ); + str += static_cast(lpMsgBuf); + winapi::local_free( lpMsgBuf ); // free the buffer + while ( str.size() + && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') ) + str.erase( str.size()-1 ); +} +# else +inline void fill_system_message( int system_error, std::string &str) +{ str = std::strerror(system_error); } +# endif +/// @endcond + +enum error_code_t +{ + no_error = 0, + system_error, // system generated error; if possible, is translated + // to one of the more specific errors below. + other_error, // library generated error + security_error, // includes access rights, permissions failures + read_only_error, + io_error, + path_error, + not_found_error, +// not_directory_error, + busy_error, // implies trying again might succeed + already_exists_error, + not_empty_error, + is_directory_error, + out_of_space_error, + out_of_memory_error, + out_of_resource_error, + lock_error, + sem_error, + mode_error, + size_error, + corrupted_error, + not_such_file_or_directory, + invalid_argument, + timeout_when_locking_error, + timeout_when_waiting_error, +}; + +typedef int native_error_t; + +/// @cond +struct ec_xlate +{ + native_error_t sys_ec; + error_code_t ec; +}; + +static const ec_xlate ec_table[] = +{ + #if (defined BOOST_INTERPROCESS_WINDOWS) + { /*ERROR_ACCESS_DENIED*/5L, security_error }, + { /*ERROR_INVALID_ACCESS*/12L, security_error }, + { /*ERROR_SHARING_VIOLATION*/32L, security_error }, + { /*ERROR_LOCK_VIOLATION*/33L, security_error }, + { /*ERROR_LOCKED*/212L, security_error }, + { /*ERROR_NOACCESS*/998L, security_error }, + { /*ERROR_WRITE_PROTECT*/19L, read_only_error }, + { /*ERROR_NOT_READY*/21L, io_error }, + { /*ERROR_SEEK*/25L, io_error }, + { /*ERROR_READ_FAULT*/30L, io_error }, + { /*ERROR_WRITE_FAULT*/29L, io_error }, + { /*ERROR_CANTOPEN*/1011L, io_error }, + { /*ERROR_CANTREAD*/1012L, io_error }, + { /*ERROR_CANTWRITE*/1013L, io_error }, + { /*ERROR_DIRECTORY*/267L, path_error }, + { /*ERROR_INVALID_NAME*/123L, path_error }, + { /*ERROR_FILE_NOT_FOUND*/2L, not_found_error }, + { /*ERROR_PATH_NOT_FOUND*/3L, not_found_error }, + { /*ERROR_DEV_NOT_EXIST*/55L, not_found_error }, + { /*ERROR_DEVICE_IN_USE*/2404L, busy_error }, + { /*ERROR_OPEN_FILES*/2401L, busy_error }, + { /*ERROR_BUSY_DRIVE*/142L, busy_error }, + { /*ERROR_BUSY*/170L, busy_error }, + { /*ERROR_FILE_EXISTS*/80L, already_exists_error }, + { /*ERROR_ALREADY_EXISTS*/183L, already_exists_error }, + { /*ERROR_DIR_NOT_EMPTY*/145L, not_empty_error }, + { /*ERROR_HANDLE_DISK_FULL*/39L, out_of_space_error }, + { /*ERROR_DISK_FULL*/112L, out_of_space_error }, + { /*ERROR_OUTOFMEMORY*/14L, out_of_memory_error }, + { /*ERROR_NOT_ENOUGH_MEMORY*/8L, out_of_memory_error }, + { /*ERROR_TOO_MANY_OPEN_FILES*/4L, out_of_resource_error }, + { /*ERROR_INVALID_ADDRESS*/487L, busy_error } + #else //#if (defined BOOST_INTERPROCESS_WINDOWS) + { EACCES, security_error }, + { EROFS, read_only_error }, + { EIO, io_error }, + { ENAMETOOLONG, path_error }, + { ENOENT, not_found_error }, + // { ENOTDIR, not_directory_error }, + { EAGAIN, busy_error }, + { EBUSY, busy_error }, + { ETXTBSY, busy_error }, + { EEXIST, already_exists_error }, + { ENOTEMPTY, not_empty_error }, + { EISDIR, is_directory_error }, + { ENOSPC, out_of_space_error }, + { ENOMEM, out_of_memory_error }, + { EMFILE, out_of_resource_error }, + { ENOENT, not_such_file_or_directory }, + { EINVAL, invalid_argument } + #endif //#if (defined BOOST_INTERPROCESS_WINDOWS) +}; + +inline error_code_t lookup_error(native_error_t err) +{ + const ec_xlate *cur = &ec_table[0], + *end = cur + sizeof(ec_table)/sizeof(ec_xlate); + for (;cur != end; ++cur ){ + if ( err == cur->sys_ec ) return cur->ec; + } + return system_error; // general system error code +} + +struct error_info +{ + error_info(error_code_t ec = other_error ) + : m_nat(0), m_ec(ec) + {} + + error_info(native_error_t sys_err_code) + : m_nat(sys_err_code), m_ec(lookup_error(sys_err_code)) + {} + + error_info & operator =(error_code_t ec) + { + m_nat = 0; + m_ec = ec; + return *this; + } + + error_info & operator =(native_error_t sys_err_code) + { + m_nat = sys_err_code; + m_ec = lookup_error(sys_err_code); + return *this; + } + + native_error_t get_native_error()const + { return m_nat; } + + error_code_t get_error_code()const + { return m_ec; } + + private: + native_error_t m_nat; + error_code_t m_ec; +}; +/// @endcond + +} // namespace interprocess { +} // namespace boost + +#include + +#endif // BOOST_INTERPROCESS_ERRORS_HPP diff --git a/external/boost/interprocess/exceptions.hpp b/external/boost/interprocess/exceptions.hpp new file mode 100644 index 0000000..a4f196f --- /dev/null +++ b/external/boost/interprocess/exceptions.hpp @@ -0,0 +1,150 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_EXCEPTIONS_HPP +#define BOOST_INTERPROCESS_EXCEPTIONS_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include + +//!\file +//!Describes exceptions thrown by interprocess classes + +namespace boost { + +namespace interprocess { + +//!This class is the base class of all exceptions +//!thrown by boost::interprocess +class interprocess_exception : public std::exception +{ + public: + interprocess_exception(const char *err/*error_code_t ec = other_error*/) + : m_err(other_error) + { +// try { m_str = "boost::interprocess_exception::library_error"; } + try { m_str = err; } + catch (...) {} + } +/* + interprocess_exception(native_error_t sys_err_code) + : m_err(sys_err_code) + { + try { fill_system_message(m_err.get_native_error(), m_str); } + catch (...) {} + }*/ + + interprocess_exception(const error_info &err_info, const char *str = 0) + : m_err(err_info) + { + try{ + if(m_err.get_native_error() != 0){ + fill_system_message(m_err.get_native_error(), m_str); + } + else if(str){ + m_str = str; + } + else{ + m_str = "boost::interprocess_exception::library_error"; + } + } + catch(...){} + } + + virtual ~interprocess_exception() throw(){} + + virtual const char * what() const throw() + { return m_str.c_str(); } + + native_error_t get_native_error()const { return m_err.get_native_error(); } + + // Note: a value of other_error implies a library (rather than system) error + error_code_t get_error_code() const { return m_err.get_error_code(); } + + /// @cond + private: + error_info m_err; + std::string m_str; + /// @endcond +}; + +//!This is the exception thrown by shared interprocess_mutex family when a deadlock situation +//!is detected or when using a interprocess_condition the interprocess_mutex is not locked +class lock_exception : public interprocess_exception +{ + public: + lock_exception() + : interprocess_exception(lock_error) + {} + + virtual const char* what() const throw() + { return "boost::interprocess::lock_exception"; } +}; + +//!This is the exception thrown by named interprocess_semaphore when a deadlock situation +//!is detected or when an error is detected in the post/wait operation +/* +class sem_exception : public interprocess_exception +{ + public: + sem_exception() + : interprocess_exception(lock_error) + {} + + virtual const char* what() const throw() + { return "boost::interprocess::sem_exception"; } +}; +*/ +//!This is the exception thrown by synchronization objects when there is +//!an error in a wait() function +/* +class wait_exception : public interprocess_exception +{ + public: + virtual const char* what() const throw() + { return "boost::interprocess::wait_exception"; } +}; +*/ + +//!This exception is thrown when a named object is created +//!in "open_only" mode and the resource was not already created +/* +class not_previously_created : public interprocess_exception +{ + public: + virtual const char* what() const throw() + { return "boost::interprocess::not_previously_created"; } +}; +*/ + +//!This exception is thrown when a memory request can't be +//!fulfilled. +class bad_alloc : public interprocess_exception +{ + public: + bad_alloc() : interprocess_exception("::boost::interprocess::bad_alloc"){} + virtual const char* what() const throw() + { return "boost::interprocess::bad_alloc"; } +}; + +} // namespace interprocess { + +} // namespace boost + +#include + +#endif // BOOST_INTERPROCESS_EXCEPTIONS_HPP diff --git a/external/boost/interprocess/interprocess_fwd.hpp b/external/boost/interprocess/interprocess_fwd.hpp new file mode 100644 index 0000000..2b3e3eb --- /dev/null +++ b/external/boost/interprocess/interprocess_fwd.hpp @@ -0,0 +1,418 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_FWD_HPP +#define BOOST_INTERPROCESS_FWD_HPP + +#if defined (_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include + +////////////////////////////////////////////////////////////////////////////// +// Standard predeclarations +////////////////////////////////////////////////////////////////////////////// + +/// @cond + +namespace boost{ +namespace intrusive{ +}} + +namespace boost{ +namespace interprocess{ +namespace bi = boost::intrusive; +}} + +#include +#include +#include +#include +#include + +/// @endcond + +namespace boost { namespace interprocess { + +////////////////////////////////////////////////////////////////////////////// +// permissions +////////////////////////////////////////////////////////////////////////////// + +class permissions; + +////////////////////////////////////////////////////////////////////////////// +// shared_memory +////////////////////////////////////////////////////////////////////////////// + +class shared_memory_object; + +#if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) +class windows_shared_memory; +#endif //#if defined (BOOST_INTERPROCESS_WINDOWS) + +////////////////////////////////////////////////////////////////////////////// +// mapped file/mapped region/mapped_file +////////////////////////////////////////////////////////////////////////////// + +class file_mapping; +class mapped_region; +class mapped_file; + +////////////////////////////////////////////////////////////////////////////// +// Mutexes +////////////////////////////////////////////////////////////////////////////// + +class null_mutex; + +class interprocess_mutex; +class interprocess_recursive_mutex; + +class named_mutex; +class named_recursive_mutex; + +class interprocess_semaphore; +class named_semaphore; + +////////////////////////////////////////////////////////////////////////////// +// Mutex families +////////////////////////////////////////////////////////////////////////////// + +struct mutex_family; +struct null_mutex_family; + +////////////////////////////////////////////////////////////////////////////// +// Other synchronization classes +////////////////////////////////////////////////////////////////////////////// + +class barrier; +class interprocess_sharable_mutex; +class interprocess_condition; + +////////////////////////////////////////////////////////////////////////////// +// Locks +////////////////////////////////////////////////////////////////////////////// + +template +class scoped_lock; + +template +class sharable_lock; + +template +class upgradable_lock; + +////////////////////////////////////////////////////////////////////////////// +// STL compatible allocators +////////////////////////////////////////////////////////////////////////////// + +template +class allocator; + +template +class node_allocator; + +template +class private_node_allocator; + +template +class cached_node_allocator; + +template +class adaptive_pool; + +template +class private_adaptive_pool; + +template +class cached_adaptive_pool; + + +////////////////////////////////////////////////////////////////////////////// +// offset_ptr +////////////////////////////////////////////////////////////////////////////// + +static const std::size_t offset_type_alignment = 0; + +template +class offset_ptr; + +////////////////////////////////////////////////////////////////////////////// +// Memory allocation algorithms +////////////////////////////////////////////////////////////////////////////// + +//Single segment memory allocation algorithms +template > +class simple_seq_fit; + +template, std::size_t MemAlignment = 0> +class rbtree_best_fit; + +////////////////////////////////////////////////////////////////////////////// +// Index Types +////////////////////////////////////////////////////////////////////////////// + +template class flat_map_index; +template class iset_index; +template class iunordered_set_index; +template class map_index; +template class null_index; +template class unordered_map_index; + +////////////////////////////////////////////////////////////////////////////// +// Segment manager +////////////////////////////////////////////////////////////////////////////// + +template class IndexType> +class segment_manager; + +////////////////////////////////////////////////////////////////////////////// +// External buffer managed memory classes +////////////////////////////////////////////////////////////////////////////// + +template class IndexType> +class basic_managed_external_buffer; + +typedef basic_managed_external_buffer + + ,iset_index> +managed_external_buffer; + +typedef basic_managed_external_buffer + + ,iset_index> +wmanaged_external_buffer; + +////////////////////////////////////////////////////////////////////////////// +// managed memory classes +////////////////////////////////////////////////////////////////////////////// + +template class IndexType> +class basic_managed_shared_memory; + +typedef basic_managed_shared_memory + + ,iset_index> +managed_shared_memory; + +typedef basic_managed_shared_memory + + ,iset_index> +wmanaged_shared_memory; + + +////////////////////////////////////////////////////////////////////////////// +// Windows shared memory managed memory classes +////////////////////////////////////////////////////////////////////////////// + +#if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + +template class IndexType> +class basic_managed_windows_shared_memory; + +typedef basic_managed_windows_shared_memory + + ,iset_index> +managed_windows_shared_memory; + +typedef basic_managed_windows_shared_memory + + ,iset_index> +wmanaged_windows_shared_memory; + +#endif //#if defined (BOOST_INTERPROCESS_WINDOWS) + +#if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + +template class IndexType> +class basic_managed_xsi_shared_memory; + +typedef basic_managed_xsi_shared_memory + + ,iset_index> +managed_xsi_shared_memory; + +typedef basic_managed_xsi_shared_memory + + ,iset_index> +wmanaged_xsi_shared_memory; + +#endif //#if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) + +////////////////////////////////////////////////////////////////////////////// +// Fixed address shared memory +////////////////////////////////////////////////////////////////////////////// + +typedef basic_managed_shared_memory + + ,iset_index> +fixed_managed_shared_memory; + +typedef basic_managed_shared_memory + + ,iset_index> +wfixed_managed_shared_memory; + +////////////////////////////////////////////////////////////////////////////// +// Heap memory managed memory classes +////////////////////////////////////////////////////////////////////////////// + +template + class IndexType> +class basic_managed_heap_memory; + +typedef basic_managed_heap_memory + + ,iset_index> +managed_heap_memory; + +typedef basic_managed_heap_memory + + ,iset_index> +wmanaged_heap_memory; + +////////////////////////////////////////////////////////////////////////////// +// Mapped file managed memory classes +////////////////////////////////////////////////////////////////////////////// + +template + class IndexType> +class basic_managed_mapped_file; + +typedef basic_managed_mapped_file + + ,iset_index> +managed_mapped_file; + +typedef basic_managed_mapped_file + + ,iset_index> +wmanaged_mapped_file; + +////////////////////////////////////////////////////////////////////////////// +// Exceptions +////////////////////////////////////////////////////////////////////////////// + +class interprocess_exception; +class lock_exception; +class bad_alloc; + +////////////////////////////////////////////////////////////////////////////// +// Bufferstream +////////////////////////////////////////////////////////////////////////////// + +//bufferstream +template > +class basic_bufferbuf; + +template > +class basic_ibufferstream; + +template > +class basic_obufferstream; + +template > +class basic_bufferstream; + +////////////////////////////////////////////////////////////////////////////// +// Vectorstream +////////////////////////////////////////////////////////////////////////////// + +template > +class basic_vectorbuf; + +template > +class basic_ivectorstream; + +template > +class basic_ovectorstream; + +template > +class basic_vectorstream; + +////////////////////////////////////////////////////////////////////////////// +// Smart pointers +////////////////////////////////////////////////////////////////////////////// + +template +class scoped_ptr; + +template +class intrusive_ptr; + +template +class shared_ptr; + +template +class weak_ptr; + +////////////////////////////////////////////////////////////////////////////// +// IPC +////////////////////////////////////////////////////////////////////////////// + +template +class message_queue_t; + +typedef message_queue_t > message_queue; + +}} //namespace boost { namespace interprocess { + +////////////////////////////////////////////////////////////////////////////// +// CONTAINERS +////////////////////////////////////////////////////////////////////////////// + +#include + +#endif //#ifndef BOOST_INTERPROCESS_FWD_HPP diff --git a/external/boost/interprocess/permissions.hpp b/external/boost/interprocess/permissions.hpp new file mode 100644 index 0000000..745f8a8 --- /dev/null +++ b/external/boost/interprocess/permissions.hpp @@ -0,0 +1,132 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_PERMISSIONS_HPP +#define BOOST_INTERPROCESS_PERMISSIONS_HPP + +/// @cond + +#if defined (_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include + +#if defined(BOOST_INTERPROCESS_WINDOWS) + +#include + +#endif + +/// @endcond + +//!\file +//!Describes permissions class + +namespace boost { +namespace interprocess { + +/// @cond + +#if defined(BOOST_INTERPROCESS_WINDOWS) + +namespace ipcdetail { + +template +struct unrestricted_permissions_holder +{ + static winapi::interprocess_all_access_security unrestricted; +}; + +template +winapi::interprocess_all_access_security unrestricted_permissions_holder::unrestricted; + +} //namespace ipcdetail { + +#endif //defined BOOST_INTERPROCESS_WINDOWS + +/// @endcond + +//!The permissions class represents permissions to be set to shared memory or +//!files, that can be constructed form usual permission representations: +//!a SECURITY_ATTRIBUTES pointer in windows or ORed rwx chmod integer in UNIX. +class permissions +{ + /// @cond + + #if defined(BOOST_INTERPROCESS_WINDOWS) + typedef void* os_permissions_type; + #else + typedef int os_permissions_type; + #endif + os_permissions_type m_perm; + + /// @endcond + + public: + //!Constructs a permissions object from a user provided os-dependent + //!permissions. + permissions(os_permissions_type type) + : m_perm(type) + {} + + //!Constructs a default permissions object: + //!A null security attributes pointer for windows or 0644 + //!for UNIX. + permissions() + { set_default(); } + + //!Sets permissions to default values: + //!A null security attributes pointer for windows or 0644 + //!for UNIX. + void set_default() + { + /// @cond + #if defined (BOOST_INTERPROCESS_WINDOWS) + m_perm = 0; + #else + m_perm = 0644; + #endif + /// @endcond + } + + //!Sets permissions to unrestricted access: + //!A null DACL for windows or 0666 for UNIX. + void set_unrestricted() + { + /// @cond + #if defined (BOOST_INTERPROCESS_WINDOWS) + m_perm = &ipcdetail::unrestricted_permissions_holder<0>::unrestricted; + #else + m_perm = 0666; + #endif + /// @endcond + } + + //!Sets permissions from a user provided os-dependent + //!permissions. + void set_permissions(os_permissions_type perm) + { m_perm = perm; } + + //!Returns stored os-dependent + //!permissions + os_permissions_type get_permissions() const + { return m_perm; } +}; + +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_PERMISSIONS_HPP + diff --git a/external/boost/interprocess/streams/bufferstream.hpp b/external/boost/interprocess/streams/bufferstream.hpp new file mode 100644 index 0000000..834b3d1 --- /dev/null +++ b/external/boost/interprocess/streams/bufferstream.hpp @@ -0,0 +1,444 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// +// +// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005. +// Changed internal SGI string to a buffer. Added efficient +// internal buffer get/set/swap functions, so that we can obtain/establish the +// internal buffer without any reallocation or copy. Kill those temporaries! +/////////////////////////////////////////////////////////////////////////////// +/* + * 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. + */ + +//!\file +//!This file defines basic_bufferbuf, basic_ibufferstream, +//!basic_obufferstream, and basic_bufferstream classes. These classes +//!represent streamsbufs and streams whose sources or destinations +//!are fixed size character buffers. + +#ifndef BOOST_INTERPROCESS_BUFFERSTREAM_HPP +#define BOOST_INTERPROCESS_BUFFERSTREAM_HPP + +#include +#include + +#include +#include +#include +#include +#include // char traits +#include // ptrdiff_t +#include +#include + +namespace boost { namespace interprocess { + +//!A streambuf class that controls the transmission of elements to and from +//!a basic_xbufferstream. The elements are transmitted from a to a fixed +//!size buffer +template +class basic_bufferbuf + : public std::basic_streambuf +{ + public: + typedef CharT char_type; + typedef typename CharTraits::int_type int_type; + typedef typename CharTraits::pos_type pos_type; + typedef typename CharTraits::off_type off_type; + typedef CharTraits traits_type; + typedef std::basic_streambuf base_t; + + public: + //!Constructor. + //!Does not throw. + explicit basic_bufferbuf(std::ios_base::openmode mode + = std::ios_base::in | std::ios_base::out) + : base_t(), m_mode(mode), m_buffer(0), m_length(0) + {} + + //!Constructor. Assigns formatting buffer. + //!Does not throw. + explicit basic_bufferbuf(CharT *buffer, std::size_t length, + std::ios_base::openmode mode + = std::ios_base::in | std::ios_base::out) + : base_t(), m_mode(mode), m_buffer(buffer), m_length(length) + { this->set_pointers(); } + + virtual ~basic_bufferbuf(){} + + public: + //!Returns the pointer and size of the internal buffer. + //!Does not throw. + std::pair buffer() const + { return std::pair(m_buffer, m_length); } + + //!Sets the underlying buffer to a new value + //!Does not throw. + void buffer(CharT *buffer, std::size_t length) + { m_buffer = buffer; m_length = length; this->set_pointers(); } + + /// @cond + private: + void set_pointers() + { + // The initial read position is the beginning of the buffer. + if(m_mode & std::ios_base::in) + this->setg(m_buffer, m_buffer, m_buffer + m_length); + + // The initial write position is the beginning of the buffer. + if(m_mode & std::ios_base::out) + this->setp(m_buffer, m_buffer + m_length); + } + + protected: + virtual int_type underflow() + { + // Precondition: gptr() >= egptr(). Returns a character, if available. + return this->gptr() != this->egptr() ? + CharTraits::to_int_type(*this->gptr()) : CharTraits::eof(); + } + + virtual int_type pbackfail(int_type c = CharTraits::eof()) + { + if(this->gptr() != this->eback()) { + if(!CharTraits::eq_int_type(c, CharTraits::eof())) { + if(CharTraits::eq(CharTraits::to_char_type(c), this->gptr()[-1])) { + this->gbump(-1); + return c; + } + else if(m_mode & std::ios_base::out) { + this->gbump(-1); + *this->gptr() = c; + return c; + } + else + return CharTraits::eof(); + } + else { + this->gbump(-1); + return CharTraits::not_eof(c); + } + } + else + return CharTraits::eof(); + } + + virtual int_type overflow(int_type c = CharTraits::eof()) + { + if(m_mode & std::ios_base::out) { + if(!CharTraits::eq_int_type(c, CharTraits::eof())) { +// if(!(m_mode & std::ios_base::in)) { +// if(this->pptr() != this->epptr()) { +// *this->pptr() = CharTraits::to_char_type(c); +// this->pbump(1); +// return c; +// } +// else +// return CharTraits::eof(); +// } +// else { + if(this->pptr() == this->epptr()) { + //We can't append to a static buffer + return CharTraits::eof(); + } + else { + *this->pptr() = CharTraits::to_char_type(c); + this->pbump(1); + return c; + } +// } + } + else // c is EOF, so we don't have to do anything + return CharTraits::not_eof(c); + } + else // Overflow always fails if it's read-only. + return CharTraits::eof(); + } + + virtual pos_type seekoff(off_type off, std::ios_base::seekdir dir, + std::ios_base::openmode mode + = std::ios_base::in | std::ios_base::out) + { + bool in = false; + bool out = false; + + const std::ios_base::openmode inout = + std::ios_base::in | std::ios_base::out; + + if((mode & inout) == inout) { + if(dir == std::ios_base::beg || dir == std::ios_base::end) + in = out = true; + } + else if(mode & std::ios_base::in) + in = true; + else if(mode & std::ios_base::out) + out = true; + + if(!in && !out) + return pos_type(off_type(-1)); + else if((in && (!(m_mode & std::ios_base::in) || this->gptr() == 0)) || + (out && (!(m_mode & std::ios_base::out) || this->pptr() == 0))) + return pos_type(off_type(-1)); + + std::streamoff newoff; + switch(dir) { + case std::ios_base::beg: + newoff = 0; + break; + case std::ios_base::end: + newoff = static_cast(m_length); + break; + case std::ios_base::cur: + newoff = in ? static_cast(this->gptr() - this->eback()) + : static_cast(this->pptr() - this->pbase()); + break; + default: + return pos_type(off_type(-1)); + } + + off += newoff; + + if(in) { + std::ptrdiff_t n = this->egptr() - this->eback(); + + if(off < 0 || off > n) + return pos_type(off_type(-1)); + else + this->setg(this->eback(), this->eback() + off, this->eback() + n); + } + + if(out) { + std::ptrdiff_t n = this->epptr() - this->pbase(); + + if(off < 0 || off > n) + return pos_type(off_type(-1)); + else { + this->setp(this->pbase(), this->pbase() + n); + this->pbump(off); + } + } + + return pos_type(off); + } + + virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode + = std::ios_base::in | std::ios_base::out) + { return seekoff(pos - pos_type(off_type(0)), std::ios_base::beg, mode); } + + private: + std::ios_base::openmode m_mode; + CharT * m_buffer; + std::size_t m_length; + /// @endcond +}; + +//!A basic_istream class that uses a fixed size character buffer +//!as its formatting buffer. +template +class basic_ibufferstream + : public std::basic_istream +{ + public: // Typedefs + typedef typename std::basic_ios + ::char_type char_type; + typedef typename std::basic_ios::int_type int_type; + typedef typename std::basic_ios::pos_type pos_type; + typedef typename std::basic_ios::off_type off_type; + typedef typename std::basic_ios::traits_type traits_type; + + private: + typedef std::basic_ios basic_ios_t; + typedef std::basic_istream base_t; + + public: + //!Constructor. + //!Does not throw. + basic_ibufferstream(std::ios_base::openmode mode = std::ios_base::in) + : basic_ios_t(), base_t(0), m_buf(mode | std::ios_base::in) + { basic_ios_t::init(&m_buf); } + + //!Constructor. Assigns formatting buffer. + //!Does not throw. + basic_ibufferstream(const CharT *buffer, std::size_t length, + std::ios_base::openmode mode = std::ios_base::in) + : basic_ios_t(), base_t(0), + m_buf(const_cast(buffer), length, mode | std::ios_base::in) + { basic_ios_t::init(&m_buf); } + + ~basic_ibufferstream(){}; + + public: + //!Returns the address of the stored + //!stream buffer. + basic_bufferbuf* rdbuf() const + { return const_cast*>(&m_buf); } + + //!Returns the pointer and size of the internal buffer. + //!Does not throw. + std::pair buffer() const + { return m_buf.buffer(); } + + //!Sets the underlying buffer to a new value. Resets + //!stream position. Does not throw. + void buffer(const CharT *buffer, std::size_t length) + { m_buf.buffer(const_cast(buffer), length); } + + /// @cond + private: + basic_bufferbuf m_buf; + /// @endcond +}; + +//!A basic_ostream class that uses a fixed size character buffer +//!as its formatting buffer. +template +class basic_obufferstream + : public std::basic_ostream +{ + public: + typedef typename std::basic_ios + ::char_type char_type; + typedef typename std::basic_ios::int_type int_type; + typedef typename std::basic_ios::pos_type pos_type; + typedef typename std::basic_ios::off_type off_type; + typedef typename std::basic_ios::traits_type traits_type; + + /// @cond + private: + typedef std::basic_ios basic_ios_t; + typedef std::basic_ostream base_t; + /// @endcond + public: + //!Constructor. + //!Does not throw. + basic_obufferstream(std::ios_base::openmode mode = std::ios_base::out) + : basic_ios_t(), base_t(0), m_buf(mode | std::ios_base::out) + { basic_ios_t::init(&m_buf); } + + //!Constructor. Assigns formatting buffer. + //!Does not throw. + basic_obufferstream(CharT *buffer, std::size_t length, + std::ios_base::openmode mode = std::ios_base::out) + : basic_ios_t(), base_t(0), + m_buf(buffer, length, mode | std::ios_base::out) + { basic_ios_t::init(&m_buf); } + + ~basic_obufferstream(){} + + public: + //!Returns the address of the stored + //!stream buffer. + basic_bufferbuf* rdbuf() const + { return const_cast*>(&m_buf); } + + //!Returns the pointer and size of the internal buffer. + //!Does not throw. + std::pair buffer() const + { return m_buf.buffer(); } + + //!Sets the underlying buffer to a new value. Resets + //!stream position. Does not throw. + void buffer(CharT *buffer, std::size_t length) + { m_buf.buffer(buffer, length); } + + /// @cond + private: + basic_bufferbuf m_buf; + /// @endcond +}; + + +//!A basic_iostream class that uses a fixed size character buffer +//!as its formatting buffer. +template +class basic_bufferstream + : public std::basic_iostream + +{ + public: // Typedefs + typedef typename std::basic_ios + ::char_type char_type; + typedef typename std::basic_ios::int_type int_type; + typedef typename std::basic_ios::pos_type pos_type; + typedef typename std::basic_ios::off_type off_type; + typedef typename std::basic_ios::traits_type traits_type; + + /// @cond + private: + typedef std::basic_ios basic_ios_t; + typedef std::basic_iostream base_t; + /// @endcond + + public: + //!Constructor. + //!Does not throw. + basic_bufferstream(std::ios_base::openmode mode + = std::ios_base::in | std::ios_base::out) + : basic_ios_t(), base_t(0), m_buf(mode) + { basic_ios_t::init(&m_buf); } + + //!Constructor. Assigns formatting buffer. + //!Does not throw. + basic_bufferstream(CharT *buffer, std::size_t length, + std::ios_base::openmode mode + = std::ios_base::in | std::ios_base::out) + : basic_ios_t(), base_t(0), m_buf(buffer, length, mode) + { basic_ios_t::init(&m_buf); } + + ~basic_bufferstream(){} + + public: + //!Returns the address of the stored + //!stream buffer. + basic_bufferbuf* rdbuf() const + { return const_cast*>(&m_buf); } + + //!Returns the pointer and size of the internal buffer. + //!Does not throw. + std::pair buffer() const + { return m_buf.buffer(); } + + //!Sets the underlying buffer to a new value. Resets + //!stream position. Does not throw. + void buffer(CharT *buffer, std::size_t length) + { m_buf.buffer(buffer, length); } + + /// @cond + private: + basic_bufferbuf m_buf; + /// @endcond +}; + +//Some typedefs to simplify usage +typedef basic_bufferbuf bufferbuf; +typedef basic_bufferstream bufferstream; +typedef basic_ibufferstream ibufferstream; +typedef basic_obufferstream obufferstream; + +typedef basic_bufferbuf wbufferbuf; +typedef basic_bufferstream wbufferstream; +typedef basic_ibufferstream wibufferstream; +typedef basic_obufferstream wobufferstream; + + +}} //namespace boost { namespace interprocess { + +#include + +#endif /* BOOST_INTERPROCESS_BUFFERSTREAM_HPP */ diff --git a/external/boost/interprocess/sync/interprocess_semaphore.hpp b/external/boost/interprocess/sync/interprocess_semaphore.hpp new file mode 100644 index 0000000..4ffcdcf --- /dev/null +++ b/external/boost/interprocess/sync/interprocess_semaphore.hpp @@ -0,0 +1,145 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_SEMAPHORE_HPP + +/// @cond + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include +#include + +#if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && \ + (defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) && defined(BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES)) + #include + #define BOOST_INTERPROCESS_USE_POSIX +//Experimental... +//#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) +// #include +// #define BOOST_INTERPROCESS_USE_WINDOWS +#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + #include + #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION +#endif + +/// @endcond + +//!\file +//!Describes a interprocess_semaphore class for inter-process synchronization + +namespace boost { +namespace interprocess { + +//!Wraps a interprocess_semaphore that can be placed in shared memory and can be +//!shared between processes. Allows timed lock tries +class interprocess_semaphore +{ + /// @cond + //Non-copyable + interprocess_semaphore(const interprocess_semaphore &); + interprocess_semaphore &operator=(const interprocess_semaphore &); + /// @endcond + public: + //!Creates a interprocess_semaphore with the given initial count. + //!interprocess_exception if there is an error.*/ + interprocess_semaphore(unsigned int initialCount); + + //!Destroys the interprocess_semaphore. + //!Does not throw + ~interprocess_semaphore(); + + //!Increments the interprocess_semaphore count. If there are processes/threads blocked waiting + //!for the interprocess_semaphore, then one of these processes will return successfully from + //!its wait function. If there is an error an interprocess_exception exception is thrown. + void post(); + + //!Decrements the interprocess_semaphore. If the interprocess_semaphore value is not greater than zero, + //!then the calling process/thread blocks until it can decrement the counter. + //!If there is an error an interprocess_exception exception is thrown. + void wait(); + + //!Decrements the interprocess_semaphore if the interprocess_semaphore's value is greater than zero + //!and returns true. If the value is not greater than zero returns false. + //!If there is an error an interprocess_exception exception is thrown. + bool try_wait(); + + //!Decrements the interprocess_semaphore if the interprocess_semaphore's value is greater + //!than zero and returns true. Otherwise, waits for the interprocess_semaphore + //!to the posted or the timeout expires. If the timeout expires, the + //!function returns false. If the interprocess_semaphore is posted the function + //!returns true. If there is an error throws sem_exception + bool timed_wait(const boost::posix_time::ptime &abs_time); + + //!Returns the interprocess_semaphore count +// int get_count() const; + /// @cond + private: + #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) + #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION + ipcdetail::spin_semaphore m_sem; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + ipcdetail::windows_semaphore m_sem; + #else + #undef BOOST_INTERPROCESS_USE_POSIX + ipcdetail::posix_semaphore m_sem; + #endif //#if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) + /// @endcond +}; + +} //namespace interprocess { +} //namespace boost { + +namespace boost { +namespace interprocess { + +inline interprocess_semaphore::interprocess_semaphore(unsigned int initialCount) + : m_sem(initialCount) +{} + +inline interprocess_semaphore::~interprocess_semaphore(){} + +inline void interprocess_semaphore::wait() +{ + #ifdef BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING + boost::posix_time::ptime wait_time + = boost::posix_time::microsec_clock::universal_time() + + boost::posix_time::milliseconds(BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS); + if (!m_sem.timed_wait(wait_time)) + { + throw interprocess_exception(timeout_when_waiting_error, "Interprocess semaphore timeout when waiting. Possible deadlock: owner died without posting?"); + } + #else + m_sem.wait(); + #endif +} +inline bool interprocess_semaphore::try_wait() +{ return m_sem.try_wait(); } + +inline bool interprocess_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ return m_sem.timed_wait(abs_time); } + +inline void interprocess_semaphore::post() +{ m_sem.post(); } + +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_SEMAPHORE_HPP diff --git a/external/boost/interprocess/sync/posix/ptime_to_timespec.hpp b/external/boost/interprocess/sync/posix/ptime_to_timespec.hpp new file mode 100644 index 0000000..7d78735 --- /dev/null +++ b/external/boost/interprocess/sync/posix/ptime_to_timespec.hpp @@ -0,0 +1,38 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_PTIME_TO_TIMESPEC_HPP +#define BOOST_INTERPROCESS_DETAIL_PTIME_TO_TIMESPEC_HPP + +#include + +namespace boost { + +namespace interprocess { + +namespace ipcdetail { + +inline timespec ptime_to_timespec (const boost::posix_time::ptime &tm) +{ + const boost::posix_time::ptime epoch(boost::gregorian::date(1970,1,1)); + boost::posix_time::time_duration duration (tm - epoch); + timespec ts; + ts.tv_sec = duration.total_seconds(); + ts.tv_nsec = duration.total_nanoseconds() % 1000000000; + return ts; +} + +} //namespace ipcdetail { + +} //namespace interprocess { + +} //namespace boost { + +#endif //ifndef BOOST_INTERPROCESS_DETAIL_PTIME_TO_TIMESPEC_HPP diff --git a/external/boost/interprocess/sync/posix/semaphore.hpp b/external/boost/interprocess/sync/posix/semaphore.hpp new file mode 100644 index 0000000..b7f62cc --- /dev/null +++ b/external/boost/interprocess/sync/posix/semaphore.hpp @@ -0,0 +1,63 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class posix_semaphore +{ + posix_semaphore(); + posix_semaphore(const posix_semaphore&); + posix_semaphore &operator= (const posix_semaphore &); + + public: + posix_semaphore(unsigned int initialCount) + { semaphore_init(&m_sem, initialCount); } + + ~posix_semaphore() + { semaphore_destroy(&m_sem); } + + void post() + { semaphore_post(&m_sem); } + + void wait() + { semaphore_wait(&m_sem); } + + bool try_wait() + { return semaphore_try_wait(&m_sem); } + + bool timed_wait(const boost::posix_time::ptime &abs_time) + { return semaphore_timed_wait(&m_sem, abs_time); } + + private: + sem_t m_sem; +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP diff --git a/external/boost/interprocess/sync/posix/semaphore_wrapper.hpp b/external/boost/interprocess/sync/posix/semaphore_wrapper.hpp new file mode 100644 index 0000000..1aeef47 --- /dev/null +++ b/external/boost/interprocess/sync/posix/semaphore_wrapper.hpp @@ -0,0 +1,211 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_WRAPPER_HPP +#define BOOST_INTERPROCESS_POSIX_SEMAPHORE_WRAPPER_HPP + +#include +#include +#include +#include +#include +#include + +#include //O_CREAT, O_*... +#include //close +#include //std::string +#include //sem_* family, SEM_VALUE_MAX +#include //mode_t, S_IRWXG, S_IRWXO, S_IRWXU, +#include + +#ifdef SEM_FAILED +#define BOOST_INTERPROCESS_POSIX_SEM_FAILED (reinterpret_cast(SEM_FAILED)) +#else +#define BOOST_INTERPROCESS_POSIX_SEM_FAILED (reinterpret_cast(-1)) +#endif + +#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS +#include +#else +#include +#endif + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +inline bool semaphore_open + (sem_t *&handle, create_enum_t type, const char *origname, + unsigned int count = 0, const permissions &perm = permissions()) +{ + std::string name; + #ifndef BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES + add_leading_slash(origname, name); + #else + create_tmp_and_clean_old_and_get_filename(origname, name); + #endif + + //Create new mapping + int oflag = 0; + switch(type){ + case DoOpen: + { + //No addition + handle = ::sem_open(name.c_str(), oflag); + } + break; + case DoOpenOrCreate: + case DoCreate: + { + while(1){ + oflag = (O_CREAT | O_EXCL); + handle = ::sem_open(name.c_str(), oflag, perm.get_permissions(), count); + if(handle != BOOST_INTERPROCESS_POSIX_SEM_FAILED){ + //We can't change semaphore permissions! + //::fchmod(handle, perm.get_permissions()); + break; + } + else if(errno == EEXIST && type == DoOpenOrCreate){ + oflag = 0; + if( (handle = ::sem_open(name.c_str(), oflag)) != BOOST_INTERPROCESS_POSIX_SEM_FAILED + || (errno != ENOENT) ){ + break; + } + } + else{ + break; + } + } + } + break; + default: + { + error_info err(other_error); + throw interprocess_exception(err); + } + } + + //Check for error + if(handle == BOOST_INTERPROCESS_POSIX_SEM_FAILED){ + throw interprocess_exception(error_info(errno)); + } + + return true; +} + +inline void semaphore_close(sem_t *handle) +{ + int ret = sem_close(handle); + if(ret != 0){ + BOOST_ASSERT(0); + } +} + +inline bool semaphore_unlink(const char *semname) +{ + try{ + std::string sem_str; + #ifndef BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES + add_leading_slash(semname, sem_str); + #else + tmp_filename(semname, sem_str); + #endif + return 0 == sem_unlink(sem_str.c_str()); + } + catch(...){ + return false; + } +} + +inline void semaphore_init(sem_t *handle, unsigned int initialCount) +{ + int ret = sem_init(handle, 1, initialCount); + //According to SUSV3 version 2003 edition, the return value of a successful + //sem_init call is not defined, but -1 is returned on failure. + //In the future, a successful call might be required to return 0. + if(ret == -1){ + throw interprocess_exception(system_error_code()); + } +} + +inline void semaphore_destroy(sem_t *handle) +{ + int ret = sem_destroy(handle); + if(ret != 0){ + BOOST_ASSERT(0); + } +} + +inline void semaphore_post(sem_t *handle) +{ + int ret = sem_post(handle); + if(ret != 0){ + throw interprocess_exception(system_error_code()); + } +} + +inline void semaphore_wait(sem_t *handle) +{ + int ret = sem_wait(handle); + if(ret != 0){ + throw interprocess_exception(system_error_code()); + } +} + +inline bool semaphore_try_wait(sem_t *handle) +{ + int res = sem_trywait(handle); + if(res == 0) + return true; + if(system_error_code() == EAGAIN){ + return false; + } + throw interprocess_exception(system_error_code()); + return false; +} + +inline bool semaphore_timed_wait(sem_t *handle, const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + semaphore_wait(handle); + return true; + } + #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS + timespec tspec = ptime_to_timespec(abs_time); + for (;;){ + int res = sem_timedwait(handle, &tspec); + if(res == 0) + return true; + if (res > 0){ + //buggy glibc, copy the returned error code to errno + errno = res; + } + if(system_error_code() == ETIMEDOUT){ + return false; + } + throw interprocess_exception(system_error_code()); + } + return false; + #else //#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS + boost::posix_time::ptime now; + do{ + if(semaphore_try_wait(handle)) + return true; + thread_yield(); + }while((now = microsec_clock::universal_time()) < abs_time); + return false; + #endif //#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#endif //#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_WRAPPER_HPP diff --git a/external/boost/interprocess/sync/spin/semaphore.hpp b/external/boost/interprocess/sync/spin/semaphore.hpp new file mode 100644 index 0000000..1b8cac3 --- /dev/null +++ b/external/boost/interprocess/sync/spin/semaphore.hpp @@ -0,0 +1,110 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class spin_semaphore +{ + spin_semaphore(const spin_semaphore &); + spin_semaphore &operator=(const spin_semaphore &); + + public: + spin_semaphore(unsigned int initialCount); + ~spin_semaphore(); + + void post(); + void wait(); + bool try_wait(); + bool timed_wait(const boost::posix_time::ptime &abs_time); + +// int get_count() const; + private: + volatile boost::uint32_t m_count; +}; + + +inline spin_semaphore::~spin_semaphore() +{} + +inline spin_semaphore::spin_semaphore(unsigned int initialCount) +{ ipcdetail::atomic_write32(&this->m_count, boost::uint32_t(initialCount)); } + +inline void spin_semaphore::post() +{ + ipcdetail::atomic_inc32(&m_count); +} + +inline void spin_semaphore::wait() +{ + while(!ipcdetail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0))){ + while(ipcdetail::atomic_read32(&m_count) == 0){ + ipcdetail::thread_yield(); + } + } +} + +inline bool spin_semaphore::try_wait() +{ + return ipcdetail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0)); +} + +inline bool spin_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(); + return true; + } + //Obtain current count and target time + boost::posix_time::ptime now(microsec_clock::universal_time()); + + do{ + if(this->try_wait()){ + break; + } + now = microsec_clock::universal_time(); + + if(now >= abs_time){ + return this->try_wait(); + } + // relinquish current time slice + ipcdetail::thread_yield(); + }while (true); + return true; +} + + +//inline int spin_semaphore::get_count() const +//{ + //return (int)ipcdetail::atomic_read32(&m_count); +//} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP diff --git a/external/boost/intrusive_ptr.hpp b/external/boost/intrusive_ptr.hpp new file mode 100644 index 0000000..63036dc --- /dev/null +++ b/external/boost/intrusive_ptr.hpp @@ -0,0 +1,18 @@ +#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 + +#endif // #ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED diff --git a/external/boost/io/detail/quoted_manip.hpp b/external/boost/io/detail/quoted_manip.hpp new file mode 100644 index 0000000..502f422 --- /dev/null +++ b/external/boost/io/detail/quoted_manip.hpp @@ -0,0 +1,190 @@ +// boost/io/quoted_manip.hpp ---------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page http://www.boost.org/libs/io + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_IO_QUOTED_MANIP +#define BOOST_IO_QUOTED_MANIP + +#include +#include +#include +#include +#include + +namespace boost +{ + namespace io + { + namespace detail { template struct quoted_proxy; } + + // ------------ public interface ------------------------------------------------// + + // manipulator for const std::basic_string& + template + detail::quoted_proxy const &, Char> + quoted(const std::basic_string& s, + Char escape='\\', Char delim='\"'); + + // manipulator for non-const std::basic_string& + template + detail::quoted_proxy &, Char> + quoted(std::basic_string& s, + Char escape='\\', Char delim='\"'); + + // manipulator for const C-string* + template + detail::quoted_proxy + quoted(const Char* s, Char escape='\\', Char delim='\"'); + + // ----------- implementation details -------------------------------------------// + + namespace detail + { + // proxy used as an argument pack + template + struct quoted_proxy + { + String string; + Char escape; + Char delim; + + quoted_proxy(String s_, Char escape_, Char delim_) + : string(s_), escape(escape_), delim(delim_) {} + private: + // String may be a const type, so disable the assignment operator + quoted_proxy& operator=(const quoted_proxy&); // = deleted + }; + + // abstract away difference between proxies with const or non-const basic_strings + template + std::basic_ostream& + basic_string_inserter_imp(std::basic_ostream& os, + std::basic_string const & string, Char escape, Char delim) + { + os << delim; + typename std::basic_string::const_iterator + end_it = string.end(); + for (typename std::basic_string::const_iterator + it = string.begin(); + it != end_it; + ++it ) + { + if (*it == delim || *it == escape) + os << escape; + os << *it; + } + os << delim; + return os; + } + + // inserter for const std::basic_string& proxies + template + inline + std::basic_ostream& operator<<(std::basic_ostream& os, + const quoted_proxy const &, Char>& proxy) + { + return basic_string_inserter_imp(os, proxy.string, proxy.escape, proxy.delim); + } + + // inserter for non-const std::basic_string& proxies + template + inline + std::basic_ostream& operator<<(std::basic_ostream& os, + const quoted_proxy&, Char>& proxy) + { + return basic_string_inserter_imp(os, proxy.string, proxy.escape, proxy.delim); + } + + // inserter for const C-string* proxies + template + std::basic_ostream& operator<<(std::basic_ostream& os, + const quoted_proxy& proxy) + { + os << proxy.delim; + for (const Char* it = proxy.string; + *it; + ++it ) + { + if (*it == proxy.delim || *it == proxy.escape) + os << proxy.escape; + os << *it; + } + os << proxy.delim; + return os; + } + + // extractor for non-const std::basic_string& proxies + template + std::basic_istream& operator>>(std::basic_istream& is, + const quoted_proxy&, Char>& proxy) + { + proxy.string.clear(); + Char c; + is >> c; + if (c != proxy.delim) + { + is.unget(); + is >> proxy.string; + return is; + } + { + boost::io::ios_flags_saver ifs(is); + is >> std::noskipws; + for (;;) + { + is >> c; + if (!is.good()) // cope with I/O errors or end-of-file + break; + if (c == proxy.escape) + { + is >> c; + if (!is.good()) // cope with I/O errors or end-of-file + break; + } + else if (c == proxy.delim) + break; + proxy.string += c; + } + } + return is; + } + + } // namespace detail + + // manipulator implementation for const std::basic_string& + template + inline detail::quoted_proxy const &, Char> + quoted(const std::basic_string& s, Char escape, Char delim) + { + return detail::quoted_proxy const &, Char> + (s, escape, delim); + } + + // manipulator implementation for non-const std::basic_string& + template + inline detail::quoted_proxy &, Char> + quoted(std::basic_string& s, Char escape, Char delim) + { + return detail::quoted_proxy&, Char> + (s, escape, delim); + } + + // manipulator implementation for const C-string* + template + inline detail::quoted_proxy + quoted(const Char* s, Char escape, Char delim) + { + return detail::quoted_proxy (s, escape, delim); + } + + } // namespace io +} // namespace boost + +#endif // BOOST_IO_QUOTED_MANIP diff --git a/external/boost/io/ios_state.hpp b/external/boost/io/ios_state.hpp new file mode 100644 index 0000000..07cfb34 --- /dev/null +++ b/external/boost/io/ios_state.hpp @@ -0,0 +1,439 @@ +// 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 .) + +// See for the library's home page. + +#ifndef BOOST_IO_IOS_STATE_HPP +#define BOOST_IO_IOS_STATE_HPP + +#include // self include +#include + +#include // for std::ios_base, std::basic_ios, etc. +#ifndef BOOST_NO_STD_LOCALE +#include // for std::locale +#endif +#include // for std::basic_ostream +#include // for std::basic_streambuf +#include // 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_; + + ios_flags_saver& operator=(const ios_flags_saver&); +}; + +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_; + + ios_precision_saver& operator=(const ios_precision_saver&); +}; + +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_; + ios_width_saver& operator=(const ios_width_saver&); +}; + + +// Advanced stream state saver class template declarations -----------------// + +template < typename Ch, class Tr > +class basic_ios_iostate_saver +{ +public: + typedef ::std::basic_ios 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_; + basic_ios_iostate_saver& operator=(const basic_ios_iostate_saver&); +}; + +template < typename Ch, class Tr > +class basic_ios_exception_saver +{ +public: + typedef ::std::basic_ios 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_; + basic_ios_exception_saver& operator=(const basic_ios_exception_saver&); +}; + +template < typename Ch, class Tr > +class basic_ios_tie_saver +{ +public: + typedef ::std::basic_ios state_type; + typedef ::std::basic_ostream * 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_; + basic_ios_tie_saver& operator=(const basic_ios_tie_saver&); +}; + +template < typename Ch, class Tr > +class basic_ios_rdbuf_saver +{ +public: + typedef ::std::basic_ios state_type; + typedef ::std::basic_streambuf * 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_; + basic_ios_rdbuf_saver& operator=(const basic_ios_rdbuf_saver&); +}; + +template < typename Ch, class Tr > +class basic_ios_fill_saver +{ +public: + typedef ::std::basic_ios 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_; + basic_ios_fill_saver& operator=(const basic_ios_fill_saver&); +}; + +#ifndef BOOST_NO_STD_LOCALE +template < typename Ch, class Tr > +class basic_ios_locale_saver +{ +public: + typedef ::std::basic_ios 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_; + basic_ios_locale_saver& operator=(const basic_ios_locale_saver&); +}; +#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_; + + ios_iword_saver& operator=(const ios_iword_saver&); +}; + +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_; + + ios_pword_saver operator=(const ios_pword_saver&); +}; + + +// 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_; + + ios_base_all_saver& operator=(const ios_base_all_saver&); +}; + +template < typename Ch, class Tr > +class basic_ios_all_saver +{ +public: + typedef ::std::basic_ios 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 * const a6_save_; + ::std::basic_streambuf * const a7_save_; + typename state_type::char_type const a8_save_; + #ifndef BOOST_NO_STD_LOCALE + ::std::locale const a9_save_; + #endif + + basic_ios_all_saver& operator=(const basic_ios_all_saver&); +}; + +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_; + + ios_all_word_saver& operator=(const ios_all_word_saver&); +}; + + +} // namespace io +} // namespace boost + + +#endif // BOOST_IO_IOS_STATE_HPP diff --git a/external/boost/io_fwd.hpp b/external/boost/io_fwd.hpp new file mode 100644 index 0000000..417b81e --- /dev/null +++ b/external/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 .) + +// See for the library's home page. + +#ifndef BOOST_IO_FWD_HPP +#define BOOST_IO_FWD_HPP + +#include // for std::char_traits (declaration) + + +namespace boost +{ +namespace io +{ + + +// From -------------------------------------------// + +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 > + class basic_ios_iostate_saver; +template < typename Ch, class Tr = ::std::char_traits > + class basic_ios_exception_saver; +template < typename Ch, class Tr = ::std::char_traits > + class basic_ios_tie_saver; +template < typename Ch, class Tr = ::std::char_traits > + class basic_ios_rdbuf_saver; +template < typename Ch, class Tr = ::std::char_traits > + class basic_ios_fill_saver; +template < typename Ch, class Tr = ::std::char_traits > + class basic_ios_locale_saver; +template < typename Ch, class Tr = ::std::char_traits > + class basic_ios_all_saver; + +typedef basic_ios_iostate_saver ios_iostate_saver; +typedef basic_ios_iostate_saver wios_iostate_saver; +typedef basic_ios_exception_saver ios_exception_saver; +typedef basic_ios_exception_saver wios_exception_saver; +typedef basic_ios_tie_saver ios_tie_saver; +typedef basic_ios_tie_saver wios_tie_saver; +typedef basic_ios_rdbuf_saver ios_rdbuf_saver; +typedef basic_ios_rdbuf_saver wios_rdbuf_saver; +typedef basic_ios_fill_saver ios_fill_saver; +typedef basic_ios_fill_saver wios_fill_saver; +typedef basic_ios_locale_saver ios_locale_saver; +typedef basic_ios_locale_saver wios_locale_saver; +typedef basic_ios_all_saver ios_all_saver; +typedef basic_ios_all_saver 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/external/boost/is_placeholder.hpp b/external/boost/is_placeholder.hpp new file mode 100644 index 0000000..5f1b544 --- /dev/null +++ b/external/boost/is_placeholder.hpp @@ -0,0 +1,31 @@ +#ifndef BOOST_IS_PLACEHOLDER_HPP_INCLUDED +#define BOOST_IS_PLACEHOLDER_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined( _MSC_VER ) && ( _MSC_VER >= 1020 ) +# pragma once +#endif + + +// is_placeholder.hpp - TR1 is_placeholder metafunction +// +// 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 + + +namespace boost +{ + +template< class T > struct is_placeholder +{ + enum _vt { value = 0 }; +}; + +} // namespace boost + +#endif // #ifndef BOOST_IS_PLACEHOLDER_HPP_INCLUDED diff --git a/external/boost/iterator.hpp b/external/boost/iterator.hpp new file mode 100644 index 0000000..6adab0e --- /dev/null +++ b/external/boost/iterator.hpp @@ -0,0 +1,59 @@ +// iterator.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 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 +#include // std::ptrdiff_t +#include + +namespace boost +{ +# if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR) + template + 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 +# if !defined(BOOST_MSVC_STD_ITERATOR) + struct iterator_base : std::iterator {}; +# else + struct iterator_base : std::iterator + { + typedef Reference reference; + typedef Pointer pointer; + typedef Distance difference_type; + }; +# endif + } + + template + struct iterator : boost::detail::iterator_base {}; +# endif +} // namespace boost + +#endif // BOOST_ITERATOR_HPP diff --git a/external/boost/iterator/detail/config_def.hpp b/external/boost/iterator/detail/config_def.hpp new file mode 100644 index 0000000..fa8d667 --- /dev/null +++ b/external/boost/iterator/detail/config_def.hpp @@ -0,0 +1,137 @@ +// (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 // for prior +#include + +#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(0x5A0)) \ + || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \ + || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) \ + || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) + +# define BOOST_NO_LVALUE_RETURN_DETECTION + +# if 0 // test code + struct v {}; + + typedef char (&no)[3]; + + template + no foo(T const&, ...); + + template + char foo(T&, int); + + + struct value_iterator + { + v operator*() const; + }; + + template + struct lvalue_deref_helper + { + static T& x; + enum { value = (sizeof(foo(*x,0)) == 1) }; + }; + + int z2[(lvalue_deref_helper::value == 1) ? 1 : -1]; + int z[(lvalue_deref_helper::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 + template + struct foo + { + foo(T); + + template + foo(foo const& other) : p(other.p) { } + + T p; + }; + + bool x = boost::is_convertible, foo >::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/external/boost/iterator/detail/config_undef.hpp b/external/boost/iterator/detail/config_undef.hpp new file mode 100644 index 0000000..9dcd1d5 --- /dev/null +++ b/external/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/external/boost/iterator/detail/enable_if.hpp b/external/boost/iterator/detail/enable_if.hpp new file mode 100644 index 0000000..0fd36fc --- /dev/null +++ b/external/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 +#include + +#include + +// +// 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 + struct enabled + { + template + 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 + { + template + 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 + struct enable_if +# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE) + : enabled<(Cond::value)>::template base +# else + : mpl::identity +# endif + { +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + typedef Return type; +# endif + }; + + } // namespace iterators + +} // namespace boost + +#include + +#endif // BOOST_ENABLE_IF_23022003THW_HPP diff --git a/external/boost/iterator/detail/facade_iterator_category.hpp b/external/boost/iterator/detail/facade_iterator_category.hpp new file mode 100644 index 0000000..2c4771d --- /dev/null +++ b/external/boost/iterator/detail/facade_iterator_category.hpp @@ -0,0 +1,200 @@ +// 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 + +# include // used in iterator_tag inheritance logic +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +# include + +# include // try to keep this last + +# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY +# include +# 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 +struct iterator_writability_disabled +# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY // Adding Thomas' logic? + : mpl::or_< + is_const + , boost::detail::indirect_traits::is_reference_to_const + , is_const + > +# else + : is_const +# 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 +struct iterator_facade_default_category + : mpl::eval_if< + mpl::and_< + is_reference + , is_convertible + > + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::if_< + is_convertible + , std::bidirectional_iterator_tag + , std::forward_iterator_tag + > + > + , typename mpl::eval_if< + mpl::and_< + is_convertible + + // check for readability + , is_convertible + > + , mpl::identity + , mpl::identity + > + > +{ +}; + +// True iff T is convertible to an old-style iterator category. +template +struct is_iterator_category + : mpl::or_< + is_convertible + , is_convertible + > +{ +}; + +template +struct is_iterator_traversal + : is_convertible +{}; + +// +// 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 +struct iterator_category_with_traversal + : Category, Traversal +{ +# 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_MPL_ASSERT_NOT(( + is_convertible< + typename iterator_category_to_traversal::type + , Traversal + >)); + + BOOST_MPL_ASSERT((is_iterator_category)); + BOOST_MPL_ASSERT_NOT((is_iterator_category)); + BOOST_MPL_ASSERT_NOT((is_iterator_traversal)); +# if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) + BOOST_MPL_ASSERT((is_iterator_traversal)); +# endif +# endif +}; + +// Computes an iterator_category tag whose traversal is Traversal and +// which is appropriate for an iterator +template +struct facade_iterator_category_impl +{ +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + BOOST_MPL_ASSERT_NOT((is_iterator_category)); +# endif + + typedef typename iterator_facade_default_category< + Traversal,ValueParam,Reference + >::type category; + + typedef typename mpl::if_< + is_same< + Traversal + , typename iterator_category_to_traversal::type + > + , category + , iterator_category_with_traversal + >::type type; +}; + +// +// Compute an iterator_category for iterator_facade +// +template +struct facade_iterator_category + : mpl::eval_if< + is_iterator_category + , mpl::identity // old-style categories are fine as-is + , facade_iterator_category_impl + > +{ +}; + +}} // namespace boost::detail + +# include + +#endif // FACADE_ITERATOR_CATEGORY_DWA20031118_HPP diff --git a/external/boost/iterator/detail/minimum_category.hpp b/external/boost/iterator/detail/minimum_category.hpp new file mode 100644 index 0000000..96501dd --- /dev/null +++ b/external/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 +# include + +# include + +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 +struct minimum_category_impl +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +{ + template struct apply + { + typedef T2 type; + }; + typedef void type; +} +# endif +; + +template +struct error_not_related_by_convertibility; + +template <> +struct minimum_category_impl +{ + template struct apply + { + typedef T2 type; + }; +}; + +template <> +struct minimum_category_impl +{ + template struct apply + { + typedef T1 type; + }; +}; + +template <> +struct minimum_category_impl +{ + template struct apply + { + BOOST_STATIC_ASSERT((is_same::value)); + typedef T1 type; + }; +}; + +template <> +struct minimum_category_impl +{ + template struct apply + : error_not_related_by_convertibility + { + }; +}; + +template +struct minimum_category +{ + typedef minimum_category_impl< +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // ETI workaround + is_same::value || +# endif + ::boost::is_convertible::value + , ::boost::is_convertible::value +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // ETI workaround + || is_same::value +# endif + > outer; + + typedef typename outer::template apply inner; + typedef typename inner::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT(2,minimum_category,(T1,T2)) +}; + +template <> +struct minimum_category +{ + template + struct apply : minimum_category + {}; + + 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 +{ + typedef int type; +}; +# endif + +}} // namespace boost::detail + +#endif // MINIMUM_CATEGORY_DWA20031119_HPP diff --git a/external/boost/iterator/interoperable.hpp b/external/boost/iterator/interoperable.hpp new file mode 100644 index 0000000..c13dd9b --- /dev/null +++ b/external/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 +# include + +# include + +# include // 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 + 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 + +#endif // BOOST_INTEROPERABLE_23022003THW_HPP diff --git a/external/boost/iterator/iterator_adaptor.hpp b/external/boost/iterator/iterator_adaptor.hpp new file mode 100644 index 0000000..9f2fbb0 --- /dev/null +++ b/external/boost/iterator/iterator_adaptor.hpp @@ -0,0 +1,365 @@ +// (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 +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY +# include +#endif + +#include +#include + +#include + +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 + struct is_convertible + : 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 adapted_iterator : + // public iterator_adaptor< adapted_iterator, Iterator > + // { + // public: + // + // ... + // + // template + // adapted_iterator( + // OtherIterator const& it + // , typename enable_if_convertible::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 + struct enable_if_convertible + { + typedef typename mpl::if_< + mpl::or_< + is_same + , is_convertible + > + , boost::detail::enable_type + , int& + >::type type; + }; + +# elif defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_SFINAE) + + template + struct enable_if_convertible + { + typedef boost::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 + struct enable_if_convertible + : iterators::enable_if< + mpl::or_< + is_same + , is_convertible + > + , boost::detail::enable_type + > + {}; + +# else + + template + struct enable_if_convertible + : iterators::enable_if< + is_convertible + , boost::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 + struct ia_dflt_help + : mpl::eval_if< + is_same + , DefaultNullaryFn + , mpl::identity + > + { + }; + + // 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 boost::detail::ia_dflt_help< + Value + , mpl::eval_if< + is_same + , iterator_value + , remove_reference + > + >::type +# else + , typename boost::detail::ia_dflt_help< + Value, iterator_value + >::type +# endif + + , typename boost::detail::ia_dflt_help< + Traversal + , iterator_traversal + >::type + + , typename boost::detail::ia_dflt_help< + Reference + , mpl::eval_if< + is_same + , iterator_reference + , add_reference + > + >::type + + , typename boost::detail::ia_dflt_help< + Difference, iterator_difference + >::type + > + type; + }; + + // workaround for aC++ CR JAGaf33512 + template + inline void iterator_adaptor_assert_traversal () + { + BOOST_STATIC_ASSERT((is_convertible::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::value_type is used + // + // Category - the traversal category of the resulting iterator. If not + // supplied, iterator_traversal::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::reference is used. + // + // Difference - the difference_type of the resulting iterator. If not + // supplied, iterator_traits::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 boost::detail::iterator_adaptor_base< + Derived, Base, Value, Traversal, Reference, Difference + >::type + { + friend class iterator_core_access; + + protected: + typedef typename boost::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 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 const& x) const + { + // Maybe readd with same_distance + // BOOST_STATIC_ASSERT( + // (detail::same_category_and_difference::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) \ + boost::detail::iterator_adaptor_assert_traversal(); + + 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 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::value) + // ); + return y.base() - m_iterator; + } + +# undef BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL + + private: // data members + Base m_iterator; + }; + +} // namespace boost + +#include + +#endif // BOOST_ITERATOR_ADAPTOR_23022003THW_HPP diff --git a/external/boost/iterator/iterator_categories.hpp b/external/boost/iterator/iterator_categories.hpp new file mode 100644 index 0000000..1740d98 --- /dev/null +++ b/external/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 +# include +# include + +# include + +# include +# include +# include +# include + +# include + +# include + +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 + struct old_category_to_traversal + : mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , void + > + > + > + > + > + {}; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template <> + struct old_category_to_traversal + { + typedef int type; + }; +# endif + + template + struct pure_traversal_tag + : mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , mpl::eval_if< + is_convertible + , mpl::identity + , void + > + > + > + > + > + { + }; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + template <> + struct pure_traversal_tag + { + typedef int type; + }; +# endif + +} // namespace detail + + +// +// Convert an iterator category into a traversal tag +// +template +struct iterator_category_to_traversal + : mpl::eval_if< // if already convertible to a traversal tag, we're done. + is_convertible + , mpl::identity + , boost::detail::old_category_to_traversal + > +{}; + +// Trait to get an iterator's traversal category +template +struct iterator_traversal + : iterator_category_to_traversal< + typename boost::detail::iterator_traits::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 +{ + template + struct apply : iterator_traversal + {}; +}; +template <> +struct iterator_traversal + : iterator_traversal +{}; +# endif + +} // namespace boost + +#include + +#endif // BOOST_ITERATOR_CATEGORIES_HPP diff --git a/external/boost/iterator/iterator_concepts.hpp b/external/boost/iterator/iterator_concepts.hpp new file mode 100644 index 0000000..ced1112 --- /dev/null +++ b/external/boost/iterator/iterator_concepts.hpp @@ -0,0 +1,284 @@ +// (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 + +#include +#include + +// Use boost::detail::iterator_traits to work around some MSVC/Dinkumware problems. +#include + +#include +#include + +#include +#include +#include +#include + +#include + +// Use boost/limits to work around missing limits headers on some compilers +#include +#include + +#include + +#include + +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. + + //=========================================================================== + // Iterator Access Concepts + + BOOST_concept(ReadableIterator,(Iterator)) + : boost::Assignable + , boost::CopyConstructible + + { + typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type value_type; + typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::reference reference; + + BOOST_CONCEPT_USAGE(ReadableIterator) + { + + value_type v = *i; + boost::ignore_unused_variable_warning(v); + } + private: + Iterator i; + }; + + template < + typename Iterator + , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type + > + struct WritableIterator + : boost::CopyConstructible + { + BOOST_CONCEPT_USAGE(WritableIterator) + { + *i = v; + } + private: + ValueType v; + Iterator i; + }; + + template < + typename Iterator + , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type + > + struct WritableIteratorConcept : WritableIterator {}; + + BOOST_concept(SwappableIterator,(Iterator)) + { + BOOST_CONCEPT_USAGE(SwappableIterator) + { + std::iter_swap(i1, i2); + } + private: + Iterator i1; + Iterator i2; + }; + + BOOST_concept(LvalueIterator,(Iterator)) + { + typedef typename boost::detail::iterator_traits::value_type value_type; + + BOOST_CONCEPT_USAGE(LvalueIterator) + { + value_type& r = const_cast(*i); + boost::ignore_unused_variable_warning(r); + } + private: + Iterator i; + }; + + + //=========================================================================== + // Iterator Traversal Concepts + + BOOST_concept(IncrementableIterator,(Iterator)) + : boost::Assignable + , boost::CopyConstructible + { + typedef typename boost::iterator_traversal::type traversal_category; + + BOOST_CONCEPT_ASSERT(( + boost::Convertible< + traversal_category + , boost::incrementable_traversal_tag + >)); + + BOOST_CONCEPT_USAGE(IncrementableIterator) + { + ++i; + (void)i++; + } + private: + Iterator i; + }; + + BOOST_concept(SinglePassIterator,(Iterator)) + : IncrementableIterator + , boost::EqualityComparable + + { + BOOST_CONCEPT_ASSERT(( + boost::Convertible< + BOOST_DEDUCED_TYPENAME SinglePassIterator::traversal_category + , boost::single_pass_traversal_tag + > )); + }; + + BOOST_concept(ForwardTraversal,(Iterator)) + : SinglePassIterator + , boost::DefaultConstructible + { + typedef typename boost::detail::iterator_traits::difference_type difference_type; + + BOOST_MPL_ASSERT((boost::is_integral)); + BOOST_MPL_ASSERT_RELATION(std::numeric_limits::is_signed, ==, true); + + BOOST_CONCEPT_ASSERT(( + boost::Convertible< + BOOST_DEDUCED_TYPENAME ForwardTraversal::traversal_category + , boost::forward_traversal_tag + > )); + }; + + BOOST_concept(BidirectionalTraversal,(Iterator)) + : ForwardTraversal + { + BOOST_CONCEPT_ASSERT(( + boost::Convertible< + BOOST_DEDUCED_TYPENAME BidirectionalTraversal::traversal_category + , boost::bidirectional_traversal_tag + > )); + + BOOST_CONCEPT_USAGE(BidirectionalTraversal) + { + --i; + (void)i--; + } + private: + Iterator i; + }; + + BOOST_concept(RandomAccessTraversal,(Iterator)) + : BidirectionalTraversal + { + BOOST_CONCEPT_ASSERT(( + boost::Convertible< + BOOST_DEDUCED_TYPENAME RandomAccessTraversal::traversal_category + , boost::random_access_traversal_tag + > )); + + BOOST_CONCEPT_USAGE(RandomAccessTraversal) + { + i += n; + i = i + n; + i = n + i; + i -= n; + i = i - n; + n = i - j; + } + + private: + typename BidirectionalTraversal::difference_type n; + Iterator i, j; + }; + + //=========================================================================== + // Iterator Interoperability + + namespace detail + { + template + 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; + boost::ignore_unused_variable_warning(b); + } + + template + 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::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; + boost::ignore_unused_variable_warning(b); + boost::ignore_unused_variable_warning(n); + } + + template + void interop_rand_access_constraints( + Iterator1 const&, Iterator2 const&, + boost::single_pass_traversal_tag, boost::single_pass_traversal_tag) + { } + + } // namespace detail + + BOOST_concept(InteroperableIterator,(Iterator)(ConstIterator)) + { + private: + 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; + + public: + BOOST_CONCEPT_ASSERT((SinglePassIterator)); + BOOST_CONCEPT_ASSERT((SinglePassIterator)); + + BOOST_CONCEPT_USAGE(InteroperableIterator) + { + detail::interop_single_pass_constraints(i, ci); + detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category()); + + ci = i; + } + + private: + Iterator i; + ConstIterator ci; + }; + +} // namespace boost_concepts + +#include + +#endif // BOOST_ITERATOR_CONCEPTS_HPP diff --git a/external/boost/iterator/iterator_facade.hpp b/external/boost/iterator/iterator_facade.hpp new file mode 100644 index 0000000..5ee73b5 --- /dev/null +++ b/external/boost/iterator/iterator_facade.hpp @@ -0,0 +1,878 @@ +// (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 +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include // this goes last + +namespace boost +{ + // This forward declaration is required for the friend declaration + // in iterator_core_access + template class iterator_facade; + + namespace detail + { + // A binary metafunction class that always returns bool. VC6 + // ICEs on mpl::always, probably because of the default + // parameters. + struct always_bool2 + { + template + 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 + , is_convertible + > + , Return + , int[3] + >::type type; + }; +#else + : ::boost::iterators::enable_if< + mpl::or_< + is_convertible + , is_convertible + > + , 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::type value_type; + + // Not the real associated pointer type + typedef typename mpl::eval_if< + boost::detail::iterator_writability_disabled + , add_pointer + , add_pointer + >::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 + 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 postfix_increment_proxy + { + typedef typename iterator_value::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 writable_postfix_increment_proxy + { + typedef typename iterator_value::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 + 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 + 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 + struct is_non_proxy_reference_impl + { + static Reference r; + + template + 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 + struct is_non_proxy_reference + : mpl::bool_< + is_non_proxy_reference_impl::value + > + {}; +# else + template + struct is_non_proxy_reference + : is_convertible< + typename remove_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 + struct postfix_increment_result + : mpl::eval_if< + mpl::and_< + // A proxy is only needed for readable iterators + is_convertible + + // No multipass iterator can have values that disappear + // before positions can be re-visited + , mpl::not_< + is_convertible< + typename iterator_category_to_traversal::type + , forward_traversal_tag + > + > + > + , mpl::if_< + is_non_proxy_reference + , postfix_increment_proxy + , writable_postfix_increment_proxy + > + , mpl::identity + > + {}; + + // 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 + 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 + 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 + , Pointer + , operator_arrow_proxy + >::type type; + + static type make(Reference x) + { + return boost::implicit_cast(&x); + } + }; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + // Deal with ETI + template<> + struct operator_arrow_result + { + 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 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 + 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 + , iterator_writability_disabled + > + > + {}; + + template + struct operator_brackets_result + { + typedef typename mpl::if_< + use_operator_brackets_proxy + , operator_brackets_proxy + , Value + >::type type; + }; + + template + operator_brackets_proxy make_operator_brackets_result(Iterator const& iter, mpl::true_) + { + return operator_brackets_proxy(iter); + } + + template + typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_) + { + return *iter; + } + + struct choose_difference_type + { + template + struct apply + : +# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP + iterator_difference +# elif BOOST_WORKAROUND(BOOST_MSVC, < 1300) + mpl::if_< + is_convertible + , typename I1::difference_type + , typename I2::difference_type + > +# else + mpl::eval_if< + is_convertible + , iterator_difference + , iterator_difference + > +# 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 Reference1, class Difference1 \ + , class Derived2, class V2, class TC2, class Reference2, class Difference2 \ + > \ + prefix typename mpl::apply2::type \ + operator op( \ + iterator_facade const& lhs \ + , iterator_facade const& rhs) +# else +# define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \ + template < \ + class Derived1, class V1, class TC1, class Reference1, class Difference1 \ + , class Derived2, class V2, class TC2, class Reference2, class Difference2 \ + > \ + prefix typename boost::detail::enable_if_interoperable< \ + Derived1, Derived2 \ + , typename mpl::apply2::type \ + >::type \ + operator op( \ + iterator_facade const& lhs \ + , iterator_facade const& rhs) +# endif + +# define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args) \ + template \ + 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) + // Tasteless as this may seem, making all members public allows member templates + // to work in the absence of member template friends. + public: +# else + + template friend class iterator_facade; + +# define BOOST_ITERATOR_FACADE_RELATION(op) \ + BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, boost::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, -, boost::detail::choose_difference_type) + ; + + BOOST_ITERATOR_FACADE_PLUS_HEAD( + friend inline + , (iterator_facade const& + , typename Derived::difference_type) + ) + ; + + BOOST_ITERATOR_FACADE_PLUS_HEAD( + friend inline + , (typename Derived::difference_type + , iterator_facade const&) + ) + ; + +# endif + + template + static typename Facade::reference dereference(Facade const& f) + { + return f.dereference(); + } + + template + static void increment(Facade& f) + { + f.increment(); + } + + template + static void decrement(Facade& f) + { + f.decrement(); + } + + template + static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::true_) + { + return f1.equal(f2); + } + + template + static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::false_) + { + return f2.equal(f1); + } + + template + static void advance(Facade& f, typename Facade::difference_type n) + { + f.advance(n); + } + + template + static typename Facade1::difference_type distance_from( + Facade1 const& f1, Facade2 const& f2, mpl::true_) + { + return -f1.distance_to(f2); + } + + template + 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 + static I& derived(iterator_facade& facade) + { + return *static_cast(&facade); + } + + template + static I const& derived(iterator_facade const& facade) + { + return *static_cast(&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 boost::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(this); + } + + Derived const& derived() const + { + return *static_cast(this); + } + + typedef boost::detail::iterator_facade_types< + Value, CategoryOrTraversal, Reference, Difference + > associated_types; + + typedef boost::detail::operator_arrow_result< + typename associated_types::value_type + , Reference + , typename associated_types::pointer + > pointer_; + + protected: + // For use by derived classes + typedef iterator_facade iterator_facade_; + + public: + + typedef typename associated_types::value_type value_type; + typedef Reference reference; + typedef Difference difference_type; + + typedef typename pointer_::type pointer; + + typedef typename associated_types::iterator_category iterator_category; + + reference operator*() const + { + return iterator_core_access::dereference(this->derived()); + } + + pointer operator->() const + { + return pointer_::make(*this->derived()); + } + + typename boost::detail::operator_brackets_result::type + operator[](difference_type n) const + { + typedef boost::detail::use_operator_brackets_proxy use_proxy; + + return boost::detail::make_operator_brackets_result( + this->derived() + n + , use_proxy() + ); + } + + Derived& operator++() + { + iterator_core_access::increment(this->derived()); + return this->derived(); + } + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + typename boost::detail::postfix_increment_result::type + operator++(int) + { + typename boost::detail::postfix_increment_result::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 + inline typename boost::detail::postfix_increment_result::type + operator++( + iterator_facade& i + , int + ) + { + typename boost::detail::postfix_increment_result::type + tmp(*static_cast(&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 a1; + // AdaptorA 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 a; + // AdaptorB 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() +# 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(&lhs) \ + , *static_cast(&rhs) \ + , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1) \ + ); \ + } + +# define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \ + BOOST_ITERATOR_FACADE_INTEROP( \ + op \ + , boost::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( + - + , boost::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(i)); \ + return tmp += n; \ + } + +BOOST_ITERATOR_FACADE_PLUS(( + iterator_facade const& i + , typename Derived::difference_type n +)) + +BOOST_ITERATOR_FACADE_PLUS(( + typename Derived::difference_type n + , iterator_facade const& i +)) +# undef BOOST_ITERATOR_FACADE_PLUS +# undef BOOST_ITERATOR_FACADE_PLUS_HEAD + +} // namespace boost + +#include + +#endif // BOOST_ITERATOR_FACADE_23022003THW_HPP diff --git a/external/boost/iterator/iterator_traits.hpp b/external/boost/iterator/iterator_traits.hpp new file mode 100644 index 0000000..960970e --- /dev/null +++ b/external/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 +# include + +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 +struct iterator_value +{ + typedef typename boost::detail::iterator_traits::value_type type; +}; + +template +struct iterator_reference +{ + typedef typename boost::detail::iterator_traits::reference type; +}; + + +template +struct iterator_pointer +{ + typedef typename boost::detail::iterator_traits::pointer type; +}; + +template +struct iterator_difference +{ + typedef typename boost::detail::iterator_traits::difference_type type; +}; + +template +struct BOOST_ITERATOR_CATEGORY +{ + typedef typename boost::detail::iterator_traits::iterator_category type; +}; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +template <> +struct iterator_value +{ + typedef void type; +}; + +template <> +struct iterator_reference +{ + typedef void type; +}; + +template <> +struct iterator_pointer +{ + typedef void type; +}; + +template <> +struct iterator_difference +{ + typedef void type; +}; + +template <> +struct BOOST_ITERATOR_CATEGORY +{ + typedef void type; +}; +# endif + +} // namespace boost::iterator + +#endif // ITERATOR_TRAITS_DWA200347_HPP diff --git a/external/boost/iterator/reverse_iterator.hpp b/external/boost/iterator/reverse_iterator.hpp new file mode 100644 index 0000000..97b6b48 --- /dev/null +++ b/external/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 +#include +#include + +namespace boost +{ + + // + // + // + template + class reverse_iterator + : public iterator_adaptor< reverse_iterator, Iterator > + { + typedef iterator_adaptor< reverse_iterator, Iterator > super_t; + + friend class iterator_core_access; + + public: + reverse_iterator() {} + + explicit reverse_iterator(Iterator x) + : super_t(x) {} + + template + reverse_iterator( + reverse_iterator const& r + , typename enable_if_convertible::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 + typename super_t::difference_type + distance_to(reverse_iterator const& y) const + { + return this->base_reference() - y.base(); + } + }; + + template + reverse_iterator make_reverse_iterator(BidirectionalIterator x) + { + return reverse_iterator(x); + } + +} // namespace boost + +#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP diff --git a/external/boost/lexical_cast.hpp b/external/boost/lexical_cast.hpp new file mode 100644 index 0000000..5a3d4f0 --- /dev/null +++ b/external/boost/lexical_cast.hpp @@ -0,0 +1,2195 @@ +#ifndef BOOST_LEXICAL_CAST_INCLUDED +#define BOOST_LEXICAL_CAST_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// Boost lexical_cast.hpp header -------------------------------------------// +// +// See http://www.boost.org/libs/conversion for 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 Slettebo, +// with additional fixes and suggestions from Gennaro Prota, +// Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov, +// Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann, +// Cheng Yang, Matthew Bradbury, David W. Birdsall and other Boosters +// when: November 2000, March 2003, June 2005, June 2006, March 2011 - 2012 + +#include +#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING) +#define BOOST_LCAST_NO_WCHAR_T +#endif + +#if (defined(__MINGW32__) || defined(__MINGW64__)) && (__GNUC__ == 4) \ + && ((__GNUC_MINOR__ == 4) || (__GNUC_MINOR__ == 5)) && defined(__STRICT_ANSI__) \ + && !defined(BOOST_LCAST_NO_WCHAR_T) + +// workaround for a mingw bug +// http://sourceforge.net/tracker/index.php?func=detail&aid=2373234&group_id=2435&atid=102435 +#include <_mingw.h> +#if (__GNUC_MINOR__ == 4) +extern "C" { +_CRTIMP int __cdecl swprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , ...); +_CRTIMP int __cdecl vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , ...); +} +#endif +#if (__GNUC_MINOR__ == 5) +extern "C" { +_CRTIMP int __cdecl swprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , ...); +_CRTIMP int __cdecl vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , va_list); +} +#endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(__SUNPRO_CC) +#include +#endif // !defined(__SUNPRO_CC) +#ifndef BOOST_NO_CWCHAR +# include +#endif + +#ifndef BOOST_NO_STD_LOCALE +# include +#else +# ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE +# warning "Unable to use header. boost::lexical_cast will use the 'C' locale." +# define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE +# endif +#endif + +#ifdef BOOST_NO_STRINGSTREAM +#include +#else +#include +#endif + +#ifdef BOOST_NO_TYPEID +#define BOOST_LCAST_THROW_BAD_CAST(S, T) throw_exception(bad_lexical_cast()) +#else +#define BOOST_LCAST_THROW_BAD_CAST(Source, Target) \ + throw_exception(bad_lexical_cast(typeid(Source), typeid(Target))) +#endif + +namespace boost +{ + // exception used to indicate runtime lexical_cast failure + class bad_lexical_cast : + // workaround MSVC bug with std::bad_cast when _HAS_EXCEPTIONS == 0 +#if defined(BOOST_MSVC) && defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS + public std::exception +#else + public std::bad_cast +#endif + +#if defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, < 0x560 ) + // under bcc32 5.5.1 bad_cast doesn't derive from exception + , public std::exception +#endif + + { + public: + bad_lexical_cast() : +#ifndef BOOST_NO_TYPEID + source(&typeid(void)), target(&typeid(void)) +#else + source(0), target(0) // this breaks getters +#endif + { + } + + bad_lexical_cast( + const std::type_info &source_type_arg, + const std::type_info &target_type_arg) : + source(&source_type_arg), target(&target_type_arg) + { + } + + 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 + struct stream_char + { + typedef char type; + }; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + template + struct stream_char< std::basic_string > + { + typedef CharT type; + }; + +#if !defined(__SUNPRO_CC) + template + struct stream_char< ::boost::container::basic_string > + { + typedef CharT type; + }; +#endif // !defined(__SUNPRO_CC) +#endif + +#ifndef BOOST_LCAST_NO_WCHAR_T +#ifndef BOOST_NO_INTRINSIC_WCHAR_T + template<> + struct stream_char + { + typedef wchar_t type; + }; +#endif + + template<> + struct stream_char + { + typedef wchar_t type; + }; + + template<> + struct stream_char + { + typedef wchar_t type; + }; + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + template<> + struct stream_char + { + typedef wchar_t type; + }; +#endif +#endif + + +#ifndef BOOST_NO_CHAR16_T + + template<> + struct stream_char + { + typedef char16_t type; + }; + + template<> + struct stream_char + { + typedef char16_t type; + }; + + template<> + struct stream_char + { + typedef char16_t type; + }; + +#endif + +#ifndef BOOST_NO_CHAR32_T + + template<> + struct stream_char + { + typedef char32_t type; + }; + + template<> + struct stream_char + { + typedef char32_t type; + }; + + template<> + struct stream_char + { + typedef char32_t type; + }; + +#endif + + template + struct widest_char + { + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< + (sizeof(TargetChar) > sizeof(SourceChar)) + , TargetChar + , SourceChar >::type type; + }; + } + + namespace detail // deduce_char_traits template + { +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + template + struct deduce_char_traits + { + typedef std::char_traits type; + }; + + template + struct deduce_char_traits< CharT + , std::basic_string + , Source + > + { + typedef Traits type; + }; + + template + struct deduce_char_traits< CharT + , Target + , std::basic_string + > + { + typedef Traits type; + }; + +#if !defined(__SUNPRO_CC) + template + struct deduce_char_traits< CharT + , ::boost::container::basic_string + , Source + > + { + typedef Traits type; + }; + + template + struct deduce_char_traits< CharT + , Target + , ::boost::container::basic_string + > + { + typedef Traits type; + }; + + template + struct deduce_char_traits< CharT + , std::basic_string + , std::basic_string + > + { + typedef Traits type; + }; + + template + struct deduce_char_traits< CharT + , ::boost::container::basic_string + , ::boost::container::basic_string + > + { + typedef Traits type; + }; + + template + struct deduce_char_traits< CharT + , ::boost::container::basic_string + , std::basic_string + > + { + typedef Traits type; + }; + + template + struct deduce_char_traits< CharT + , std::basic_string + , ::boost::container::basic_string + > + { + typedef Traits type; + }; +#endif // !defined(__SUNPRO_CC) +#endif + } + + namespace detail // lcast_src_length + { + // Return max. length of string representation of Source; + template< class Source // Source type of lexical_cast. + > + struct lcast_src_length + { + BOOST_STATIC_CONSTANT(std::size_t, value = 1); + // To check coverage, build the test with + // bjam --v2 profile optimization=off + static void check_coverage() {} + }; + + // Helper for integral types. + // Notes on length calculation: + // Max length for 32bit int with grouping "\1" and thousands_sep ',': + // "-2,1,4,7,4,8,3,6,4,7" + // ^ - is_signed + // ^ - 1 digit not counted by digits10 + // ^^^^^^^^^^^^^^^^^^ - digits10 * 2 + // + // Constant is_specialized is used instead of constant 1 + // to prevent buffer overflow in a rare case when + // doesn't add missing specialization for + // numeric_limits for some integral type T. + // When is_specialized is false, the whole expression is 0. + template + struct lcast_src_length_integral + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_CONSTANT(std::size_t, value = + std::numeric_limits::is_signed + + std::numeric_limits::is_specialized + /* == 1 */ + std::numeric_limits::digits10 * 2 + ); +#else + BOOST_STATIC_CONSTANT(std::size_t, value = 156); + BOOST_STATIC_ASSERT(sizeof(Source) * CHAR_BIT <= 256); +#endif + }; +// TODO: FIX for char16_t, char32_t, we can ignore CharT +#define BOOST_LCAST_DEF(T) \ + template<> struct lcast_src_length \ + : lcast_src_length_integral \ + { static void check_coverage() {} }; + + BOOST_LCAST_DEF(short) + BOOST_LCAST_DEF(unsigned short) + BOOST_LCAST_DEF(int) + BOOST_LCAST_DEF(unsigned int) + BOOST_LCAST_DEF(long) + BOOST_LCAST_DEF(unsigned long) +#if defined(BOOST_HAS_LONG_LONG) + BOOST_LCAST_DEF(boost::ulong_long_type) + BOOST_LCAST_DEF(boost::long_long_type ) +#elif defined(BOOST_HAS_MS_INT64) + BOOST_LCAST_DEF(unsigned __int64) + BOOST_LCAST_DEF( __int64) +#endif + +#undef BOOST_LCAST_DEF + +#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION + // Helper for floating point types. + // -1.23456789e-123456 + // ^ sign + // ^ leading digit + // ^ decimal point + // ^^^^^^^^ lcast_precision::value + // ^ "e" + // ^ exponent sign + // ^^^^^^ exponent (assumed 6 or less digits) + // sign + leading digit + decimal point + "e" + exponent sign == 5 + template + struct lcast_src_length_floating + { + BOOST_STATIC_ASSERT( + std::numeric_limits::max_exponent10 <= 999999L && + std::numeric_limits::min_exponent10 >= -999999L + ); + BOOST_STATIC_CONSTANT(std::size_t, value = + 5 + lcast_precision::value + 6 + ); + }; + + template<> + struct lcast_src_length + : lcast_src_length_floating + { + static void check_coverage() {} + }; + + template<> + struct lcast_src_length + : lcast_src_length_floating + { + static void check_coverage() {} + }; + + template<> + struct lcast_src_length + : lcast_src_length_floating + { + static void check_coverage() {} + }; + +#endif // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION + } + + namespace detail // '0', '+' and '-' constants + { + template struct lcast_char_constants; + + template<> + struct lcast_char_constants + { + BOOST_STATIC_CONSTANT(char, zero = '0'); + BOOST_STATIC_CONSTANT(char, minus = '-'); + BOOST_STATIC_CONSTANT(char, plus = '+'); + BOOST_STATIC_CONSTANT(char, lowercase_e = 'e'); + BOOST_STATIC_CONSTANT(char, capital_e = 'E'); + BOOST_STATIC_CONSTANT(char, c_decimal_separator = '.'); + }; + +#ifndef BOOST_LCAST_NO_WCHAR_T + template<> + struct lcast_char_constants + { + BOOST_STATIC_CONSTANT(wchar_t, zero = L'0'); + BOOST_STATIC_CONSTANT(wchar_t, minus = L'-'); + BOOST_STATIC_CONSTANT(wchar_t, plus = L'+'); + BOOST_STATIC_CONSTANT(wchar_t, lowercase_e = L'e'); + BOOST_STATIC_CONSTANT(wchar_t, capital_e = L'E'); + BOOST_STATIC_CONSTANT(wchar_t, c_decimal_separator = L'.'); + }; +#endif + +#ifndef BOOST_NO_CHAR16_T + template<> + struct lcast_char_constants + { + BOOST_STATIC_CONSTANT(char16_t, zero = u'0'); + BOOST_STATIC_CONSTANT(char16_t, minus = u'-'); + BOOST_STATIC_CONSTANT(char16_t, plus = u'+'); + BOOST_STATIC_CONSTANT(char16_t, lowercase_e = u'e'); + BOOST_STATIC_CONSTANT(char16_t, capital_e = u'E'); + BOOST_STATIC_CONSTANT(char16_t, c_decimal_separator = u'.'); + }; +#endif + +#ifndef BOOST_NO_CHAR32_T + template<> + struct lcast_char_constants + { + BOOST_STATIC_CONSTANT(char32_t, zero = U'0'); + BOOST_STATIC_CONSTANT(char32_t, minus = U'-'); + BOOST_STATIC_CONSTANT(char32_t, plus = U'+'); + BOOST_STATIC_CONSTANT(char32_t, lowercase_e = U'e'); + BOOST_STATIC_CONSTANT(char32_t, capital_e = U'E'); + BOOST_STATIC_CONSTANT(char32_t, c_decimal_separator = U'.'); + }; +#endif + } + + namespace detail // lcast_to_unsigned + { +#if (defined _MSC_VER) +# pragma warning( push ) +// C4146: unary minus operator applied to unsigned type, result still unsigned +# pragma warning( disable : 4146 ) +#elif defined( __BORLANDC__ ) +# pragma option push -w-8041 +#endif + template + inline + BOOST_DEDUCED_TYPENAME make_unsigned::type lcast_to_unsigned(T value) + { + typedef BOOST_DEDUCED_TYPENAME make_unsigned::type result_type; + result_type uvalue = static_cast(value); + return value < 0 ? -uvalue : uvalue; + } +#if (defined _MSC_VER) +# pragma warning( pop ) +#elif defined( __BORLANDC__ ) +# pragma option pop +#endif + } + + namespace detail // lcast_put_unsigned + { + template + CharT* lcast_put_unsigned(const T n_param, CharT* finish) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + + typedef typename Traits::int_type int_type; + CharT const czero = lcast_char_constants::zero; + int_type const zero = Traits::to_int_type(czero); + BOOST_DEDUCED_TYPENAME boost::mpl::if_c< + (sizeof(int_type) > sizeof(T)) + , int_type + , T + >::type n = n_param; + +#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + std::locale loc; + if (loc != std::locale::classic()) { + typedef std::numpunct numpunct; + numpunct const& np = BOOST_USE_FACET(numpunct, loc); + std::string const grouping = np.grouping(); + std::string::size_type const grouping_size = grouping.size(); + + if ( grouping_size && grouping[0] > 0 ) + { + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // Check that ulimited group is unreachable: + BOOST_STATIC_ASSERT(std::numeric_limits::digits10 < CHAR_MAX); +#endif + CharT thousands_sep = np.thousands_sep(); + std::string::size_type group = 0; // current group number + char last_grp_size = grouping[0]; + char left = last_grp_size; + + do + { + if(left == 0) + { + ++group; + if(group < grouping_size) + { + char const grp_size = grouping[group]; + last_grp_size = grp_size <= 0 ? CHAR_MAX : grp_size; + } + + left = last_grp_size; + --finish; + Traits::assign(*finish, thousands_sep); + } + + --left; + + --finish; + int_type const digit = static_cast(n % 10U); + Traits::assign(*finish, Traits::to_char_type(zero + digit)); + n /= 10; + } while(n); + return finish; + } + } +#endif + { + do + { + --finish; + int_type const digit = static_cast(n % 10U); + Traits::assign(*finish, Traits::to_char_type(zero + digit)); + n /= 10; + } while(n); + } + + return finish; + } + } + + namespace detail // lcast_ret_unsigned + { + template + inline bool lcast_ret_unsigned(T& value, const CharT* const begin, const CharT* end) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + typedef typename Traits::int_type int_type; + CharT const czero = lcast_char_constants::zero; + --end; + value = 0; + + if (begin > end || *end < czero || *end >= czero + 10) + return false; + value = *end - czero; + --end; + T multiplier = 1; + bool multiplier_overflowed = false; + +#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + std::locale loc; + if (loc != std::locale::classic()) { + typedef std::numpunct numpunct; + numpunct const& np = BOOST_USE_FACET(numpunct, loc); + std::string const& grouping = np.grouping(); + std::string::size_type const grouping_size = grouping.size(); + + /* According to Programming languages - C++ + * we MUST check for correct grouping + */ + if (grouping_size && grouping[0] > 0) + { + unsigned char current_grouping = 0; + CharT const thousands_sep = np.thousands_sep(); + char remained = grouping[current_grouping] - 1; + bool shall_we_return = true; + + for(;end>=begin; --end) + { + if (remained) { + T const multiplier_10 = multiplier * 10; + if (multiplier_10 / 10 != multiplier) multiplier_overflowed = true; + + T const dig_value = *end - czero; + T const new_sub_value = multiplier_10 * dig_value; + + if (*end < czero || *end >= czero + 10 + /* detecting overflow */ + || (dig_value && new_sub_value / dig_value != multiplier_10) + || static_cast((std::numeric_limits::max)()-new_sub_value) < value + || (multiplier_overflowed && dig_value) + ) + return false; + + value += new_sub_value; + multiplier *= 10; + --remained; + } else { + if ( !Traits::eq(*end, thousands_sep) ) //|| begin == end ) return false; + { + /* + * According to Programming languages - C++ + * Digit grouping is checked. That is, the positions of discarded + * separators is examined for consistency with + * use_facet >(loc ).grouping() + * + * BUT what if there is no separators at all and grouping() + * is not empty? Well, we have no extraced separators, so we + * won`t check them for consistency. This will allow us to + * work with "C" locale from other locales + */ + shall_we_return = false; + break; + } else { + if ( begin == end ) return false; + if (current_grouping < grouping_size-1 ) ++current_grouping; + remained = grouping[current_grouping]; + } + } + } + + if (shall_we_return) return true; + } + } +#endif + { + while ( begin <= end ) + { + T const multiplier_10 = multiplier * 10; + if (multiplier_10 / 10 != multiplier) multiplier_overflowed = true; + + T const dig_value = *end - czero; + T const new_sub_value = multiplier_10 * dig_value; + + if (*end < czero || *end >= czero + 10 + /* detecting overflow */ + || (dig_value && new_sub_value / dig_value != multiplier_10) + || static_cast((std::numeric_limits::max)()-new_sub_value) < value + || (multiplier_overflowed && dig_value) + ) + return false; + + value += new_sub_value; + multiplier *= 10; + --end; + } + } + return true; + } + } + + namespace detail + { + /* Returns true and sets the correct value if found NaN or Inf. */ + template + inline bool parse_inf_nan_impl(const CharT* begin, const CharT* end, T& value + , const CharT* lc_NAN, const CharT* lc_nan + , const CharT* lc_INFINITY, const CharT* lc_infinity + , const CharT opening_brace, const CharT closing_brace) + { + using namespace std; + if (begin == end) return false; + const CharT minus = lcast_char_constants::minus; + const CharT plus = lcast_char_constants::plus; + const int inifinity_size = 8; + + bool has_minus = false; + /* Parsing +/- */ + if( *begin == minus) + { + ++ begin; + has_minus = true; + } + else if( *begin == plus ) ++begin; + + if( end-begin < 3 ) return false; + if( !memcmp(begin, lc_nan, 3*sizeof(CharT)) || !memcmp(begin, lc_NAN, 3*sizeof(CharT)) ) + { + begin += 3; + if (end != begin) /* It is 'nan(...)' or some bad input*/ + { + if(end-begin<2) return false; // bad input + -- end; + if( *begin != opening_brace || *end != closing_brace) return false; // bad input + } + + if( !has_minus ) value = std::numeric_limits::quiet_NaN(); + else value = (boost::math::changesign) (std::numeric_limits::quiet_NaN()); + return true; + } else + if (( /* 'INF' or 'inf' */ + end-begin==3 + && + (!memcmp(begin, lc_infinity, 3*sizeof(CharT)) || !memcmp(begin, lc_INFINITY, 3*sizeof(CharT))) + ) + || + ( /* 'INFINITY' or 'infinity' */ + end-begin==inifinity_size + && + (!memcmp(begin, lc_infinity, inifinity_size)|| !memcmp(begin, lc_INFINITY, inifinity_size)) + ) + ) + { + if( !has_minus ) value = std::numeric_limits::infinity(); + else value = (boost::math::changesign) (std::numeric_limits::infinity()); + return true; + } + + return false; + } + +#ifndef BOOST_LCAST_NO_WCHAR_T + template + bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value) + { + return parse_inf_nan_impl(begin, end, value + , L"NAN", L"nan" + , L"INFINITY", L"infinity" + , L'(', L')'); + } +#endif +#ifndef BOOST_NO_CHAR16_T + template + bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) + { + return parse_inf_nan_impl(begin, end, value + , u"NAN", u"nan" + , u"INFINITY", u"infinity" + , u'(', u')'); + } +#endif +#ifndef BOOST_NO_CHAR32_T + template + bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) + { + return parse_inf_nan_impl(begin, end, value + , U"NAN", U"nan" + , U"INFINITY", U"infinity" + , U'(', U')'); + } +#endif + + template + bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) + { + return parse_inf_nan_impl(begin, end, value + , "NAN", "nan" + , "INFINITY", "infinity" + , '(', ')'); + } +#ifndef BOOST_LCAST_NO_WCHAR_T + template + bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) + { + using namespace std; + if ( (boost::math::isnan)(value) ) + { + if ( (boost::math::signbit)(value) ) + { + memcpy(begin,L"-nan", sizeof(L"-nan")); + end = begin + 4; + } else + { + memcpy(begin,L"nan", sizeof(L"nan")); + end = begin + 3; + } + return true; + } else if ( (boost::math::isinf)(value) ) + { + if ( (boost::math::signbit)(value) ) + { + memcpy(begin,L"-inf", sizeof(L"-inf")); + end = begin + 4; + } else + { + memcpy(begin,L"inf", sizeof(L"inf")); + end = begin + 3; + } + return true; + } + + return false; + } +#endif + template + bool put_inf_nan(CharT* begin, CharT*& end, const T& value) + { + using namespace std; + if ( (boost::math::isnan)(value) ) + { + if ( (boost::math::signbit)(value) ) + { + memcpy(begin,"-nan", sizeof("-nan")); + end = begin + 4; + } else + { + memcpy(begin,"nan", sizeof("nan")); + end = begin + 3; + } + return true; + } else if ( (boost::math::isinf)(value) ) + { + if ( (boost::math::signbit)(value) ) + { + memcpy(begin,"-inf", sizeof("-inf")); + end = begin + 4; + } else + { + memcpy(begin,"inf", sizeof("inf")); + end = begin + 3; + } + return true; + } + + return false; + } + + } + + + namespace detail // lcast_ret_float + { + template + struct mantissa_holder_type + { + /* Can not be used with this type */ + }; + + template <> + struct mantissa_holder_type + { + typedef unsigned int type; + }; + + template <> + struct mantissa_holder_type + { +#if defined(BOOST_HAS_LONG_LONG) + typedef boost::ulong_long_type type; +#elif defined(BOOST_HAS_MS_INT64) + typedef unsigned __int64 type; +#endif + }; + + template + inline bool lcast_ret_float(T& value, const CharT* begin, const CharT* end) + { + +#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + std::locale loc; + typedef std::numpunct numpunct; + numpunct const& np = BOOST_USE_FACET(numpunct, loc); + std::string const grouping( + (loc == std::locale::classic()) + ? std::string() + : np.grouping() + ); + std::string::size_type const grouping_size = grouping.size(); + CharT const thousands_sep = grouping_size ? np.thousands_sep() : 0; + CharT const decimal_point = np.decimal_point(); + bool found_grouping = false; + std::string::size_type last_grouping_pos = grouping_size - 1; +#else + CharT const decimal_point = lcast_char_constants::c_decimal_separator; +#endif + + CharT const czero = lcast_char_constants::zero; + CharT const minus = lcast_char_constants::minus; + CharT const plus = lcast_char_constants::plus; + CharT const capital_e = lcast_char_constants::capital_e; + CharT const lowercase_e = lcast_char_constants::lowercase_e; + + value = 0.0; + + if (parse_inf_nan(begin, end, value)) return true; + + typedef typename Traits::int_type int_type; + typedef BOOST_DEDUCED_TYPENAME mantissa_holder_type::type mantissa_type; + int_type const zero = Traits::to_int_type(czero); + if (begin == end) return false; + + /* Getting the plus/minus sign */ + bool has_minus = false; + if ( *begin == minus ) { + ++ begin; + has_minus = true; + if (begin == end) return false; + } else if ( *begin == plus ) { + ++begin; + if (begin == end) return false; + } + + bool found_decimal = false; + bool found_number_before_exp = false; + int pow_of_10 = 0; + mantissa_type mantissa=0; + bool is_mantissa_full = false; + + char length_since_last_delim = 0; + + while ( begin != end ) + { + if (found_decimal) { + /* We allow no thousand_separators after decimal point */ + + mantissa_type tmp_mantissa = mantissa * 10u; + if ( *begin == lowercase_e || *begin == capital_e ) break; + if ( *begin < czero || *begin >= czero + 10 ) return false; + if ( is_mantissa_full + || tmp_mantissa / 10u != mantissa + || (std::numeric_limits::max)()-(*begin - zero) < tmp_mantissa + ) { + is_mantissa_full = true; + ++ begin; + continue; + } + + -- pow_of_10; + mantissa = tmp_mantissa; + mantissa += *begin - zero; + + found_number_before_exp = true; + } else { + + if (*begin >= czero && *begin < czero + 10) { + + /* Checking for mantissa overflow. If overflow will + * occur, them we only increase multiplyer + */ + mantissa_type tmp_mantissa = mantissa * 10u; + if( !is_mantissa_full + && tmp_mantissa / 10u == mantissa + && (std::numeric_limits::max)()-(*begin - zero) >= tmp_mantissa + ) + { + mantissa = tmp_mantissa; + mantissa += *begin - zero; + } else + { + is_mantissa_full = true; + ++ pow_of_10; + } + + found_number_before_exp = true; + ++ length_since_last_delim; + } else if ( *begin == decimal_point || *begin == lowercase_e || *begin == capital_e) { +#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + /* If ( we need to check grouping + * and ( grouping missmatches + * or grouping position is incorrect + * or we are using the grouping position 0 twice + * ) + * ) then return error + */ + if( grouping_size && found_grouping + && ( + length_since_last_delim != grouping[0] + || last_grouping_pos>1 + || (last_grouping_pos==0 && grouping_size>1) + ) + ) return false; +#endif + + if(*begin == decimal_point){ + ++ begin; + found_decimal = true; + continue; + }else { + if (!found_number_before_exp) return false; + break; + } + } +#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + else if (grouping_size && *begin == thousands_sep){ + if(found_grouping) + { + /* It is not he first time, when we find thousands separator, + * so we need to chek, is the distance between two groupings + * equal to grouping[last_grouping_pos] */ + + if (length_since_last_delim != grouping[last_grouping_pos] ) + { + if (!last_grouping_pos) return false; + else + { + -- last_grouping_pos; + if (length_since_last_delim != grouping[last_grouping_pos]) return false; + } + } else + /* We are calling the grouping[0] twice, when grouping size is more than 1 */ + if (grouping_size>1u && last_grouping_pos+1 grouping[last_grouping_pos] ) return false; + } + + length_since_last_delim = 0; + ++ begin; + + /* Delimiter at the end '100,' */ + if (begin == end) return false; + continue; + } +#endif + else return false; + } + + ++begin; + } + + // Exponent found + if ( begin != end && ( *begin == lowercase_e || *begin == capital_e ) ) { + ++ begin; + if ( begin == end ) return false; + + bool exp_has_minus = false; + if( *begin == minus ) { + exp_has_minus = true; + ++ begin; + if ( begin == end ) return false; + } else if (*begin == plus ) { + ++ begin; + if ( begin == end ) return false; + } + + int exp_pow_of_10 = 0; + while ( begin != end ) + { + if ( *begin < czero + || *begin >= czero + 10 + || exp_pow_of_10 * 10 < exp_pow_of_10) /* Overflows are checked lower more precisely*/ + return false; + + exp_pow_of_10 *= 10; + exp_pow_of_10 += *begin - zero; + ++ begin; + }; + + if ( exp_pow_of_10 ) { + /* Overflows are checked lower */ + if ( exp_has_minus ) { + pow_of_10 -= exp_pow_of_10; + } else { + pow_of_10 += exp_pow_of_10; + } + } + } + + /* We need a more accurate algorithm... We can not use current algorithm + * with long doubles (and with doubles if sizeof(double)==sizeof(long double)). + */ + long double result = std::pow(10.0L, pow_of_10) * mantissa; + value = static_cast( has_minus ? (boost::math::changesign)(result) : result); + + if ( (boost::math::isinf)(value) || (boost::math::isnan)(value) ) return false; + + return true; + } + } + + namespace detail // stl_buf_unlocker + { + template< class BufferType, class CharT > + class stl_buf_unlocker: public BufferType{ + public: + typedef BufferType base_class; +#ifndef BOOST_NO_USING_TEMPLATE + using base_class::pptr; + using base_class::pbase; + using base_class::setg; + using base_class::setp; +#else + CharT* pptr() const { return base_class::pptr(); } + CharT* pbase() const { return base_class::pbase(); } + void setg(CharT* gbeg, CharT* gnext, CharT* gend){ return base_class::setg(gbeg, gnext, gend); } + void setp(CharT* pbeg, CharT* pend) { return setp(pbeg, pend); } +#endif + }; + } + + namespace detail + { + struct do_not_construct_stringbuffer_t{}; + } + + namespace detail // optimized stream wrapper + { + // String representation of Source has an upper limit. + template< class CharT // a result of widest_char transformation + , class Traits // usually char_traits + , bool RequiresStringbuffer + > + class lexical_stream_limited_src + { + typedef stl_buf_unlocker, CharT > local_streambuffer_t; + +#if defined(BOOST_NO_STRINGSTREAM) + typedef stl_buf_unlocker local_stringbuffer_t; +#elif defined(BOOST_NO_STD_LOCALE) + typedef stl_buf_unlocker local_stringbuffer_t; +#else + typedef stl_buf_unlocker, CharT > local_stringbuffer_t; +#endif + typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< + RequiresStringbuffer, + local_stringbuffer_t, + do_not_construct_stringbuffer_t + >::type deduced_stringbuffer_t; + + // A string representation of Source is written to [start, finish). + CharT* start; + CharT* finish; + deduced_stringbuffer_t stringbuffer; + + public: + lexical_stream_limited_src(CharT* sta, CharT* fin) + : start(sta) + , finish(fin) + {} + + private: + // Undefined: + lexical_stream_limited_src(lexical_stream_limited_src const&); + void operator=(lexical_stream_limited_src const&); + +/************************************ HELPER FUNCTIONS FOR OPERATORS << ( ... ) ********************************/ + bool shl_char(CharT ch) + { + Traits::assign(*start, ch); + finish = start + 1; + return true; + } + +#ifndef BOOST_LCAST_NO_WCHAR_T + template + bool shl_char(T ch) + { + BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)) , + "boost::lexical_cast does not support conversions from whar_t to char types." + "Use boost::locale instead" ); +#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + std::locale loc; + wchar_t w = BOOST_USE_FACET(std::ctype, loc).widen(ch); +#else + wchar_t w = ch; +#endif + Traits::assign(*start, w); + finish = start + 1; + return true; + } +#endif + + bool shl_char_array(CharT const* str) + { + start = const_cast(str); + finish = start + Traits::length(str); + return true; + } + +#ifndef BOOST_LCAST_NO_WCHAR_T + template + bool shl_char_array(T const* str) + { + BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)), + "boost::lexical_cast does not support conversions from wchar_t to char types." + "Use boost::locale instead" ); + return shl_input_streamable(str); + } +#endif + + template + bool shl_input_streamable(InputStreamable& input) + { + std::basic_ostream stream(&stringbuffer); + bool const result = !(stream << input).fail(); + start = stringbuffer.pbase(); + finish = stringbuffer.pptr(); + return result; + } + + template + inline bool shl_signed(T n) + { + start = lcast_put_unsigned(lcast_to_unsigned(n), finish); + if(n < 0) + { + --start; + CharT const minus = lcast_char_constants::minus; + Traits::assign(*start, minus); + } + return true; + } + +#if (defined _MSC_VER) +# pragma warning( push ) +// C4996: This function or variable may be unsafe. Consider using sprintf_s instead +# pragma warning( disable : 4996 ) +#endif + + template + bool shl_float(float val,T* out) + { using namespace std; + if (put_inf_nan(start,finish,val)) return true; + finish = start + sprintf(out,"%.*g", static_cast(boost::detail::lcast_get_precision()), val ); + return finish > start; + } + + template + bool shl_double(double val,T* out) + { using namespace std; + if (put_inf_nan(start,finish,val)) return true; + finish = start + sprintf(out,"%.*lg", static_cast(boost::detail::lcast_get_precision()), val ); + return finish > start; + } +#ifndef __MINGW32__ + template + bool shl_long_double(long double val,T* out) + { using namespace std; + if (put_inf_nan(start,finish,val)) return true; + finish = start + sprintf(out,"%.*Lg", static_cast(boost::detail::lcast_get_precision()), val ); + return finish > start; + } +#endif + +#if (defined _MSC_VER) +# pragma warning( pop ) +#endif + + +#ifndef BOOST_LCAST_NO_WCHAR_T + bool shl_float(float val,wchar_t* out) + { using namespace std; + if (put_inf_nan(start,finish,val)) return true; + finish = start + swprintf(out, +#if !defined(__MINGW32__) && !defined(UNDER_CE) + finish-start, +#endif + L"%.*g", static_cast(boost::detail::lcast_get_precision()), val ); + + return finish > start; + } + + + bool shl_double(double val,wchar_t* out) + { using namespace std; + if (put_inf_nan(start,finish,val)) return true; + /* __MINGW32__ is defined for both mingw.org and for mingw-w64. + * For mingw-w64, __MINGW64__ is defined, too, when targetting + * 64 bits. + * + * swprintf realization in MinGW and under WinCE does not conform + * to the ISO C + * Standard. + */ + finish = start + swprintf(out, +#if !defined(__MINGW32__) && !defined(UNDER_CE) + finish-start, +#endif + L"%.*lg", static_cast(boost::detail::lcast_get_precision()), val ); + return finish > start; + } + +#ifndef __MINGW32__ + bool shl_long_double(long double val,wchar_t* out) + { using namespace std; + if (put_inf_nan(start,finish,val)) return true; + finish = start + swprintf(out, +#if !defined(UNDER_CE) + finish-start, +#endif + L"%.*Lg", static_cast(boost::detail::lcast_get_precision()), val ); + return finish > start; + } +#endif + +#endif + +/************************************ OPERATORS << ( ... ) ********************************/ + public: + template + bool operator<<(std::basic_string const& str) + { + start = const_cast(str.data()); + finish = start + str.length(); + return true; + } + +#if !defined(__SUNPRO_CC) + template + bool operator<<(::boost::container::basic_string const& str) + { + start = const_cast(str.data()); + finish = start + str.length(); + return true; + } +#endif // !defined(__SUNPRO_CC) + bool operator<<(bool value) + { + CharT const czero = lcast_char_constants::zero; + Traits::assign(*start, Traits::to_char_type(czero + value)); + finish = start + 1; + return true; + } + + bool operator<<(char ch) { return shl_char(ch); } + bool operator<<(unsigned char ch) { return ((*this) << static_cast(ch)); } + bool operator<<(signed char ch) { return ((*this) << static_cast(ch)); } +#if !defined(BOOST_LCAST_NO_WCHAR_T) + bool operator<<(wchar_t const* str) { return shl_char_array(str); } + bool operator<<(wchar_t * str) { return shl_char_array(str); } +#ifndef BOOST_NO_INTRINSIC_WCHAR_T + bool operator<<(wchar_t ch) { return shl_char(ch); } +#endif +#endif + bool operator<<(unsigned char const* ch) { return ((*this) << reinterpret_cast(ch)); } + bool operator<<(unsigned char * ch) { return ((*this) << reinterpret_cast(ch)); } + bool operator<<(signed char const* ch) { return ((*this) << reinterpret_cast(ch)); } + bool operator<<(signed char * ch) { return ((*this) << reinterpret_cast(ch)); } + bool operator<<(char const* str) { return shl_char_array(str); } + bool operator<<(char* str) { return shl_char_array(str); } + bool operator<<(short n) { return shl_signed(n); } + bool operator<<(int n) { return shl_signed(n); } + bool operator<<(long n) { return shl_signed(n); } + bool operator<<(unsigned short n) { start = lcast_put_unsigned(n, finish); return true; } + bool operator<<(unsigned int n) { start = lcast_put_unsigned(n, finish); return true; } + bool operator<<(unsigned long n) { start = lcast_put_unsigned(n, finish); return true; } + +#if defined(BOOST_HAS_LONG_LONG) + bool operator<<(boost::ulong_long_type n) { start = lcast_put_unsigned(n, finish); return true; } + bool operator<<(boost::long_long_type n) { return shl_signed(n); } +#elif defined(BOOST_HAS_MS_INT64) + bool operator<<(unsigned __int64 n) { start = lcast_put_unsigned(n, finish); return true; } + bool operator<<( __int64 n) { return shl_signed(n); } +#endif + bool operator<<(float val) { return shl_float(val,start); } + bool operator<<(double val) { return shl_double(val,start); } + bool operator<<(long double val) { +#ifndef __MINGW32__ + return shl_long_double(val,start); +#else + return shl_double(val,start); +#endif + } + + template + bool operator<<(const InStreamable& input) { return shl_input_streamable(input); } + +/************************************ HELPER FUNCTIONS FOR OPERATORS >> ( ... ) ********************************/ + private: + + template + bool shr_unsigned(Type& output) + { + if (start == finish) return false; + CharT const minus = lcast_char_constants::minus; + CharT const plus = lcast_char_constants::plus; + bool has_minus = false; + + /* We won`t use `start' any more, so no need in decrementing it after */ + if ( Traits::eq(minus,*start) ) + { + ++start; + has_minus = true; + } else if ( Traits::eq( plus, *start ) ) + { + ++start; + } + + bool const succeed = lcast_ret_unsigned(output, start, finish); +#if (defined _MSC_VER) +# pragma warning( push ) +// C4146: unary minus operator applied to unsigned type, result still unsigned +# pragma warning( disable : 4146 ) +#elif defined( __BORLANDC__ ) +# pragma option push -w-8041 +#endif + if (has_minus) output = static_cast(-output); +#if (defined _MSC_VER) +# pragma warning( pop ) +#elif defined( __BORLANDC__ ) +# pragma option pop +#endif + return succeed; + } + + template + bool shr_signed(Type& output) + { + if (start == finish) return false; + CharT const minus = lcast_char_constants::minus; + CharT const plus = lcast_char_constants::plus; + typedef BOOST_DEDUCED_TYPENAME make_unsigned::type utype; + utype out_tmp =0; + bool has_minus = false; + + /* We won`t use `start' any more, so no need in decrementing it after */ + if ( Traits::eq(minus,*start) ) + { + ++start; + has_minus = true; + } else if ( Traits::eq(plus, *start) ) + { + ++start; + } + + bool succeed = lcast_ret_unsigned(out_tmp, start, finish); + if (has_minus) { +#if (defined _MSC_VER) +# pragma warning( push ) +// C4146: unary minus operator applied to unsigned type, result still unsigned +# pragma warning( disable : 4146 ) +#elif defined( __BORLANDC__ ) +# pragma option push -w-8041 +#endif + utype const comp_val = static_cast(-(std::numeric_limits::min)()); + succeed = succeed && out_tmp<=comp_val; + output = -out_tmp; +#if (defined _MSC_VER) +# pragma warning( pop ) +#elif defined( __BORLANDC__ ) +# pragma option pop +#endif + } else { + utype const comp_val = static_cast((std::numeric_limits::max)()); + succeed = succeed && out_tmp<=comp_val; + output = out_tmp; + } + return succeed; + } + + template + bool shr_using_base_class(InputStreamable& output) + { +#if (defined _MSC_VER) +# pragma warning( push ) + // conditional expression is constant +# pragma warning( disable : 4127 ) +#endif + if(is_pointer::value) + return false; + + local_streambuffer_t bb; + bb.setg(start, start, finish); + std::basic_istream stream(&bb); + stream.unsetf(std::ios::skipws); + lcast_set_precision(stream, static_cast(0)); +#if (defined _MSC_VER) +# pragma warning( pop ) +#endif + return 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 + Traits::eof(); +#endif + } + + template + inline bool shr_xchar(T& output) + { + BOOST_STATIC_ASSERT_MSG(( sizeof(CharT) == sizeof(T) ), + "boost::lexical_cast does not support conversions from whar_t to char types." + "Use boost::locale instead" ); + bool const ok = (finish - start == 1); + if(ok) { + CharT out; + Traits::assign(out, *start); + output = static_cast(out); + } + return ok; + } + +/************************************ OPERATORS >> ( ... ) ********************************/ + public: + bool operator>>(unsigned short& output) { return shr_unsigned(output); } + bool operator>>(unsigned int& output) { return shr_unsigned(output); } + bool operator>>(unsigned long int& output) { return shr_unsigned(output); } + bool operator>>(short& output) { return shr_signed(output); } + bool operator>>(int& output) { return shr_signed(output); } + bool operator>>(long int& output) { return shr_signed(output); } +#if defined(BOOST_HAS_LONG_LONG) + bool operator>>(boost::ulong_long_type& output) { return shr_unsigned(output); } + bool operator>>(boost::long_long_type& output) { return shr_signed(output); } +#elif defined(BOOST_HAS_MS_INT64) + bool operator>>(unsigned __int64& output) { return shr_unsigned(output); } + bool operator>>(__int64& output) { return shr_signed(output); } +#endif + bool operator>>(char& output) { return shr_xchar(output); } + bool operator>>(unsigned char& output) { return shr_xchar(output); } + bool operator>>(signed char& output) { return shr_xchar(output); } +#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) + bool operator>>(wchar_t& output) { return shr_xchar(output); } +#endif +#ifndef BOOST_NO_CHAR16_T + bool operator>>(char16_t& output) { return shr_xchar(output); } +#endif +#ifndef BOOST_NO_CHAR32_T + bool operator>>(char32_t& output) { return shr_xchar(output); } +#endif +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + bool operator>>(std::string& str) { str.assign(start, finish); return true; } +# ifndef BOOST_LCAST_NO_WCHAR_T + bool operator>>(std::wstring& str) { str.assign(start, finish); return true; } +# endif +#else + template + bool operator>>(std::basic_string& str) { str.assign(start, finish); return true; } +#if !defined(__SUNPRO_CC) + template + bool operator>>(::boost::container::basic_string& str) { str.assign(start, finish); return true; } +#endif // !defined(__SUNPRO_CC) +#endif + /* + * case "-0" || "0" || "+0" : output = false; return true; + * case "1" || "+1": output = true; return true; + * default: return false; + */ + bool operator>>(bool& output) + { + CharT const zero = lcast_char_constants::zero; + CharT const plus = lcast_char_constants::plus; + CharT const minus = lcast_char_constants::minus; + + switch(finish-start) + { + case 1: + output = Traits::eq(start[0], zero+1); + return output || Traits::eq(start[0], zero ); + case 2: + if ( Traits::eq( plus, *start) ) + { + ++start; + output = Traits::eq(start[0], zero +1); + return output || Traits::eq(start[0], zero ); + } else + { + output = false; + return Traits::eq( minus, *start) + && Traits::eq( zero, start[1]); + } + default: + output = false; // Suppress warning about uninitalized variable + return false; + } + } + + bool operator>>(float& output) { return lcast_ret_float(output,start,finish); } + + private: + // Not optimised converter + template + bool float_types_converter_internal(T& output, int /*tag*/) { + if (parse_inf_nan(start, finish, output)) return true; + bool return_value = shr_using_base_class(output); + + /* Some compilers and libraries successfully + * parse 'inf', 'INFINITY', '1.0E', '1.0E-'... + * We are trying to provide a unified behaviour, + * so we just forbid such conversions (as some + * of the most popular compilers/libraries do) + * */ + CharT const minus = lcast_char_constants::minus; + CharT const plus = lcast_char_constants::plus; + CharT const capital_e = lcast_char_constants::capital_e; + CharT const lowercase_e = lcast_char_constants::lowercase_e; + if ( return_value && + ( + *(finish-1) == lowercase_e // 1.0e + || *(finish-1) == capital_e // 1.0E + || *(finish-1) == minus // 1.0e- or 1.0E- + || *(finish-1) == plus // 1.0e+ or 1.0E+ + ) + ) return false; + + return return_value; + } + + // Optimised converter + bool float_types_converter_internal(double& output,char /*tag*/) { + return lcast_ret_float(output,start,finish); + } + public: + + bool operator>>(double& output) + { + /* + * Some compilers implement long double as double. In that case these types have + * same size, same precision, same max and min values... And it means, + * that current implementation of lcast_ret_float cannot be used for type + * double, because it will give a big precision loss. + * */ + boost::mpl::if_c< +#if defined(BOOST_HAS_LONG_LONG) || defined(BOOST_HAS_MS_INT64) + ::boost::type_traits::ice_eq< sizeof(double), sizeof(long double) >::value, +#else + 0 +#endif + int, + char + >::type tag = 0; + + return float_types_converter_internal(output, tag); + } + + bool operator>>(long double& output) + { + int tag = 0; + return float_types_converter_internal(output, tag); + } + + // Generic istream-based algorithm. + // lcast_streambuf_for_target::value is true. + template + bool operator>>(InputStreamable& output) { return shr_using_base_class(output); } + }; + } + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + // call-by-const reference version + + namespace detail + { + template + struct array_to_pointer_decay + { + typedef T type; + }; + + template + struct array_to_pointer_decay + { + typedef const T * type; + }; + + template + struct is_stdstring + { + BOOST_STATIC_CONSTANT(bool, value = false ); + }; + + template + struct is_stdstring< std::basic_string > + { + BOOST_STATIC_CONSTANT(bool, value = true ); + }; +#if !defined(__SUNPRO_CC) + template + struct is_stdstring< ::boost::container::basic_string > + { + BOOST_STATIC_CONSTANT(bool, value = true ); + }; +#endif // !defined(__SUNPRO_CC) + template + struct is_char_or_wchar + { + private: +#ifndef BOOST_LCAST_NO_WCHAR_T + typedef wchar_t wchar_t_if_supported; +#else + typedef char wchar_t_if_supported; +#endif + +#ifndef BOOST_NO_CHAR16_T + typedef char16_t char16_t_if_supported; +#else + typedef char char16_t_if_supported; +#endif + +#ifndef BOOST_NO_CHAR32_T + typedef char32_t char32_t_if_supported; +#else + typedef char char32_t_if_supported; +#endif + public: + + BOOST_STATIC_CONSTANT(bool, value = + ( + ::boost::type_traits::ice_or< + is_same< T, char >::value, + is_same< T, wchar_t_if_supported >::value, + is_same< T, char16_t_if_supported >::value, + is_same< T, char32_t_if_supported >::value, + is_same< T, unsigned char >::value, + is_same< T, signed char >::value + >::value + ) + ); + }; + + template + struct is_arithmetic_and_not_xchars + { + BOOST_STATIC_CONSTANT(bool, value = + ( + ::boost::type_traits::ice_and< + is_arithmetic::value, + is_arithmetic::value, + ::boost::type_traits::ice_not< + detail::is_char_or_wchar::value + >::value, + ::boost::type_traits::ice_not< + detail::is_char_or_wchar::value + >::value + >::value + ) + ); + }; + + /* + * is_xchar_to_xchar::value is true, when + * Target and Souce are the same char types, or when + * Target and Souce are char types of the same size. + */ + template + struct is_xchar_to_xchar + { + BOOST_STATIC_CONSTANT(bool, value = + ( + ::boost::type_traits::ice_or< + ::boost::type_traits::ice_and< + is_same::value, + is_char_or_wchar::value + >::value, + ::boost::type_traits::ice_and< + ::boost::type_traits::ice_eq< sizeof(char),sizeof(Target)>::value, + ::boost::type_traits::ice_eq< sizeof(char),sizeof(Source)>::value, + is_char_or_wchar::value, + is_char_or_wchar::value + >::value + >::value + ) + ); + }; + + template + struct is_char_array_to_stdstring + { + BOOST_STATIC_CONSTANT(bool, value = false ); + }; + + template + struct is_char_array_to_stdstring< std::basic_string, CharT* > + { + BOOST_STATIC_CONSTANT(bool, value = true ); + }; + + template + struct is_char_array_to_stdstring< std::basic_string, const CharT* > + { + BOOST_STATIC_CONSTANT(bool, value = true ); + }; +#if !defined(__SUNPRO_CC) + template + struct is_char_array_to_stdstring< ::boost::container::basic_string, CharT* > + { + BOOST_STATIC_CONSTANT(bool, value = true ); + }; + + template + struct is_char_array_to_stdstring< ::boost::container::basic_string, const CharT* > + { + BOOST_STATIC_CONSTANT(bool, value = true ); + }; +#endif // !defined(__SUNPRO_CC) + +#if (defined _MSC_VER) +# pragma warning( push ) +# pragma warning( disable : 4701 ) // possible use of ... before initialization +# pragma warning( disable : 4702 ) // unreachable code +# pragma warning( disable : 4267 ) // conversion from 'size_t' to 'unsigned int' +#endif + template + struct lexical_cast_do_cast + { + static inline Target lexical_cast_impl(const Source& arg) + { + typedef BOOST_DEDUCED_TYPENAME detail::array_to_pointer_decay::type src; + + typedef BOOST_DEDUCED_TYPENAME detail::widest_char< + BOOST_DEDUCED_TYPENAME detail::stream_char::type + , BOOST_DEDUCED_TYPENAME detail::stream_char::type + >::type char_type; + + typedef detail::lcast_src_length lcast_src_length; + std::size_t const src_len = lcast_src_length::value; + char_type buf[src_len + 1]; + lcast_src_length::check_coverage(); + + typedef BOOST_DEDUCED_TYPENAME + deduce_char_traits::type traits; + + typedef BOOST_DEDUCED_TYPENAME remove_pointer::type removed_ptr_t; + + // is_char_types_match variable value can be computed via + // sizeof(char_type) == sizeof(removed_ptr_t). But when + // removed_ptr_t is an incomplete type or void*, compilers + // produce warnings or errors. + const bool is_char_types_match = + (::boost::type_traits::ice_or< + ::boost::type_traits::ice_and< + ::boost::type_traits::ice_eq::value, + ::boost::type_traits::ice_or< + ::boost::is_same::value, + ::boost::is_same::value, + ::boost::is_same::value + >::value + >::value, + is_same::value + >::value); + + const bool requires_stringbuf = + !( + ::boost::type_traits::ice_or< + is_stdstring::value, + is_arithmetic::value, + ::boost::type_traits::ice_and< + is_pointer::value, + is_char_or_wchar::value, + is_char_types_match + >::value + >::value + ); + + detail::lexical_stream_limited_src + interpreter(buf, buf + src_len); + + Target result; + // Disabling ADL, by directly specifying operators. + if(!(interpreter.operator <<(arg) && interpreter.operator >>(result))) + BOOST_LCAST_THROW_BAD_CAST(Source, Target); + return result; + } + }; +#if (defined _MSC_VER) +# pragma warning( pop ) +#endif + + template + struct lexical_cast_copy + { + static inline Source lexical_cast_impl(const Source &arg) + { + return arg; + } + }; + + class precision_loss_error : public boost::numeric::bad_numeric_cast + { + public: + virtual const char * what() const throw() + { return "bad numeric conversion: precision loss error"; } + }; + + template + struct throw_on_precision_loss + { + typedef boost::numeric::Trunc Rounder; + typedef S source_type ; + + typedef typename mpl::if_< is_arithmetic,S,S const&>::type argument_type ; + + static source_type nearbyint ( argument_type s ) + { + source_type orig_div_round = s / Rounder::nearbyint(s); + + if ( (orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > std::numeric_limits::epsilon() ) + BOOST_THROW_EXCEPTION( precision_loss_error() ); + return s ; + } + + typedef typename Rounder::round_style round_style; + } ; + + template + struct lexical_cast_dynamic_num_not_ignoring_minus + { + static inline Target lexical_cast_impl(const Source &arg) + { + try{ + typedef boost::numeric::converter< + Target, + Source, + boost::numeric::conversion_traits, + boost::numeric::def_overflow_handler, + throw_on_precision_loss + > Converter ; + + return Converter::convert(arg); + } catch( ::boost::numeric::bad_numeric_cast const& ) { + BOOST_LCAST_THROW_BAD_CAST(Source, Target); + } + BOOST_UNREACHABLE_RETURN(static_cast(0)); + } + }; + + template + struct lexical_cast_dynamic_num_ignoring_minus + { + static inline Target lexical_cast_impl(const Source &arg) + { + try{ + typedef boost::numeric::converter< + Target, + Source, + boost::numeric::conversion_traits, + boost::numeric::def_overflow_handler, + throw_on_precision_loss + > Converter ; + + bool has_minus = ( arg < 0); + if ( has_minus ) { + return static_cast(-Converter::convert(-arg)); + } else { + return Converter::convert(arg); + } + } catch( ::boost::numeric::bad_numeric_cast const& ) { + BOOST_LCAST_THROW_BAD_CAST(Source, Target); + } + BOOST_UNREACHABLE_RETURN(static_cast(0)); + } + }; + + /* + * lexical_cast_dynamic_num follows the rules: + * 1) If Source can be converted to Target without precision loss and + * without overflows, then assign Source to Target and return + * + * 2) If Source is less than 0 and Target is an unsigned integer, + * then negate Source, check the requirements of rule 1) and if + * successful, assign static_casted Source to Target and return + * + * 3) Otherwise throw a bad_lexical_cast exception + * + * + * Rule 2) required because boost::lexical_cast has the behavior of + * stringstream, which uses the rules of scanf for conversions. And + * in the C99 standard for unsigned input value minus sign is + * optional, so if a negative number is read, no errors will arise + * and the result will be the two's complement. + */ + template + struct lexical_cast_dynamic_num + { + static inline Target lexical_cast_impl(const Source &arg) + { + typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< + ::boost::type_traits::ice_and< + ::boost::type_traits::ice_or< + ::boost::is_signed::value, + ::boost::is_float::value + >::value, + ::boost::type_traits::ice_not< + is_same::value + >::value, + ::boost::type_traits::ice_not< + is_same::value + >::value, + ::boost::is_unsigned::value + >::value, + lexical_cast_dynamic_num_ignoring_minus, + lexical_cast_dynamic_num_not_ignoring_minus + >::type caster_type; + + return caster_type::lexical_cast_impl(arg); + } + }; + } + + template + inline Target lexical_cast(const Source &arg) + { + typedef BOOST_DEDUCED_TYPENAME detail::array_to_pointer_decay::type src; + + typedef BOOST_DEDUCED_TYPENAME ::boost::type_traits::ice_or< + detail::is_xchar_to_xchar::value, + detail::is_char_array_to_stdstring::value, + ::boost::type_traits::ice_and< + is_same::value, + detail::is_stdstring::value + >::value + > do_copy_type; + + typedef BOOST_DEDUCED_TYPENAME + detail::is_arithmetic_and_not_xchars do_copy_with_dynamic_check_type; + + typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< + do_copy_type::value, + detail::lexical_cast_copy, + BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< + do_copy_with_dynamic_check_type::value, + detail::lexical_cast_dynamic_num, + detail::lexical_cast_do_cast + >::type + >::type caster_type; + + return caster_type::lexical_cast_impl(arg); + } + + #else + + namespace detail // stream wrapper for handling lexical conversions + { + template + class lexical_stream + { + private: + typedef typename widest_char< + typename stream_char::type, + typename stream_char::type>::type char_type; + + typedef Traits traits_type; + + public: + lexical_stream(char_type* = 0, char_type* = 0) + { + stream.unsetf(std::ios::skipws); + lcast_set_precision(stream, static_cast(0), static_cast(0) ); + } + ~lexical_stream() + { + #if defined(BOOST_NO_STRINGSTREAM) + stream.freeze(false); + #endif + } + bool operator<<(const Source &input) + { + return !(stream << input).fail(); + } + template + bool operator>>(InputStreamable &output) + { + return !is_pointer::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 + traits_type::eof(); +#endif + } + + bool operator>>(std::string &output) + { + #if defined(BOOST_NO_STRINGSTREAM) + stream << '\0'; + #endif + stream.str().swap(output); + return true; + } + #ifndef BOOST_LCAST_NO_WCHAR_T + bool operator>>(std::wstring &output) + { + stream.str().swap(output); + 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 stream; + #endif + }; + } + + // call-by-value fallback version (deprecated) + + template + Target lexical_cast(Source arg) + { + typedef typename detail::widest_char< + BOOST_DEDUCED_TYPENAME detail::stream_char::type + , BOOST_DEDUCED_TYPENAME detail::stream_char::type + >::type char_type; + + typedef std::char_traits traits; + detail::lexical_stream interpreter; + Target result; + + if(!(interpreter << arg && interpreter >> result)) + BOOST_LCAST_THROW_BAD_CAST(Source, Target); + return result; + } + + #endif +} + +// Copyright Kevlin Henney, 2000-2005. +// Copyright Alexander Nasonov, 2006-2010. +// Copyright Antony Polukhin, 2011-2012. +// +// Distributed under the 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 BOOST_LCAST_NO_WCHAR_T +#endif diff --git a/external/boost/limits.hpp b/external/boost/limits.hpp new file mode 100644 index 0000000..d3747a1 --- /dev/null +++ b/external/boost/limits.hpp @@ -0,0 +1,146 @@ + +// (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 + +// See http://www.boost.org/libs/compatibility/index.html for documentation. + +#ifndef BOOST_LIMITS +#define BOOST_LIMITS + +#include + +#ifdef BOOST_NO_LIMITS +# include +#else +# include +#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 + +#include // for CHAR_BIT + +namespace std +{ + template<> + class numeric_limits + { + 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 + { + 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/external/boost/make_shared.hpp b/external/boost/make_shared.hpp new file mode 100644 index 0000000..c04938f --- /dev/null +++ b/external/boost/make_shared.hpp @@ -0,0 +1,17 @@ +#ifndef BOOST_MAKE_SHARED_HPP_INCLUDED +#define BOOST_MAKE_SHARED_HPP_INCLUDED + +// make_shared.hpp +// +// Copyright (c) 2007, 2008 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/make_shared.html +// for documentation. + +#include + +#endif // #ifndef BOOST_MAKE_SHARED_HPP_INCLUDED diff --git a/external/boost/math/policies/error_handling.hpp b/external/boost/math/policies/error_handling.hpp new file mode 100644 index 0000000..8e1b96d --- /dev/null +++ b/external/boost/math/policies/error_handling.hpp @@ -0,0 +1,657 @@ +// Copyright John Maddock 2007. +// Copyright Paul A. Bristow 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) + +#ifndef BOOST_MATH_POLICY_ERROR_HANDLING_HPP +#define BOOST_MATH_POLICY_ERROR_HANDLING_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef BOOST_MSVC +# pragma warning(push) // Quiet warnings in boost/format.hpp +# pragma warning(disable: 4996) // _SCL_SECURE_NO_DEPRECATE +# pragma warning(disable: 4512) // assignment operator could not be generated. +// And warnings in error handling: +# pragma warning(disable: 4702) // unreachable code +// Note that this only occurs when the compiler can deduce code is unreachable, +// for example when policy macros are used to ignore errors rather than throw. +#endif +#include + +namespace boost{ namespace math{ + +class evaluation_error : public std::runtime_error +{ +public: + evaluation_error(const std::string& s) : std::runtime_error(s){} +}; + +class rounding_error : public std::runtime_error +{ +public: + rounding_error(const std::string& s) : std::runtime_error(s){} +}; + +namespace policies{ +// +// Forward declarations of user error handlers, +// it's up to the user to provide the definition of these: +// +template +T user_domain_error(const char* function, const char* message, const T& val); +template +T user_pole_error(const char* function, const char* message, const T& val); +template +T user_overflow_error(const char* function, const char* message, const T& val); +template +T user_underflow_error(const char* function, const char* message, const T& val); +template +T user_denorm_error(const char* function, const char* message, const T& val); +template +T user_evaluation_error(const char* function, const char* message, const T& val); +template +T user_rounding_error(const char* function, const char* message, const T& val, const TargetType& t); +template +T user_indeterminate_result_error(const char* function, const char* message, const T& val); + +namespace detail +{ +// +// Helper function to avoid binding rvalue to non-const-reference, +// in other words a warning suppression mechansim: +// +template +inline std::string do_format(Formatter f, const Group& g) +{ + return (f % g).str(); +} + +template +void raise_error(const char* function, const char* message) +{ + if(function == 0) + function = "Unknown function operating on type %1%"; + if(message == 0) + message = "Cause unknown"; + + std::string msg("Error in function "); + msg += (boost::format(function) % typeid(T).name()).str(); + msg += ": "; + msg += message; + + E e(msg); + boost::throw_exception(e); +} + +template +void raise_error(const char* function, const char* message, const T& val) +{ + if(function == 0) + function = "Unknown function operating on type %1%"; + if(message == 0) + message = "Cause unknown: error caused by bad argument with value %1%"; + + std::string msg("Error in function "); + msg += (boost::format(function) % typeid(T).name()).str(); + msg += ": "; + msg += message; + + int prec = 2 + (boost::math::policies::digits >() * 30103UL) / 100000UL; + msg = do_format(boost::format(msg), boost::io::group(std::setprecision(prec), val)); + + E e(msg); + boost::throw_exception(e); +} + +template +inline T raise_domain_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::domain_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message, val); + // we never get here: + return std::numeric_limits::quiet_NaN(); +} + +template +inline T raise_domain_error( + const char* , + const char* , + const T& , + const ::boost::math::policies::domain_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return std::numeric_limits::quiet_NaN(); +} + +template +inline T raise_domain_error( + const char* , + const char* , + const T& , + const ::boost::math::policies::domain_error< ::boost::math::policies::errno_on_error>&) +{ + errno = EDOM; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return std::numeric_limits::quiet_NaN(); +} + +template +inline T raise_domain_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::domain_error< ::boost::math::policies::user_error>&) +{ + return user_domain_error(function, message, val); +} + +template +inline T raise_pole_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::pole_error< ::boost::math::policies::throw_on_error>&) +{ + return boost::math::policies::detail::raise_domain_error(function, message, val, ::boost::math::policies::domain_error< ::boost::math::policies::throw_on_error>()); +} + +template +inline T raise_pole_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::pole_error< ::boost::math::policies::ignore_error>&) +{ + return ::boost::math::policies::detail::raise_domain_error(function, message, val, ::boost::math::policies::domain_error< ::boost::math::policies::ignore_error>()); +} + +template +inline T raise_pole_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::pole_error< ::boost::math::policies::errno_on_error>&) +{ + return ::boost::math::policies::detail::raise_domain_error(function, message, val, ::boost::math::policies::domain_error< ::boost::math::policies::errno_on_error>()); +} + +template +inline T raise_pole_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::pole_error< ::boost::math::policies::user_error>&) +{ + return user_pole_error(function, message, val); +} + +template +inline T raise_overflow_error( + const char* function, + const char* message, + const ::boost::math::policies::overflow_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message ? message : "numeric overflow"); + // we never get here: + return std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : boost::math::tools::max_value(); +} + +template +inline T raise_overflow_error( + const char* , + const char* , + const ::boost::math::policies::overflow_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : boost::math::tools::max_value(); +} + +template +inline T raise_overflow_error( + const char* , + const char* , + const ::boost::math::policies::overflow_error< ::boost::math::policies::errno_on_error>&) +{ + errno = ERANGE; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : boost::math::tools::max_value(); +} + +template +inline T raise_overflow_error( + const char* function, + const char* message, + const ::boost::math::policies::overflow_error< ::boost::math::policies::user_error>&) +{ + return user_overflow_error(function, message, std::numeric_limits::infinity()); +} + +template +inline T raise_underflow_error( + const char* function, + const char* message, + const ::boost::math::policies::underflow_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message ? message : "numeric underflow"); + // we never get here: + return 0; +} + +template +inline T raise_underflow_error( + const char* , + const char* , + const ::boost::math::policies::underflow_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return T(0); +} + +template +inline T raise_underflow_error( + const char* /* function */, + const char* /* message */, + const ::boost::math::policies::underflow_error< ::boost::math::policies::errno_on_error>&) +{ + errno = ERANGE; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return T(0); +} + +template +inline T raise_underflow_error( + const char* function, + const char* message, + const ::boost::math::policies::underflow_error< ::boost::math::policies::user_error>&) +{ + return user_underflow_error(function, message, T(0)); +} + +template +inline T raise_denorm_error( + const char* function, + const char* message, + const T& /* val */, + const ::boost::math::policies::denorm_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message ? message : "denormalised result"); + // we never get here: + return T(0); +} + +template +inline T raise_denorm_error( + const char* , + const char* , + const T& val, + const ::boost::math::policies::denorm_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return val; +} + +template +inline T raise_denorm_error( + const char* , + const char* , + const T& val, + const ::boost::math::policies::denorm_error< ::boost::math::policies::errno_on_error>&) +{ + errno = ERANGE; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return val; +} + +template +inline T raise_denorm_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::denorm_error< ::boost::math::policies::user_error>&) +{ + return user_denorm_error(function, message, val); +} + +template +inline T raise_evaluation_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::evaluation_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message, val); + // we never get here: + return T(0); +} + +template +inline T raise_evaluation_error( + const char* , + const char* , + const T& val, + const ::boost::math::policies::evaluation_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return val; +} + +template +inline T raise_evaluation_error( + const char* , + const char* , + const T& val, + const ::boost::math::policies::evaluation_error< ::boost::math::policies::errno_on_error>&) +{ + errno = EDOM; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return val; +} + +template +inline T raise_evaluation_error( + const char* function, + const char* message, + const T& val, + const ::boost::math::policies::evaluation_error< ::boost::math::policies::user_error>&) +{ + return user_evaluation_error(function, message, val); +} + +template +inline T raise_rounding_error( + const char* function, + const char* message, + const T& val, + const TargetType&, + const ::boost::math::policies::rounding_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message, val); + // we never get here: + return T(0); +} + +template +inline T raise_rounding_error( + const char* , + const char* , + const T& val, + const TargetType&, + const ::boost::math::policies::rounding_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return std::numeric_limits::is_specialized ? (val > 0 ? (std::numeric_limits::max)() : -(std::numeric_limits::max)()): val; +} + +template +inline T raise_rounding_error( + const char* , + const char* , + const T& val, + const TargetType&, + const ::boost::math::policies::rounding_error< ::boost::math::policies::errno_on_error>&) +{ + errno = ERANGE; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return std::numeric_limits::is_specialized ? (val > 0 ? (std::numeric_limits::max)() : -(std::numeric_limits::max)()): val; +} + +template +inline T raise_rounding_error( + const char* function, + const char* message, + const T& val, + const TargetType& t, + const ::boost::math::policies::rounding_error< ::boost::math::policies::user_error>&) +{ + return user_rounding_error(function, message, val, t); +} + +template +inline T raise_indeterminate_result_error( + const char* function, + const char* message, + const T& val, + const R& , + const ::boost::math::policies::indeterminate_result_error< ::boost::math::policies::throw_on_error>&) +{ + raise_error(function, message, val); + // we never get here: + return std::numeric_limits::quiet_NaN(); +} + +template +inline T raise_indeterminate_result_error( + const char* , + const char* , + const T& , + const R& result, + const ::boost::math::policies::indeterminate_result_error< ::boost::math::policies::ignore_error>&) +{ + // This may or may not do the right thing, but the user asked for the error + // to be ignored so here we go anyway: + return result; +} + +template +inline T raise_indeterminate_result_error( + const char* , + const char* , + const T& , + const R& result, + const ::boost::math::policies::indeterminate_result_error< ::boost::math::policies::errno_on_error>&) +{ + errno = EDOM; + // This may or may not do the right thing, but the user asked for the error + // to be silent so here we go anyway: + return result; +} + +template +inline T raise_indeterminate_result_error( + const char* function, + const char* message, + const T& val, + const R& , + const ::boost::math::policies::indeterminate_result_error< ::boost::math::policies::user_error>&) +{ + return user_indeterminate_result_error(function, message, val); +} + +} // namespace detail + +template +inline T raise_domain_error(const char* function, const char* message, const T& val, const Policy&) +{ + typedef typename Policy::domain_error_type policy_type; + return detail::raise_domain_error( + function, message ? message : "Domain Error evaluating function at %1%", + val, policy_type()); +} + +template +inline T raise_pole_error(const char* function, const char* message, const T& val, const Policy&) +{ + typedef typename Policy::pole_error_type policy_type; + return detail::raise_pole_error( + function, message ? message : "Evaluation of function at pole %1%", + val, policy_type()); +} + +template +inline T raise_overflow_error(const char* function, const char* message, const Policy&) +{ + typedef typename Policy::overflow_error_type policy_type; + return detail::raise_overflow_error( + function, message ? message : "Overflow Error", + policy_type()); +} + +template +inline T raise_underflow_error(const char* function, const char* message, const Policy&) +{ + typedef typename Policy::underflow_error_type policy_type; + return detail::raise_underflow_error( + function, message ? message : "Underflow Error", + policy_type()); +} + +template +inline T raise_denorm_error(const char* function, const char* message, const T& val, const Policy&) +{ + typedef typename Policy::denorm_error_type policy_type; + return detail::raise_denorm_error( + function, message ? message : "Denorm Error", + val, + policy_type()); +} + +template +inline T raise_evaluation_error(const char* function, const char* message, const T& val, const Policy&) +{ + typedef typename Policy::evaluation_error_type policy_type; + return detail::raise_evaluation_error( + function, message ? message : "Internal Evaluation Error, best value so far was %1%", + val, policy_type()); +} + +template +inline T raise_rounding_error(const char* function, const char* message, const T& val, const TargetType& t, const Policy&) +{ + typedef typename Policy::rounding_error_type policy_type; + return detail::raise_rounding_error( + function, message ? message : "Value %1% can not be represented in the target integer type.", + val, t, policy_type()); +} + +template +inline T raise_indeterminate_result_error(const char* function, const char* message, const T& val, const R& result, const Policy&) +{ + typedef typename Policy::indeterminate_result_error_type policy_type; + return detail::raise_indeterminate_result_error( + function, message ? message : "Indeterminate result with value %1%", + val, result, policy_type()); +} + +// +// checked_narrowing_cast: +// +namespace detail +{ + +template +inline bool check_overflow(T val, R* result, const char* function, const Policy& pol) +{ + BOOST_MATH_STD_USING + if(fabs(val) > tools::max_value()) + { + *result = static_cast(boost::math::policies::detail::raise_overflow_error(function, 0, pol)); + return true; + } + return false; +} +template +inline bool check_underflow(T val, R* result, const char* function, const Policy& pol) +{ + if((val != 0) && (static_cast(val) == 0)) + { + *result = static_cast(boost::math::policies::detail::raise_underflow_error(function, 0, pol)); + return true; + } + return false; +} +template +inline bool check_denorm(T val, R* result, const char* function, const Policy& pol) +{ + BOOST_MATH_STD_USING + if((fabs(val) < static_cast(tools::min_value())) && (static_cast(val) != 0)) + { + *result = static_cast(boost::math::policies::detail::raise_denorm_error(function, 0, static_cast(val), pol)); + return true; + } + return false; +} + +// Default instantiations with ignore_error policy. +template +inline bool check_overflow(T /* val */, R* /* result */, const char* /* function */, const overflow_error&){ return false; } +template +inline bool check_underflow(T /* val */, R* /* result */, const char* /* function */, const underflow_error&){ return false; } +template +inline bool check_denorm(T /* val */, R* /* result*/, const char* /* function */, const denorm_error&){ return false; } + +} // namespace detail + +template +inline R checked_narrowing_cast(T val, const char* function) +{ + typedef typename Policy::overflow_error_type overflow_type; + typedef typename Policy::underflow_error_type underflow_type; + typedef typename Policy::denorm_error_type denorm_type; + // + // Most of what follows will evaluate to a no-op: + // + R result = 0; + if(detail::check_overflow(val, &result, function, overflow_type())) + return result; + if(detail::check_underflow(val, &result, function, underflow_type())) + return result; + if(detail::check_denorm(val, &result, function, denorm_type())) + return result; + + return static_cast(val); +} + +template +inline void check_series_iterations(const char* function, boost::uintmax_t max_iter, const Policy& pol) +{ + if(max_iter >= policies::get_max_series_iterations()) + raise_evaluation_error( + function, + "Series evaluation exceeded %1% iterations, giving up now.", static_cast(static_cast(max_iter)), pol); +} + +template +inline void check_root_iterations(const char* function, boost::uintmax_t max_iter, const Policy& pol) +{ + if(max_iter >= policies::get_max_root_iterations()) + raise_evaluation_error( + function, + "Root finding evaluation exceeded %1% iterations, giving up now.", static_cast(static_cast(max_iter)), pol); +} + +} //namespace policies + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +}} // namespaces boost/math + +#endif // BOOST_MATH_POLICY_ERROR_HANDLING_HPP + diff --git a/external/boost/math/policies/policy.hpp b/external/boost/math/policies/policy.hpp new file mode 100644 index 0000000..70e67c7 --- /dev/null +++ b/external/boost/math/policies/policy.hpp @@ -0,0 +1,982 @@ +// Copyright John Maddock 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) + +#ifndef BOOST_MATH_POLICY_HPP +#define BOOST_MATH_POLICY_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// Sadly we do need the .h versions of these to be sure of getting +// FLT_MANT_DIG etc. +#include +#include +#include +#include + +namespace boost{ namespace math{ + +namespace tools{ + +template +int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)); +template +T epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)); + +} + +namespace policies{ + +// +// Define macros for our default policies, if they're not defined already: +// +#ifndef BOOST_MATH_DOMAIN_ERROR_POLICY +#define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error +#endif +#ifndef BOOST_MATH_POLE_ERROR_POLICY +#define BOOST_MATH_POLE_ERROR_POLICY throw_on_error +#endif +#ifndef BOOST_MATH_OVERFLOW_ERROR_POLICY +#define BOOST_MATH_OVERFLOW_ERROR_POLICY throw_on_error +#endif +#ifndef BOOST_MATH_EVALUATION_ERROR_POLICY +#define BOOST_MATH_EVALUATION_ERROR_POLICY throw_on_error +#endif +#ifndef BOOST_MATH_ROUNDING_ERROR_POLICY +#define BOOST_MATH_ROUNDING_ERROR_POLICY throw_on_error +#endif +#ifndef BOOST_MATH_UNDERFLOW_ERROR_POLICY +#define BOOST_MATH_UNDERFLOW_ERROR_POLICY ignore_error +#endif +#ifndef BOOST_MATH_DENORM_ERROR_POLICY +#define BOOST_MATH_DENORM_ERROR_POLICY ignore_error +#endif +#ifndef BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY +#define BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY ignore_error +#endif +#ifndef BOOST_MATH_DIGITS10_POLICY +#define BOOST_MATH_DIGITS10_POLICY 0 +#endif +#ifndef BOOST_MATH_PROMOTE_FLOAT_POLICY +#define BOOST_MATH_PROMOTE_FLOAT_POLICY true +#endif +#ifndef BOOST_MATH_PROMOTE_DOUBLE_POLICY +#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +#define BOOST_MATH_PROMOTE_DOUBLE_POLICY false +#else +#define BOOST_MATH_PROMOTE_DOUBLE_POLICY true +#endif +#endif +#ifndef BOOST_MATH_DISCRETE_QUANTILE_POLICY +#define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_round_outwards +#endif +#ifndef BOOST_MATH_ASSERT_UNDEFINED_POLICY +#define BOOST_MATH_ASSERT_UNDEFINED_POLICY true +#endif +#ifndef BOOST_MATH_MAX_SERIES_ITERATION_POLICY +#define BOOST_MATH_MAX_SERIES_ITERATION_POLICY 1000000 +#endif +#ifndef BOOST_MATH_MAX_ROOT_ITERATION_POLICY +#define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200 +#endif + +#if !defined(__BORLANDC__) \ + && !(defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) +#define BOOST_MATH_META_INT(type, name, Default)\ + template struct name : public boost::mpl::int_{};\ + namespace detail{\ + template \ + char test_is_valid_arg(const name*);\ + char test_is_default_arg(const name*);\ + template struct is_##name##_imp\ + {\ + template static char test(const name*);\ + static double test(...);\ + BOOST_STATIC_CONSTANT(bool, value = sizeof(test(static_cast(0))) == 1);\ + };\ + }\ + template struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp::value>{}; + +#define BOOST_MATH_META_BOOL(name, Default)\ + template struct name : public boost::mpl::bool_{};\ + namespace detail{\ + template \ + char test_is_valid_arg(const name*);\ + char test_is_default_arg(const name*);\ + template struct is_##name##_imp\ + {\ + template static char test(const name*);\ + static double test(...);\ + BOOST_STATIC_CONSTANT(bool, value = sizeof(test(static_cast(0))) == 1);\ + };\ + }\ + template struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp::value>{}; +#else +#define BOOST_MATH_META_INT(Type, name, Default)\ + template struct name : public boost::mpl::int_{};\ + namespace detail{\ + template \ + char test_is_valid_arg(const name*);\ + char test_is_default_arg(const name*);\ + template struct is_##name##_tester\ + {\ + template static char test(const name&);\ + static double test(...);\ + };\ + template struct is_##name##_imp\ + {\ + static T inst;\ + BOOST_STATIC_CONSTANT(bool, value = sizeof( ::boost::math::policies::detail::is_##name##_tester::test(inst)) == 1);\ + };\ + }\ + template struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp::value>\ + {\ + template struct apply{ typedef is_##name type; };\ + }; + +#define BOOST_MATH_META_BOOL(name, Default)\ + template struct name : public boost::mpl::bool_{};\ + namespace detail{\ + template \ + char test_is_valid_arg(const name*);\ + char test_is_default_arg(const name*);\ + template struct is_##name##_tester\ + {\ + template static char test(const name&);\ + static double test(...);\ + };\ + template struct is_##name##_imp\ + {\ + static T inst;\ + BOOST_STATIC_CONSTANT(bool, value = sizeof( ::boost::math::policies::detail::is_##name##_tester::test(inst)) == 1);\ + };\ + }\ + template struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp::value>\ + {\ + template struct apply{ typedef is_##name type; };\ + }; +#endif +// +// Begin by defining policy types for error handling: +// +enum error_policy_type +{ + throw_on_error = 0, + errno_on_error = 1, + ignore_error = 2, + user_error = 3 +}; + +BOOST_MATH_META_INT(error_policy_type, domain_error, BOOST_MATH_DOMAIN_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, pole_error, BOOST_MATH_POLE_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, overflow_error, BOOST_MATH_OVERFLOW_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, underflow_error, BOOST_MATH_UNDERFLOW_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, denorm_error, BOOST_MATH_DENORM_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, evaluation_error, BOOST_MATH_EVALUATION_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, rounding_error, BOOST_MATH_ROUNDING_ERROR_POLICY) +BOOST_MATH_META_INT(error_policy_type, indeterminate_result_error, BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY) + +// +// Policy types for internal promotion: +// +BOOST_MATH_META_BOOL(promote_float, BOOST_MATH_PROMOTE_FLOAT_POLICY) +BOOST_MATH_META_BOOL(promote_double, BOOST_MATH_PROMOTE_DOUBLE_POLICY) +BOOST_MATH_META_BOOL(assert_undefined, BOOST_MATH_ASSERT_UNDEFINED_POLICY) +// +// Policy types for discrete quantiles: +// +enum discrete_quantile_policy_type +{ + real, + integer_round_outwards, + integer_round_inwards, + integer_round_down, + integer_round_up, + integer_round_nearest +}; + +BOOST_MATH_META_INT(discrete_quantile_policy_type, discrete_quantile, BOOST_MATH_DISCRETE_QUANTILE_POLICY) +// +// Precision: +// +BOOST_MATH_META_INT(int, digits10, BOOST_MATH_DIGITS10_POLICY) +BOOST_MATH_META_INT(int, digits2, 0) +// +// Iterations: +// +BOOST_MATH_META_INT(unsigned long, max_series_iterations, BOOST_MATH_MAX_SERIES_ITERATION_POLICY) +BOOST_MATH_META_INT(unsigned long, max_root_iterations, BOOST_MATH_MAX_ROOT_ITERATION_POLICY) +// +// Define the names for each possible policy: +// +#define BOOST_MATH_PARAMETER(name)\ + BOOST_PARAMETER_TEMPLATE_KEYWORD(name##_name)\ + BOOST_PARAMETER_NAME(name##_name) + +struct default_policy{}; + +namespace detail{ +// +// Trait to work out bits precision from digits10 and digits2: +// +template +struct precision +{ + // + // Now work out the precision: + // + typedef typename mpl::if_c< + (Digits10::value == 0), + digits2<0>, + digits2<((Digits10::value + 1) * 1000L) / 301L> + >::type digits2_type; +public: +#ifdef __BORLANDC__ + typedef typename mpl::if_c< + (Digits2::value > ::boost::math::policies::detail::precision::digits2_type::value), + Digits2, digits2_type>::type type; +#else + typedef typename mpl::if_c< + (Digits2::value > digits2_type::value), + Digits2, digits2_type>::type type; +#endif +}; + +template +struct select_result +{ + typedef A type; +}; +template +struct select_result +{ + typedef typename mpl::deref::type type; +}; + +template +struct find_arg +{ +private: + typedef typename mpl::find_if::type iter; + typedef typename mpl::end::type end_type; +public: + typedef typename select_result< + DefaultType, iter, + ::boost::is_same::value>::type type; +}; + +double test_is_valid_arg(...); +double test_is_default_arg(...); +char test_is_valid_arg(const default_policy*); +char test_is_default_arg(const default_policy*); + +template +struct is_valid_policy_imp +{ + BOOST_STATIC_CONSTANT(bool, value = sizeof(::boost::math::policies::detail::test_is_valid_arg(static_cast(0))) == 1); +}; + +template +struct is_default_policy_imp +{ + BOOST_STATIC_CONSTANT(bool, value = sizeof(::boost::math::policies::detail::test_is_default_arg(static_cast(0))) == 1); +}; + +template struct is_valid_policy +: public mpl::bool_< + ::boost::math::policies::detail::is_valid_policy_imp::value> +{}; + +template struct is_default_policy +: public mpl::bool_< + ::boost::math::policies::detail::is_default_policy_imp::value> +{ + template + struct apply + { + typedef is_default_policy type; + }; +}; + +template +struct append_N +{ + typedef typename mpl::push_back::type new_seq; + typedef typename append_N::type type; +}; + +template +struct append_N +{ + typedef Seq type; +}; + +// +// Traits class to work out what template parameters our default +// policy<> class will have when modified for forwarding: +// +template +struct default_args +{ + typedef promote_float arg1; + typedef promote_double arg2; +}; + +template <> +struct default_args +{ + typedef default_policy arg1; + typedef default_policy arg2; +}; + +template <> +struct default_args +{ + typedef promote_float arg1; + typedef default_policy arg2; +}; + +template <> +struct default_args +{ + typedef promote_double arg1; + typedef default_policy arg2; +}; + +typedef default_args::arg1 forwarding_arg1; +typedef default_args::arg2 forwarding_arg2; + +} // detail +// +// Now define the policy type with enough arguments to handle all +// the policies: +// +template +struct policy +{ +private: + // + // Validate all our arguments: + // + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy::value); + // + // Typelist of the arguments: + // + typedef mpl::list arg_list; + +public: + typedef typename detail::find_arg, domain_error<> >::type domain_error_type; + typedef typename detail::find_arg, pole_error<> >::type pole_error_type; + typedef typename detail::find_arg, overflow_error<> >::type overflow_error_type; + typedef typename detail::find_arg, underflow_error<> >::type underflow_error_type; + typedef typename detail::find_arg, denorm_error<> >::type denorm_error_type; + typedef typename detail::find_arg, evaluation_error<> >::type evaluation_error_type; + typedef typename detail::find_arg, rounding_error<> >::type rounding_error_type; + typedef typename detail::find_arg, indeterminate_result_error<> >::type indeterminate_result_error_type; +private: + // + // Now work out the precision: + // + typedef typename detail::find_arg, digits10<> >::type digits10_type; + typedef typename detail::find_arg, digits2<> >::type bits_precision_type; +public: + typedef typename detail::precision::type precision_type; + // + // Internal promotion: + // + typedef typename detail::find_arg, promote_float<> >::type promote_float_type; + typedef typename detail::find_arg, promote_double<> >::type promote_double_type; + // + // Discrete quantiles: + // + typedef typename detail::find_arg, discrete_quantile<> >::type discrete_quantile_type; + // + // Mathematically undefined properties: + // + typedef typename detail::find_arg, discrete_quantile<> >::type assert_undefined_type; + // + // Max iterations: + // + typedef typename detail::find_arg, max_series_iterations<> >::type max_series_iterations_type; + typedef typename detail::find_arg, max_root_iterations<> >::type max_root_iterations_type; +}; +// +// These full specializations are defined to reduce the amount of +// template instantiations that have to take place when using the default +// policies, they have quite a large impact on compile times: +// +template <> +struct policy +{ +public: + typedef domain_error<> domain_error_type; + typedef pole_error<> pole_error_type; + typedef overflow_error<> overflow_error_type; + typedef underflow_error<> underflow_error_type; + typedef denorm_error<> denorm_error_type; + typedef evaluation_error<> evaluation_error_type; + typedef rounding_error<> rounding_error_type; + typedef indeterminate_result_error<> indeterminate_result_error_type; +#if BOOST_MATH_DIGITS10_POLICY == 0 + typedef digits2<> precision_type; +#else + typedef detail::precision, digits2<> >::type precision_type; +#endif + typedef promote_float<> promote_float_type; + typedef promote_double<> promote_double_type; + typedef discrete_quantile<> discrete_quantile_type; + typedef assert_undefined<> assert_undefined_type; + typedef max_series_iterations<> max_series_iterations_type; + typedef max_root_iterations<> max_root_iterations_type; +}; + +template <> +struct policy +{ +public: + typedef domain_error<> domain_error_type; + typedef pole_error<> pole_error_type; + typedef overflow_error<> overflow_error_type; + typedef underflow_error<> underflow_error_type; + typedef denorm_error<> denorm_error_type; + typedef evaluation_error<> evaluation_error_type; + typedef rounding_error<> rounding_error_type; + typedef indeterminate_result_error<> indeterminate_result_error_type; +#if BOOST_MATH_DIGITS10_POLICY == 0 + typedef digits2<> precision_type; +#else + typedef detail::precision, digits2<> >::type precision_type; +#endif + typedef promote_float promote_float_type; + typedef promote_double promote_double_type; + typedef discrete_quantile<> discrete_quantile_type; + typedef assert_undefined<> assert_undefined_type; + typedef max_series_iterations<> max_series_iterations_type; + typedef max_root_iterations<> max_root_iterations_type; +}; + +template +struct normalise +{ +private: + typedef mpl::list arg_list; + typedef typename detail::find_arg, typename Policy::domain_error_type >::type domain_error_type; + typedef typename detail::find_arg, typename Policy::pole_error_type >::type pole_error_type; + typedef typename detail::find_arg, typename Policy::overflow_error_type >::type overflow_error_type; + typedef typename detail::find_arg, typename Policy::underflow_error_type >::type underflow_error_type; + typedef typename detail::find_arg, typename Policy::denorm_error_type >::type denorm_error_type; + typedef typename detail::find_arg, typename Policy::evaluation_error_type >::type evaluation_error_type; + typedef typename detail::find_arg, typename Policy::rounding_error_type >::type rounding_error_type; + typedef typename detail::find_arg, typename Policy::indeterminate_result_error_type >::type indeterminate_result_error_type; + // + // Now work out the precision: + // + typedef typename detail::find_arg, digits10<> >::type digits10_type; + typedef typename detail::find_arg, typename Policy::precision_type >::type bits_precision_type; + typedef typename detail::precision::type precision_type; + // + // Internal promotion: + // + typedef typename detail::find_arg, typename Policy::promote_float_type >::type promote_float_type; + typedef typename detail::find_arg, typename Policy::promote_double_type >::type promote_double_type; + // + // Discrete quantiles: + // + typedef typename detail::find_arg, typename Policy::discrete_quantile_type >::type discrete_quantile_type; + // + // Mathematically undefined properties: + // + typedef typename detail::find_arg, discrete_quantile<> >::type assert_undefined_type; + // + // Max iterations: + // + typedef typename detail::find_arg, max_series_iterations<> >::type max_series_iterations_type; + typedef typename detail::find_arg, max_root_iterations<> >::type max_root_iterations_type; + // + // Define a typelist of the policies: + // + typedef mpl::vector< + domain_error_type, + pole_error_type, + overflow_error_type, + underflow_error_type, + denorm_error_type, + evaluation_error_type, + rounding_error_type, + indeterminate_result_error_type, + precision_type, + promote_float_type, + promote_double_type, + discrete_quantile_type, + assert_undefined_type, + max_series_iterations_type, + max_root_iterations_type> result_list; + // + // Remove all the policies that are the same as the default: + // + typedef typename mpl::remove_if >::type reduced_list; + // + // Pad out the list with defaults: + // + typedef typename detail::append_N::value)>::type result_type; +public: + typedef policy< + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type, + typename mpl::at >::type > type; +}; +// +// Full specialisation to speed up compilation of the common case: +// +template <> +struct normalise, + promote_float, + promote_double, + discrete_quantile<>, + assert_undefined<>, + default_policy, + default_policy, + default_policy, + default_policy, + default_policy, + default_policy, + default_policy> +{ + typedef policy type; +}; + +template <> +struct normalise, + promote_float, + promote_double, + discrete_quantile<>, + assert_undefined<>, + default_policy, + default_policy, + default_policy, + default_policy, + default_policy, + default_policy, + default_policy> +{ + typedef policy type; +}; + +inline policy<> make_policy() +{ return policy<>(); } + +template +inline typename normalise, A1>::type make_policy(const A1&) +{ + typedef typename normalise, A1>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2>::type make_policy(const A1&, const A2&) +{ + typedef typename normalise, A1, A2>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3>::type make_policy(const A1&, const A2&, const A3&) +{ + typedef typename normalise, A1, A2, A3>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4>::type make_policy(const A1&, const A2&, const A3&, const A4&) +{ + typedef typename normalise, A1, A2, A3, A4>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&) +{ + typedef typename normalise, A1, A2, A3, A4, A5>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&) +{ + typedef typename normalise, A1, A2, A3, A4, A5, A6>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5, A6, A7>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&) +{ + typedef typename normalise, A1, A2, A3, A4, A5, A6, A7>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5, A6, A7, A8>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&) +{ + typedef typename normalise, A1, A2, A3, A4, A5, A6, A7, A8>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&) +{ + typedef typename normalise, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&) +{ + typedef typename normalise, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type result_type; + return result_type(); +} + +template +inline typename normalise, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&, const A11&) +{ + typedef typename normalise, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type result_type; + return result_type(); +} + +// +// Traits class to handle internal promotion: +// +template +struct evaluation +{ + typedef Real type; +}; + +template +struct evaluation +{ + typedef typename mpl::if_::type type; +}; + +template +struct evaluation +{ + typedef typename mpl::if_::type type; +}; + +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + +template +struct basic_digits : public mpl::int_<0>{ }; +template <> +struct basic_digits : public mpl::int_{ }; +template <> +struct basic_digits : public mpl::int_{ }; +template <> +struct basic_digits : public mpl::int_{ }; + +template +struct precision +{ + BOOST_STATIC_ASSERT( ::std::numeric_limits::radix == 2); + typedef typename Policy::precision_type precision_type; + typedef basic_digits digits_t; + typedef typename mpl::if_< + mpl::equal_to >, + // Possibly unknown precision: + precision_type, + typename mpl::if_< + mpl::or_, mpl::less_equal > >, + // Default case, full precision for RealType: + digits2< ::std::numeric_limits::digits>, + // User customised precision: + precision_type + >::type + >::type type; +}; + +template +struct precision +{ + typedef digits2 type; +}; +template +struct precision +{ + typedef digits2 type; +}; +template +struct precision +{ + typedef digits2 type; +}; + +#else + +template +struct precision +{ + BOOST_STATIC_ASSERT((::std::numeric_limits::radix == 2) || ((::std::numeric_limits::is_specialized == 0) || (::std::numeric_limits::digits == 0))); +#ifndef __BORLANDC__ + typedef typename Policy::precision_type precision_type; + typedef typename mpl::if_c< + ((::std::numeric_limits::is_specialized == 0) || (::std::numeric_limits::digits == 0)), + // Possibly unknown precision: + precision_type, + typename mpl::if_c< + ((::std::numeric_limits::digits <= precision_type::value) + || (Policy::precision_type::value <= 0)), + // Default case, full precision for RealType: + digits2< ::std::numeric_limits::digits>, + // User customised precision: + precision_type + >::type + >::type type; +#else + typedef typename Policy::precision_type precision_type; + typedef mpl::int_< ::std::numeric_limits::digits> digits_t; + typedef mpl::bool_< ::std::numeric_limits::is_specialized> spec_t; + typedef typename mpl::if_< + mpl::or_, mpl::equal_to > >, + // Possibly unknown precision: + precision_type, + typename mpl::if_< + mpl::or_, mpl::less_equal > >, + // Default case, full precision for RealType: + digits2< ::std::numeric_limits::digits>, + // User customised precision: + precision_type + >::type + >::type type; +#endif +}; + +#endif + +namespace detail{ + +template +inline int digits_imp(mpl::true_ const&) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); +#endif + typedef typename boost::math::policies::precision::type p_t; + return p_t::value; +} + +template +inline int digits_imp(mpl::false_ const&) +{ + return tools::digits(); +} + +} // namespace detail + +template +inline int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) +{ + typedef mpl::bool_< std::numeric_limits::is_specialized > tag_type; + return detail::digits_imp(tag_type()); +} + +template +inline unsigned long get_max_series_iterations() +{ + typedef typename Policy::max_series_iterations_type iter_type; + return iter_type::value; +} + +template +inline unsigned long get_max_root_iterations() +{ + typedef typename Policy::max_root_iterations_type iter_type; + return iter_type::value; +} + +namespace detail{ + +template +struct series_factor_calc +{ + static T get() + { + return ldexp(T(1.0), 1 - Digits::value); + } +}; + +template +struct series_factor_calc +{ + static T get() + { + return boost::math::tools::epsilon(); + } +}; +template +struct series_factor_calc +{ + static T get() + { + static const boost::uintmax_t v = static_cast(1u) << (Digits::value - 1); + return 1 / static_cast(v); + } +}; +template +struct series_factor_calc +{ + static T get() + { + return boost::math::tools::epsilon(); + } +}; + +template +inline T get_epsilon_imp(mpl::true_ const&) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); + BOOST_STATIC_ASSERT( ::std::numeric_limits::radix == 2); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); + BOOST_ASSERT(::std::numeric_limits::radix == 2); +#endif + typedef typename boost::math::policies::precision::type p_t; + typedef mpl::bool_::digits> is_small_int; + typedef mpl::bool_= std::numeric_limits::digits> is_default_value; + return series_factor_calc::get(); +} + +template +inline T get_epsilon_imp(mpl::false_ const&) +{ + return tools::epsilon(); +} + +} // namespace detail + +template +inline T get_epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) +{ + typedef mpl::bool_< (std::numeric_limits::is_specialized && (std::numeric_limits::radix == 2)) > tag_type; + return detail::get_epsilon_imp(tag_type()); +} + +namespace detail{ + +template +char test_is_policy(const policy*); +double test_is_policy(...); + +template +struct is_policy_imp +{ + BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::math::policies::detail::test_is_policy(static_cast(0))) == 1)); +}; + +} + +template +struct is_policy : public mpl::bool_< ::boost::math::policies::detail::is_policy_imp

    ::value> {}; + +// +// Helper traits class for distribution error handling: +// +template +struct constructor_error_check +{ + typedef typename Policy::domain_error_type domain_error_type; + typedef typename mpl::if_c< + (domain_error_type::value == throw_on_error) || (domain_error_type::value == user_error), + mpl::true_, + mpl::false_>::type type; +}; + +template +struct method_error_check +{ + typedef typename Policy::domain_error_type domain_error_type; + typedef typename mpl::if_c< + (domain_error_type::value == throw_on_error) && (domain_error_type::value != user_error), + mpl::false_, + mpl::true_>::type type; +}; + +}}} // namespaces + +#endif // BOOST_MATH_POLICY_HPP + + + diff --git a/external/boost/math/special_functions/detail/fp_traits.hpp b/external/boost/math/special_functions/detail/fp_traits.hpp new file mode 100644 index 0000000..50c034d --- /dev/null +++ b/external/boost/math/special_functions/detail/fp_traits.hpp @@ -0,0 +1,570 @@ +// fp_traits.hpp + +#ifndef BOOST_MATH_FP_TRAITS_HPP +#define BOOST_MATH_FP_TRAITS_HPP + +// Copyright (c) 2006 Johan Rade + +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* +To support old compilers, care has been taken to avoid partial template +specialization and meta function forwarding. +With these techniques, the code could be simplified. +*/ + +#if defined(__vms) && defined(__DECCXX) && !__IEEE_FLOAT +// The VAX floating point formats are used (for float and double) +# define BOOST_FPCLASSIFY_VAX_FORMAT +#endif + +#include + +#include +#include +#include +#include +#include + +#ifdef BOOST_NO_STDC_NAMESPACE + namespace std{ using ::memcpy; } +#endif + +#ifndef FP_NORMAL + +#define FP_ZERO 0 +#define FP_NORMAL 1 +#define FP_INFINITE 2 +#define FP_NAN 3 +#define FP_SUBNORMAL 4 + +#else + +#define BOOST_HAS_FPCLASSIFY + +#ifndef fpclassify +# if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) \ + && defined(_GLIBCXX_USE_C99_MATH) \ + && !(defined(_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC) \ + && (_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC != 0)) +# ifdef _STLP_VENDOR_CSTD +# if _STLPORT_VERSION >= 0x520 +# define BOOST_FPCLASSIFY_PREFIX ::__std_alias:: +# else +# define BOOST_FPCLASSIFY_PREFIX ::_STLP_VENDOR_CSTD:: +# endif +# else +# define BOOST_FPCLASSIFY_PREFIX ::std:: +# endif +# else +# undef BOOST_HAS_FPCLASSIFY +# define BOOST_FPCLASSIFY_PREFIX +# endif +#elif (defined(__HP_aCC) && !defined(__hppa)) +// aCC 6 appears to do "#define fpclassify fpclassify" which messes us up a bit! +# define BOOST_FPCLASSIFY_PREFIX :: +#else +# define BOOST_FPCLASSIFY_PREFIX +#endif + +#ifdef __MINGW32__ +# undef BOOST_HAS_FPCLASSIFY +#endif + +#endif + + +//------------------------------------------------------------------------------ + +namespace boost { +namespace math { +namespace detail { + +//------------------------------------------------------------------------------ + +/* +The following classes are used to tag the different methods that are used +for floating point classification +*/ + +struct native_tag {}; +template +struct generic_tag {}; +struct ieee_tag {}; +struct ieee_copy_all_bits_tag : public ieee_tag {}; +struct ieee_copy_leading_bits_tag : public ieee_tag {}; + +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +// +// These helper functions are used only when numeric_limits<> +// members are not compile time constants: +// +inline bool is_generic_tag_false(const generic_tag*) +{ + return true; +} +inline bool is_generic_tag_false(const void*) +{ + return false; +} +#endif + +//------------------------------------------------------------------------------ + +/* +Most processors support three different floating point precisions: +single precision (32 bits), double precision (64 bits) +and extended double precision (80 - 128 bits, depending on the processor) + +Note that the C++ type long double can be implemented +both as double precision and extended double precision. +*/ + +struct unknown_precision{}; +struct single_precision {}; +struct double_precision {}; +struct extended_double_precision {}; + +// native_tag version -------------------------------------------------------------- + +template struct fp_traits_native +{ + typedef native_tag method; +}; + +// generic_tag version ------------------------------------------------------------- + +template struct fp_traits_non_native +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + typedef generic_tag::is_specialized> method; +#else + typedef generic_tag method; +#endif +}; + +// ieee_tag versions --------------------------------------------------------------- + +/* +These specializations of fp_traits_non_native contain information needed +to "parse" the binary representation of a floating point number. + +Typedef members: + + bits -- the target type when copying the leading bytes of a floating + point number. It is a typedef for uint32_t or uint64_t. + + method -- tells us whether all bytes are copied or not. + It is a typedef for ieee_copy_all_bits_tag or ieee_copy_leading_bits_tag. + +Static data members: + + sign, exponent, flag, significand -- bit masks that give the meaning of the + bits in the leading bytes. + +Static function members: + + get_bits(), set_bits() -- provide access to the leading bytes. + +*/ + +// ieee_tag version, float (32 bits) ----------------------------------------------- + +#ifndef BOOST_FPCLASSIFY_VAX_FORMAT + +template<> struct fp_traits_non_native +{ + typedef ieee_copy_all_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7f800000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0x00000000); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x007fffff); + + typedef uint32_t bits; + static void get_bits(float x, uint32_t& a) { std::memcpy(&a, &x, 4); } + static void set_bits(float& x, uint32_t a) { std::memcpy(&x, &a, 4); } +}; + +// ieee_tag version, double (64 bits) ---------------------------------------------- + +#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) \ + || defined(__BORLANDC__) || defined(__CODEGEAR__) + +template<> struct fp_traits_non_native +{ + typedef ieee_copy_leading_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7ff00000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff); + + typedef uint32_t bits; + + static void get_bits(double x, uint32_t& a) + { + std::memcpy(&a, reinterpret_cast(&x) + offset_, 4); + } + + static void set_bits(double& x, uint32_t a) + { + std::memcpy(reinterpret_cast(&x) + offset_, &a, 4); + } + +private: + +#if defined(BOOST_BIG_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 0); +#elif defined(BOOST_LITTLE_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 4); +#else + BOOST_STATIC_ASSERT(false); +#endif +}; + +//.............................................................................. + +#else + +template<> struct fp_traits_non_native +{ + typedef ieee_copy_all_bits_tag method; + + static const uint64_t sign = ((uint64_t)0x80000000u) << 32; + static const uint64_t exponent = ((uint64_t)0x7ff00000) << 32; + static const uint64_t flag = 0; + static const uint64_t significand + = (((uint64_t)0x000fffff) << 32) + ((uint64_t)0xffffffffu); + + typedef uint64_t bits; + static void get_bits(double x, uint64_t& a) { std::memcpy(&a, &x, 8); } + static void set_bits(double& x, uint64_t a) { std::memcpy(&x, &a, 8); } +}; + +#endif + +#endif // #ifndef BOOST_FPCLASSIFY_VAX_FORMAT + +// long double (64 bits) ------------------------------------------------------- + +#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\ + || defined(__BORLANDC__) || defined(__CODEGEAR__) + +template<> struct fp_traits_non_native +{ + typedef ieee_copy_leading_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7ff00000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff); + + typedef uint32_t bits; + + static void get_bits(long double x, uint32_t& a) + { + std::memcpy(&a, reinterpret_cast(&x) + offset_, 4); + } + + static void set_bits(long double& x, uint32_t a) + { + std::memcpy(reinterpret_cast(&x) + offset_, &a, 4); + } + +private: + +#if defined(BOOST_BIG_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 0); +#elif defined(BOOST_LITTLE_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 4); +#else + BOOST_STATIC_ASSERT(false); +#endif +}; + +//.............................................................................. + +#else + +template<> struct fp_traits_non_native +{ + typedef ieee_copy_all_bits_tag method; + + static const uint64_t sign = (uint64_t)0x80000000u << 32; + static const uint64_t exponent = (uint64_t)0x7ff00000 << 32; + static const uint64_t flag = 0; + static const uint64_t significand + = ((uint64_t)0x000fffff << 32) + (uint64_t)0xffffffffu; + + typedef uint64_t bits; + static void get_bits(long double x, uint64_t& a) { std::memcpy(&a, &x, 8); } + static void set_bits(long double& x, uint64_t a) { std::memcpy(&x, &a, 8); } +}; + +#endif + + +// long double (>64 bits), x86 and x64 ----------------------------------------- + +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) \ + || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) \ + || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) + +// Intel extended double precision format (80 bits) + +template<> +struct fp_traits_non_native +{ + typedef ieee_copy_leading_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7fff0000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0x00008000); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x00007fff); + + typedef uint32_t bits; + + static void get_bits(long double x, uint32_t& a) + { + std::memcpy(&a, reinterpret_cast(&x) + 6, 4); + } + + static void set_bits(long double& x, uint32_t a) + { + std::memcpy(reinterpret_cast(&x) + 6, &a, 4); + } +}; + + +// long double (>64 bits), Itanium --------------------------------------------- + +#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) + +// The floating point format is unknown at compile time +// No template specialization is provided. +// The generic_tag definition is used. + +// The Itanium supports both +// the Intel extended double precision format (80 bits) and +// the IEEE extended double precision format with 15 exponent bits (128 bits). + + +// long double (>64 bits), PowerPC --------------------------------------------- + +#elif defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) \ + || defined(__ppc) || defined(__ppc__) || defined(__PPC__) + +// PowerPC extended double precision format (128 bits) + +template<> +struct fp_traits_non_native +{ + typedef ieee_copy_leading_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7ff00000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0x00000000); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff); + + typedef uint32_t bits; + + static void get_bits(long double x, uint32_t& a) + { + std::memcpy(&a, reinterpret_cast(&x) + offset_, 4); + } + + static void set_bits(long double& x, uint32_t a) + { + std::memcpy(reinterpret_cast(&x) + offset_, &a, 4); + } + +private: + +#if defined(BOOST_BIG_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 0); +#elif defined(BOOST_LITTLE_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 12); +#else + BOOST_STATIC_ASSERT(false); +#endif +}; + + +// long double (>64 bits), Motorola 68K ---------------------------------------- + +#elif defined(__m68k) || defined(__m68k__) \ + || defined(__mc68000) || defined(__mc68000__) \ + +// Motorola extended double precision format (96 bits) + +// It is the same format as the Intel extended double precision format, +// except that 1) it is big-endian, 2) the 3rd and 4th byte are padding, and +// 3) the flag bit is not set for infinity + +template<> +struct fp_traits_non_native +{ + typedef ieee_copy_leading_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7fff0000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0x00008000); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x00007fff); + + // copy 1st, 2nd, 5th and 6th byte. 3rd and 4th byte are padding. + + typedef uint32_t bits; + + static void get_bits(long double x, uint32_t& a) + { + std::memcpy(&a, &x, 2); + std::memcpy(reinterpret_cast(&a) + 2, + reinterpret_cast(&x) + 4, 2); + } + + static void set_bits(long double& x, uint32_t a) + { + std::memcpy(&x, &a, 2); + std::memcpy(reinterpret_cast(&x) + 4, + reinterpret_cast(&a) + 2, 2); + } +}; + + +// long double (>64 bits), All other processors -------------------------------- + +#else + +// IEEE extended double precision format with 15 exponent bits (128 bits) + +template<> +struct fp_traits_non_native +{ + typedef ieee_copy_leading_bits_tag method; + + BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000u); + BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7fff0000); + BOOST_STATIC_CONSTANT(uint32_t, flag = 0x00000000); + BOOST_STATIC_CONSTANT(uint32_t, significand = 0x0000ffff); + + typedef uint32_t bits; + + static void get_bits(long double x, uint32_t& a) + { + std::memcpy(&a, reinterpret_cast(&x) + offset_, 4); + } + + static void set_bits(long double& x, uint32_t a) + { + std::memcpy(reinterpret_cast(&x) + offset_, &a, 4); + } + +private: + +#if defined(BOOST_BIG_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 0); +#elif defined(BOOST_LITTLE_ENDIAN) + BOOST_STATIC_CONSTANT(int, offset_ = 12); +#else + BOOST_STATIC_ASSERT(false); +#endif +}; + +#endif + +//------------------------------------------------------------------------------ + +// size_to_precision is a type switch for converting a C++ floating point type +// to the corresponding precision type. + +template struct size_to_precision +{ + typedef unknown_precision type; +}; + +template<> struct size_to_precision<4, true> +{ + typedef single_precision type; +}; + +template<> struct size_to_precision<8, true> +{ + typedef double_precision type; +}; + +template<> struct size_to_precision<10, true> +{ + typedef extended_double_precision type; +}; + +template<> struct size_to_precision<12, true> +{ + typedef extended_double_precision type; +}; + +template<> struct size_to_precision<16, true> +{ + typedef extended_double_precision type; +}; + +//------------------------------------------------------------------------------ +// +// Figure out whether to use native classification functions based on +// whether T is a built in floating point type or not: +// +template +struct select_native +{ + typedef BOOST_DEDUCED_TYPENAME size_to_precision::value>::type precision; + typedef fp_traits_non_native type; +}; +template<> +struct select_native +{ + typedef fp_traits_native type; +}; +template<> +struct select_native +{ + typedef fp_traits_native type; +}; +template<> +struct select_native +{ + typedef fp_traits_native type; +}; + +//------------------------------------------------------------------------------ + +// fp_traits is a type switch that selects the right fp_traits_non_native + +#if (defined(BOOST_MATH_USE_C99) && !(defined(__GNUC__) && (__GNUC__ < 4))) \ + && !defined(__hpux) \ + && !defined(__DECCXX)\ + && !defined(__osf__) \ + && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\ + && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) +# define BOOST_MATH_USE_STD_FPCLASSIFY +#endif + +template struct fp_traits +{ + typedef BOOST_DEDUCED_TYPENAME size_to_precision::value>::type precision; +#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) + typedef typename select_native::type type; +#else + typedef fp_traits_non_native type; +#endif + typedef fp_traits_non_native sign_change_type; +}; + +//------------------------------------------------------------------------------ + +} // namespace detail +} // namespace math +} // namespace boost + +#endif diff --git a/external/boost/math/special_functions/detail/round_fwd.hpp b/external/boost/math/special_functions/detail/round_fwd.hpp new file mode 100644 index 0000000..952259a --- /dev/null +++ b/external/boost/math/special_functions/detail/round_fwd.hpp @@ -0,0 +1,80 @@ +// Copyright John Maddock 2008. + +// Use, modification and distribution are subject to the +// Boost Software 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_SPECIAL_ROUND_FWD_HPP +#define BOOST_MATH_SPECIAL_ROUND_FWD_HPP + +#include + +#ifdef _MSC_VER +#pragma once +#endif + +namespace boost +{ + namespace math + { + + template + T trunc(const T& v, const Policy& pol); + template + T trunc(const T& v); + template + int itrunc(const T& v, const Policy& pol); + template + int itrunc(const T& v); + template + long ltrunc(const T& v, const Policy& pol); + template + long ltrunc(const T& v); +#ifdef BOOST_HAS_LONG_LONG + template + boost::long_long_type lltrunc(const T& v, const Policy& pol); + template + boost::long_long_type lltrunc(const T& v); +#endif + template + T round(const T& v, const Policy& pol); + template + T round(const T& v); + template + int iround(const T& v, const Policy& pol); + template + int iround(const T& v); + template + long lround(const T& v, const Policy& pol); + template + long lround(const T& v); +#ifdef BOOST_HAS_LONG_LONG + template + boost::long_long_type llround(const T& v, const Policy& pol); + template + boost::long_long_type llround(const T& v); +#endif + template + T modf(const T& v, T* ipart, const Policy& pol); + template + T modf(const T& v, T* ipart); + template + T modf(const T& v, int* ipart, const Policy& pol); + template + T modf(const T& v, int* ipart); + template + T modf(const T& v, long* ipart, const Policy& pol); + template + T modf(const T& v, long* ipart); +#ifdef BOOST_HAS_LONG_LONG + template + T modf(const T& v, boost::long_long_type* ipart, const Policy& pol); + template + T modf(const T& v, boost::long_long_type* ipart); +#endif + + } +} +#endif // BOOST_MATH_SPECIAL_ROUND_FWD_HPP + diff --git a/external/boost/math/special_functions/fpclassify.hpp b/external/boost/math/special_functions/fpclassify.hpp new file mode 100644 index 0000000..2abec5f --- /dev/null +++ b/external/boost/math/special_functions/fpclassify.hpp @@ -0,0 +1,533 @@ +// Copyright John Maddock 2005-2008. +// Copyright (c) 2006-2008 Johan Rade +// Use, modification and distribution are subject to the +// Boost Software 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_FPCLASSIFY_HPP +#define BOOST_MATH_FPCLASSIFY_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +/*! + \file fpclassify.hpp + \brief Classify floating-point value as normal, subnormal, zero, infinite, or NaN. + \version 1.0 + \author John Maddock + */ + +/* + +1. If the platform is C99 compliant, then the native floating point +classification functions are used. However, note that we must only +define the functions which call std::fpclassify etc if that function +really does exist: otherwise a compiler may reject the code even though +the template is never instantiated. + +2. If the platform is not C99 compliant, and the binary format for +a floating point type (float, double or long double) can be determined +at compile time, then the following algorithm is used: + + If all exponent bits, the flag bit (if there is one), + and all significand bits are 0, then the number is zero. + + If all exponent bits and the flag bit (if there is one) are 0, + and at least one significand bit is 1, then the number is subnormal. + + If all exponent bits are 1 and all significand bits are 0, + then the number is infinity. + + If all exponent bits are 1 and at least one significand bit is 1, + then the number is a not-a-number. + + Otherwise the number is normal. + + This algorithm works for the IEEE 754 representation, + and also for several non IEEE 754 formats. + + Most formats have the structure + sign bit + exponent bits + significand bits. + + A few have the structure + sign bit + exponent bits + flag bit + significand bits. + The flag bit is 0 for zero and subnormal numbers, + and 1 for normal numbers and NaN. + It is 0 (Motorola 68K) or 1 (Intel) for infinity. + + To get the bits, the four or eight most significant bytes are copied + into an uint32_t or uint64_t and bit masks are applied. + This covers all the exponent bits and the flag bit (if there is one), + but not always all the significand bits. + Some of the functions below have two implementations, + depending on whether all the significand bits are copied or not. + +3. If the platform is not C99 compliant, and the binary format for +a floating point type (float, double or long double) can not be determined +at compile time, then comparison with std::numeric_limits values +is used. + +*/ + +#if defined(_MSC_VER) || defined(__BORLANDC__) +#include +#endif + +#ifdef BOOST_NO_STDC_NAMESPACE + namespace std{ using ::abs; using ::fabs; } +#endif + +namespace boost{ + +// +// This must not be located in any namespace under boost::math +// otherwise we can get into an infinite loop if isnan is +// a #define for "isnan" ! +// +namespace math_detail{ + +template +inline bool is_nan_helper(T t, const boost::true_type&) +{ +#ifdef isnan + return isnan(t); +#elif defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) || !defined(BOOST_HAS_FPCLASSIFY) + return false; +#else // BOOST_HAS_FPCLASSIFY + return (BOOST_FPCLASSIFY_PREFIX fpclassify(t) == (int)FP_NAN); +#endif +} + +template +inline bool is_nan_helper(T, const boost::false_type&) +{ + return false; +} + +} + +namespace math{ + +namespace detail{ + +#ifdef BOOST_MATH_USE_STD_FPCLASSIFY +template +inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const native_tag&) +{ + return (std::fpclassify)(t); +} +#endif + +template +inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag&) +{ + BOOST_MATH_INSTRUMENT_VARIABLE(t); + + // whenever possible check for Nan's first: +#if defined(BOOST_HAS_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) + if(::boost::math_detail::is_nan_helper(t, ::boost::is_floating_point())) + return FP_NAN; +#elif defined(isnan) + if(boost::math_detail::is_nan_helper(t, ::boost::is_floating_point())) + return FP_NAN; +#elif defined(_MSC_VER) || defined(__BORLANDC__) + if(::_isnan(boost::math::tools::real_cast(t))) + return FP_NAN; +#endif + // std::fabs broken on a few systems especially for long long!!!! + T at = (t < T(0)) ? -t : t; + + // Use a process of exclusion to figure out + // what kind of type we have, this relies on + // IEEE conforming reals that will treat + // Nan's as unordered. Some compilers + // don't do this once optimisations are + // turned on, hence the check for nan's above. + if(at <= (std::numeric_limits::max)()) + { + if(at >= (std::numeric_limits::min)()) + return FP_NORMAL; + return (at != 0) ? FP_SUBNORMAL : FP_ZERO; + } + else if(at > (std::numeric_limits::max)()) + return FP_INFINITE; + return FP_NAN; +} + +template +inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag&) +{ +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + if(std::numeric_limits::is_specialized) + return fpclassify_imp(t, generic_tag()); +#endif + // + // An unknown type with no numeric_limits support, + // so what are we supposed to do we do here? + // + BOOST_MATH_INSTRUMENT_VARIABLE(t); + + return t == 0 ? FP_ZERO : FP_NORMAL; +} + +template +int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag) +{ + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_MATH_INSTRUMENT_VARIABLE(x); + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + BOOST_MATH_INSTRUMENT_VARIABLE(a); + a &= traits::exponent | traits::flag | traits::significand; + BOOST_MATH_INSTRUMENT_VARIABLE((traits::exponent | traits::flag | traits::significand)); + BOOST_MATH_INSTRUMENT_VARIABLE(a); + + if(a <= traits::significand) { + if(a == 0) + return FP_ZERO; + else + return FP_SUBNORMAL; + } + + if(a < traits::exponent) return FP_NORMAL; + + a &= traits::significand; + if(a == 0) return FP_INFINITE; + + return FP_NAN; +} + +template +int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag) +{ + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_MATH_INSTRUMENT_VARIABLE(x); + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a &= traits::exponent | traits::flag | traits::significand; + + if(a <= traits::significand) { + if(x == 0) + return FP_ZERO; + else + return FP_SUBNORMAL; + } + + if(a < traits::exponent) return FP_NORMAL; + + a &= traits::significand; + traits::set_bits(x,a); + if(x == 0) return FP_INFINITE; + + return FP_NAN; +} + +#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) +template <> +inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(long double t, const native_tag&) +{ + return boost::math::detail::fpclassify_imp(t, generic_tag()); +} +#endif + +} // namespace detail + +template +inline int fpclassify BOOST_NO_MACRO_EXPAND(T t) +{ + typedef typename detail::fp_traits::type traits; + typedef typename traits::method method; +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + if(std::numeric_limits::is_specialized && detail::is_generic_tag_false(static_cast(0))) + return detail::fpclassify_imp(t, detail::generic_tag()); + return detail::fpclassify_imp(t, method()); +#else + return detail::fpclassify_imp(t, method()); +#endif +} + +namespace detail { + +#ifdef BOOST_MATH_USE_STD_FPCLASSIFY + template + inline bool isfinite_impl(T x, native_tag const&) + { + return (std::isfinite)(x); + } +#endif + + template + inline bool isfinite_impl(T x, generic_tag const&) + { + return x >= -(std::numeric_limits::max)() + && x <= (std::numeric_limits::max)(); + } + + template + inline bool isfinite_impl(T x, generic_tag const&) + { +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + if(std::numeric_limits::is_specialized) + return isfinite_impl(x, generic_tag()); +#endif + (void)x; // warning supression. + return true; + } + + template + inline bool isfinite_impl(T x, ieee_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME detail::fp_traits::type traits; + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a &= traits::exponent; + return a != traits::exponent; + } + +#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) +template <> +inline bool isfinite_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&) +{ + return boost::math::detail::isfinite_impl(t, generic_tag()); +} +#endif + +} + +template +inline bool (isfinite)(T x) +{ //!< \brief return true if floating-point type t is finite. + typedef typename detail::fp_traits::type traits; + typedef typename traits::method method; + typedef typename boost::is_floating_point::type fp_tag; + return detail::isfinite_impl(x, method()); +} + +//------------------------------------------------------------------------------ + +namespace detail { + +#ifdef BOOST_MATH_USE_STD_FPCLASSIFY + template + inline bool isnormal_impl(T x, native_tag const&) + { + return (std::isnormal)(x); + } +#endif + + template + inline bool isnormal_impl(T x, generic_tag const&) + { + if(x < 0) x = -x; + return x >= (std::numeric_limits::min)() + && x <= (std::numeric_limits::max)(); + } + + template + inline bool isnormal_impl(T x, generic_tag const&) + { +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + if(std::numeric_limits::is_specialized) + return isnormal_impl(x, generic_tag()); +#endif + return !(x == 0); + } + + template + inline bool isnormal_impl(T x, ieee_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME detail::fp_traits::type traits; + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a &= traits::exponent | traits::flag; + return (a != 0) && (a < traits::exponent); + } + +#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) +template <> +inline bool isnormal_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&) +{ + return boost::math::detail::isnormal_impl(t, generic_tag()); +} +#endif + +} + +template +inline bool (isnormal)(T x) +{ + typedef typename detail::fp_traits::type traits; + typedef typename traits::method method; + typedef typename boost::is_floating_point::type fp_tag; + return detail::isnormal_impl(x, method()); +} + +//------------------------------------------------------------------------------ + +namespace detail { + +#ifdef BOOST_MATH_USE_STD_FPCLASSIFY + template + inline bool isinf_impl(T x, native_tag const&) + { + return (std::isinf)(x); + } +#endif + + template + inline bool isinf_impl(T x, generic_tag const&) + { + (void)x; // in case the compiler thinks that x is unused because std::numeric_limits::has_infinity is false + return std::numeric_limits::has_infinity + && ( x == std::numeric_limits::infinity() + || x == -std::numeric_limits::infinity()); + } + + template + inline bool isinf_impl(T x, generic_tag const&) + { +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + if(std::numeric_limits::is_specialized) + return isinf_impl(x, generic_tag()); +#endif + (void)x; // warning supression. + return false; + } + + template + inline bool isinf_impl(T x, ieee_copy_all_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a &= traits::exponent | traits::significand; + return a == traits::exponent; + } + + template + inline bool isinf_impl(T x, ieee_copy_leading_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a &= traits::exponent | traits::significand; + if(a != traits::exponent) + return false; + + traits::set_bits(x,0); + return x == 0; + } + +#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) +template <> +inline bool isinf_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&) +{ + return boost::math::detail::isinf_impl(t, generic_tag()); +} +#endif + +} // namespace detail + +template +inline bool (isinf)(T x) +{ + typedef typename detail::fp_traits::type traits; + typedef typename traits::method method; + typedef typename boost::is_floating_point::type fp_tag; + return detail::isinf_impl(x, method()); +} + +//------------------------------------------------------------------------------ + +namespace detail { + +#ifdef BOOST_MATH_USE_STD_FPCLASSIFY + template + inline bool isnan_impl(T x, native_tag const&) + { + return (std::isnan)(x); + } +#endif + + template + inline bool isnan_impl(T x, generic_tag const&) + { + return std::numeric_limits::has_infinity + ? !(x <= std::numeric_limits::infinity()) + : x != x; + } + + template + inline bool isnan_impl(T x, generic_tag const&) + { +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + if(std::numeric_limits::is_specialized) + return isnan_impl(x, generic_tag()); +#endif + (void)x; // warning supression + return false; + } + + template + inline bool isnan_impl(T x, ieee_copy_all_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a &= traits::exponent | traits::significand; + return a > traits::exponent; + } + + template + inline bool isnan_impl(T x, ieee_copy_leading_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + + a &= traits::exponent | traits::significand; + if(a < traits::exponent) + return false; + + a &= traits::significand; + traits::set_bits(x,a); + return x != 0; + } + +} // namespace detail + +template bool (isnan)(T x) +{ //!< \brief return true if floating-point type t is NaN (Not A Number). + typedef typename detail::fp_traits::type traits; + typedef typename traits::method method; + typedef typename boost::is_floating_point::type fp_tag; + return detail::isnan_impl(x, method()); +} + +#ifdef isnan +template <> inline bool isnan BOOST_NO_MACRO_EXPAND(float t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); } +template <> inline bool isnan BOOST_NO_MACRO_EXPAND(double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); } +template <> inline bool isnan BOOST_NO_MACRO_EXPAND(long double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); } +#endif + +} // namespace math +} // namespace boost + +#endif // BOOST_MATH_FPCLASSIFY_HPP + diff --git a/external/boost/math/special_functions/math_fwd.hpp b/external/boost/math/special_functions/math_fwd.hpp new file mode 100644 index 0000000..14364a3 --- /dev/null +++ b/external/boost/math/special_functions/math_fwd.hpp @@ -0,0 +1,1070 @@ +// math_fwd.hpp + +// TODO revise completely for new distribution classes. + +// Copyright Paul A. Bristow 2006. +// 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) + +// Omnibus list of forward declarations of math special functions. + +// IT = Integer type. +// RT = Real type (built-in floating-point types, float, double, long double) & User Defined Types +// AT = Integer or Real type + +#ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP +#define BOOST_MATH_SPECIAL_MATH_FWD_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +#include +#include // for argument promotion. +#include +#include +#include + +#define BOOST_NO_MACRO_EXPAND /**/ + +namespace boost +{ + namespace math + { // Math functions (in roughly alphabetic order). + + // Beta functions. + template + typename tools::promote_args::type + beta(RT1 a, RT2 b); // Beta function (2 arguments). + + template + typename tools::promote_args::type + beta(RT1 a, RT2 b, A x); // Beta function (3 arguments). + + template + typename tools::promote_args::type + beta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Beta function (3 arguments). + + template + typename tools::promote_args::type + betac(RT1 a, RT2 b, RT3 x); + + template + typename tools::promote_args::type + betac(RT1 a, RT2 b, RT3 x, const Policy& pol); + + template + typename tools::promote_args::type + ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function. + + template + typename tools::promote_args::type + ibeta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta function. + + template + typename tools::promote_args::type + ibetac(RT1 a, RT2 b, RT3 x); // Incomplete beta complement function. + + template + typename tools::promote_args::type + ibetac(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta complement function. + + template + typename tools::promote_args::type + ibeta_inv(T1 a, T2 b, T3 p, T4* py); + + template + typename tools::promote_args::type + ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol); + + template + typename tools::promote_args::type + ibeta_inv(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function. + + template + typename tools::promote_args::type + ibeta_inv(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function. + + template + typename tools::promote_args::type + ibeta_inva(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function. + + template + typename tools::promote_args::type + ibeta_inva(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function. + + template + typename tools::promote_args::type + ibeta_invb(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function. + + template + typename tools::promote_args::type + ibeta_invb(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function. + + template + typename tools::promote_args::type + ibetac_inv(T1 a, T2 b, T3 q, T4* py); + + template + typename tools::promote_args::type + ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol); + + template + typename tools::promote_args::type + ibetac_inv(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function. + + template + typename tools::promote_args::type + ibetac_inv(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function. + + template + typename tools::promote_args::type + ibetac_inva(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function. + + template + typename tools::promote_args::type + ibetac_inva(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function. + + template + typename tools::promote_args::type + ibetac_invb(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function. + + template + typename tools::promote_args::type + ibetac_invb(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function. + + template + typename tools::promote_args::type + ibeta_derivative(RT1 a, RT2 b, RT3 x); // derivative of incomplete beta + + template + typename tools::promote_args::type + ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy& pol); // derivative of incomplete beta + + // erf & erfc error functions. + template // Error function. + typename tools::promote_args::type erf(RT z); + template // Error function. + typename tools::promote_args::type erf(RT z, const Policy&); + + template // Error function complement. + typename tools::promote_args::type erfc(RT z); + template // Error function complement. + typename tools::promote_args::type erfc(RT z, const Policy&); + + template // Error function inverse. + typename tools::promote_args::type erf_inv(RT z); + template // Error function inverse. + typename tools::promote_args::type erf_inv(RT z, const Policy& pol); + + template // Error function complement inverse. + typename tools::promote_args::type erfc_inv(RT z); + template // Error function complement inverse. + typename tools::promote_args::type erfc_inv(RT z, const Policy& pol); + + // Polynomials: + template + typename tools::promote_args::type + legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1); + + template + typename tools::promote_args::type + legendre_p(int l, T x); + + template + typename tools::promote_args::type + legendre_p(int l, T x, const Policy& pol); + + template + typename tools::promote_args::type + legendre_q(unsigned l, T x); + + template + typename tools::promote_args::type + legendre_q(unsigned l, T x, const Policy& pol); + + template + typename tools::promote_args::type + legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1); + + template + typename tools::promote_args::type + legendre_p(int l, int m, T x); + + template + typename tools::promote_args::type + legendre_p(int l, int m, T x, const Policy& pol); + + template + typename tools::promote_args::type + laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1); + + template + typename tools::promote_args::type + laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1); + + template + typename tools::promote_args::type + laguerre(unsigned n, T x); + + template + typename tools::promote_args::type + laguerre(unsigned n, unsigned m, T x, const Policy& pol); + + template + struct laguerre_result + { + typedef typename mpl::if_< + policies::is_policy, + typename tools::promote_args::type, + typename tools::promote_args::type + >::type type; + }; + + template + typename laguerre_result::type + laguerre(unsigned n, T1 m, T2 x); + + template + typename tools::promote_args::type + hermite(unsigned n, T x); + + template + typename tools::promote_args::type + hermite(unsigned n, T x, const Policy& pol); + + template + typename tools::promote_args::type + hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1); + + template + std::complex::type> + spherical_harmonic(unsigned n, int m, T1 theta, T2 phi); + + template + std::complex::type> + spherical_harmonic(unsigned n, int m, T1 theta, T2 phi, const Policy& pol); + + template + typename tools::promote_args::type + spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi); + + template + typename tools::promote_args::type + spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi, const Policy& pol); + + template + typename tools::promote_args::type + spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi); + + template + typename tools::promote_args::type + spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol); + + // Elliptic integrals: + template + typename tools::promote_args::type + ellint_rf(T1 x, T2 y, T3 z); + + template + typename tools::promote_args::type + ellint_rf(T1 x, T2 y, T3 z, const Policy& pol); + + template + typename tools::promote_args::type + ellint_rd(T1 x, T2 y, T3 z); + + template + typename tools::promote_args::type + ellint_rd(T1 x, T2 y, T3 z, const Policy& pol); + + template + typename tools::promote_args::type + ellint_rc(T1 x, T2 y); + + template + typename tools::promote_args::type + ellint_rc(T1 x, T2 y, const Policy& pol); + + template + typename tools::promote_args::type + ellint_rj(T1 x, T2 y, T3 z, T4 p); + + template + typename tools::promote_args::type + ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy& pol); + + template + typename tools::promote_args::type ellint_2(T k); + + template + typename tools::promote_args::type ellint_2(T1 k, T2 phi); + + template + typename tools::promote_args::type ellint_2(T1 k, T2 phi, const Policy& pol); + + template + typename tools::promote_args::type ellint_1(T k); + + template + typename tools::promote_args::type ellint_1(T1 k, T2 phi); + + template + typename tools::promote_args::type ellint_1(T1 k, T2 phi, const Policy& pol); + + namespace detail{ + + template + struct ellint_3_result + { + typedef typename mpl::if_< + policies::is_policy, + typename tools::promote_args::type, + typename tools::promote_args::type + >::type type; + }; + + } // namespace detail + + + template + typename detail::ellint_3_result::type ellint_3(T1 k, T2 v, T3 phi); + + template + typename tools::promote_args::type ellint_3(T1 k, T2 v, T3 phi, const Policy& pol); + + template + typename tools::promote_args::type ellint_3(T1 k, T2 v); + + // Factorial functions. + // Note: not for integral types, at present. + template + struct max_factorial; + template + RT factorial(unsigned int); + template + RT factorial(unsigned int, const Policy& pol); + template + RT unchecked_factorial(unsigned int BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(RT)); + template + RT double_factorial(unsigned i); + template + RT double_factorial(unsigned i, const Policy& pol); + + template + typename tools::promote_args::type falling_factorial(RT x, unsigned n); + + template + typename tools::promote_args::type falling_factorial(RT x, unsigned n, const Policy& pol); + + template + typename tools::promote_args::type rising_factorial(RT x, int n); + + template + typename tools::promote_args::type rising_factorial(RT x, int n, const Policy& pol); + + // Gamma functions. + template + typename tools::promote_args::type tgamma(RT z); + + template + typename tools::promote_args::type tgamma1pm1(RT z); + + template + typename tools::promote_args::type tgamma1pm1(RT z, const Policy& pol); + + template + typename tools::promote_args::type tgamma(RT1 a, RT2 z); + + template + typename tools::promote_args::type tgamma(RT1 a, RT2 z, const Policy& pol); + + template + typename tools::promote_args::type lgamma(RT z, int* sign); + + template + typename tools::promote_args::type lgamma(RT z, int* sign, const Policy& pol); + + template + typename tools::promote_args::type lgamma(RT x); + + template + typename tools::promote_args::type lgamma(RT x, const Policy& pol); + + template + typename tools::promote_args::type tgamma_lower(RT1 a, RT2 z); + + template + typename tools::promote_args::type tgamma_lower(RT1 a, RT2 z, const Policy&); + + template + typename tools::promote_args::type gamma_q(RT1 a, RT2 z); + + template + typename tools::promote_args::type gamma_q(RT1 a, RT2 z, const Policy&); + + template + typename tools::promote_args::type gamma_p(RT1 a, RT2 z); + + template + typename tools::promote_args::type gamma_p(RT1 a, RT2 z, const Policy&); + + template + typename tools::promote_args::type tgamma_delta_ratio(T1 z, T2 delta); + + template + typename tools::promote_args::type tgamma_delta_ratio(T1 z, T2 delta, const Policy&); + + template + typename tools::promote_args::type tgamma_ratio(T1 a, T2 b); + + template + typename tools::promote_args::type tgamma_ratio(T1 a, T2 b, const Policy&); + + template + typename tools::promote_args::type gamma_p_derivative(T1 a, T2 x); + + template + typename tools::promote_args::type gamma_p_derivative(T1 a, T2 x, const Policy&); + + // gamma inverse. + template + typename tools::promote_args::type gamma_p_inv(T1 a, T2 p); + + template + typename tools::promote_args::type gamma_p_inva(T1 a, T2 p, const Policy&); + + template + typename tools::promote_args::type gamma_p_inva(T1 a, T2 p); + + template + typename tools::promote_args::type gamma_p_inv(T1 a, T2 p, const Policy&); + + template + typename tools::promote_args::type gamma_q_inv(T1 a, T2 q); + + template + typename tools::promote_args::type gamma_q_inv(T1 a, T2 q, const Policy&); + + template + typename tools::promote_args::type gamma_q_inva(T1 a, T2 q); + + template + typename tools::promote_args::type gamma_q_inva(T1 a, T2 q, const Policy&); + + // digamma: + template + typename tools::promote_args::type digamma(T x); + + template + typename tools::promote_args::type digamma(T x, const Policy&); + + // Hypotenuse function sqrt(x ^ 2 + y ^ 2). + template + typename tools::promote_args::type + hypot(T1 x, T2 y); + + template + typename tools::promote_args::type + hypot(T1 x, T2 y, const Policy&); + + // cbrt - cube root. + template + typename tools::promote_args::type cbrt(RT z); + + template + typename tools::promote_args::type cbrt(RT z, const Policy&); + + // log1p is log(x + 1) + template + typename tools::promote_args::type log1p(T); + + template + typename tools::promote_args::type log1p(T, const Policy&); + + // log1pmx is log(x + 1) - x + template + typename tools::promote_args::type log1pmx(T); + + template + typename tools::promote_args::type log1pmx(T, const Policy&); + + // Exp (x) minus 1 functions. + template + typename tools::promote_args::type expm1(T); + + template + typename tools::promote_args::type expm1(T, const Policy&); + + // Power - 1 + template + typename tools::promote_args::type + powm1(const T1 a, const T2 z); + + template + typename tools::promote_args::type + powm1(const T1 a, const T2 z, const Policy&); + + // sqrt(1+x) - 1 + template + typename tools::promote_args::type sqrt1pm1(const T& val); + + template + typename tools::promote_args::type sqrt1pm1(const T& val, const Policy&); + + // sinus cardinals: + template + typename tools::promote_args::type sinc_pi(T x); + + template + typename tools::promote_args::type sinc_pi(T x, const Policy&); + + template + typename tools::promote_args::type sinhc_pi(T x); + + template + typename tools::promote_args::type sinhc_pi(T x, const Policy&); + + // inverse hyperbolics: + template + typename tools::promote_args::type asinh(T x); + + template + typename tools::promote_args::type asinh(T x, const Policy&); + + template + typename tools::promote_args::type acosh(T x); + + template + typename tools::promote_args::type acosh(T x, const Policy&); + + template + typename tools::promote_args::type atanh(T x); + + template + typename tools::promote_args::type atanh(T x, const Policy&); + + namespace detail{ + + typedef mpl::int_<0> bessel_no_int_tag; // No integer optimisation possible. + typedef mpl::int_<1> bessel_maybe_int_tag; // Maybe integer optimisation. + typedef mpl::int_<2> bessel_int_tag; // Definite integer optimistaion. + + template + struct bessel_traits + { + typedef typename tools::promote_args< + T1, T2 + >::type result_type; + + typedef typename policies::precision::type precision_type; + + typedef typename mpl::if_< + mpl::or_< + mpl::less_equal >, + mpl::greater > >, + bessel_no_int_tag, + typename mpl::if_< + is_integral, + bessel_int_tag, + bessel_maybe_int_tag + >::type + >::type optimisation_tag; + }; + } // detail + + // Bessel functions: + template + typename detail::bessel_traits::result_type cyl_bessel_j(T1 v, T2 x, const Policy& pol); + + template + typename detail::bessel_traits >::result_type cyl_bessel_j(T1 v, T2 x); + + template + typename detail::bessel_traits::result_type sph_bessel(unsigned v, T x, const Policy& pol); + + template + typename detail::bessel_traits >::result_type sph_bessel(unsigned v, T x); + + template + typename detail::bessel_traits::result_type cyl_bessel_i(T1 v, T2 x, const Policy& pol); + + template + typename detail::bessel_traits >::result_type cyl_bessel_i(T1 v, T2 x); + + template + typename detail::bessel_traits::result_type cyl_bessel_k(T1 v, T2 x, const Policy& pol); + + template + typename detail::bessel_traits >::result_type cyl_bessel_k(T1 v, T2 x); + + template + typename detail::bessel_traits::result_type cyl_neumann(T1 v, T2 x, const Policy& pol); + + template + typename detail::bessel_traits >::result_type cyl_neumann(T1 v, T2 x); + + template + typename detail::bessel_traits::result_type sph_neumann(unsigned v, T x, const Policy& pol); + + template + typename detail::bessel_traits >::result_type sph_neumann(unsigned v, T x); + + template + typename tools::promote_args::type sin_pi(T x, const Policy&); + + template + typename tools::promote_args::type sin_pi(T x); + + template + typename tools::promote_args::type cos_pi(T x, const Policy&); + + template + typename tools::promote_args::type cos_pi(T x); + + template + int fpclassify BOOST_NO_MACRO_EXPAND(T t); + + template + bool isfinite BOOST_NO_MACRO_EXPAND(T z); + + template + bool isinf BOOST_NO_MACRO_EXPAND(T t); + + template + bool isnan BOOST_NO_MACRO_EXPAND(T t); + + template + bool isnormal BOOST_NO_MACRO_EXPAND(T t); + + template + int signbit BOOST_NO_MACRO_EXPAND(T x); + + template + int sign BOOST_NO_MACRO_EXPAND(const T& z); + + template + T copysign BOOST_NO_MACRO_EXPAND(const T& x, const T& y); + + template + T changesign BOOST_NO_MACRO_EXPAND(const T& z); + + // Exponential integrals: + namespace detail{ + + template + struct expint_result + { + typedef typename mpl::if_< + policies::is_policy, + typename tools::promote_args::type, + typename tools::promote_args::type + >::type type; + }; + + } // namespace detail + + template + typename tools::promote_args::type expint(unsigned n, T z, const Policy&); + + template + typename detail::expint_result::type expint(T const z, U const u); + + template + typename tools::promote_args::type expint(T z); + + // Zeta: + template + typename tools::promote_args::type zeta(T s, const Policy&); + + template + typename tools::promote_args::type zeta(T s); + + // pow: + template + typename tools::promote_args::type pow(T base, const Policy& policy); + + template + typename tools::promote_args::type pow(T base); + + // next: + template + T nextafter(const T&, const T&, const Policy&); + template + T nextafter(const T&, const T&); + template + T float_next(const T&, const Policy&); + template + T float_next(const T&); + template + T float_prior(const T&, const Policy&); + template + T float_prior(const T&); + template + T float_distance(const T&, const T&, const Policy&); + template + T float_distance(const T&, const T&); + + } // namespace math +} // namespace boost + +#ifdef BOOST_HAS_LONG_LONG +#define BOOST_MATH_DETAIL_LL_FUNC(Policy)\ + \ + template \ + inline T modf(const T& v, boost::long_long_type* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\ + \ + template \ + inline boost::long_long_type lltrunc(const T& v){ using boost::math::lltrunc; return lltrunc(v, Policy()); }\ + \ + template \ + inline boost::long_long_type llround(const T& v){ using boost::math::llround; return llround(v, Policy()); }\ + +#else +#define BOOST_MATH_DETAIL_LL_FUNC(Policy) +#endif + +#define BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(Policy)\ + \ + BOOST_MATH_DETAIL_LL_FUNC(Policy)\ + \ + template \ + inline typename boost::math::tools::promote_args::type \ + beta(RT1 a, RT2 b) { return ::boost::math::beta(a, b, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + beta(RT1 a, RT2 b, A x){ return ::boost::math::beta(a, b, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + betac(RT1 a, RT2 b, RT3 x) { return ::boost::math::betac(a, b, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibeta(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta(a, b, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibetac(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibetac(a, b, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibeta_inv(T1 a, T2 b, T3 p, T4* py){ return ::boost::math::ibeta_inv(a, b, p, py, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibeta_inv(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inv(a, b, p, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibetac_inv(T1 a, T2 b, T3 q, T4* py){ return ::boost::math::ibetac_inv(a, b, q, py, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibeta_inva(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inva(a, b, p, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibetac_inva(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_inva(a, b, q, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibeta_invb(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_invb(a, b, p, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibetac_invb(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_invb(a, b, q, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibetac_inv(RT1 a, RT2 b, RT3 q){ return ::boost::math::ibetac_inv(a, b, q, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ibeta_derivative(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta_derivative(a, b, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type erf(RT z) { return ::boost::math::erf(z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type erfc(RT z){ return ::boost::math::erfc(z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type erf_inv(RT z) { return ::boost::math::erf_inv(z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type erfc_inv(RT z){ return ::boost::math::erfc_inv(z, Policy()); }\ +\ + using boost::math::legendre_next;\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + legendre_p(int l, T x){ return ::boost::math::legendre_p(l, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + legendre_q(unsigned l, T x){ return ::boost::math::legendre_q(l, x, Policy()); }\ +\ + using ::boost::math::legendre_next;\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + legendre_p(int l, int m, T x){ return ::boost::math::legendre_p(l, m, x, Policy()); }\ +\ + using ::boost::math::laguerre_next;\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + laguerre(unsigned n, T x){ return ::boost::math::laguerre(n, x, Policy()); }\ +\ + template \ + inline typename boost::math::laguerre_result::type \ + laguerre(unsigned n, T1 m, T2 x) { return ::boost::math::laguerre(n, m, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + hermite(unsigned n, T x){ return ::boost::math::hermite(n, x, Policy()); }\ +\ + using boost::math::hermite_next;\ +\ + template \ + inline std::complex::type> \ + spherical_harmonic(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic(n, m, theta, phi, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi){ return ::boost::math::spherical_harmonic_r(n, m, theta, phi, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic_i(n, m, theta, phi, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ellint_rf(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rf(x, y, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ellint_rd(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rd(x, y, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ellint_rc(T1 x, T2 y){ return ::boost::math::ellint_rc(x, y, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + ellint_rj(T1 x, T2 y, T3 z, T4 p){ return boost::math::ellint_rj(x, y, z, p, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type ellint_2(T k){ return boost::math::ellint_2(k, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type ellint_2(T1 k, T2 phi){ return boost::math::ellint_2(k, phi, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type ellint_1(T k){ return boost::math::ellint_1(k, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type ellint_1(T1 k, T2 phi){ return boost::math::ellint_1(k, phi, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type ellint_3(T1 k, T2 v, T3 phi){ return boost::math::ellint_3(k, v, phi, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type ellint_3(T1 k, T2 v){ return boost::math::ellint_3(k, v, Policy()); }\ +\ + using boost::math::max_factorial;\ + template \ + inline RT factorial(unsigned int i) { return boost::math::factorial(i, Policy()); }\ + using boost::math::unchecked_factorial;\ + template \ + inline RT double_factorial(unsigned i){ return boost::math::double_factorial(i, Policy()); }\ + template \ + inline typename boost::math::tools::promote_args::type falling_factorial(RT x, unsigned n){ return boost::math::falling_factorial(x, n, Policy()); }\ + template \ + inline typename boost::math::tools::promote_args::type rising_factorial(RT x, unsigned n){ return boost::math::rising_factorial(x, n, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type tgamma(RT z){ return boost::math::tgamma(z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type tgamma1pm1(RT z){ return boost::math::tgamma1pm1(z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type tgamma(RT1 a, RT2 z){ return boost::math::tgamma(a, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type lgamma(RT z, int* sign){ return boost::math::lgamma(z, sign, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type lgamma(RT x){ return boost::math::lgamma(x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type tgamma_lower(RT1 a, RT2 z){ return boost::math::tgamma_lower(a, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_q(RT1 a, RT2 z){ return boost::math::gamma_q(a, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_p(RT1 a, RT2 z){ return boost::math::gamma_p(a, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type tgamma_delta_ratio(T1 z, T2 delta){ return boost::math::tgamma_delta_ratio(z, delta, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type tgamma_ratio(T1 a, T2 b) { return boost::math::tgamma_ratio(a, b, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_p_derivative(T1 a, T2 x){ return boost::math::gamma_p_derivative(a, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_p_inv(T1 a, T2 p){ return boost::math::gamma_p_inv(a, p, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_p_inva(T1 a, T2 p){ return boost::math::gamma_p_inva(a, p, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_q_inv(T1 a, T2 q){ return boost::math::gamma_q_inv(a, q, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type gamma_q_inva(T1 a, T2 q){ return boost::math::gamma_q_inva(a, q, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type digamma(T x){ return boost::math::digamma(x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + hypot(T1 x, T2 y){ return boost::math::hypot(x, y, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type cbrt(RT z){ return boost::math::cbrt(z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type log1p(T x){ return boost::math::log1p(x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type log1pmx(T x){ return boost::math::log1pmx(x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type expm1(T x){ return boost::math::expm1(x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type \ + powm1(const T1 a, const T2 z){ return boost::math::powm1(a, z, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type sqrt1pm1(const T& val){ return boost::math::sqrt1pm1(val, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type sinc_pi(T x){ return boost::math::sinc_pi(x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type sinhc_pi(T x){ return boost::math::sinhc_pi(x, Policy()); }\ +\ + template\ + inline typename boost::math::tools::promote_args::type asinh(const T x){ return boost::math::asinh(x, Policy()); }\ +\ + template\ + inline typename boost::math::tools::promote_args::type acosh(const T x){ return boost::math::acosh(x, Policy()); }\ +\ + template\ + inline typename boost::math::tools::promote_args::type atanh(const T x){ return boost::math::atanh(x, Policy()); }\ +\ + template \ + inline typename boost::math::detail::bessel_traits::result_type cyl_bessel_j(T1 v, T2 x)\ + { return boost::math::cyl_bessel_j(v, x, Policy()); }\ +\ + template \ + inline typename boost::math::detail::bessel_traits::result_type sph_bessel(unsigned v, T x)\ + { return boost::math::sph_bessel(v, x, Policy()); }\ +\ + template \ + inline typename boost::math::detail::bessel_traits::result_type \ + cyl_bessel_i(T1 v, T2 x) { return boost::math::cyl_bessel_i(v, x, Policy()); }\ +\ + template \ + inline typename boost::math::detail::bessel_traits::result_type \ + cyl_bessel_k(T1 v, T2 x) { return boost::math::cyl_bessel_k(v, x, Policy()); }\ +\ + template \ + inline typename boost::math::detail::bessel_traits::result_type \ + cyl_neumann(T1 v, T2 x){ return boost::math::cyl_neumann(v, x, Policy()); }\ +\ + template \ + inline typename boost::math::detail::bessel_traits::result_type \ + sph_neumann(unsigned v, T x){ return boost::math::sph_neumann(v, x, Policy()); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type sin_pi(T x){ return boost::math::sin_pi(x); }\ +\ + template \ + inline typename boost::math::tools::promote_args::type cos_pi(T x){ return boost::math::cos_pi(x); }\ +\ + using boost::math::fpclassify;\ + using boost::math::isfinite;\ + using boost::math::isinf;\ + using boost::math::isnan;\ + using boost::math::isnormal;\ + using boost::math::signbit;\ + using boost::math::sign;\ + using boost::math::copysign;\ + using boost::math::changesign;\ + \ + template \ + inline typename boost::math::tools::promote_args::type expint(T const& z, U const& u)\ + { return boost::math::expint(z, u, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type expint(T z){ return boost::math::expint(z, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type zeta(T s){ return boost::math::zeta(s, Policy()); }\ + \ + template \ + inline T round(const T& v){ using boost::math::round; return round(v, Policy()); }\ + \ + template \ + inline int iround(const T& v){ using boost::math::iround; return iround(v, Policy()); }\ + \ + template \ + inline long lround(const T& v){ using boost::math::lround; return lround(v, Policy()); }\ + \ + template \ + inline T trunc(const T& v){ using boost::math::trunc; return trunc(v, Policy()); }\ + \ + template \ + inline int itrunc(const T& v){ using boost::math::itrunc; return itrunc(v, Policy()); }\ + \ + template \ + inline long ltrunc(const T& v){ using boost::math::ltrunc; return ltrunc(v, Policy()); }\ + \ + template \ + inline T modf(const T& v, T* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\ + \ + template \ + inline T modf(const T& v, int* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\ + \ + template \ + inline T modf(const T& v, long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type pow(T v){ return boost::math::pow(v, Policy()); }\ + \ + template T nextafter(const T& a, const T& b){ return boost::math::nextafter(a, b, Policy()); }\ + template T float_next(const T& a){ return boost::math::float_next(a, Policy()); }\ + template T float_prior(const T& a){ return boost::math::float_prior(a, Policy()); }\ + template T float_distance(const T& a, const T& b){ return boost::math::float_distance(a, b, Policy()); }\ + + +#endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP + + diff --git a/external/boost/math/special_functions/round.hpp b/external/boost/math/special_functions/round.hpp new file mode 100644 index 0000000..f11c6ae --- /dev/null +++ b/external/boost/math/special_functions/round.hpp @@ -0,0 +1,92 @@ +// Copyright John Maddock 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) + +#ifndef BOOST_MATH_ROUND_HPP +#define BOOST_MATH_ROUND_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +#include +#include +#include + +namespace boost{ namespace math{ + +template +inline T round(const T& v, const Policy& pol) +{ + BOOST_MATH_STD_USING + if(!(boost::math::isfinite)(v)) + return policies::raise_rounding_error("boost::math::round<%1%>(%1%)", 0, v, v, pol); + return v < 0 ? static_cast(ceil(v - 0.5f)) : static_cast(floor(v + 0.5f)); +} +template +inline T round(const T& v) +{ + return round(v, policies::policy<>()); +} +// +// The following functions will not compile unless T has an +// implicit convertion to the integer types. For user-defined +// number types this will likely not be the case. In that case +// these functions should either be specialized for the UDT in +// question, or else overloads should be placed in the same +// namespace as the UDT: these will then be found via argument +// dependent lookup. See our concept archetypes for examples. +// +template +inline int iround(const T& v, const Policy& pol) +{ + BOOST_MATH_STD_USING + T r = boost::math::round(v, pol); + if((r > (std::numeric_limits::max)()) || (r < (std::numeric_limits::min)())) + return static_cast(policies::raise_rounding_error("boost::math::iround<%1%>(%1%)", 0, v, 0, pol)); + return static_cast(r); +} +template +inline int iround(const T& v) +{ + return iround(v, policies::policy<>()); +} + +template +inline long lround(const T& v, const Policy& pol) +{ + BOOST_MATH_STD_USING + T r = boost::math::round(v, pol); + if((r > (std::numeric_limits::max)()) || (r < (std::numeric_limits::min)())) + return static_cast(policies::raise_rounding_error("boost::math::lround<%1%>(%1%)", 0, v, 0L, pol)); + return static_cast(r); +} +template +inline long lround(const T& v) +{ + return lround(v, policies::policy<>()); +} + +#ifdef BOOST_HAS_LONG_LONG + +template +inline boost::long_long_type llround(const T& v, const Policy& pol) +{ + BOOST_MATH_STD_USING + T r = boost::math::round(v, pol); + if((r > (std::numeric_limits::max)()) || (r < (std::numeric_limits::min)())) + return static_cast(policies::raise_rounding_error("boost::math::llround<%1%>(%1%)", 0, v, 0LL, pol)); + return static_cast(r); +} +template +inline boost::long_long_type llround(const T& v) +{ + return llround(v, policies::policy<>()); +} + +#endif + +}} // namespaces + +#endif // BOOST_MATH_ROUND_HPP diff --git a/external/boost/math/special_functions/sign.hpp b/external/boost/math/special_functions/sign.hpp new file mode 100644 index 0000000..6de88b2 --- /dev/null +++ b/external/boost/math/special_functions/sign.hpp @@ -0,0 +1,145 @@ +// (C) Copyright John Maddock 2006. +// (C) Copyright Johan Rade 2006. +// (C) Copyright Paul A. Bristow 2011 (added changesign). + +// Use, modification and distribution are subject to the +// Boost Software 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_TOOLS_SIGN_HPP +#define BOOST_MATH_TOOLS_SIGN_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +#include +#include +#include + +namespace boost{ namespace math{ + +namespace detail { + + // signbit + +#ifdef BOOST_MATH_USE_STD_FPCLASSIFY + template + inline int signbit_impl(T x, native_tag const&) + { + return (std::signbit)(x); + } +#endif + + template + inline int signbit_impl(T x, generic_tag const&) + { + return x < 0; + } + + template + inline int signbit_impl(T x, generic_tag const&) + { + return x < 0; + } + + template + inline int signbit_impl(T x, ieee_copy_all_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + return a & traits::sign ? 1 : 0; + } + + template + inline int signbit_impl(T x, ieee_copy_leading_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + + return a & traits::sign ? 1 : 0; + } + + // Changesign + + template + inline T (changesign_impl)(T x, generic_tag const&) + { + return -x; + } + + template + inline T (changesign_impl)(T x, generic_tag const&) + { + return -x; + } + + + template + inline T changesign_impl(T x, ieee_copy_all_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::sign_change_type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a ^= traits::sign; + traits::set_bits(x,a); + return x; + } + + template + inline T (changesign_impl)(T x, ieee_copy_leading_bits_tag const&) + { + typedef BOOST_DEDUCED_TYPENAME fp_traits::sign_change_type traits; + + BOOST_DEDUCED_TYPENAME traits::bits a; + traits::get_bits(x,a); + a ^= traits::sign; + traits::set_bits(x,a); + return x; + } + + +} // namespace detail + +template int (signbit)(T x) +{ + typedef typename detail::fp_traits::type traits; + typedef typename traits::method method; + typedef typename boost::is_floating_point::type fp_tag; + return detail::signbit_impl(x, method()); +} + +template +inline int sign BOOST_NO_MACRO_EXPAND(const T& z) +{ + return (z == 0) ? 0 : (boost::math::signbit)(z) ? -1 : 1; +} + +template T (changesign)(const T& x) +{ //!< \brief return unchanged binary pattern of x, except for change of sign bit. + typedef typename detail::fp_traits::sign_change_type traits; + typedef typename traits::method method; + typedef typename boost::is_floating_point::type fp_tag; + + return detail::changesign_impl(x, method()); +} + +template +inline T copysign BOOST_NO_MACRO_EXPAND(const T& x, const T& y) +{ + BOOST_MATH_STD_USING + return (boost::math::signbit)(x) != (boost::math::signbit)(y) ? (boost::math::changesign)(x) : x; +} + +} // namespace math +} // namespace boost + + +#endif // BOOST_MATH_TOOLS_SIGN_HPP + + diff --git a/external/boost/math/tools/config.hpp b/external/boost/math/tools/config.hpp new file mode 100644 index 0000000..96f5d81 --- /dev/null +++ b/external/boost/math/tools/config.hpp @@ -0,0 +1,321 @@ +// Copyright (c) 2006-7 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_MATH_TOOLS_CONFIG_HPP +#define BOOST_MATH_TOOLS_CONFIG_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +#include +#include // for boost::uintmax_t +#include +#include // for min and max +#include +#include +#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) +# include +#endif + +#include +#include + +#if (defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) \ + || (defined(__hppa) && !defined(__OpenBSD__)) || defined(__NO_LONG_DOUBLE_MATH)) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS) +# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +#endif +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582)) +// +// Borland post 5.8.2 uses Dinkumware's std C lib which +// doesn't have true long double precision. Earlier +// versions are problematic too: +// +# define BOOST_MATH_NO_REAL_CONCEPT_TESTS +# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +# define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM) +# include +#endif +#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106)) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS) +// +// Darwin's rather strange "double double" is rather hard to +// support, it should be possible given enough effort though... +// +# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +#endif +#if defined(unix) && defined(__INTEL_COMPILER) && (__INTEL_COMPILER <= 1000) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS) +// +// Intel compiler prior to version 10 has sporadic problems +// calling the long double overloads of the std lib math functions: +// calling ::powl is OK, but std::pow(long double, long double) +// may segfault depending upon the value of the arguments passed +// and the specific Linux distribution. +// +// We'll be conservative and disable long double support for this compiler. +// +// Comment out this #define and try building the tests to determine whether +// your Intel compiler version has this issue or not. +// +# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +#endif +#if defined(unix) && defined(__INTEL_COMPILER) +// +// Intel compiler has sporadic issues compiling std::fpclassify depending on +// the exact OS version used. Use our own code for this as we know it works +// well on Intel processors: +// +#define BOOST_MATH_DISABLE_STD_FPCLASSIFY +#endif + +#if defined(BOOST_MSVC) && !defined(_WIN32_WCE) + // Better safe than sorry, our tests don't support hardware exceptions: +# define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM) +#endif + +#ifdef __IBMCPP__ +# define BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS +#endif + +#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)) +# define BOOST_MATH_USE_C99 +#endif + +#if (defined(__hpux) && !defined(__hppa)) +# define BOOST_MATH_USE_C99 +#endif + +#if defined(__GNUC__) && defined(_GLIBCXX_USE_C99) +# define BOOST_MATH_USE_C99 +#endif + +#if defined(__CYGWIN__) || defined(__HP_aCC) || defined(BOOST_INTEL) \ + || defined(BOOST_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) \ + || (defined(__GNUC__) && !defined(BOOST_MATH_USE_C99)) +# define BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY +#endif + +#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) + +# include "boost/type.hpp" +# include "boost/non_type.hpp" + +# define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t) boost::type* = 0 +# define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type* +# define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type* = 0 +# define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type* + +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \ + , BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \ + , BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \ + , BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \ + , BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +#else + +// no workaround needed: expand to nothing + +# define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + + +#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + +#if (defined(__SUNPRO_CC) || defined(__hppa) || defined(__GNUC__)) && !defined(BOOST_MATH_SMALL_CONSTANT) +// Sun's compiler emits a hard error if a constant underflows, +// as does aCC on PA-RISC, while gcc issues a large number of warnings: +# define BOOST_MATH_SMALL_CONSTANT(x) 0 +#else +# define BOOST_MATH_SMALL_CONSTANT(x) x +#endif + + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) +// +// Define if constants too large for a float cause "bad" +// values to be stored in the data, rather than infinity +// or a suitably large value. +// +# define BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS +#endif +// +// Tune performance options for specific compilers: +// +#ifdef BOOST_MSVC +# define BOOST_MATH_POLY_METHOD 2 +#elif defined(BOOST_INTEL) +# define BOOST_MATH_POLY_METHOD 2 +# define BOOST_MATH_RATIONAL_METHOD 2 +#elif defined(__GNUC__) +# define BOOST_MATH_POLY_METHOD 3 +# define BOOST_MATH_RATIONAL_METHOD 3 +# define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT +# define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L +#endif + +#if defined(BOOST_NO_LONG_LONG) && !defined(BOOST_MATH_INT_TABLE_TYPE) +# define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT +# define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L +#endif + +// +// The maximum order of polynomial that will be evaluated +// via an unrolled specialisation: +// +#ifndef BOOST_MATH_MAX_POLY_ORDER +# define BOOST_MATH_MAX_POLY_ORDER 17 +#endif +// +// Set the method used to evaluate polynomials and rationals: +// +#ifndef BOOST_MATH_POLY_METHOD +# define BOOST_MATH_POLY_METHOD 1 +#endif +#ifndef BOOST_MATH_RATIONAL_METHOD +# define BOOST_MATH_RATIONAL_METHOD 0 +#endif +// +// decide whether to store constants as integers or reals: +// +#ifndef BOOST_MATH_INT_TABLE_TYPE +# define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT +#endif +#ifndef BOOST_MATH_INT_VALUE_SUFFIX +# define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##SUF +#endif + +// +// Helper macro for controlling the FP behaviour: +// +#ifndef BOOST_MATH_CONTROL_FP +# define BOOST_MATH_CONTROL_FP +#endif +// +// Helper macro for using statements: +// +#define BOOST_MATH_STD_USING \ + using std::abs;\ + using std::acos;\ + using std::cos;\ + using std::fmod;\ + using std::modf;\ + using std::tan;\ + using std::asin;\ + using std::cosh;\ + using std::frexp;\ + using std::pow;\ + using std::tanh;\ + using std::atan;\ + using std::exp;\ + using std::ldexp;\ + using std::sin;\ + using std::atan2;\ + using std::fabs;\ + using std::log;\ + using std::sinh;\ + using std::ceil;\ + using std::floor;\ + using std::log10;\ + using std::sqrt;\ + using boost::math::round;\ + using boost::math::iround;\ + using boost::math::lround;\ + using boost::math::trunc;\ + using boost::math::itrunc;\ + using boost::math::ltrunc;\ + using boost::math::modf; + + +namespace boost{ namespace math{ +namespace tools +{ + +template +inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c) +{ + return (std::max)((std::max)(a, b), c); +} + +template +inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d) +{ + return (std::max)((std::max)(a, b), (std::max)(c, d)); +} + +} // namespace tools + +template +void suppress_unused_variable_warning(const T&) +{ +} + +}} // namespace boost namespace math + +#if ((defined(__linux__) && !defined(__UCLIBC__)) || defined(__QNX__) || defined(__IBMCPP__)) && !defined(BOOST_NO_FENV_H) + + #include + +# ifdef FE_ALL_EXCEPT + +namespace boost{ namespace math{ + namespace detail + { + struct fpu_guard + { + fpu_guard() + { + fegetexceptflag(&m_flags, FE_ALL_EXCEPT); + feclearexcept(FE_ALL_EXCEPT); + } + ~fpu_guard() + { + fesetexceptflag(&m_flags, FE_ALL_EXCEPT); + } + private: + fexcept_t m_flags; + }; + + } // namespace detail + }} // namespaces + +# define BOOST_FPU_EXCEPTION_GUARD boost::math::detail::fpu_guard local_guard_object; +# define BOOST_MATH_INSTRUMENT_FPU do{ fexcept_t cpu_flags; fegetexceptflag(&cpu_flags, FE_ALL_EXCEPT); BOOST_MATH_INSTRUMENT_VARIABLE(cpu_flags); } while(0); + +# else + +# define BOOST_FPU_EXCEPTION_GUARD +# define BOOST_MATH_INSTRUMENT_FPU + +# endif + +#else // All other platforms. +# define BOOST_FPU_EXCEPTION_GUARD +# define BOOST_MATH_INSTRUMENT_FPU +#endif + +#ifdef BOOST_MATH_INSTRUMENT +#define BOOST_MATH_INSTRUMENT_CODE(x) \ + std::cout << std::setprecision(35) << __FILE__ << ":" << __LINE__ << " " << x << std::endl; +#define BOOST_MATH_INSTRUMENT_VARIABLE(name) BOOST_MATH_INSTRUMENT_CODE(BOOST_STRINGIZE(name) << " = " << name) +#else +#define BOOST_MATH_INSTRUMENT_CODE(x) +#define BOOST_MATH_INSTRUMENT_VARIABLE(name) +#endif + +#endif // BOOST_MATH_TOOLS_CONFIG_HPP + + + + + diff --git a/external/boost/math/tools/precision.hpp b/external/boost/math/tools/precision.hpp new file mode 100644 index 0000000..73c969a --- /dev/null +++ b/external/boost/math/tools/precision.hpp @@ -0,0 +1,337 @@ +// Copyright John Maddock 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) + +#ifndef BOOST_MATH_TOOLS_PRECISION_INCLUDED +#define BOOST_MATH_TOOLS_PRECISION_INCLUDED + +#ifdef _MSC_VER +#pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +// These two are for LDBL_MAN_DIG: +#include +#include + +namespace boost{ namespace math +{ +namespace tools +{ +// If T is not specialized, the functions digits, max_value and min_value, +// all get synthesised automatically from std::numeric_limits. +// However, if numeric_limits is not specialised for type RealType, +// for example with NTL::RR type, then you will get a compiler error +// when code tries to use these functions, unless you explicitly specialise them. + +// For example if the precision of RealType varies at runtime, +// then numeric_limits support may not be appropriate, +// see boost/math/tools/ntl.hpp for examples like +// template <> NTL::RR max_value ... +// See Conceptual Requirements for Real Number Types. + +template +inline int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); + BOOST_STATIC_ASSERT( ::std::numeric_limits::radix == 2 || ::std::numeric_limits::radix == 10); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); + BOOST_ASSERT(::std::numeric_limits::radix == 2 || ::std::numeric_limits::radix == 10); +#endif + return std::numeric_limits::radix == 2 + ? std::numeric_limits::digits + : ((std::numeric_limits::digits + 1) * 1000L) / 301L; +} + +template +inline T max_value(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); +#endif + return (std::numeric_limits::max)(); +} // Also used as a finite 'infinite' value for - and +infinity, for example: +// -max_value = -1.79769e+308, max_value = 1.79769e+308. + +template +inline T min_value(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); +#endif + return (std::numeric_limits::min)(); +} + +namespace detail{ +// +// Logarithmic limits come next, note that although +// we can compute these from the log of the max value +// that is not in general thread safe (if we cache the value) +// so it's better to specialise these: +// +// For type float first: +// +template +inline T log_max_value(const mpl::int_<128>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return 88.0f; +} + +template +inline T log_min_value(const mpl::int_<128>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return -87.0f; +} +// +// Now double: +// +template +inline T log_max_value(const mpl::int_<1024>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return 709.0; +} + +template +inline T log_min_value(const mpl::int_<1024>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return -708.0; +} +// +// 80 and 128-bit long doubles: +// +template +inline T log_max_value(const mpl::int_<16384>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return 11356.0L; +} + +template +inline T log_min_value(const mpl::int_<16384>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return -11355.0L; +} + +template +inline T log_max_value(const mpl::int_<0>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); +#endif + BOOST_MATH_STD_USING + static const T val = log((std::numeric_limits::max)()); + return val; +} + +template +inline T log_min_value(const mpl::int_<0>& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); +#endif + BOOST_MATH_STD_USING + static const T val = log((std::numeric_limits::min)()); + return val; +} + +template +inline T epsilon(const mpl::true_& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + return std::numeric_limits::epsilon(); +} + +#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106)) +template <> +inline long double epsilon(const mpl::true_& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(long double)) +{ + // numeric_limits on Darwin tells lies here. + // This static assert fails for some unknown reason, so + // disabled for now... + // BOOST_STATIC_ASSERT(std::numeric_limits::digits == 106); + return 2.4651903288156618919116517665087e-32L; +} +#endif + +template +inline T epsilon(const mpl::false_& BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) +{ + BOOST_MATH_STD_USING // for ADL of std names + static const T eps = ldexp(static_cast(1), 1-policies::digits >()); + return eps; +} + +} // namespace detail + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4309) +#endif + +template +inline T log_max_value(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + typedef typename mpl::if_c< + (std::numeric_limits::radix == 2) && + (std::numeric_limits::max_exponent == 128 + || std::numeric_limits::max_exponent == 1024 + || std::numeric_limits::max_exponent == 16384), + mpl::int_::max_exponent>, + mpl::int_<0> + >::type tag_type; + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); + return detail::log_max_value(tag_type()); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); + BOOST_MATH_STD_USING + static const T val = log((std::numeric_limits::max)()); + return val; +#endif +} + +template +inline T log_min_value(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + typedef typename mpl::if_c< + (std::numeric_limits::radix == 2) && + (std::numeric_limits::max_exponent == 128 + || std::numeric_limits::max_exponent == 1024 + || std::numeric_limits::max_exponent == 16384), + mpl::int_::max_exponent>, + mpl::int_<0> + >::type tag_type; + + BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized); + return detail::log_min_value(tag_type()); +#else + BOOST_ASSERT(::std::numeric_limits::is_specialized); + BOOST_MATH_STD_USING + static const T val = log((std::numeric_limits::min)()); + return val; +#endif +} + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +inline T epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(T)) +{ +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + return detail::epsilon(mpl::bool_< ::std::numeric_limits::is_specialized>()); +#else + return ::std::numeric_limits::is_specialized ? + detail::epsilon(mpl::true_()) : + detail::epsilon(mpl::false_()); +#endif +} + +namespace detail{ + +template +inline T root_epsilon_imp(const mpl::int_<24>&) +{ + return static_cast(0.00034526698300124390839884978618400831996329879769945L); +} + +template +inline T root_epsilon_imp(const T*, const mpl::int_<53>&) +{ + return static_cast(0.1490116119384765625e-7L); +} + +template +inline T root_epsilon_imp(const T*, const mpl::int_<64>&) +{ + return static_cast(0.32927225399135962333569506281281311031656150598474e-9L); +} + +template +inline T root_epsilon_imp(const T*, const mpl::int_<113>&) +{ + return static_cast(0.1387778780781445675529539585113525390625e-16L); +} + +template +inline T root_epsilon_imp(const T*, const Tag&) +{ + BOOST_MATH_STD_USING + static const T r_eps = sqrt(tools::epsilon()); + return r_eps; +} + +template +inline T forth_root_epsilon_imp(const T*, const mpl::int_<24>&) +{ + return static_cast(0.018581361171917516667460937040007436176452688944747L); +} + +template +inline T forth_root_epsilon_imp(const T*, const mpl::int_<53>&) +{ + return static_cast(0.0001220703125L); +} + +template +inline T forth_root_epsilon_imp(const T*, const mpl::int_<64>&) +{ + return static_cast(0.18145860519450699870567321328132261891067079047605e-4L); +} + +template +inline T forth_root_epsilon_imp(const T*, const mpl::int_<113>&) +{ + return static_cast(0.37252902984619140625e-8L); +} + +template +inline T forth_root_epsilon_imp(const T*, const Tag&) +{ + BOOST_MATH_STD_USING + static const T r_eps = sqrt(sqrt(tools::epsilon())); + return r_eps; +} + +} + +template +inline T root_epsilon() +{ + typedef mpl::int_< (::std::numeric_limits::radix == 2) ? std::numeric_limits::digits : 0> tag_type; + return detail::root_epsilon_imp(static_cast(0), tag_type()); +} + +template +inline T forth_root_epsilon() +{ + typedef mpl::int_< (::std::numeric_limits::radix == 2) ? std::numeric_limits::digits : 0> tag_type; + return detail::forth_root_epsilon_imp(static_cast(0), tag_type()); +} + +} // namespace tools +} // namespace math +} // namespace boost + +#endif // BOOST_MATH_TOOLS_PRECISION_INCLUDED + diff --git a/external/boost/math/tools/promotion.hpp b/external/boost/math/tools/promotion.hpp new file mode 100644 index 0000000..728aaf1 --- /dev/null +++ b/external/boost/math/tools/promotion.hpp @@ -0,0 +1,150 @@ +// boost\math\tools\promotion.hpp + +// Copyright John Maddock 2006. +// Copyright Paul A. Bristow 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) + +// Promote arguments functions to allow math functions to have arguments +// provided as integer OR real (floating-point, built-in or UDT) +// (called ArithmeticType in functions that use promotion) +// that help to reduce the risk of creating multiple instantiations. +// Allows creation of an inline wrapper that forwards to a foo(RT, RT) function, +// so you never get to instantiate any mixed foo(RT, IT) functions. + +#ifndef BOOST_MATH_PROMOTION_HPP +#define BOOST_MATH_PROMOTION_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +// Boost type traits: +#include +#include // for boost::is_floating_point; +#include // for boost::is_integral +#include // for boost::is_convertible +#include // for boost::is_same +#include // for boost::remove_cv +// Boost Template meta programming: +#include // for boost::mpl::if_c. +#include // for boost::mpl::if_c. +#include // for boost::mpl::if_c. +#include // for boost::mpl::if_c. + +#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +#include +#endif + +namespace boost +{ + namespace math + { + namespace tools + { + // If either T1 or T2 is an integer type, + // pretend it was a double (for the purposes of further analysis). + // Then pick the wider of the two floating-point types + // as the actual signature to forward to. + // For example: + // foo(int, short) -> double foo(double, double); + // foo(int, float) -> double foo(double, double); + // Note: NOT float foo(float, float) + // foo(int, double) -> foo(double, double); + // foo(double, float) -> double foo(double, double); + // foo(double, float) -> double foo(double, double); + // foo(any-int-or-float-type, long double) -> foo(long double, long double); + // but ONLY float foo(float, float) is unchanged. + // So the only way to get an entirely float version is to call foo(1.F, 2.F), + // But since most (all?) the math functions convert to double internally, + // probably there would not be the hoped-for gain by using float here. + + // This follows the C-compatible conversion rules of pow, etc + // where pow(int, float) is converted to pow(double, double). + + template + struct promote_arg + { // If T is integral type, then promote to double. + typedef typename mpl::if_, double, T>::type type; + }; + // These full specialisations reduce mpl::if_ usage and speed up + // compilation: + template <> struct promote_arg { typedef float type; }; + template <> struct promote_arg{ typedef double type; }; + template <> struct promote_arg { typedef long double type; }; + template <> struct promote_arg { typedef double type; }; + + template + struct promote_args_2 + { // Promote, if necessary, & pick the wider of the two floating-point types. + // for both parameter types, if integral promote to double. + typedef typename promote_arg::type T1P; // T1 perhaps promoted. + typedef typename promote_arg::type T2P; // T2 perhaps promoted. + + typedef typename mpl::if_< + typename mpl::and_, is_floating_point >::type, // both T1P and T2P are floating-point? + typename mpl::if_< typename mpl::or_, is_same >::type, // either long double? + long double, // then result type is long double. + typename mpl::if_< typename mpl::or_, is_same >::type, // either double? + double, // result type is double. + float // else result type is float. + >::type + >::type, + // else one or the other is a user-defined type: + typename mpl::if_< typename mpl::and_ >, ::boost::is_convertible >, T2P, T1P>::type>::type type; + }; // promote_arg2 + // These full specialisations reduce mpl::if_ usage and speed up + // compilation: + template <> struct promote_args_2 { typedef float type; }; + template <> struct promote_args_2{ typedef double type; }; + template <> struct promote_args_2 { typedef long double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef long double type; }; + template <> struct promote_args_2 { typedef long double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef double type; }; + template <> struct promote_args_2 { typedef long double type; }; + template <> struct promote_args_2 { typedef long double type; }; + template <> struct promote_args_2 { typedef long double type; }; + template <> struct promote_args_2 { typedef long double type; }; + + template + struct promote_args + { + typedef typename promote_args_2< + typename remove_cv::type, + typename promote_args_2< + typename remove_cv::type, + typename promote_args_2< + typename remove_cv::type, + typename promote_args_2< + typename remove_cv::type, + typename promote_args_2< + typename remove_cv::type, typename remove_cv::type + >::type + >::type + >::type + >::type + >::type type; + +#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS + // + // Guard against use of long double if it's not supported: + // + BOOST_STATIC_ASSERT((0 == ::boost::is_same::value)); +#endif + }; + + } // namespace tools + } // namespace math +} // namespace boost + +#endif // BOOST_MATH_PROMOTION_HPP + diff --git a/external/boost/math/tools/real_cast.hpp b/external/boost/math/tools/real_cast.hpp new file mode 100644 index 0000000..9b854e3 --- /dev/null +++ b/external/boost/math/tools/real_cast.hpp @@ -0,0 +1,29 @@ +// 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) + +#ifndef BOOST_MATH_TOOLS_REAL_CAST_HPP +#define BOOST_MATH_TOOLS_REAL_CAST_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +namespace boost{ namespace math +{ + namespace tools + { + template + inline To real_cast(T t) + { + return static_cast(t); + } + } // namespace tools +} // namespace math +} // namespace boost + +#endif // BOOST_MATH_TOOLS_REAL_CAST_HPP + + + diff --git a/external/boost/math/tools/user.hpp b/external/boost/math/tools/user.hpp new file mode 100644 index 0000000..c1bdaf7 --- /dev/null +++ b/external/boost/math/tools/user.hpp @@ -0,0 +1,97 @@ +// Copyright John Maddock 2007. +// Copyright Paul A. Bristow 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) + +#ifndef BOOST_MATH_TOOLS_USER_HPP +#define BOOST_MATH_TOOLS_USER_HPP + +#ifdef _MSC_VER +#pragma once +#endif + +// This file can be modified by the user to change the default policies. +// See "Changing the Policy Defaults" in documentation. + +// define this if the platform has no long double functions, +// or if the long double versions have only double precision: +// +// #define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +// +// Performance tuning options: +// +// #define BOOST_MATH_POLY_METHOD 3 +// #define BOOST_MATH_RATIONAL_METHOD 3 +// +// The maximum order of polynomial that will be evaluated +// via an unrolled specialisation: +// +// #define BOOST_MATH_MAX_POLY_ORDER 17 +// +// decide whether to store constants as integers or reals: +// +// #define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT + +// +// Default policies follow: +// +// Domain errors: +// +// #define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error +// +// Pole errors: +// +// #define BOOST_MATH_POLE_ERROR_POLICY throw_on_error +// +// Overflow Errors: +// +// #define BOOST_MATH_OVERFLOW_ERROR_POLICY throw_on_error +// +// Internal Evaluation Errors: +// +// #define BOOST_MATH_EVALUATION_ERROR_POLICY throw_on_error +// +// Underfow: +// +// #define BOOST_MATH_UNDERFLOW_ERROR_POLICY ignore_error +// +// Denorms: +// +// #define BOOST_MATH_DENORM_ERROR_POLICY ignore_error +// +// Max digits to use for internal calculations: +// +// #define BOOST_MATH_DIGITS10_POLICY 0 +// +// Promote floats to doubles internally? +// +// #define BOOST_MATH_PROMOTE_FLOAT_POLICY true +// +// Promote doubles to long double internally: +// +// #define BOOST_MATH_PROMOTE_DOUBLE_POLICY true +// +// What do discrete quantiles return? +// +// #define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_round_outwards +// +// If a function is mathematically undefined +// (for example the Cauchy distribution has no mean), +// then do we stop the code from compiling? +// +// #define BOOST_MATH_ASSERT_UNDEFINED_POLICY true +// +// Maximum series iterstions permitted: +// +// #define BOOST_MATH_MAX_SERIES_ITERATION_POLICY 1000000 +// +// Maximum root finding steps permitted: +// +// define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200 + +#endif // BOOST_MATH_TOOLS_USER_HPP + + diff --git a/external/boost/mem_fn.hpp b/external/boost/mem_fn.hpp new file mode 100644 index 0000000..3bcd2c5 --- /dev/null +++ b/external/boost/mem_fn.hpp @@ -0,0 +1,24 @@ +#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) 2009 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 + +#endif // #ifndef BOOST_MEM_FN_HPP_INCLUDED diff --git a/external/boost/memory_order.hpp b/external/boost/memory_order.hpp new file mode 100644 index 0000000..4945af6 --- /dev/null +++ b/external/boost/memory_order.hpp @@ -0,0 +1,53 @@ +#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED +#define BOOST_MEMORY_ORDER_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// boost/memory_order.hpp +// +// Defines enum boost::memory_order per the C++0x working draft +// +// Copyright (c) 2008, 2009 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) + + +namespace boost +{ + +// +// Enum values are chosen so that code that needs to insert +// a trailing fence for acquire semantics can use a single +// test such as: +// +// if( mo & memory_order_acquire ) { ...fence... } +// +// For leading fences one can use: +// +// if( mo & memory_order_release ) { ...fence... } +// +// Architectures such as Alpha that need a fence on consume +// can use: +// +// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... } +// + +enum memory_order +{ + memory_order_relaxed = 0, + memory_order_acquire = 1, + memory_order_release = 2, + memory_order_acq_rel = 3, // acquire | release + memory_order_seq_cst = 7, // acq_rel | 4 + memory_order_consume = 8 +}; + +} // namespace boost + +#endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED diff --git a/external/boost/move/move.hpp b/external/boost/move/move.hpp new file mode 100644 index 0000000..1f89d03 --- /dev/null +++ b/external/boost/move/move.hpp @@ -0,0 +1,1222 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright David Abrahams, Vicente Botet 2009. +// (C) Copyright Ion Gaztanaga 2009-2010. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +//! \file + +#ifndef BOOST_MOVE_MOVE_HPP +#define BOOST_MOVE_MOVE_HPP + +#if !defined(BOOST_MOVE_DOXYGEN_INVOKED) + +/// @cond + +#include + +#ifdef BOOST_MSVC + #ifndef _CRT_SECURE_NO_DEPRECATE + #define BOOST_INTERPROCESS_CRT_SECURE_NO_DEPRECATE + #define _CRT_SECURE_NO_DEPRECATE + #endif + #ifndef _SCL_SECURE_NO_WARNINGS + #define BOOST_INTERPROCESS_SCL_SECURE_NO_WARNINGS + #define _SCL_SECURE_NO_WARNINGS + #endif + #pragma warning (push) + #pragma warning(disable:4996) +#endif + +#include //copy, copy_backward +#include //uninitialized_copy +#include //std::iterator + +#define BOOST_MOVE_AVOID_BOOST_DEPENDENCIES + +//If boost dependencies are avoided include all machinery +#if !defined(BOOST_MOVE_AVOID_BOOST_DEPENDENCIES) + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #define BOOST_MOVE_MPL_NS ::boost::mpl + #define BOOST_MOVE_BOOST_NS ::boost +#else + #define BOOST_MOVE_MPL_NS ::boost::move_detail + #define BOOST_MOVE_BOOST_NS ::boost::move_detail +#endif //#ifdef BOOST_MOVE_AVOID_BOOST_DEPENDENCIES + +//Small meta-typetraits to support move +#ifdef BOOST_MOVE_AVOID_BOOST_DEPENDENCIES + + namespace boost { + namespace move_detail { + + //if_ + template + struct if_c + { + typedef T1 type; + }; + + template + struct if_c + { + typedef T2 type; + }; + + template + struct if_ + { + typedef typename if_c<0 != T1::value, T2, T3>::type type; + }; + + //enable_if_ + template + struct enable_if_c + { + typedef T type; + }; + + template + struct enable_if_c {}; + + template + struct enable_if : public enable_if_c {}; + + template + struct disable_if : public enable_if_c {}; + + //integral_constant + template + struct integral_constant + { + static const T value = v; + typedef T value_type; + typedef integral_constant type; + }; + + //identity + template + struct identity + { + typedef T type; + }; + + //is_convertible + template + class is_convertible + { + typedef char true_t; + class false_t { char dummy[2]; }; + static true_t dispatch(U); + static false_t dispatch(...); + static T &trigger(); + public: + enum { value = sizeof(dispatch(trigger())) == sizeof(true_t) }; + }; + + //and_ not_ + template > + struct and_ + : public integral_constant + {}; + + template + struct not_ + : public integral_constant + {}; + + //is_lvalue_reference + template + struct is_lvalue_reference + : public integral_constant + {}; + + template + struct is_lvalue_reference + : public integral_constant + {}; + + //has_trivial_destructor + template + struct has_trivial_destructor + : public integral_constant + {}; + + //addressof + template struct addr_impl_ref + { + T & v_; + inline addr_impl_ref( T & v ): v_( v ) {} + inline operator T& () const { return v_; } + + private: + addr_impl_ref & operator=(const addr_impl_ref &); + }; + + template struct addressof_impl + { + static inline T * f( T & v, long ) + { + return reinterpret_cast( + &const_cast(reinterpret_cast(v))); + } + + static inline T * f( T * v, int ) + { return v; } + }; + + template + inline T * addressof( T & v ) + { + return ::boost::move_detail::addressof_impl::f + ( ::boost::move_detail::addr_impl_ref( v ), 0 ); + } + + } //namespace move_detail { + } //namespace boost { + +#endif //BOOST_MOVE_AVOID_BOOST_DEPENDENCIES + +//Compiler workaround detection +#if !defined(BOOST_NO_RVALUE_REFERENCES) + + #if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) && !defined(__clang__) + //Pre-standard rvalue binding rules + #define BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES + #elif defined(_MSC_VER) && (_MSC_VER == 1600) + //Standard rvalue binding rules but with some bugs + #define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG + //Use standard library for MSVC to avoid namespace issues as + //some move calls in the STL are not fully qualified. + //#define BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE + #endif + +#endif + +/// @endcond + +#endif //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED) + +#if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + + //Move emulation rv breaks standard aliasing rules so add workarounds for some compilers + #ifdef __GNUC__ + #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__)) + #else + #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS + #endif + + namespace boost { + + namespace move_detail { + template + struct is_class_or_union + { + struct twochar { char _[2]; }; + template + static char is_class_or_union_tester(void(U::*)(void)); + template + static twochar is_class_or_union_tester(...); + static const bool value = sizeof(is_class_or_union_tester(0)) == sizeof(char); + }; + struct empty{}; + } + + ////////////////////////////////////////////////////////////////////////////// + // + // struct rv + // + ////////////////////////////////////////////////////////////////////////////// + template + class rv + : public BOOST_MOVE_MPL_NS::if_c + < ::boost::move_detail::is_class_or_union::value + , T + , ::boost::move_detail::empty + >::type + { + rv(); + ~rv(); + rv(rv const&); + void operator=(rv const&); + } BOOST_MOVE_ATTRIBUTE_MAY_ALIAS; + + + + ////////////////////////////////////////////////////////////////////////////// + // + // move_detail::is_rv + // + ////////////////////////////////////////////////////////////////////////////// + + namespace move_detail { + + template + struct is_rv + : BOOST_MOVE_BOOST_NS::integral_constant + {}; + + template + struct is_rv< rv > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; + + template + struct is_rv< const rv > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; + + } //namespace move_detail { + + ////////////////////////////////////////////////////////////////////////////// + // + // has_move_emulation_enabled + // + ////////////////////////////////////////////////////////////////////////////// + template + struct has_move_emulation_enabled + : BOOST_MOVE_BOOST_NS::is_convertible< T, ::boost::rv& > + {}; + + template + struct has_move_emulation_enabled + : BOOST_MOVE_BOOST_NS::integral_constant + {}; + + template + struct has_move_emulation_enabled< ::boost::rv > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; + + template + struct has_move_emulation_enabled_aux + : has_move_emulation_enabled {}; + + template + struct has_nothrow_move + : public BOOST_MOVE_BOOST_NS::integral_constant + {}; + + ////////////////////////////////////////////////////////////////////////////// + // + // move() + // + ////////////////////////////////////////////////////////////////////////////// + + template + inline typename BOOST_MOVE_BOOST_NS::disable_if, T&>::type move(T& x) + { + return x; + } + + template + inline typename BOOST_MOVE_BOOST_NS::enable_if, rv&>::type move(T& x) + { + return *static_cast* >(BOOST_MOVE_BOOST_NS::addressof(x)); + } + + template + inline typename BOOST_MOVE_BOOST_NS::enable_if, rv&>::type move(rv& x) + { + return x; + } + + #define BOOST_RV_REF(TYPE)\ + ::boost::rv< TYPE >& \ + // + + #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ + ::boost::rv< TYPE >& \ + // + + #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ + ::boost::rv< TYPE >& \ + // + + + #define BOOST_FWD_REF(TYPE)\ + const TYPE & \ + // + + #define BOOST_CATCH_CONST_RLVALUE(TYPE)\ + const ::boost::rv< TYPE >& \ + // + + #define BOOST_COPY_ASSIGN_REF(TYPE)\ + const ::boost::rv< TYPE >& \ + // + + #define BOOST_MOVE_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ + const ::boost::rv< TYPE >& \ + // + + #define BOOST_MOVE_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ + const ::boost::rv< TYPE >& \ + // + + ////////////////////////////////////////////////////////////////////////////// + // + // forward() + // + ////////////////////////////////////////////////////////////////////////////// + + template + inline typename BOOST_MOVE_BOOST_NS::enable_if< ::boost::move_detail::is_rv, T &>::type + forward(const typename BOOST_MOVE_MPL_NS::identity::type &x) + { + return const_cast(x); + } + + template + inline typename BOOST_MOVE_BOOST_NS::disable_if< ::boost::move_detail::is_rv, const T &>::type + forward(const typename BOOST_MOVE_MPL_NS::identity::type &x) + { + return x; + } + + ////////////////////////////////////////////////////////////////////////////// + // + // BOOST_MOVABLE_BUT_NOT_COPYABLE + // + ////////////////////////////////////////////////////////////////////////////// + #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\ + private:\ + TYPE(TYPE &);\ + TYPE& operator=(TYPE &);\ + public:\ + operator ::boost::rv&() \ + { return *static_cast< ::boost::rv* >(this); }\ + operator const ::boost::rv&() const \ + { return *static_cast* >(this); }\ + private:\ + // + + ////////////////////////////////////////////////////////////////////////////// + // + // BOOST_COPYABLE_AND_MOVABLE + // + ////////////////////////////////////////////////////////////////////////////// + + #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ + public:\ + TYPE& operator=(TYPE &t)\ + { this->operator=(static_cast &>(const_cast(t))); return *this;}\ + public:\ + operator ::boost::rv&() \ + { return *static_cast< ::boost::rv* >(this); }\ + operator const ::boost::rv&() const \ + { return *static_cast* >(this); }\ + private:\ + // + + #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\ + public:\ + operator ::boost::rv&() \ + { return *static_cast< ::boost::rv* >(this); }\ + operator const ::boost::rv&() const \ + { return *static_cast* >(this); }\ + private:\ + // + + } //namespace boost + +#else //BOOST_NO_RVALUE_REFERENCES + + namespace boost{ + + //! By default this traits returns false. Classes with non-throwing move constructor + //! and assignment should specialize this trait to obtain some performance improvements. + template + struct has_nothrow_move + : public BOOST_MOVE_MPL_NS::integral_constant + {}; + + } // namespace boost{ + + #if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) + #include + + namespace boost{ + + using ::std::move; + using ::std::forward; + using ::std::move_backward; + + } //namespace boost + + #else //!BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE + + #include + + namespace boost { + + ////////////////////////////////////////////////////////////////////////////// + // + // move + // + ////////////////////////////////////////////////////////////////////////////// + + #if defined(BOOST_MOVE_DOXYGEN_INVOKED) + //! This function provides a way to convert a reference into a rvalue reference + //! in compilers with rvalue references. For other compilers converts T & into + //! ::boost::rv & so that move emulation is activated. + template + rvalue_reference move (input_reference); + + #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) + + //Old move approach, lvalues could bind to rvalue references + template + inline typename remove_reference::type && move(T&& t) + { return t; } + + #else //Old move + + template + inline typename remove_reference::type && move(T&& t) + { return static_cast::type &&>(t); } + + #endif //Old move + + ////////////////////////////////////////////////////////////////////////////// + // + // forward + // + ////////////////////////////////////////////////////////////////////////////// + + + #if defined(BOOST_MOVE_DOXYGEN_INVOKED) + //! This function provides limited form of forwarding that is usually enough for + //! in-place construction and avoids the exponential overloading necessary for + //! perfect forwarding in C++03. + //! + //! For compilers with rvalue references this function provides perfect forwarding. + //! + //! Otherwise: + //! * If input_reference binds to const ::boost::rv & then it output_reference is + //! ::boost::rev & + //! + //! * Else, input_reference is equal to output_reference is equal to input_reference. + template output_reference forward(input_reference); + #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) + + //Old move approach, lvalues could bind to rvalue references + + template + inline T&& forward (typename BOOST_MOVE_MPL_NS::identity::type&& t) + { return t; } + + #else //Old move + + //Implementation #5 from N2951, thanks to Howard Hinnant + + template + inline T&& forward(U&& t + , typename BOOST_MOVE_BOOST_NS::enable_if_c< + move_detail::is_lvalue_reference::value ? move_detail::is_lvalue_reference::value : true>::type * = 0/* + , typename BOOST_MOVE_BOOST_NS::enable_if_c< + move_detail::is_convertible + ::type*, typename remove_reference::type*>::value>::type * = 0*/) + { return static_cast(t); } + + #endif //BOOST_MOVE_DOXYGEN_INVOKED + + } //namespace boost { + + #endif //#if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) + + //! This macro marks a type as movable but not copyable, disabling copy construction + //! and assignment. The user will need to write a move constructor/assignment as explained + //! in the documentation to fully write a movable but not copyable class. + #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\ + public:\ + typedef int boost_move_emulation_t;\ + private:\ + TYPE(const TYPE &);\ + TYPE& operator=(const TYPE &);\ + // + + //! This macro marks a type as copyable and movable. + //! The user will need to write a move constructor/assignment and a copy assignment + //! as explained in the documentation to fully write a copyable and movable class. + #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ + // + + #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\ + // + + //!This macro is used to achieve portable syntax in move + //!constructors and assignments for classes marked as + //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE + #define BOOST_RV_REF(TYPE)\ + TYPE && \ + // + + //!This macro is used to achieve portable syntax in copy + //!assignment for classes marked as BOOST_COPYABLE_AND_MOVABLE. + #define BOOST_COPY_ASSIGN_REF(TYPE)\ + const TYPE & \ + // + + //! This macro is used to implement portable perfect forwarding + //! as explained in the documentation. + #define BOOST_FWD_REF(TYPE)\ + TYPE && \ + // + + + #if !defined(BOOST_MOVE_DOXYGEN_INVOKED) + /// @cond + + #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ + TYPE && \ + // + + #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ + TYPE && \ + // + + #define BOOST_COPY_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ + const TYPE & \ + // + + #define BOOST_COPY_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ + TYPE& \ + // + + #define BOOST_CATCH_CONST_RLVALUE(TYPE)\ + const TYPE & \ + // + + /// @endcond + + #endif //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED) + +#endif //BOOST_NO_RVALUE_REFERENCES + +namespace boost { + +////////////////////////////////////////////////////////////////////////////// +// +// move_iterator +// +////////////////////////////////////////////////////////////////////////////// + +//! Class template move_iterator is an iterator adaptor with the same behavior +//! as the underlying iterator except that its dereference operator implicitly +//! converts the value returned by the underlying iterator's dereference operator +//! to an rvalue reference. Some generic algorithms can be called with move +//! iterators to replace copying with moving. +template +class move_iterator +{ + public: + typedef It iterator_type; + typedef typename std::iterator_traits::value_type value_type; + #if !defined(BOOST_NO_RVALUE_REFERENCES) || defined(BOOST_MOVE_DOXYGEN_INVOKED) + typedef value_type && reference; + #else + typedef typename BOOST_MOVE_MPL_NS::if_ + < ::boost::has_move_emulation_enabled + , ::boost::rv& + , value_type & >::type reference; + #endif + typedef It pointer; + typedef typename std::iterator_traits::difference_type difference_type; + typedef typename std::iterator_traits::iterator_category iterator_category; + + move_iterator() + {} + + explicit move_iterator(It i) + : m_it(i) + {} + + template + move_iterator(const move_iterator& u) + : m_it(u.base()) + {} + + iterator_type base() const + { return m_it; } + + reference operator*() const + { + #if defined(BOOST_NO_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) + return *m_it; + #else + return ::boost::move(*m_it); + #endif + } + + pointer operator->() const + { return m_it; } + + move_iterator& operator++() + { ++m_it; return *this; } + + move_iterator operator++(int) + { move_iterator tmp(*this); ++(*this); return tmp; } + + move_iterator& operator--() + { --m_it; return *this; } + + move_iterator operator--(int) + { move_iterator tmp(*this); --(*this); return tmp; } + + move_iterator operator+ (difference_type n) const + { return move_iterator(m_it + n); } + + move_iterator& operator+=(difference_type n) + { m_it += n; return *this; } + + move_iterator operator- (difference_type n) const + { return move_iterator(m_it - n); } + + move_iterator& operator-=(difference_type n) + { m_it -= n; return *this; } + + reference operator[](difference_type n) const + { + #if defined(BOOST_NO_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) + return m_it[n]; + #else + return ::boost::move(m_it[n]); + #endif + } + + friend bool operator==(const move_iterator& x, const move_iterator& y) + { return x.base() == y.base(); } + + friend bool operator!=(const move_iterator& x, const move_iterator& y) + { return x.base() != y.base(); } + + friend bool operator< (const move_iterator& x, const move_iterator& y) + { return x.base() < y.base(); } + + friend bool operator<=(const move_iterator& x, const move_iterator& y) + { return x.base() <= y.base(); } + + friend bool operator> (const move_iterator& x, const move_iterator& y) + { return x.base() > y.base(); } + + friend bool operator>=(const move_iterator& x, const move_iterator& y) + { return x.base() >= y.base(); } + + friend difference_type operator-(const move_iterator& x, const move_iterator& y) + { return x.base() - y.base(); } + + friend move_iterator operator+(difference_type n, const move_iterator& x) + { return move_iterator(x.base() + n); } + + private: + It m_it; +}; + + +//is_move_iterator +namespace move_detail { + +template +struct is_move_iterator + : public BOOST_MOVE_BOOST_NS::integral_constant +{ +}; + +template +struct is_move_iterator< ::boost::move_iterator > + : public BOOST_MOVE_BOOST_NS::integral_constant +{ +}; + +} //namespace move_detail { + +////////////////////////////////////////////////////////////////////////////// +// +// move_iterator +// +////////////////////////////////////////////////////////////////////////////// + +//! +//! Returns: move_iterator(i). +template +inline move_iterator make_move_iterator(const It &it) +{ return move_iterator(it); } + +////////////////////////////////////////////////////////////////////////////// +// +// back_move_insert_iterator +// +////////////////////////////////////////////////////////////////////////////// + + +//! A move insert iterator that move constructs elements at the +//! back of a container +template // C models Container +class back_move_insert_iterator + : public std::iterator +{ + C* container_m; + + public: + typedef C container_type; + + explicit back_move_insert_iterator(C& x) : container_m(&x) { } + + back_move_insert_iterator& operator=(typename C::reference x) + { container_m->push_back(boost::move(x)); return *this; } + + back_move_insert_iterator& operator*() { return *this; } + back_move_insert_iterator& operator++() { return *this; } + back_move_insert_iterator& operator++(int) { return *this; } +}; + +//! +//! Returns: back_move_insert_iterator(x). +template // C models Container +inline back_move_insert_iterator back_move_inserter(C& x) +{ + return back_move_insert_iterator(x); +} + +////////////////////////////////////////////////////////////////////////////// +// +// front_move_insert_iterator +// +////////////////////////////////////////////////////////////////////////////// + +//! A move insert iterator that move constructs elements int the +//! front of a container +template // C models Container +class front_move_insert_iterator + : public std::iterator +{ + C* container_m; + +public: + typedef C container_type; + + explicit front_move_insert_iterator(C& x) : container_m(&x) { } + + front_move_insert_iterator& operator=(typename C::reference x) + { container_m->push_front(boost::move(x)); return *this; } + + front_move_insert_iterator& operator*() { return *this; } + front_move_insert_iterator& operator++() { return *this; } + front_move_insert_iterator& operator++(int) { return *this; } +}; + +//! +//! Returns: front_move_insert_iterator(x). +template // C models Container +inline front_move_insert_iterator front_move_inserter(C& x) +{ + return front_move_insert_iterator(x); +} + +////////////////////////////////////////////////////////////////////////////// +// +// insert_move_iterator +// +////////////////////////////////////////////////////////////////////////////// +template // C models Container +class move_insert_iterator + : public std::iterator +{ + C* container_m; + typename C::iterator pos_; + + public: + typedef C container_type; + + explicit move_insert_iterator(C& x, typename C::iterator pos) + : container_m(&x), pos_(pos) + {} + + move_insert_iterator& operator=(typename C::reference x) + { + pos_ = container_m->insert(pos_, ::boost::move(x)); + ++pos_; + return *this; + } + + move_insert_iterator& operator*() { return *this; } + move_insert_iterator& operator++() { return *this; } + move_insert_iterator& operator++(int) { return *this; } +}; + +//! +//! Returns: move_insert_iterator(x, it). +template // C models Container +inline move_insert_iterator move_inserter(C& x, typename C::iterator it) +{ + return move_insert_iterator(x, it); +} + +////////////////////////////////////////////////////////////////////////////// +// +// move +// +////////////////////////////////////////////////////////////////////////////// + +#if !defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) + + //! Effects: Moves elements in the range [first,last) into the range [result,result + (last - + //! first)) starting from first and proceeding to last. For each non-negative integer n < (last-first), + //! performs *(result + n) = ::boost::move (*(first + n)). + //! + //! Effects: result + (last - first). + //! + //! Requires: result shall not be in the range [first,last). + //! + //! Complexity: Exactly last - first move assignments. + template // O models OutputIterator + O move(I f, I l, O result) + { + while (f != l) { + *result = ::boost::move(*f); + ++f; ++result; + } + return result; + } + + ////////////////////////////////////////////////////////////////////////////// + // + // move_backward + // + ////////////////////////////////////////////////////////////////////////////// + + //! Effects: Moves elements in the range [first,last) into the range + //! [result - (last-first),result) starting from last - 1 and proceeding to + //! first. For each positive integer n <= (last - first), + //! performs *(result - n) = ::boost::move(*(last - n)). + //! + //! Requires: result shall not be in the range [first,last). + //! + //! Returns: result - (last - first). + //! + //! Complexity: Exactly last - first assignments. + template // O models BidirectionalIterator + O move_backward(I f, I l, O result) + { + while (f != l) { + --l; --result; + *result = ::boost::move(*l); + } + return result; + } + +#endif //!defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_move +// +////////////////////////////////////////////////////////////////////////////// + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! new (static_cast(&*result)) +//! typename iterator_traits::value_type(boost::move(*first)); +//! \endcode +//! +//! Returns: result +template + // F models ForwardIterator +F uninitialized_move(I f, I l, F r + /// @cond +// ,typename BOOST_MOVE_BOOST_NS::enable_if::value_type> >::type* = 0 + /// @endcond + ) +{ + typedef typename std::iterator_traits::value_type input_value_type; + while (f != l) { + ::new(static_cast(&*r)) input_value_type(boost::move(*f)); + ++f; ++r; + } + return r; +} + +/// @cond +/* +template + // F models ForwardIterator +F uninitialized_move(I f, I l, F r, + typename BOOST_MOVE_BOOST_NS::disable_if::value_type> >::type* = 0) +{ + return std::uninitialized_copy(f, l, r); +} +*/ + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_copy_or_move +// +////////////////////////////////////////////////////////////////////////////// + +namespace move_detail { + +template + // F models ForwardIterator +inline F uninitialized_move_move_iterator(I f, I l, F r +// ,typename BOOST_MOVE_BOOST_NS::enable_if< has_move_emulation_enabled >::type* = 0 +) +{ + return ::boost::uninitialized_move(f, l, r); +} +/* +template + // F models ForwardIterator +F uninitialized_move_move_iterator(I f, I l, F r, + typename BOOST_MOVE_BOOST_NS::disable_if< has_move_emulation_enabled >::type* = 0) +{ + return std::uninitialized_copy(f.base(), l.base(), r); +} +*/ +} //namespace move_detail { + +template + // F models ForwardIterator +inline F uninitialized_copy_or_move(I f, I l, F r, + typename BOOST_MOVE_BOOST_NS::enable_if< move_detail::is_move_iterator >::type* = 0) +{ + return ::boost::move_detail::uninitialized_move_move_iterator(f, l, r); +} + +////////////////////////////////////////////////////////////////////////////// +// +// copy_or_move +// +////////////////////////////////////////////////////////////////////////////// + +namespace move_detail { + +template + // F models ForwardIterator +inline F move_move_iterator(I f, I l, F r +// ,typename BOOST_MOVE_BOOST_NS::enable_if< has_move_emulation_enabled >::type* = 0 +) +{ + return ::boost::move(f, l, r); +} +/* +template + // F models ForwardIterator +F move_move_iterator(I f, I l, F r, + typename BOOST_MOVE_BOOST_NS::disable_if< has_move_emulation_enabled >::type* = 0) +{ + return std::copy(f.base(), l.base(), r); +} +*/ + +} //namespace move_detail { + +template + // F models ForwardIterator +inline F copy_or_move(I f, I l, F r, + typename BOOST_MOVE_BOOST_NS::enable_if< move_detail::is_move_iterator >::type* = 0) +{ + return ::boost::move_detail::move_move_iterator(f, l, r); +} + +/// @endcond + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! new (static_cast(&*result)) +//! typename iterator_traits::value_type(*first); +//! \endcode +//! +//! Returns: result +//! +//! Note: This function is provided because +//! std::uninitialized_copy from some STL implementations +//! is not compatible with move_iterator +template + // F models ForwardIterator +inline F uninitialized_copy_or_move(I f, I l, F r + /// @cond + ,typename BOOST_MOVE_BOOST_NS::disable_if< move_detail::is_move_iterator >::type* = 0 + /// @endcond + ) +{ + return std::uninitialized_copy(f, l, r); +} + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! *result = *first; +//! \endcode +//! +//! Returns: result +//! +//! Note: This function is provided because +//! std::uninitialized_copy from some STL implementations +//! is not compatible with move_iterator +template + // F models ForwardIterator +inline F copy_or_move(I f, I l, F r + /// @cond + ,typename BOOST_MOVE_BOOST_NS::disable_if< move_detail::is_move_iterator >::type* = 0 + /// @endcond + ) +{ + return std::copy(f, l, r); +} + +//! If this trait yields to true +//! (has_trivial_destructor_after_move <T>::value == true) +//! means that if T is used as argument of a move construction/assignment, +//! there is no need to call T's destructor. +//! This optimization tipically is used to improve containers' performance. +//! +//! By default this trait is true if the type has trivial destructor, +//! every class should specialize this trait if it wants to improve performance +//! when inserted in containers. +template +struct has_trivial_destructor_after_move + : BOOST_MOVE_BOOST_NS::has_trivial_destructor +{}; + + + +namespace move_detail { + +// Code from Jeffrey Lee Hellrung, many thanks + +#ifndef BOOST_NO_RVALUE_REFERENCES + template< class T> struct forward_type { typedef T type; }; +#else // #ifndef BOOST_NO_RVALUE_REFERENCES + template< class T> + struct forward_type + { typedef const T &type; }; + + template< class T> + struct forward_type< boost::rv > + { typedef T type; }; +#endif // #ifndef BOOST_NO_RVALUE_REFERENCES + + + +// Code from Jeffrey Lee Hellrung, many thanks + +template< class T > struct is_rvalue_reference : BOOST_MOVE_BOOST_NS::integral_constant { }; +#ifndef BOOST_NO_RVALUE_REFERENCES + template< class T > struct is_rvalue_reference< T&& > : BOOST_MOVE_BOOST_NS::integral_constant { }; +#else // #ifndef BOOST_NO_RVALUE_REFERENCES + template< class T > struct is_rvalue_reference< boost::rv& > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; + + template< class T > struct is_rvalue_reference< const boost::rv& > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; +#endif // #ifndef BOOST_NO_RVALUE_REFERENCES + +#ifndef BOOST_NO_RVALUE_REFERENCES + template< class T > struct add_rvalue_reference { typedef T&& type; }; +#else // #ifndef BOOST_NO_RVALUE_REFERENCES + namespace detail_add_rvalue_reference + { + template< class T + , bool emulation = ::boost::has_move_emulation_enabled::value + , bool rv = ::boost::move_detail::is_rv::value > + struct add_rvalue_reference_impl { typedef T type; }; + + template< class T, bool emulation> + struct add_rvalue_reference_impl< T, emulation, true > { typedef T & type; }; + + template< class T, bool rv > + struct add_rvalue_reference_impl< T, true, rv > { typedef ::boost::rv& type; }; + } // namespace detail_add_rvalue_reference + + template< class T > + struct add_rvalue_reference + : detail_add_rvalue_reference::add_rvalue_reference_impl + { }; + + template< class T > + struct add_rvalue_reference + { typedef T & type; }; + +#endif // #ifndef BOOST_NO_RVALUE_REFERENCES + +template< class T > struct remove_rvalue_reference { typedef T type; }; + +#ifndef BOOST_NO_RVALUE_REFERENCES + template< class T > struct remove_rvalue_reference< T&& > { typedef T type; }; +#else // #ifndef BOOST_NO_RVALUE_REFERENCES + template< class T > struct remove_rvalue_reference< rv > { typedef T type; }; + template< class T > struct remove_rvalue_reference< const rv > { typedef T type; }; + template< class T > struct remove_rvalue_reference< volatile rv > { typedef T type; }; + template< class T > struct remove_rvalue_reference< const volatile rv > { typedef T type; }; + template< class T > struct remove_rvalue_reference< rv& > { typedef T type; }; + template< class T > struct remove_rvalue_reference< const rv& > { typedef T type; }; + template< class T > struct remove_rvalue_reference< volatile rv& > { typedef T type; }; + template< class T > struct remove_rvalue_reference< const volatile rv& >{ typedef T type; }; +#endif // #ifndef BOOST_NO_RVALUE_REFERENCES + +template +typename boost::move_detail::add_rvalue_reference::type declval(); + +} +// Ideas from Boost.Move review, Jeffrey Lee Hellrung: +// +//- TypeTraits metafunctions is_lvalue_reference, add_lvalue_reference, and remove_lvalue_reference ? +// Perhaps add_reference and remove_reference can be modified so that they behave wrt emulated rvalue +// references the same as wrt real rvalue references, i.e., add_reference< rv& > -> T& rather than +// rv& (since T&& & -> T&). +// +//- Add'l TypeTraits has_[trivial_]move_{constructor,assign}...? +// +//- An as_lvalue(T& x) function, which amounts to an identity operation in C++0x, but strips emulated +// rvalue references in C++03. This may be necessary to prevent "accidental moves". + +} //namespace boost { + +#if defined BOOST_MSVC + #pragma warning (pop) + #ifdef BOOST_INTERPROCESS_CRT_SECURE_NO_DEPRECATE + #undef BOOST_INTERPROCESS_CRT_SECURE_NO_DEPRECATE + #undef _CRT_SECURE_NO_DEPRECATE + #endif + + #ifdef BOOST_INTERPROCESS_SCL_SECURE_NO_WARNINGS + #undef BOOST_INTERPROCESS_SCL_SECURE_NO_WARNINGS + #undef _SCL_SECURE_NO_WARNINGS + #endif +#endif + +#endif //#ifndef BOOST_MOVE_MOVE_HPP diff --git a/external/boost/mpl/O1_size.hpp b/external/boost/mpl/O1_size.hpp new file mode 100644 index 0000000..84ba521 --- /dev/null +++ b/external/boost/mpl/O1_size.hpp @@ -0,0 +1,40 @@ + +#ifndef BOOST_MPL_O1_SIZE_HPP_INCLUDED +#define BOOST_MPL_O1_SIZE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::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/external/boost/mpl/O1_size_fwd.hpp b/external/boost/mpl/O1_size_fwd.hpp new file mode 100644 index 0000000..281fcaf --- /dev/null +++ b/external/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. + +// $Id: O1_size_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct O1_size_impl; +template< typename Sequence > struct O1_size; + +}} + +#endif // BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/advance.hpp b/external/boost/mpl/advance.hpp new file mode 100644 index 0000000..c8b5ae8 --- /dev/null +++ b/external/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. + +// $Id: advance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 >::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::type type; + }; +}; + + +template< + typename BOOST_MPL_AUX_NA_PARAM(Iterator) + , typename BOOST_MPL_AUX_NA_PARAM(N) + > +struct advance + : advance_impl< typename tag::type > + ::template apply +{ +}; + +template< + typename Iterator + , BOOST_MPL_AUX_NTTP_DECL(long, N) + > +struct advance_c + : advance_impl< typename tag::type > + ::template apply > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(2, advance) + +}} + +#endif // BOOST_MPL_ADVANCE_HPP_INCLUDED diff --git a/external/boost/mpl/advance_fwd.hpp b/external/boost/mpl/advance_fwd.hpp new file mode 100644 index 0000000..daf0c91 --- /dev/null +++ b/external/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. + +// $Id: advance_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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/external/boost/mpl/always.hpp b/external/boost/mpl/always.hpp new file mode 100644 index 0000000..f984231 --- /dev/null +++ b/external/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. + +// $Id: always.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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/external/boost/mpl/and.hpp b/external/boost/mpl/and.hpp new file mode 100644 index 0000000..1b3ede2 --- /dev/null +++ b/external/boost/mpl/and.hpp @@ -0,0 +1,60 @@ + +#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. + +// $Id: and.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# include +# include +# include +# include + +// agurt, 19/may/04: workaround a conflict with 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) +#ifndef __GCCXML__ +#if defined(and) +# pragma push_macro("and") +# undef and +# define and(x) +#endif +#endif +#endif + +# define BOOST_MPL_PREPROCESSED_HEADER and.hpp +# include + +#if defined(_MSC_VER) +#ifndef __GCCXML__ +#if defined(and) +# pragma pop_macro("and") +#endif +#endif +#endif + +#else + +# define AUX778076_OP_NAME and_ +# define AUX778076_OP_VALUE1 false +# define AUX778076_OP_VALUE2 true +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AND_HPP_INCLUDED diff --git a/external/boost/mpl/apply.hpp b/external/boost/mpl/apply.hpp new file mode 100644 index 0000000..944619e --- /dev/null +++ b/external/boost/mpl/apply.hpp @@ -0,0 +1,229 @@ + +#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. + +// $Id: apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER apply.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +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, )) +#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 +} + + +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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if 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::type + AUX778076_APPLY_N_COMMA_PARAMS(i_, T) + > +{ +#else +{ + typedef typename BOOST_PP_CAT(apply_wrap,i_)< + typename lambda::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_) +{ + 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 +{ + 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_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/apply_fwd.hpp b/external/boost/mpl/apply_fwd.hpp new file mode 100644 index 0000000..a78ae8b --- /dev/null +++ b/external/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. + +// $Id: apply_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER apply_fwd.hpp +# include + +#else + +# include +# include +# include +# include +# include + +# include +# include +# include + +// 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, )) +#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/external/boost/mpl/apply_wrap.hpp b/external/boost/mpl/apply_wrap.hpp new file mode 100644 index 0000000..b3cb12b --- /dev/null +++ b/external/boost/mpl/apply_wrap.hpp @@ -0,0 +1,234 @@ + +#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-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: apply_wrap.hpp 49272 2008-10-11 06:50:46Z agurtovoy $ +// $Date: 2008-10-11 02:50:46 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49272 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER apply_wrap.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + + +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, )) +#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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if 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 + +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_)::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_, )) +#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::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::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::apply +{ +}; +#endif + +# endif // workarounds + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) +/// workaround for ETI bug +template<> +struct BOOST_PP_CAT(apply_wrap,i_) +{ + typedef int type; +}; +#endif + +# undef i_ + +///// iteration, depth == 2 + +#elif BOOST_PP_ITERATION_DEPTH() == 2 + +# define j_ BOOST_PP_FRAME_ITERATION(2) + +#if i_ == 0 && j_ == 0 \ + && defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \ + && !defined(BOOST_MPL_CFG_NO_HAS_APPLY) + +template< typename F, bool F_has_apply > +struct apply_wrap_impl0_bcb { + typedef typename F::template apply< na > type; +}; + +template< typename F > +struct apply_wrap_impl0_bcb< F, true > { + typedef typename F::apply type; +}; + +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 apply_wrap_impl0_bcb< F, aux::has_apply< F >::value >::type type; +}; +#else + +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; +}; + +#endif + +# undef j_ + +#endif // BOOST_PP_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/arg.hpp b/external/boost/mpl/arg.hpp new file mode 100644 index 0000000..c1c7072 --- /dev/null +++ b/external/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. + +// $Id: arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +#endif + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER arg.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include + +# include +# include +# include + +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, )) +#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 +{ + BOOST_STATIC_CONSTANT(int, value = i_); + typedef arg 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/external/boost/mpl/arg_fwd.hpp b/external/boost/mpl/arg_fwd.hpp new file mode 100644 index 0000000..c96b48f --- /dev/null +++ b/external/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. + +// $Id: arg_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/assert.hpp b/external/boost/mpl/assert.hpp new file mode 100644 index 0000000..33b82f3 --- /dev/null +++ b/external/boost/mpl/assert.hpp @@ -0,0 +1,370 @@ + +#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. + +// $Id: assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include // make sure 'size_t' is placed into 'std' +#include + + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || (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__, BOOST_TESTED_AT(0x610)) \ + || 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__, BOOST_TESTED_AT(0x610)) \ + || (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' 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 { typedef AUX778076_ASSERT_ARG(assert) type; }; + +template< bool C > +int assertion_failed( typename assert::type ); + +template< bool C > +struct assertion +{ + static int failed( assert ); +}; + +template<> +struct assertion +{ + 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 +#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 +#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 { 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

    ::type type; +}; + +template< typename Pred > +failed ************ (Pred::************ + assert_arg( void (*)(Pred), typename assert_arg_pred::type ) + ); + +template< typename Pred > +failed ************ (boost::mpl::not_::************ + assert_not_arg( void (*)(Pred), typename assert_arg_pred_not::type ) + ); + +template< typename Pred > +AUX778076_ASSERT_ARG(assert) +assert_arg( void (*)(Pred), typename assert_arg_pred_not::type ); + +template< typename Pred > +AUX778076_ASSERT_ARG(assert) +assert_not_arg( void (*)(Pred), typename assert_arg_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 +{ + typedef AUX778076_ASSERT_ARG(assert) 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::type +assert_arg(void (*)(Pred), int); + +template< typename Pred > +typename assert_arg_type< boost::mpl::not_ >::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 >::type +assert_rel_arg( assert_relation ); +# 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)) + +#define BOOST_MPL_ASSERT(pred) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion_failed( \ + boost::mpl::assert_arg( (void (*) pred)0, 1 ) \ + ) \ + ) \ + ) \ +/**/ + +// BOOST_MPL_ASSERT_NOT((pred)) + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +# define BOOST_MPL_ASSERT_NOT(pred) \ +enum { \ + BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion::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_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ + boost::mpl::assertion_failed( \ + 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_IMPL(counter, x, rel, y) \ +enum { BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) }; \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion_failed( \ + (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_IMPL(counter, x, rel, y) \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assert_rel,counter) = sizeof( \ + boost::mpl::assert_::arg rel boost::mpl::assert_::arg \ + ) \ + ); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) ); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion_failed( \ + boost::mpl::assert_rel_arg( boost::mpl::assert_relation< \ + boost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,counter)) \ + , x \ + , y \ + >() ) \ + ) \ + ) \ + ) \ +/**/ +# endif + +# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \ +BOOST_MPL_ASSERT_RELATION_IMPL(BOOST_MPL_AUX_PP_COUNTER(), x, rel, y) \ +/**/ + +#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_,BOOST_MPL_AUX_PP_COUNTER()) = 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_,BOOST_MPL_AUX_PP_COUNTER()) = 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::value), USER_PROVIDED_MESSAGE, (types) ) + +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) +# define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \ +struct msg; \ +typedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \ +{ \ + using boost::mpl::assert_::types; \ + static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \ + { return 0; } \ +} BOOST_PP_CAT(mpl_assert_arg,counter); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \ + ) \ + ) \ +/**/ +#else +# define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \ +struct msg; \ +typedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \ +{ \ + static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \ + { return 0; } \ +} BOOST_PP_CAT(mpl_assert_arg,counter); \ +BOOST_MPL_AUX_ASSERT_CONSTANT( \ + std::size_t \ + , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \ + boost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \ + ) \ + ) \ +/**/ +#endif + +#define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \ +BOOST_MPL_ASSERT_MSG_IMPL( BOOST_MPL_AUX_PP_COUNTER(), c, msg, types_ ) \ +/**/ + +#endif // BOOST_MPL_ASSERT_HPP_INCLUDED diff --git a/external/boost/mpl/at.hpp b/external/boost/mpl/at.hpp new file mode 100644 index 0000000..caa3462 --- /dev/null +++ b/external/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. + +// $Id: at.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +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::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::type > + ::template apply< Sequence,mpl::long_ > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(2, at) + +}} + +#endif // BOOST_MPL_AT_HPP_INCLUDED diff --git a/external/boost/mpl/at_fwd.hpp b/external/boost/mpl/at_fwd.hpp new file mode 100644 index 0000000..6bce275 --- /dev/null +++ b/external/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. + +// $Id: at_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct at_impl; +template< typename Sequence, typename N > struct at; + +}} + +#endif // BOOST_MPL_AT_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/O1_size_impl.hpp b/external/boost/mpl/aux_/O1_size_impl.hpp new file mode 100644 index 0000000..df408f0 --- /dev/null +++ b/external/boost/mpl/aux_/O1_size_impl.hpp @@ -0,0 +1,87 @@ + +#ifndef BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED +#define BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: O1_size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include + +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 + , aux::O1_size_impl + , long_<-1> + >::type + { +#else + { + typedef typename if_< + aux::has_size + , aux::O1_size_impl + , long_<-1> + >::type type; + + BOOST_STATIC_CONSTANT(long, value = + (if_< + aux::has_size + , aux::O1_size_impl + , 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/external/boost/mpl/aux_/adl_barrier.hpp b/external/boost/mpl/aux_/adl_barrier.hpp new file mode 100644 index 0000000..7d9eaea --- /dev/null +++ b/external/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. + +// $Id: adl_barrier.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#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/external/boost/mpl/aux_/advance_backward.hpp b/external/boost/mpl/aux_/advance_backward.hpp new file mode 100644 index 0000000..169202a --- /dev/null +++ b/external/boost/mpl/aux_/advance_backward.hpp @@ -0,0 +1,128 @@ + +#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. + +// $Id: advance_backward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER advance_backward.hpp +# include + +#else + +# include +# include +# include + +# include +# include +# include + +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, )) +# 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 + , 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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if 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), )) +# 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 + { + 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::type AUX778076_ITER_1; + +# undef AUX778076_ITER_1 +# undef AUX778076_ITER_0 + +#endif // BOOST_PP_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/advance_forward.hpp b/external/boost/mpl/aux_/advance_forward.hpp new file mode 100644 index 0000000..058f765 --- /dev/null +++ b/external/boost/mpl/aux_/advance_forward.hpp @@ -0,0 +1,127 @@ + +#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. + +// $Id: advance_forward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER advance_forward.hpp +# include + +#else + +# include +# include +# include + +# include +# include +# include + +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, )) +# 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 + , 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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if 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_, )) +# 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 + { + 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::type AUX778076_ITER_1; + +# undef AUX778076_ITER_1 +# undef AUX778076_ITER_0 + +#endif // BOOST_PP_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/arg_typedef.hpp b/external/boost/mpl/aux_/arg_typedef.hpp new file mode 100644 index 0000000..e4737b9 --- /dev/null +++ b/external/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. + +// $Id: arg_typedef.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#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/external/boost/mpl/aux_/arithmetic_op.hpp b/external/boost/mpl/aux_/arithmetic_op.hpp new file mode 100644 index 0000000..9546e8e --- /dev/null +++ b/external/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. + +// $Id: arithmetic_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +#endif + +#if !defined(AUX778076_OP_PREFIX) +# define AUX778076_OP_PREFIX AUX778076_OP_NAME +#endif + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp +# include + +#else + +# include +# include + + +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 type; +}; +} +#endif + +template<> +struct AUX778076_OP_IMPL_NAME +{ + 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/external/boost/mpl/aux_/arity.hpp b/external/boost/mpl/aux_/arity.hpp new file mode 100644 index 0000000..f639a10 --- /dev/null +++ b/external/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. + +// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) + +# include +# include + +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/external/boost/mpl/aux_/arity_spec.hpp b/external/boost/mpl/aux_/arity_spec.hpp new file mode 100644 index 0000000..ea164a6 --- /dev/null +++ b/external/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. + +// $Id: arity_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 > \ + : int_ \ +{ \ +}; \ +} \ +/**/ +#else +# define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/ +#endif + + +#endif // BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/at_impl.hpp b/external/boost/mpl/aux_/at_impl.hpp new file mode 100644 index 0000000..120738f --- /dev/null +++ b/external/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. + +// $Id: at_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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::type + , N + >::type iter_; + + typedef typename deref::type type; + }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, at_impl) + +}} + +#endif // BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/begin_end_impl.hpp b/external/boost/mpl/aux_/begin_end_impl.hpp new file mode 100644 index 0000000..d3b9682 --- /dev/null +++ b/external/boost/mpl/aux_/begin_end_impl.hpp @@ -0,0 +1,101 @@ + +#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. + +// $Id: begin_end_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include + +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::begin_type, void_>::type type; + }; +}; + +template< typename Tag > +struct end_impl +{ + template< typename Sequence > struct apply + { + typedef typename eval_if, + aux::end_type, void_>::type type; + }; +}; + +// specialize 'begin_trait/end_trait' for two pre-defined tags + +# define AUX778076_IMPL_SPEC(name, tag, result) \ +template<> \ +struct name##_impl \ +{ \ + 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_IMPL(1,begin_impl) +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,end_impl) + +}} + +#endif // BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/clear_impl.hpp b/external/boost/mpl/aux_/clear_impl.hpp new file mode 100644 index 0000000..84da54b --- /dev/null +++ b/external/boost/mpl/aux_/clear_impl.hpp @@ -0,0 +1,35 @@ + +#ifndef BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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/external/boost/mpl/aux_/common_name_wknd.hpp b/external/boost/mpl/aux_/common_name_wknd.hpp new file mode 100644 index 0000000..9d0b4b4 --- /dev/null +++ b/external/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. + +// $Id: common_name_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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/external/boost/mpl/aux_/comparison_op.hpp b/external/boost/mpl/aux_/comparison_op.hpp new file mode 100644 index 0000000..7d0fa20 --- /dev/null +++ b/external/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. + +// $Id: comparison_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#if !defined(AUX778076_OP_PREFIX) +# define AUX778076_OP_PREFIX AUX778076_OP_NAME +#endif + +#define AUX778076_OP_ARITY 2 + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp +# include + +#else + +# include +# include + +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 +{ + 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_ 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/external/boost/mpl/aux_/config/adl.hpp b/external/boost/mpl/aux_/config/adl.hpp new file mode 100644 index 0000000..130ee9f --- /dev/null +++ b/external/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. + +// $Id: adl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +// 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__, BOOST_TESTED_AT(0x610)) \ + || 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/external/boost/mpl/aux_/config/arrays.hpp b/external/boost/mpl/aux_/config/arrays.hpp new file mode 100644 index 0000000..56ee0a3 --- /dev/null +++ b/external/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. + +// $Id: arrays.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + || 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/external/boost/mpl/aux_/config/bcc.hpp b/external/boost/mpl/aux_/config/bcc.hpp new file mode 100644 index 0000000..f4817ca --- /dev/null +++ b/external/boost/mpl/aux_/config/bcc.hpp @@ -0,0 +1,28 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: bcc.hpp 49272 2008-10-11 06:50:46Z agurtovoy $ +// $Date: 2004-09-02 10:41:37 -0500 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#include + +#if !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, >= 0x590) \ + && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) + +# define BOOST_MPL_CFG_BCC590_WORKAROUNDS + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/bind.hpp b/external/boost/mpl/aux_/config/bind.hpp new file mode 100644 index 0000000..d0450e6 --- /dev/null +++ b/external/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. + +// $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ + ) + +# 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/external/boost/mpl/aux_/config/compiler.hpp b/external/boost/mpl/aux_/config/compiler.hpp new file mode 100644 index 0000000..3238963 --- /dev/null +++ b/external/boost/mpl/aux_/config/compiler.hpp @@ -0,0 +1,66 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: compiler.hpp 53189 2009-05-22 20:07:55Z hkaiser $ +// $Date: 2009-05-22 16:07:55 -0400 (Fri, 22 May 2009) $ +// $Revision: 53189 $ + +#if !defined(BOOST_MPL_CFG_COMPILER_DIR) + +# include +# include +# include +# include +# include +# include + +# 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__, BOOST_TESTED_AT(0x610)) +# if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) +# define BOOST_MPL_CFG_COMPILER_DIR bcc551 +# elif BOOST_WORKAROUND(__BORLANDC__, >= 0x590) +# define BOOST_MPL_CFG_COMPILER_DIR bcc +# else +# define BOOST_MPL_CFG_COMPILER_DIR bcc_pre590 +# 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/external/boost/mpl/aux_/config/ctps.hpp b/external/boost/mpl/aux_/config/ctps.hpp new file mode 100644 index 0000000..b908cee --- /dev/null +++ b/external/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. + +// $Id: ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, < 0x582) + +# define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC + +#endif + +// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined in + +#endif // BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp b/external/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp new file mode 100644 index 0000000..682770e --- /dev/null +++ b/external/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. + +// $Id: dmc_ambiguous_ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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/external/boost/mpl/aux_/config/dtp.hpp b/external/boost/mpl/aux_/config/dtp.hpp new file mode 100644 index 0000000..8f03a83 --- /dev/null +++ b/external/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. + +// $Id: dtp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// 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__, BOOST_TESTED_AT(0x610)) + +# 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__, BOOST_TESTED_AT(0x610)) \ + || 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/external/boost/mpl/aux_/config/eti.hpp b/external/boost/mpl/aux_/config/eti.hpp new file mode 100644 index 0000000..7328b6d --- /dev/null +++ b/external/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. + +// $Id: eti.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// 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/external/boost/mpl/aux_/config/forwarding.hpp b/external/boost/mpl/aux_/config/forwarding.hpp new file mode 100644 index 0000000..2390bd7 --- /dev/null +++ b/external/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. + +// $Id: forwarding.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) + +# define BOOST_MPL_CFG_NO_NESTED_FORWARDING + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/gcc.hpp b/external/boost/mpl/aux_/config/gcc.hpp new file mode 100644 index 0000000..3380d61 --- /dev/null +++ b/external/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. + +// $Id: gcc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if defined(__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/external/boost/mpl/aux_/config/has_apply.hpp b/external/boost/mpl/aux_/config/has_apply.hpp new file mode 100644 index 0000000..fc9176f --- /dev/null +++ b/external/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. + +// $Id: has_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#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/external/boost/mpl/aux_/config/has_xxx.hpp b/external/boost/mpl/aux_/config/has_xxx.hpp new file mode 100644 index 0000000..e03fe11 --- /dev/null +++ b/external/boost/mpl/aux_/config/has_xxx.hpp @@ -0,0 +1,34 @@ + +#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. + +// $Id: has_xxx.hpp 63518 2010-07-02 08:32:03Z agurtovoy $ +// $Date: 2010-07-02 04:32:03 -0400 (Fri, 02 Jul 2010) $ +// $Revision: 63518 $ + +#include +#include + +// 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 +# define BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/integral.hpp b/external/boost/mpl/aux_/config/integral.hpp new file mode 100644 index 0000000..4dec725 --- /dev/null +++ b/external/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. + +// $Id: integral.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if !defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) + +# 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/external/boost/mpl/aux_/config/intel.hpp b/external/boost/mpl/aux_/config/intel.hpp new file mode 100644 index 0000000..8f1de76 --- /dev/null +++ b/external/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. + +// $Id: intel.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +// BOOST_INTEL_CXX_VERSION is defined here: +#include + +#endif // BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/lambda.hpp b/external/boost/mpl/aux_/config/lambda.hpp new file mode 100644 index 0000000..a46b46a --- /dev/null +++ b/external/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. + +// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// 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/external/boost/mpl/aux_/config/msvc.hpp b/external/boost/mpl/aux_/config/msvc.hpp new file mode 100644 index 0000000..18bed83 --- /dev/null +++ b/external/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. + +// $Id: msvc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +// BOOST_MSVC is defined here: +#include + +#endif // BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/msvc_typename.hpp b/external/boost/mpl/aux_/config/msvc_typename.hpp new file mode 100644 index 0000000..042c804 --- /dev/null +++ b/external/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. + +// $Id: msvc_typename.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#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/external/boost/mpl/aux_/config/nttp.hpp b/external/boost/mpl/aux_/config/nttp.hpp new file mode 100644 index 0000000..4873e20 --- /dev/null +++ b/external/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. + +// $Id: nttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// 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); +// +// 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/external/boost/mpl/aux_/config/overload_resolution.hpp b/external/boost/mpl/aux_/config/overload_resolution.hpp new file mode 100644 index 0000000..88c3d53 --- /dev/null +++ b/external/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. + +// $Id: overload_resolution.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) \ + && ( BOOST_WORKAROUND(__BORLANDC__, < 0x590) \ + || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \ + ) + +# define BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/pp_counter.hpp b/external/boost/mpl/aux_/config/pp_counter.hpp new file mode 100644 index 0000000..a4d0715 --- /dev/null +++ b/external/boost/mpl/aux_/config/pp_counter.hpp @@ -0,0 +1,26 @@ + +#ifndef BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED +#define BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: pp_counter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_AUX_PP_COUNTER) +# include +# if BOOST_WORKAROUND(BOOST_MSVC, >= 1300) +# define BOOST_MPL_AUX_PP_COUNTER() __COUNTER__ +# else +# define BOOST_MPL_AUX_PP_COUNTER() __LINE__ +# endif +#endif + +#endif // BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/preprocessor.hpp b/external/boost/mpl/aux_/config/preprocessor.hpp new file mode 100644 index 0000000..52229cd --- /dev/null +++ b/external/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. + +// $Id: preprocessor.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) \ + && ( BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \ + || BOOST_WORKAROUND(__BORLANDC__, < 0x582) \ + || 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/external/boost/mpl/aux_/config/static_constant.hpp b/external/boost/mpl/aux_/config/static_constant.hpp new file mode 100644 index 0000000..855d22f --- /dev/null +++ b/external/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. + +// $Id: static_constant.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +// BOOST_STATIC_CONSTANT is defined here: +# include +#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/external/boost/mpl/aux_/config/ttp.hpp b/external/boost/mpl/aux_/config/ttp.hpp new file mode 100644 index 0000000..a5a0c2c --- /dev/null +++ b/external/boost/mpl/aux_/config/ttp.hpp @@ -0,0 +1,41 @@ + +#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. + +// $Id: ttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \ + && ( defined(BOOST_NO_TEMPLATE_TEMPLATES) \ + || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x590) ) \ + ) + +# 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__, BOOST_TESTED_AT(0x610)) \ + ) + +# define BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING + +#endif + +#endif // BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/typeof.hpp b/external/boost/mpl/aux_/config/typeof.hpp new file mode 100644 index 0000000..aeff9c1 --- /dev/null +++ b/external/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. + +// $Id: typeof.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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/external/boost/mpl/aux_/config/use_preprocessed.hpp b/external/boost/mpl/aux_/config/use_preprocessed.hpp new file mode 100644 index 0000000..3bbc229 --- /dev/null +++ b/external/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. + +// $Id: use_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/config/workaround.hpp b/external/boost/mpl/aux_/config/workaround.hpp new file mode 100644 index 0000000..337bcf7 --- /dev/null +++ b/external/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. + +// $Id: workaround.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#endif // BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/contains_impl.hpp b/external/boost/mpl/aux_/contains_impl.hpp new file mode 100644 index 0000000..2ee4056 --- /dev/null +++ b/external/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. + +// $Id: contains_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +#include + +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::type + , typename end::type + > > + { +#else + { + typedef not_< is_same< + typename find::type + , typename end::type + > > type; + + BOOST_STATIC_CONSTANT(bool, value = + (not_< is_same< + typename find::type + , typename end::type + > >::value) + ); +#endif + }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl) + +}} + +#endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/count_args.hpp b/external/boost/mpl/aux_/count_args.hpp new file mode 100644 index 0000000..85107dd --- /dev/null +++ b/external/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. + +// $Id: count_args.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#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 +# include + +# 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 +# include +# include + +# 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::value \ +/**/ + +// is__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 +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +// _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/external/boost/mpl/aux_/find_if_pred.hpp b/external/boost/mpl/aux_/find_if_pred.hpp new file mode 100644 index 0000000..c07d89d --- /dev/null +++ b/external/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 +#include + +namespace boost { namespace mpl { namespace aux { + +template< typename Predicate > +struct find_if_pred +{ + template< typename Iterator > + struct apply + { + typedef not_< aux::iter_apply1 > type; + }; +}; + +}}} + +#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/fold_impl.hpp b/external/boost/mpl/aux_/fold_impl.hpp new file mode 100644 index 0000000..89e42f8 --- /dev/null +++ b/external/boost/mpl/aux_/fold_impl.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +# include +# include +# endif +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER fold_impl.hpp +# include + +#else + +# define AUX778076_FOLD_IMPL_OP(iter) typename deref::type +# define AUX778076_FOLD_IMPL_NAME_PREFIX fold +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/fold_impl_body.hpp b/external/boost/mpl/aux_/fold_impl_body.hpp new file mode 100644 index 0000000..41f80b4 --- /dev/null +++ b/external/boost/mpl/aux_/fold_impl_body.hpp @@ -0,0 +1,365 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +#if !defined(BOOST_PP_IS_ITERATING) + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +# include +# include +# include +# include +# include +# include + +# include +# include +# include + +// 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::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, )) +# 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::type + , Last + , typename apply2::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::type + , Last + , typename apply2::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 +{ + 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, )) +# 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::type + , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step) + , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step) + >::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_ + { + 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::type + , Last + , typename apply2::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 + ::template result_ +{ +}; + +#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 +{ + 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 +{ + 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_ + { + typedef int state; + typedef int iterator; + }; +#endif +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +# undef n_ + +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/full_lambda.hpp b/external/boost/mpl/aux_/full_lambda.hpp new file mode 100644 index 0000000..dfaaedb --- /dev/null +++ b/external/boost/mpl/aux_/full_lambda.hpp @@ -0,0 +1,354 @@ + +#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. + +// $Id: full_lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) +# include +# endif +#endif + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER full_lambda.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +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::is_le +{ +}; + + +template< int N, typename Tag > +struct lambda< arg,Tag AUX778076_ARITY_PARAM(int_<-1>) > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, )) +#include BOOST_PP_ITERATE() + +/// special case for 'protect' +template< typename T, typename Tag > +struct lambda< mpl::protect,Tag AUX778076_ARITY_PARAM(int_<1>) > +{ + typedef false_ is_le; + typedef mpl::protect result_; + typedef result_ type; +}; + +/// specializations for the main 'bind' form +template< + typename F, AUX778076_BIND_PARAMS(typename T) + , typename Tag + > +struct lambda< + bind + , Tag + AUX778076_ARITY_PARAM(int_) + > +{ + typedef false_ is_le; + typedef bind 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 + , Tag2 + , int_<3> + > +{ + typedef lambda< F,Tag2 > l1; + typedef lambda< Tag1,Tag2 > l2; + + typedef typename l1::is_le is_le; + typedef bind1< quote1, typename l1::result_ > arity_; + typedef lambda< typename if_::type,Tag2 > l3; + + typedef aux::le_result3 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 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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if 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_) + , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L) + > result_; + + typedef mpl::protect 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 + , Tag + AUX778076_ARITY_PARAM(int_) + > +{ + 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_) + , Tag + AUX778076_ARITY_PARAM(int_) + > +{ + 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_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/has_apply.hpp b/external/boost/mpl/aux_/has_apply.hpp new file mode 100644 index 0000000..b77b561 --- /dev/null +++ b/external/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. + +// $Id: has_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/aux_/has_begin.hpp b/external/boost/mpl/aux_/has_begin.hpp new file mode 100644 index 0000000..e7403d2 --- /dev/null +++ b/external/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. + +// $Id: has_begin.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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/external/boost/mpl/aux_/has_rebind.hpp b/external/boost/mpl/aux_/has_rebind.hpp new file mode 100644 index 0000000..32cdb83 --- /dev/null +++ b/external/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. + +// $Id: has_rebind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION) +# include +#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# include +# include +# include +# include +#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) +# include +# include +# include +# include +# include +#else +# include +# include +# include +#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 + , has_rebind_impl + , bool_ + >::type +{ +}; + +#else // the rest + +template< typename T > struct has_rebind_tag {}; +no_tag operator|(has_rebind_tag, void const volatile*); + +# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) +template< typename T > +struct has_rebind +{ + static has_rebind_tag* get(); + BOOST_STATIC_CONSTANT(bool, value = + sizeof(has_rebind_tag() | 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() | get()) == sizeof(yes_tag) + ); +}; + +template< typename T > +struct has_rebind + : if_< + is_class + , has_rebind_impl + , bool_ + >::type +{ +}; +# endif // __BORLANDC__ + +#endif + +}}} + +#endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/has_size.hpp b/external/boost/mpl/aux_/has_size.hpp new file mode 100644 index 0000000..3f72c44 --- /dev/null +++ b/external/boost/mpl/aux_/has_size.hpp @@ -0,0 +1,23 @@ + +#ifndef BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED +#define BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: has_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +namespace boost { namespace mpl { namespace aux { +BOOST_MPL_HAS_XXX_TRAIT_DEF(size) +}}} + +#endif // BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/has_tag.hpp b/external/boost/mpl/aux_/has_tag.hpp new file mode 100644 index 0000000..c016ec5 --- /dev/null +++ b/external/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. + +// $Id: has_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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/external/boost/mpl/aux_/has_type.hpp b/external/boost/mpl/aux_/has_type.hpp new file mode 100644 index 0000000..1d301a2 --- /dev/null +++ b/external/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. + +// $Id: has_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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/external/boost/mpl/aux_/include_preprocessed.hpp b/external/boost/mpl/aux_/include_preprocessed.hpp new file mode 100644 index 0000000..b214eeb --- /dev/null +++ b/external/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. + +// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +#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/external/boost/mpl/aux_/inserter_algorithm.hpp b/external/boost/mpl/aux_/inserter_algorithm.hpp new file mode 100644 index 0000000..a6f340c --- /dev/null +++ b/external/boost/mpl/aux_/inserter_algorithm.hpp @@ -0,0 +1,159 @@ + +#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED +#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: inserter_algorithm.hpp 55648 2009-08-18 05:16:53Z agurtovoy $ +// $Date: 2009-08-18 01:16:53 -0400 (Tue, 18 Aug 2009) $ +// $Revision: 55648 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#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 \ +{ \ +}; \ +\ +template< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \ + > \ +struct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \ + : if_< has_push_back< typename clear::type> \ + , aux::name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , back_inserter< typename clear::type > \ + > \ + , aux::reverse_##name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , front_inserter< typename clear::type > \ + > \ + >::type \ +{ \ +}; \ +\ +template< \ + BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ + > \ +struct reverse_##name \ + : aux::reverse_##name##_impl \ +{ \ +}; \ +\ +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 \ + , aux::reverse_##name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , back_inserter< typename clear::type > \ + > \ + , aux::name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , front_inserter< typename clear::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 \ + , aux::name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , back_inserter< typename clear::type > \ + > \ + , aux::reverse_##name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , front_inserter< typename clear::type > \ + > \ + >::type \ +{ \ +}; \ +\ +template< \ + BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ + > \ +struct name \ +{ \ + typedef typename eval_if< \ + is_na \ + , def_##name##_impl \ + , aux::name##_impl \ + >::type type; \ +}; \ +\ +template< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \ + > \ +struct def_reverse_##name##_impl \ + : if_< has_push_back \ + , aux::reverse_##name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , back_inserter< typename clear::type > \ + > \ + , aux::name##_impl< \ + BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ + , front_inserter< typename clear::type > \ + > \ + >::type \ +{ \ +}; \ +template< \ + BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ + > \ +struct reverse_##name \ +{ \ + typedef typename eval_if< \ + is_na \ + , def_reverse_##name##_impl \ + , aux::reverse_##name##_impl \ + >::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/external/boost/mpl/aux_/integral_wrapper.hpp b/external/boost/mpl/aux_/integral_wrapper.hpp new file mode 100644 index 0000000..963a738 --- /dev/null +++ b/external/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. + +// $Id: integral_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#include +#include +#include +#include +#include + +#include + +#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) && (BOOST_WORKAROUND(__hpxstd98, != 1))) + 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(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/external/boost/mpl/aux_/is_msvc_eti_arg.hpp b/external/boost/mpl/aux_/is_msvc_eti_arg.hpp new file mode 100644 index 0000000..322a22e --- /dev/null +++ b/external/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. + +// $Id: is_msvc_eti_arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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 +{ + 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/external/boost/mpl/aux_/iter_apply.hpp b/external/boost/mpl/aux_/iter_apply.hpp new file mode 100644 index 0000000..fc21f73 --- /dev/null +++ b/external/boost/mpl/aux_/iter_apply.hpp @@ -0,0 +1,47 @@ + +#ifndef BOOST_MPL_ITER_APPLY_HPP_INCLUDED +#define BOOST_MPL_ITER_APPLY_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iter_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +namespace boost { namespace mpl { namespace aux { + +template< + typename F + , typename Iterator + > +struct iter_apply1 + : apply1< F,typename deref::type > +{ +}; + +template< + typename F + , typename Iterator1 + , typename Iterator2 + > +struct iter_apply2 + : apply2< + F + , typename deref::type + , typename deref::type + > +{ +}; + +}}} + +#endif // BOOST_MPL_ITER_APPLY_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/iter_fold_if_impl.hpp new file mode 100644 index 0000000..e7c47ea --- /dev/null +++ b/external/boost/mpl/aux_/iter_fold_if_impl.hpp @@ -0,0 +1,210 @@ + +#ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iter_fold_if_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include + +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::type state; + typedef typename IteratorOp::type iterator; + }; +}; + +template<> +struct iter_fold_if_step_impl +{ + 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::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 > 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::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 > 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 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/external/boost/mpl/aux_/iter_fold_impl.hpp b/external/boost/mpl/aux_/iter_fold_impl.hpp new file mode 100644 index 0000000..0ea86c3 --- /dev/null +++ b/external/boost/mpl/aux_/iter_fold_impl.hpp @@ -0,0 +1,42 @@ + +#ifndef BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iter_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +# include +# include +# endif +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER iter_fold_impl.hpp +# include + +#else + +# define AUX778076_FOLD_IMPL_OP(iter) iter +# define AUX778076_FOLD_IMPL_NAME_PREFIX iter_fold +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/lambda_arity_param.hpp b/external/boost/mpl/aux_/lambda_arity_param.hpp new file mode 100644 index 0000000..720918e --- /dev/null +++ b/external/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. + +// $Id: lambda_arity_param.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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/external/boost/mpl/aux_/lambda_no_ctps.hpp b/external/boost/mpl/aux_/lambda_no_ctps.hpp new file mode 100644 index 0000000..cd55fc7 --- /dev/null +++ b/external/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. + +// $Id: lambda_no_ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER lambda_no_ctps.hpp +# include + +#else + +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +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 is_le; + }; +}; + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, )) +#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::type arity_; + typedef typename aux::lambda_impl + ::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::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_ > +{ + 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_ > + , identity + >::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/external/boost/mpl/aux_/lambda_spec.hpp b/external/boost/mpl/aux_/lambda_spec.hpp new file mode 100644 index 0000000..f167479 --- /dev/null +++ b/external/boost/mpl/aux_/lambda_spec.hpp @@ -0,0 +1,49 @@ + +#ifndef BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED +#define BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2007 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +#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_) \ + > \ +{ \ + 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/external/boost/mpl/aux_/lambda_support.hpp b/external/boost/mpl/aux_/lambda_support.hpp new file mode 100644 index 0000000..fa000d8 --- /dev/null +++ b/external/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. + +// $Id: lambda_support.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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 +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +# 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_ 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_ 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::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_ 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__, BOOST_TESTED_AT(0x610)) +# 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 \ + , name* \ + ); \ +::boost::mpl::aux::no_tag operator|( \ + ::boost::mpl::aux::has_rebind_tag \ + , 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 \ + , ::boost::mpl::aux::has_rebind_tag< name >* \ + ); \ +/**/ +#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/external/boost/mpl/aux_/largest_int.hpp b/external/boost/mpl/aux_/largest_int.hpp new file mode 100644 index 0000000..89e987a --- /dev/null +++ b/external/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. + +// $Id: largest_int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +namespace boost { namespace mpl { namespace aux { + +template< typename T > struct integral_rank; + +template<> struct integral_rank : int_<1> {}; +template<> struct integral_rank : int_<2> {}; +template<> struct integral_rank : int_<3> {}; +template<> struct integral_rank : int_<4> {}; +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) +template<> struct integral_rank : int_<5> {}; +#endif +template<> struct integral_rank : int_<6> {}; +template<> struct integral_rank : int_<7> {}; +template<> struct integral_rank : int_<8> {}; +template<> struct integral_rank : int_<9> {}; +template<> struct integral_rank : int_<10> {}; +template<> struct integral_rank : int_<11> {}; + +#if defined(BOOST_HAS_LONG_LONG) +template<> struct integral_rank : int_<12> {}; +template<> struct integral_rank: int_<13> {}; +#endif + +template< typename T1, typename T2 > struct largest_int +#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) + : if_c< + ( integral_rank::value >= integral_rank::value ) + , T1 + , T2 + > +{ +#else +{ + enum { rank1 = integral_rank::value }; + enum { rank2 = integral_rank::value }; + typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type; +#endif +}; + +}}} + +#endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/logical_op.hpp b/external/boost/mpl/aux_/logical_op.hpp new file mode 100644 index 0000000..e4689c9 --- /dev/null +++ b/external/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. + +// $Id: logical_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +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) +{ + 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_ + : BOOST_PP_CAT(AUX778076_OP_VALUE2,_) + { + }; +}; +#else +}; + +template<> +struct BOOST_PP_CAT(AUX778076_OP_NAME,impl) + ::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/external/boost/mpl/aux_/msvc_dtw.hpp b/external/boost/mpl/aux_/msvc_dtw.hpp new file mode 100644 index 0000000..222c477 --- /dev/null +++ b/external/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. + +// $Id: msvc_dtw.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#include + +// 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_ + { +#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::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::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/external/boost/mpl/aux_/msvc_eti_base.hpp b/external/boost/mpl/aux_/msvc_eti_base.hpp new file mode 100644 index 0000000..2c1ada5 --- /dev/null +++ b/external/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. + +// $Id: msvc_eti_base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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 +{ + 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::value > + ::template result_ +{ +}; + +#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 +{ + 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/external/boost/mpl/aux_/msvc_is_class.hpp b/external/boost/mpl/aux_/msvc_is_class.hpp new file mode 100644 index 0000000..e0ccb38 --- /dev/null +++ b/external/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. + +// $Id: msvc_is_class.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#include + +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*, /*typename*/ is_class_helper::type = 0); + static no_tag test(void const volatile*, ...); + + enum { value = sizeof(test((type_wrapper*)0)) == sizeof(yes_tag) }; + typedef bool_ 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 + , false_ + , msvc_is_class_impl + >::type +{ +}; + +}}} + +#endif // BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/msvc_never_true.hpp b/external/boost/mpl/aux_/msvc_never_true.hpp new file mode 100644 index 0000000..93da72e --- /dev/null +++ b/external/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. + +// $Id: msvc_never_true.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#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/external/boost/mpl/aux_/msvc_type.hpp b/external/boost/mpl/aux_/msvc_type.hpp new file mode 100644 index 0000000..ab662db --- /dev/null +++ b/external/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. + +// $Id: msvc_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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 +{ + template< typename T > struct result_ + { + typedef result_ type; + }; +}; + +template< typename T > struct msvc_type + : msvc_type_impl< is_msvc_eti_arg::value > + ::template result_ +{ +}; + +#else // BOOST_MPL_CFG_MSVC_70_ETI_BUG + +template< typename T > struct msvc_type +{ + typedef typename T::type type; +}; + +template<> struct msvc_type +{ + typedef int type; +}; + +#endif + +}}} + +#endif // BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/na.hpp b/external/boost/mpl/aux_/na.hpp new file mode 100644 index 0000000..314250c --- /dev/null +++ b/external/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. + +// $Id: na.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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 + : 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 + : 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 +{ + typedef U type; +}; +#else +template< typename T > struct if_na_impl +{ + template< typename U > struct apply + { + typedef T type; + }; +}; + +template<> struct if_na_impl +{ + template< typename U > struct apply + { + typedef U type; + }; +}; + +template< typename T, typename U > struct if_na + : if_na_impl::template apply +{ +}; +#endif + +}} + +#endif // BOOST_MPL_AUX_NA_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/na_assert.hpp b/external/boost/mpl/aux_/na_assert.hpp new file mode 100644 index 0000000..ece7f4c --- /dev/null +++ b/external/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. + +// $Id: na_assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !BOOST_WORKAROUND(_MSC_FULL_VER, <= 140050601) \ + && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) +# include +# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \ + BOOST_MPL_ASSERT_NOT((boost::mpl::is_na)) \ +/**/ +#else +# include +# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \ + BOOST_STATIC_ASSERT(!boost::mpl::is_na::value) \ +/**/ +#endif + +#endif // BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/na_fwd.hpp b/external/boost/mpl/aux_/na_fwd.hpp new file mode 100644 index 0000000..dd64fc1 --- /dev/null +++ b/external/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. + +// $Id: na_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +BOOST_MPL_AUX_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/external/boost/mpl/aux_/na_spec.hpp b/external/boost/mpl/aux_/na_spec.hpp new file mode 100644 index 0000000..92b2e5a --- /dev/null +++ b/external/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. + +// $Id: na_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#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_ \ +{ \ +}; \ +\ +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/external/boost/mpl/aux_/nested_type_wknd.hpp b/external/boost/mpl/aux_/nested_type_wknd.hpp new file mode 100644 index 0000000..cee3831 --- /dev/null +++ b/external/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. + +// $Id: nested_type_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#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 \ +/**/ +#else +# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \ + ::boost::mpl::aux::nested_type_wknd \ +/**/ +#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/external/boost/mpl/aux_/nttp_decl.hpp b/external/boost/mpl/aux_/nttp_decl.hpp new file mode 100644 index 0000000..0fa254d --- /dev/null +++ b/external/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. + +// $Id: nttp_decl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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 +# 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/external/boost/mpl/aux_/numeric_cast_utils.hpp b/external/boost/mpl/aux_/numeric_cast_utils.hpp new file mode 100644 index 0000000..cc5ea91 --- /dev/null +++ b/external/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. + +// $Id: numeric_cast_utils.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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,N1 >::type + , N2 + > + { +#else + { + typedef typename apply_wrap2< + F + , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST,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,N2 >::type + > + { +#else + { + typedef typename apply_wrap2< + F + , N1 + , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST,N2 >::type + >::type type; +#endif + }; +}; + +}}} + +#endif // BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/numeric_op.hpp b/external/boost/mpl/aux_/numeric_op.hpp new file mode 100644 index 0000000..2b0d6eb --- /dev/null +++ b/external/boost/mpl/aux_/numeric_op.hpp @@ -0,0 +1,315 @@ + +#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. + +// $Id: numeric_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif + +#include + +#if defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + || defined(BOOST_MPL_PREPROCESSING_MODE) + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + + +#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,Tag2 > + , aux::cast1st_impl< AUX778076_OP_IMPL_NAME,Tag1,Tag2 > + >::type +{ +}; + +/// for Digital Mars C++/compilers with no CTPS/TTP support +template<> struct AUX778076_OP_IMPL_NAME +{ + 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 +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template< typename Tag > struct AUX778076_OP_IMPL_NAME +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; +#else +template<> struct AUX778076_OP_IMPL_NAME +{ + template< typename U1, typename U2 > struct apply + { + typedef apply type; + BOOST_STATIC_CONSTANT(int, value = 0); + }; +}; + +template<> struct AUX778076_OP_IMPL_NAME +{ + 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 +{ +}; +#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, )) +#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 + , BOOST_PP_CAT(AUX778076_OP_NAME,2) + , AUX778076_OP_NAME< + BOOST_PP_CAT(AUX778076_OP_NAME,2) + , 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::type + , typename AUX778076_OP_TAG_NAME::type + >::template apply::type +#else + : aux::msvc_eti_base< typename apply_wrap2< + AUX778076_OP_IMPL_NAME< + typename AUX778076_OP_TAG_NAME::type + , typename AUX778076_OP_TAG_NAME::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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if BOOST_PP_ITERATION_DEPTH() == 1 + +# define i_ BOOST_PP_FRAME_ITERATION(1) + +template< + BOOST_MPL_PP_PARAMS(i_, typename N) + > +struct AUX778076_OP_NAME +#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_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp new file mode 100644 index 0000000..5cb50dc --- /dev/null +++ b/external/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 the main "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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp new file mode 100644 index 0000000..9654ee3 --- /dev/null +++ b/external/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 the main "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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/bcc/and.hpp b/external/boost/mpl/aux_/preprocessed/bcc/and.hpp new file mode 100644 index 0000000..f345689 --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/apply.hpp b/external/boost/mpl/aux_/preprocessed/bcc/apply.hpp new file mode 100644 index 0000000..bce7c2c --- /dev/null +++ b/external/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 the main "apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp new file mode 100644 index 0000000..1ba706f --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp new file mode 100644 index 0000000..45b75c7 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp @@ -0,0 +1,461 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "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, bool F_has_apply > +struct apply_wrap_impl0_bcb { + typedef typename F::template apply type; +}; + +template< typename F > +struct apply_wrap_impl0_bcb< F,true > { + typedef typename F::apply type; +}; + +template< + typename F + > +struct apply_wrap_impl0< + 0 + , F + + > +{ + typedef apply_wrap_impl0_bcb< F, aux::has_apply::value >::type 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/external/boost/mpl/aux_/preprocessed/bcc/arg.hpp b/external/boost/mpl/aux_/preprocessed/bcc/arg.hpp new file mode 100644 index 0000000..3ac4340 --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp new file mode 100644 index 0000000..74b0029 --- /dev/null +++ b/external/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 the main "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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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/external/boost/mpl/aux_/preprocessed/bcc/bind.hpp b/external/boost/mpl/aux_/preprocessed/bcc/bind.hpp new file mode 100644 index 0000000..e769a0c --- /dev/null +++ b/external/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 the main "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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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/external/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp new file mode 100644 index 0000000..962b5c9 --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/bitand.hpp b/external/boost/mpl/aux_/preprocessed/bcc/bitand.hpp new file mode 100644 index 0000000..527b689 --- /dev/null +++ b/external/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 the main "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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/bcc/bitor.hpp b/external/boost/mpl/aux_/preprocessed/bcc/bitor.hpp new file mode 100644 index 0000000..3f0d5ca --- /dev/null +++ b/external/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 the main "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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp new file mode 100644 index 0000000..06996c0 --- /dev/null +++ b/external/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 the main "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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/bcc/deque.hpp b/external/boost/mpl/aux_/preprocessed/bcc/deque.hpp new file mode 100644 index 0000000..06505c9 --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/bcc/divides.hpp b/external/boost/mpl/aux_/preprocessed/bcc/divides.hpp new file mode 100644 index 0000000..6b4178a --- /dev/null +++ b/external/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 the main "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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp new file mode 100644 index 0000000..901a93c --- /dev/null +++ b/external/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 the main "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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp new file mode 100644 index 0000000..45ab4e7 --- /dev/null +++ b/external/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 the main "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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp new file mode 100644 index 0000000..8b2bf59 --- /dev/null +++ b/external/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 the main "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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect 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, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 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/external/boost/mpl/aux_/preprocessed/bcc/greater.hpp b/external/boost/mpl/aux_/preprocessed/bcc/greater.hpp new file mode 100644 index 0000000..3d1c3dc --- /dev/null +++ b/external/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 the main "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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp new file mode 100644 index 0000000..fb01186 --- /dev/null +++ b/external/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 the main "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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/bcc/inherit.hpp b/external/boost/mpl/aux_/preprocessed/bcc/inherit.hpp new file mode 100644 index 0000000..6adcc01 --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp new file mode 100644 index 0000000..b767e95 --- /dev/null +++ b/external/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 the main "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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp new file mode 100644 index 0000000..1dd216c --- /dev/null +++ b/external/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 the main "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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp new file mode 100644 index 0000000..75b30ce --- /dev/null +++ b/external/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 the main "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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc/less.hpp b/external/boost/mpl/aux_/preprocessed/bcc/less.hpp new file mode 100644 index 0000000..0b6ce1d --- /dev/null +++ b/external/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 the main "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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp new file mode 100644 index 0000000..0010e08 --- /dev/null +++ b/external/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 the main "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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/bcc/list.hpp b/external/boost/mpl/aux_/preprocessed/bcc/list.hpp new file mode 100644 index 0000000..cbd58ac --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/bcc/list_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc/list_c.hpp new file mode 100644 index 0000000..495c3f7 --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/bcc/map.hpp b/external/boost/mpl/aux_/preprocessed/bcc/map.hpp new file mode 100644 index 0000000..80ef156 --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/bcc/minus.hpp b/external/boost/mpl/aux_/preprocessed/bcc/minus.hpp new file mode 100644 index 0000000..cfddc15 --- /dev/null +++ b/external/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 the main "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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/bcc/modulus.hpp b/external/boost/mpl/aux_/preprocessed/bcc/modulus.hpp new file mode 100644 index 0000000..eb5eff0 --- /dev/null +++ b/external/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 the main "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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp new file mode 100644 index 0000000..68356ee --- /dev/null +++ b/external/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 the main "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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/bcc/or.hpp b/external/boost/mpl/aux_/preprocessed/bcc/or.hpp new file mode 100644 index 0000000..ff7ce9f --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp new file mode 100644 index 0000000..b306bbb --- /dev/null +++ b/external/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc/plus.hpp b/external/boost/mpl/aux_/preprocessed/bcc/plus.hpp new file mode 100644 index 0000000..82539ab --- /dev/null +++ b/external/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 the main "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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/bcc/quote.hpp b/external/boost/mpl/aux_/preprocessed/bcc/quote.hpp new file mode 100644 index 0000000..677a3f9 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc/quote.hpp @@ -0,0 +1,119 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "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 + + { + typedef typename quote_impl< + F + , aux::has_type< F >::value + >::type type; + }; +}; + +template< + template< typename P1, typename P2 > class F + , typename Tag = void_ + > +struct quote2 +{ + template< typename U1, typename U2 > struct apply + + { + typedef typename quote_impl< + F< U1,U2 > + , aux::has_type< F< U1,U2 > >::value + >::type type; + }; +}; + +template< + template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ + > +struct quote3 +{ + template< typename U1, typename U2, typename U3 > struct apply + + { + typedef typename quote_impl< + F< U1,U2,U3 > + , aux::has_type< F< U1,U2,U3 > >::value + >::type type; + }; +}; + +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 + + { + typedef typename quote_impl< + F< U1,U2,U3,U4 > + , aux::has_type< F< U1,U2,U3,U4 > >::value + >::type type; + }; +}; + +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 + + { + typedef typename quote_impl< + F< U1,U2,U3,U4,U5 > + , aux::has_type< F< U1,U2,U3,U4,U5 > >::value + >::type type; + }; +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp new file mode 100644 index 0000000..372f0d2 --- /dev/null +++ b/external/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 the main "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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..44aadf7 --- /dev/null +++ b/external/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 the main "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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/bcc/set.hpp b/external/boost/mpl/aux_/preprocessed/bcc/set.hpp new file mode 100644 index 0000000..ace3a4f --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/bcc/set_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc/set_c.hpp new file mode 100644 index 0000000..4e6993c --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp new file mode 100644 index 0000000..6d19e94 --- /dev/null +++ b/external/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 the main "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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp new file mode 100644 index 0000000..dd31d97 --- /dev/null +++ b/external/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 the main "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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp new file mode 100644 index 0000000..b24a0a7 --- /dev/null +++ b/external/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 the main "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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc/times.hpp b/external/boost/mpl/aux_/preprocessed/bcc/times.hpp new file mode 100644 index 0000000..ab100f1 --- /dev/null +++ b/external/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 the main "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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp new file mode 100644 index 0000000..f391dc1 --- /dev/null +++ b/external/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 the main "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::value + , F + , Args + >::type type; + + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc/vector.hpp b/external/boost/mpl/aux_/preprocessed/bcc/vector.hpp new file mode 100644 index 0000000..803e217 --- /dev/null +++ b/external/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 the main "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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp new file mode 100644 index 0000000..643b7fd --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/bcc551/and.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/and.hpp new file mode 100644 index 0000000..010ad1f --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/apply.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/apply.hpp new file mode 100644 index 0000000..e08eacc --- /dev/null +++ b/external/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::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp new file mode 100644 index 0000000..b2ed5d5 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp new file mode 100644 index 0000000..2ffe709 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/arg.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp new file mode 100644 index 0000000..a29daa0 --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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/external/boost/mpl/aux_/preprocessed/bcc551/bind.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/bind.hpp new file mode 100644 index 0000000..34b1b5c --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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/external/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp new file mode 100644 index 0000000..022cba3 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp new file mode 100644 index 0000000..0bbf54e --- /dev/null +++ b/external/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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp new file mode 100644 index 0000000..55b31cb --- /dev/null +++ b/external/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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp new file mode 100644 index 0000000..ec19391 --- /dev/null +++ b/external/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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/deque.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/deque.hpp new file mode 100644 index 0000000..de67398 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/bcc551/divides.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/divides.hpp new file mode 100644 index 0000000..86f1682 --- /dev/null +++ b/external/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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp new file mode 100644 index 0000000..62c9945 --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp new file mode 100644 index 0000000..9e7a293 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp new file mode 100644 index 0000000..e3eef71 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect 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, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 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/external/boost/mpl/aux_/preprocessed/bcc551/greater.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/greater.hpp new file mode 100644 index 0000000..14d8e08 --- /dev/null +++ b/external/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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp new file mode 100644 index 0000000..2603f91 --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp new file mode 100644 index 0000000..00f31c4 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp new file mode 100644 index 0000000..805790e --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc551/less.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/less.hpp new file mode 100644 index 0000000..4fe3cd1 --- /dev/null +++ b/external/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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp new file mode 100644 index 0000000..ca2894f --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/list.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/list.hpp new file mode 100644 index 0000000..4e8ad53 --- /dev/null +++ b/external/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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp new file mode 100644 index 0000000..0b48a7f --- /dev/null +++ b/external/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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/bcc551/map.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/map.hpp new file mode 100644 index 0000000..837e013 --- /dev/null +++ b/external/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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/bcc551/minus.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/minus.hpp new file mode 100644 index 0000000..71d4913 --- /dev/null +++ b/external/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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp new file mode 100644 index 0000000..224b349 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp new file mode 100644 index 0000000..98b21b1 --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/or.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/or.hpp new file mode 100644 index 0000000..31e1aaa --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/plus.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/plus.hpp new file mode 100644 index 0000000..a9f6ee7 --- /dev/null +++ b/external/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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/quote.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/quote.hpp new file mode 100644 index 0000000..e7a7f00 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp new file mode 100644 index 0000000..7a07414 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..39a4057 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/bcc551/set.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/set.hpp new file mode 100644 index 0000000..5721922 --- /dev/null +++ b/external/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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp new file mode 100644 index 0000000..cbeb932 --- /dev/null +++ b/external/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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp new file mode 100644 index 0000000..b5b181c --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp new file mode 100644 index 0000000..f7a342e --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp new file mode 100644 index 0000000..1164f0f --- /dev/null +++ b/external/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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc551/times.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/times.hpp new file mode 100644 index 0000000..cb97cc4 --- /dev/null +++ b/external/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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp new file mode 100644 index 0000000..ef7c2b0 --- /dev/null +++ b/external/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::value + , F + , Args + >::type type; + + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc551/vector.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/vector.hpp new file mode 100644 index 0000000..bfa9565 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp new file mode 100644 index 0000000..0f1560d --- /dev/null +++ b/external/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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp new file mode 100644 index 0000000..5cb50dc --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp new file mode 100644 index 0000000..9654ee3 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp new file mode 100644 index 0000000..f345689 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp new file mode 100644 index 0000000..bce7c2c --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "apply.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< + typename F + > +struct apply0 + + : apply_wrap0< + typename lambda::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp new file mode 100644 index 0000000..1ba706f --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp new file mode 100644 index 0000000..d88129d --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp @@ -0,0 +1,456 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp new file mode 100644 index 0000000..3ac4340 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp new file mode 100644 index 0000000..74b0029 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp new file mode 100644 index 0000000..e769a0c --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp new file mode 100644 index 0000000..962b5c9 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp new file mode 100644 index 0000000..527b689 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp new file mode 100644 index 0000000..3f0d5ca --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp new file mode 100644 index 0000000..06996c0 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp new file mode 100644 index 0000000..06505c9 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp new file mode 100644 index 0000000..6b4178a --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp new file mode 100644 index 0000000..901a93c --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp new file mode 100644 index 0000000..45ab4e7 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp new file mode 100644 index 0000000..8b2bf59 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect 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, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 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/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp new file mode 100644 index 0000000..3d1c3dc --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp new file mode 100644 index 0000000..fb01186 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp new file mode 100644 index 0000000..6adcc01 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp new file mode 100644 index 0000000..b767e95 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp new file mode 100644 index 0000000..1dd216c --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp new file mode 100644 index 0000000..75b30ce --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp new file mode 100644 index 0000000..0b6ce1d --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp new file mode 100644 index 0000000..0010e08 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp new file mode 100644 index 0000000..cbd58ac --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp new file mode 100644 index 0000000..495c3f7 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp new file mode 100644 index 0000000..80ef156 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp new file mode 100644 index 0000000..cfddc15 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp new file mode 100644 index 0000000..eb5eff0 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp new file mode 100644 index 0000000..68356ee --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp new file mode 100644 index 0000000..ff7ce9f --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp new file mode 100644 index 0000000..b306bbb --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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/external/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp new file mode 100644 index 0000000..82539ab --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp new file mode 100644 index 0000000..7f9d18b --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp @@ -0,0 +1,11 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "quote.hpp" header +// -- DO NOT modify by hand! + diff --git a/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp new file mode 100644 index 0000000..372f0d2 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..44aadf7 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp new file mode 100644 index 0000000..ace3a4f --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp new file mode 100644 index 0000000..4e6993c --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp new file mode 100644 index 0000000..6d19e94 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp new file mode 100644 index 0000000..dd31d97 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp new file mode 100644 index 0000000..b24a0a7 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp new file mode 100644 index 0000000..ab100f1 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp new file mode 100644 index 0000000..f391dc1 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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::value + , F + , Args + >::type type; + + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp new file mode 100644 index 0000000..803e217 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/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 the main "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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp new file mode 100644 index 0000000..643b7fd --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp @@ -0,0 +1,309 @@ + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +// *Preprocessed* version of the main "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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/dmc/and.hpp b/external/boost/mpl/aux_/preprocessed/dmc/and.hpp new file mode 100644 index 0000000..010ad1f --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/apply.hpp b/external/boost/mpl/aux_/preprocessed/dmc/apply.hpp new file mode 100644 index 0000000..e08eacc --- /dev/null +++ b/external/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::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp new file mode 100644 index 0000000..b2ed5d5 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp new file mode 100644 index 0000000..34d51a1 --- /dev/null +++ b/external/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::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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/dmc/arg.hpp b/external/boost/mpl/aux_/preprocessed/dmc/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp new file mode 100644 index 0000000..1e73429 --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/dmc/bind.hpp b/external/boost/mpl/aux_/preprocessed/dmc/bind.hpp new file mode 100644 index 0000000..94bfe1f --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp new file mode 100644 index 0000000..181bc77 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/bitand.hpp b/external/boost/mpl/aux_/preprocessed/dmc/bitand.hpp new file mode 100644 index 0000000..0bbf54e --- /dev/null +++ b/external/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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/dmc/bitor.hpp b/external/boost/mpl/aux_/preprocessed/dmc/bitor.hpp new file mode 100644 index 0000000..55b31cb --- /dev/null +++ b/external/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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp new file mode 100644 index 0000000..ec19391 --- /dev/null +++ b/external/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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/dmc/deque.hpp b/external/boost/mpl/aux_/preprocessed/dmc/deque.hpp new file mode 100644 index 0000000..de67398 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/dmc/divides.hpp b/external/boost/mpl/aux_/preprocessed/dmc/divides.hpp new file mode 100644 index 0000000..86f1682 --- /dev/null +++ b/external/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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp new file mode 100644 index 0000000..62c9945 --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp new file mode 100644 index 0000000..9e7a293 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp new file mode 100644 index 0000000..026418c --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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/external/boost/mpl/aux_/preprocessed/dmc/greater.hpp b/external/boost/mpl/aux_/preprocessed/dmc/greater.hpp new file mode 100644 index 0000000..14d8e08 --- /dev/null +++ b/external/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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp new file mode 100644 index 0000000..2603f91 --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/dmc/inherit.hpp b/external/boost/mpl/aux_/preprocessed/dmc/inherit.hpp new file mode 100644 index 0000000..00f31c4 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp new file mode 100644 index 0000000..805790e --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/dmc/less.hpp b/external/boost/mpl/aux_/preprocessed/dmc/less.hpp new file mode 100644 index 0000000..4fe3cd1 --- /dev/null +++ b/external/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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp new file mode 100644 index 0000000..ca2894f --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/dmc/list.hpp b/external/boost/mpl/aux_/preprocessed/dmc/list.hpp new file mode 100644 index 0000000..4e8ad53 --- /dev/null +++ b/external/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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/dmc/list_c.hpp b/external/boost/mpl/aux_/preprocessed/dmc/list_c.hpp new file mode 100644 index 0000000..0b48a7f --- /dev/null +++ b/external/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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/dmc/map.hpp b/external/boost/mpl/aux_/preprocessed/dmc/map.hpp new file mode 100644 index 0000000..837e013 --- /dev/null +++ b/external/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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/dmc/minus.hpp b/external/boost/mpl/aux_/preprocessed/dmc/minus.hpp new file mode 100644 index 0000000..71d4913 --- /dev/null +++ b/external/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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/dmc/modulus.hpp b/external/boost/mpl/aux_/preprocessed/dmc/modulus.hpp new file mode 100644 index 0000000..224b349 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp new file mode 100644 index 0000000..98b21b1 --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/dmc/or.hpp b/external/boost/mpl/aux_/preprocessed/dmc/or.hpp new file mode 100644 index 0000000..31e1aaa --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/plus.hpp b/external/boost/mpl/aux_/preprocessed/dmc/plus.hpp new file mode 100644 index 0000000..a9f6ee7 --- /dev/null +++ b/external/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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/dmc/quote.hpp b/external/boost/mpl/aux_/preprocessed/dmc/quote.hpp new file mode 100644 index 0000000..d7d0420 --- /dev/null +++ b/external/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 + , aux::has_type< F >::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/external/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp new file mode 100644 index 0000000..c468684 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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/external/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..658f92a --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/dmc/set.hpp b/external/boost/mpl/aux_/preprocessed/dmc/set.hpp new file mode 100644 index 0000000..5721922 --- /dev/null +++ b/external/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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/dmc/set_c.hpp b/external/boost/mpl/aux_/preprocessed/dmc/set_c.hpp new file mode 100644 index 0000000..cbeb932 --- /dev/null +++ b/external/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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp new file mode 100644 index 0000000..b5b181c --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp new file mode 100644 index 0000000..f7a342e --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp new file mode 100644 index 0000000..a23fc23 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/dmc/times.hpp b/external/boost/mpl/aux_/preprocessed/dmc/times.hpp new file mode 100644 index 0000000..cb97cc4 --- /dev/null +++ b/external/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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp new file mode 100644 index 0000000..2194ce9 --- /dev/null +++ b/external/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::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/dmc/vector.hpp b/external/boost/mpl/aux_/preprocessed/dmc/vector.hpp new file mode 100644 index 0000000..bfa9565 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp new file mode 100644 index 0000000..0f1560d --- /dev/null +++ b/external/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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/gcc/and.hpp b/external/boost/mpl/aux_/preprocessed/gcc/and.hpp new file mode 100644 index 0000000..010ad1f --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/apply.hpp b/external/boost/mpl/aux_/preprocessed/gcc/apply.hpp new file mode 100644 index 0000000..e08eacc --- /dev/null +++ b/external/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::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp new file mode 100644 index 0000000..b2ed5d5 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp new file mode 100644 index 0000000..34d51a1 --- /dev/null +++ b/external/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::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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/gcc/arg.hpp b/external/boost/mpl/aux_/preprocessed/gcc/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp new file mode 100644 index 0000000..b070232 --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/gcc/bind.hpp b/external/boost/mpl/aux_/preprocessed/gcc/bind.hpp new file mode 100644 index 0000000..0e9513a --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp new file mode 100644 index 0000000..c4a5060 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/bitand.hpp b/external/boost/mpl/aux_/preprocessed/gcc/bitand.hpp new file mode 100644 index 0000000..0bbf54e --- /dev/null +++ b/external/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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/gcc/bitor.hpp b/external/boost/mpl/aux_/preprocessed/gcc/bitor.hpp new file mode 100644 index 0000000..55b31cb --- /dev/null +++ b/external/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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp new file mode 100644 index 0000000..ec19391 --- /dev/null +++ b/external/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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/gcc/deque.hpp b/external/boost/mpl/aux_/preprocessed/gcc/deque.hpp new file mode 100644 index 0000000..de67398 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/gcc/divides.hpp b/external/boost/mpl/aux_/preprocessed/gcc/divides.hpp new file mode 100644 index 0000000..86f1682 --- /dev/null +++ b/external/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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp new file mode 100644 index 0000000..62c9945 --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp new file mode 100644 index 0000000..9e7a293 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp new file mode 100644 index 0000000..e3eef71 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg,Tag, int_< -1 > > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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,Tag, int_<1> > +{ + typedef false_ is_le; + typedef mpl::protect 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, typename l1::result_ > arity_; + typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3; + typedef aux::le_result3 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/external/boost/mpl/aux_/preprocessed/gcc/greater.hpp b/external/boost/mpl/aux_/preprocessed/gcc/greater.hpp new file mode 100644 index 0000000..14d8e08 --- /dev/null +++ b/external/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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp new file mode 100644 index 0000000..2603f91 --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/gcc/inherit.hpp b/external/boost/mpl/aux_/preprocessed/gcc/inherit.hpp new file mode 100644 index 0000000..00f31c4 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp new file mode 100644 index 0000000..805790e --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/gcc/less.hpp b/external/boost/mpl/aux_/preprocessed/gcc/less.hpp new file mode 100644 index 0000000..4fe3cd1 --- /dev/null +++ b/external/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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp new file mode 100644 index 0000000..ca2894f --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/gcc/list.hpp b/external/boost/mpl/aux_/preprocessed/gcc/list.hpp new file mode 100644 index 0000000..4e8ad53 --- /dev/null +++ b/external/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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/gcc/list_c.hpp b/external/boost/mpl/aux_/preprocessed/gcc/list_c.hpp new file mode 100644 index 0000000..0b48a7f --- /dev/null +++ b/external/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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/gcc/map.hpp b/external/boost/mpl/aux_/preprocessed/gcc/map.hpp new file mode 100644 index 0000000..837e013 --- /dev/null +++ b/external/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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/gcc/minus.hpp b/external/boost/mpl/aux_/preprocessed/gcc/minus.hpp new file mode 100644 index 0000000..71d4913 --- /dev/null +++ b/external/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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/gcc/modulus.hpp b/external/boost/mpl/aux_/preprocessed/gcc/modulus.hpp new file mode 100644 index 0000000..224b349 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp new file mode 100644 index 0000000..98b21b1 --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/gcc/or.hpp b/external/boost/mpl/aux_/preprocessed/gcc/or.hpp new file mode 100644 index 0000000..31e1aaa --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/gcc/plus.hpp b/external/boost/mpl/aux_/preprocessed/gcc/plus.hpp new file mode 100644 index 0000000..a9f6ee7 --- /dev/null +++ b/external/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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/gcc/quote.hpp b/external/boost/mpl/aux_/preprocessed/gcc/quote.hpp new file mode 100644 index 0000000..020f093 --- /dev/null +++ b/external/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 + , aux::has_type< F >::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/external/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp new file mode 100644 index 0000000..c468684 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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/external/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..658f92a --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/gcc/set.hpp b/external/boost/mpl/aux_/preprocessed/gcc/set.hpp new file mode 100644 index 0000000..5721922 --- /dev/null +++ b/external/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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/gcc/set_c.hpp b/external/boost/mpl/aux_/preprocessed/gcc/set_c.hpp new file mode 100644 index 0000000..cbeb932 --- /dev/null +++ b/external/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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp new file mode 100644 index 0000000..b5b181c --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp new file mode 100644 index 0000000..f7a342e --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp new file mode 100644 index 0000000..daec4b8 --- /dev/null +++ b/external/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp @@ -0,0 +1,97 @@ + +// 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 the main "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 >, 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(::boost::mpl::aux::arity_helper(type_wrapper(), arity_tag())) - 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_ type; +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/gcc/times.hpp b/external/boost/mpl/aux_/preprocessed/gcc/times.hpp new file mode 100644 index 0000000..cb97cc4 --- /dev/null +++ b/external/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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp new file mode 100644 index 0000000..2194ce9 --- /dev/null +++ b/external/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::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/gcc/vector.hpp b/external/boost/mpl/aux_/preprocessed/gcc/vector.hpp new file mode 100644 index 0000000..bfa9565 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp new file mode 100644 index 0000000..0f1560d --- /dev/null +++ b/external/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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp new file mode 100644 index 0000000..36337c8 --- /dev/null +++ b/external/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 + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef iter1 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::type iter4; + typedef iter4 type; + }; + + /// ETI workaround + template<> struct apply + { + 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/external/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp new file mode 100644 index 0000000..4ffbe78 --- /dev/null +++ b/external/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 + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<1> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef iter1 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; + + /// ETI workaround + template<> struct apply + { + typedef int type; + }; + +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::type iter4; + typedef iter4 type; + }; + + /// ETI workaround + template<> struct apply + { + 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/external/boost/mpl/aux_/preprocessed/msvc60/and.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/and.hpp new file mode 100644 index 0000000..555c800 --- /dev/null +++ b/external/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 +{ + 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 + ::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/external/boost/mpl/aux_/preprocessed/msvc60/apply.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/apply.hpp new file mode 100644 index 0000000..a3e2929 --- /dev/null +++ b/external/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::type + + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +/// workaround for ETI bug +template<> +struct apply0 +{ + typedef int type; +}; + +template< + typename F, typename T1 + > +struct apply1 + +{ + typedef typename apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp new file mode 100644 index 0000000..f0f86c1 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp new file mode 100644 index 0000000..4e89507 --- /dev/null +++ b/external/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_ + { + template< typename P = int > struct apply + { + typedef int type; + }; + }; + + template< typename T = int > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply<> + { + }; + +}; + +template< + typename F + > +struct apply_wrap0 +{ + typedef typename msvc_apply0::template result_< + + >::type type; +}; + +/// workaround for ETI bug +template<> +struct apply_wrap0 +{ + typedef int type; +}; + +template< typename F> +struct msvc_apply1 +{ + template< bool > struct f_ : F {}; + template<> struct f_ + { + template< typename P1 > struct apply + { + typedef int type; + }; + }; + + template< typename T1 > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply + { + }; +}; + +template< + typename F, typename T1 + > +struct apply_wrap1 +{ + typedef typename msvc_apply1::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_ + { + template< typename P1, typename P2 > struct apply + { + typedef int type; + }; + }; + + template< typename T1, typename T2 > struct result_ + : f_< aux::msvc_never_true::value > + ::template apply< T1,T2 > + { + }; +}; + +template< + typename F, typename T1, typename T2 + > +struct apply_wrap2 +{ + typedef typename msvc_apply2::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_ + { + 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::value > + ::template apply< T1,T2,T3 > + { + }; +}; + +template< + typename F, typename T1, typename T2, typename T3 + > +struct apply_wrap3 +{ + typedef typename msvc_apply3::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_ + { + 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::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::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_ + { + 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::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::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/external/boost/mpl/aux_/preprocessed/msvc60/arg.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp new file mode 100644 index 0000000..4f12a40 --- /dev/null +++ b/external/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 +{ + 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::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*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // 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*); + +} // 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/external/boost/mpl/aux_/preprocessed/msvc60/bind.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/bind.hpp new file mode 100644 index 0000000..53c76e8 --- /dev/null +++ b/external/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 +{ + 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::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::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // 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*); + +} // 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/external/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp new file mode 100644 index 0000000..022cba3 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp new file mode 100644 index 0000000..e96cf1a --- /dev/null +++ b/external/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 + , 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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp new file mode 100644 index 0000000..bbc96ab --- /dev/null +++ b/external/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 + , 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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp new file mode 100644 index 0000000..4c14297 --- /dev/null +++ b/external/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 + , 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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/deque.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/deque.hpp new file mode 100644 index 0000000..a0445d9 --- /dev/null +++ b/external/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 +{ + 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::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/divides.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/divides.hpp new file mode 100644 index 0000000..7681491 --- /dev/null +++ b/external/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 + , 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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp new file mode 100644 index 0000000..64e9065 --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp new file mode 100644 index 0000000..4b3c690 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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 + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp new file mode 100644 index 0000000..bf81873 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/greater.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/greater.hpp new file mode 100644 index 0000000..5f5662d --- /dev/null +++ b/external/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::type + , typename greater_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp new file mode 100644 index 0000000..ae776fc --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp new file mode 100644 index 0000000..233a1ec --- /dev/null +++ b/external/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::value + , is_empty_base::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/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp new file mode 100644 index 0000000..69aadc4 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/less.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/less.hpp new file mode 100644 index 0000000..951f060 --- /dev/null +++ b/external/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::type + , typename less_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp new file mode 100644 index 0000000..a56e692 --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/list.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/list.hpp new file mode 100644 index 0000000..e5ea456 --- /dev/null +++ b/external/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 +{ + 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::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp new file mode 100644 index 0000000..ab25482 --- /dev/null +++ b/external/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 +{ + 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::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/map.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/map.hpp new file mode 100644 index 0000000..970e0b7 --- /dev/null +++ b/external/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 +{ + 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::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/minus.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/minus.hpp new file mode 100644 index 0000000..b47f328 --- /dev/null +++ b/external/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 + , 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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp new file mode 100644 index 0000000..c12b3f9 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp new file mode 100644 index 0000000..6e56b1e --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/or.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/or.hpp new file mode 100644 index 0000000..3f7394e --- /dev/null +++ b/external/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 +{ + 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 + ::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/external/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc60/plus.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/plus.hpp new file mode 100644 index 0000000..1052335 --- /dev/null +++ b/external/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 + , 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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/quote.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/quote.hpp new file mode 100644 index 0000000..e7a7f00 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp new file mode 100644 index 0000000..adf15b6 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..208ad97 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/set.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/set.hpp new file mode 100644 index 0000000..95aaa5c --- /dev/null +++ b/external/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 +{ + 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::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp new file mode 100644 index 0000000..1ff34f9 --- /dev/null +++ b/external/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 +{ + 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::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp new file mode 100644 index 0000000..3861ca1 --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp new file mode 100644 index 0000000..24ea094 --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp new file mode 100644 index 0000000..1668771 --- /dev/null +++ b/external/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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +template<> +struct template_arity + : mpl::int_< -1 > +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/times.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/times.hpp new file mode 100644 index 0000000..dee7fd4 --- /dev/null +++ b/external/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 + , 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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp new file mode 100644 index 0000000..26533dd --- /dev/null +++ b/external/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::value > + ::template apply< F,Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc60/vector.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/vector.hpp new file mode 100644 index 0000000..a6c7b62 --- /dev/null +++ b/external/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 +{ + 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::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::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/external/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp new file mode 100644 index 0000000..c522d08 --- /dev/null +++ b/external/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 +{ + 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::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/msvc70/and.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/and.hpp new file mode 100644 index 0000000..e58640a --- /dev/null +++ b/external/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 +{ + 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/external/boost/mpl/aux_/preprocessed/msvc70/apply.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/apply.hpp new file mode 100644 index 0000000..d46d030 --- /dev/null +++ b/external/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::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +/// workaround for ETI bug +template<> +struct apply0 +{ + typedef int type; +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp new file mode 100644 index 0000000..f0f86c1 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp new file mode 100644 index 0000000..d307517 --- /dev/null +++ b/external/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::type + + > +struct apply_wrap0 + +{ + typedef typename F::template apply< + + >::type type; + +}; + +/// workaround for ETI bug +template<> +struct apply_wrap0 +{ + 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/external/boost/mpl/aux_/preprocessed/msvc70/arg.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp new file mode 100644 index 0000000..4f12a40 --- /dev/null +++ b/external/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 +{ + 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::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*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // 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*); + +} // 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/external/boost/mpl/aux_/preprocessed/msvc70/bind.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/bind.hpp new file mode 100644 index 0000000..53c76e8 --- /dev/null +++ b/external/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 +{ + 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::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::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +template< int N > +aux::yes_tag is_bind_helper(arg*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // 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*); + +} // 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/external/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp new file mode 100644 index 0000000..022cba3 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp new file mode 100644 index 0000000..e54b4ce --- /dev/null +++ b/external/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 + , 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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp new file mode 100644 index 0000000..3b465b3 --- /dev/null +++ b/external/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 + , 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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp new file mode 100644 index 0000000..f7c5d43 --- /dev/null +++ b/external/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 + , 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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/deque.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/deque.hpp new file mode 100644 index 0000000..a0445d9 --- /dev/null +++ b/external/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 +{ + 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::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/divides.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/divides.hpp new file mode 100644 index 0000000..0c60c43 --- /dev/null +++ b/external/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 + , 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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp new file mode 100644 index 0000000..107912b --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp new file mode 100644 index 0000000..58066d8 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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 + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp new file mode 100644 index 0000000..bf81873 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/greater.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/greater.hpp new file mode 100644 index 0000000..f60a860 --- /dev/null +++ b/external/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::type + , typename greater_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp new file mode 100644 index 0000000..2ab09fd --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp new file mode 100644 index 0000000..233a1ec --- /dev/null +++ b/external/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::value + , is_empty_base::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/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp new file mode 100644 index 0000000..50ea754 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/less.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/less.hpp new file mode 100644 index 0000000..72338de --- /dev/null +++ b/external/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::type + , typename less_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp new file mode 100644 index 0000000..b588697 --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/list.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/list.hpp new file mode 100644 index 0000000..e5ea456 --- /dev/null +++ b/external/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 +{ + 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::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp new file mode 100644 index 0000000..ab25482 --- /dev/null +++ b/external/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 +{ + 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::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/map.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/map.hpp new file mode 100644 index 0000000..970e0b7 --- /dev/null +++ b/external/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 +{ + 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::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/minus.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/minus.hpp new file mode 100644 index 0000000..3237fa6 --- /dev/null +++ b/external/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 + , 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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp new file mode 100644 index 0000000..9c672c0 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp new file mode 100644 index 0000000..1e48e7f --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/or.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/or.hpp new file mode 100644 index 0000000..8d0ba0a --- /dev/null +++ b/external/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 +{ + 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/external/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/msvc70/plus.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/plus.hpp new file mode 100644 index 0000000..c8f3355 --- /dev/null +++ b/external/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 + , 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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/quote.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/quote.hpp new file mode 100644 index 0000000..b85880f --- /dev/null +++ b/external/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 +{ + 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 >::value > + ::template result_< F > + + { + }; +}; + +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/external/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp new file mode 100644 index 0000000..7a07414 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..39a4057 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/set.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/set.hpp new file mode 100644 index 0000000..95aaa5c --- /dev/null +++ b/external/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 +{ + 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::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp new file mode 100644 index 0000000..1ff34f9 --- /dev/null +++ b/external/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 +{ + 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::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp new file mode 100644 index 0000000..176fc00 --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp new file mode 100644 index 0000000..6b6e01f --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp new file mode 100644 index 0000000..1668771 --- /dev/null +++ b/external/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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +template<> +struct template_arity + : mpl::int_< -1 > +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/times.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/times.hpp new file mode 100644 index 0000000..a6ae333 --- /dev/null +++ b/external/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 + , 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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp new file mode 100644 index 0000000..26533dd --- /dev/null +++ b/external/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::value > + ::template apply< F,Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/msvc70/vector.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/vector.hpp new file mode 100644 index 0000000..a6c7b62 --- /dev/null +++ b/external/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 +{ + 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::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::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/external/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp new file mode 100644 index 0000000..c522d08 --- /dev/null +++ b/external/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 +{ + 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::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::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/external/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/mwcw/and.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/and.hpp new file mode 100644 index 0000000..010ad1f --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/apply.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/apply.hpp new file mode 100644 index 0000000..e08eacc --- /dev/null +++ b/external/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::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp new file mode 100644 index 0000000..b2ed5d5 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp new file mode 100644 index 0000000..2ffe709 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/arg.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp new file mode 100644 index 0000000..b070232 --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/mwcw/bind.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/bind.hpp new file mode 100644 index 0000000..0e9513a --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp new file mode 100644 index 0000000..c4a5060 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp new file mode 100644 index 0000000..0bbf54e --- /dev/null +++ b/external/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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp new file mode 100644 index 0000000..55b31cb --- /dev/null +++ b/external/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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp new file mode 100644 index 0000000..ec19391 --- /dev/null +++ b/external/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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/deque.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/deque.hpp new file mode 100644 index 0000000..de67398 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/mwcw/divides.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/divides.hpp new file mode 100644 index 0000000..86f1682 --- /dev/null +++ b/external/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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp new file mode 100644 index 0000000..62c9945 --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp new file mode 100644 index 0000000..9e7a293 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp new file mode 100644 index 0000000..bf81873 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/mwcw/greater.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/greater.hpp new file mode 100644 index 0000000..14d8e08 --- /dev/null +++ b/external/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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp new file mode 100644 index 0000000..2603f91 --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp new file mode 100644 index 0000000..00f31c4 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp new file mode 100644 index 0000000..805790e --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/mwcw/less.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/less.hpp new file mode 100644 index 0000000..4fe3cd1 --- /dev/null +++ b/external/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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp new file mode 100644 index 0000000..ca2894f --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/list.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/list.hpp new file mode 100644 index 0000000..4e8ad53 --- /dev/null +++ b/external/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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp new file mode 100644 index 0000000..0b48a7f --- /dev/null +++ b/external/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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/mwcw/map.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/map.hpp new file mode 100644 index 0000000..837e013 --- /dev/null +++ b/external/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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/mwcw/minus.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/minus.hpp new file mode 100644 index 0000000..71d4913 --- /dev/null +++ b/external/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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp new file mode 100644 index 0000000..224b349 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp new file mode 100644 index 0000000..98b21b1 --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/or.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/or.hpp new file mode 100644 index 0000000..31e1aaa --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/plus.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/plus.hpp new file mode 100644 index 0000000..a9f6ee7 --- /dev/null +++ b/external/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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/quote.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/quote.hpp new file mode 100644 index 0000000..d7d0420 --- /dev/null +++ b/external/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 + , aux::has_type< F >::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/external/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp new file mode 100644 index 0000000..c468684 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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/external/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..658f92a --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/mwcw/set.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/set.hpp new file mode 100644 index 0000000..5721922 --- /dev/null +++ b/external/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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp new file mode 100644 index 0000000..cbeb932 --- /dev/null +++ b/external/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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp new file mode 100644 index 0000000..b5b181c --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp new file mode 100644 index 0000000..f7a342e --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp new file mode 100644 index 0000000..a23fc23 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/mwcw/times.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/times.hpp new file mode 100644 index 0000000..cb97cc4 --- /dev/null +++ b/external/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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp new file mode 100644 index 0000000..2194ce9 --- /dev/null +++ b/external/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::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/mwcw/vector.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/vector.hpp new file mode 100644 index 0000000..bfa9565 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp new file mode 100644 index 0000000..0f1560d --- /dev/null +++ b/external/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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/no_ctps/and.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/and.hpp new file mode 100644 index 0000000..555c800 --- /dev/null +++ b/external/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 +{ + 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 + ::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/external/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp new file mode 100644 index 0000000..9838e79 --- /dev/null +++ b/external/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::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::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::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::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::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::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 +{ + 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::value + is_apply_arg::value + is_apply_arg::value + is_apply_arg::value + is_apply_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp new file mode 100644 index 0000000..7de6dad --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp new file mode 100644 index 0000000..efa213d --- /dev/null +++ b/external/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::type + + > +struct apply_wrap0 + + : F::template apply< > +{ +}; + +template< + typename F, typename T1 + + > +struct apply_wrap1 + + : F::template apply +{ +}; + +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/external/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp new file mode 100644 index 0000000..254e5b8 --- /dev/null +++ b/external/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 +{ + 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::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*); + +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*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // 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*); + +} // 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 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 +{ + 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::value + is_bind_arg::value + + is_bind_arg::value + is_bind_arg::value + + is_bind_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp new file mode 100644 index 0000000..12062b4 --- /dev/null +++ b/external/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 +{ + 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::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::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +template< int arity_ > struct bind_chooser; + +aux::no_tag is_bind_helper(...); +template< typename T > aux::no_tag is_bind_helper(protect*); + +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*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +} // 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*); + +} // 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 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 +{ + 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::value + is_bind_arg::value + + is_bind_arg::value + is_bind_arg::value + + is_bind_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp new file mode 100644 index 0000000..c4a5060 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp new file mode 100644 index 0000000..020d6ba --- /dev/null +++ b/external/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 + , 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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp new file mode 100644 index 0000000..0474877 --- /dev/null +++ b/external/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 + , 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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp new file mode 100644 index 0000000..42a9758 --- /dev/null +++ b/external/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 + , 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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp new file mode 100644 index 0000000..a0445d9 --- /dev/null +++ b/external/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 +{ + 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::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::value + + is_deque_arg::value + is_deque_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp new file mode 100644 index 0000000..00636dc --- /dev/null +++ b/external/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 + , 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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp new file mode 100644 index 0000000..b14cdda --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp new file mode 100644 index 0000000..58066d8 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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 + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp new file mode 100644 index 0000000..bf81873 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp new file mode 100644 index 0000000..6fdf8ba --- /dev/null +++ b/external/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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp new file mode 100644 index 0000000..f848eef --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp new file mode 100644 index 0000000..233a1ec --- /dev/null +++ b/external/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::value + , is_empty_base::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/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp new file mode 100644 index 0000000..50ea754 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/less.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/less.hpp new file mode 100644 index 0000000..7fb35e1 --- /dev/null +++ b/external/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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp new file mode 100644 index 0000000..206ecdc --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/list.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/list.hpp new file mode 100644 index 0000000..e5ea456 --- /dev/null +++ b/external/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 +{ + 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::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::value + + is_list_arg::value + is_list_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp new file mode 100644 index 0000000..ab25482 --- /dev/null +++ b/external/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 +{ + 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::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::value + + is_list_c_arg::value + is_list_c_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/map.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/map.hpp new file mode 100644 index 0000000..970e0b7 --- /dev/null +++ b/external/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 +{ + 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::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::value + + is_map_arg::value + is_map_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp new file mode 100644 index 0000000..7b49450 --- /dev/null +++ b/external/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 + , 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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp new file mode 100644 index 0000000..8badbab --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp new file mode 100644 index 0000000..d87d8cd --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/or.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/or.hpp new file mode 100644 index 0000000..3f7394e --- /dev/null +++ b/external/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 +{ + 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 + ::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/external/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp new file mode 100644 index 0000000..a55b24c --- /dev/null +++ b/external/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 + , 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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp new file mode 100644 index 0000000..b85880f --- /dev/null +++ b/external/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 +{ + 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 >::value > + ::template result_< F > + + { + }; +}; + +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/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp new file mode 100644 index 0000000..7a07414 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..39a4057 --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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 + ::template result_< First,Last,State,BackwardOp,ForwardOp > +{ +}; + +}}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/set.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/set.hpp new file mode 100644 index 0000000..95aaa5c --- /dev/null +++ b/external/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 +{ + 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::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::value + + is_set_arg::value + is_set_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp new file mode 100644 index 0000000..1ff34f9 --- /dev/null +++ b/external/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 +{ + 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::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::value + + is_set_c_arg::value + is_set_c_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp new file mode 100644 index 0000000..d14a5e4 --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp new file mode 100644 index 0000000..08c4915 --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp new file mode 100644 index 0000000..1164f0f --- /dev/null +++ b/external/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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/times.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/times.hpp new file mode 100644 index 0000000..fd773cc --- /dev/null +++ b/external/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 + , 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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp new file mode 100644 index 0000000..26533dd --- /dev/null +++ b/external/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::value > + ::template apply< F,Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp new file mode 100644 index 0000000..a6c7b62 --- /dev/null +++ b/external/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 +{ + 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::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::value + + is_vector_arg::value + is_vector_arg::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/external/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp new file mode 100644 index 0000000..c522d08 --- /dev/null +++ b/external/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 +{ + 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::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::value + + is_vector_c_arg::value + is_vector_c_arg::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/external/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/no_ttp/and.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/and.hpp new file mode 100644 index 0000000..010ad1f --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp new file mode 100644 index 0000000..e08eacc --- /dev/null +++ b/external/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::type + + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 1 + , apply0 + , (F ) + ) +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp new file mode 100644 index 0000000..b2ed5d5 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp new file mode 100644 index 0000000..34d51a1 --- /dev/null +++ b/external/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::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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp new file mode 100644 index 0000000..095b84d --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp new file mode 100644 index 0000000..2891440 --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp new file mode 100644 index 0000000..c4a5060 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp new file mode 100644 index 0000000..282771b --- /dev/null +++ b/external/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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp new file mode 100644 index 0000000..bc9c198 --- /dev/null +++ b/external/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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp new file mode 100644 index 0000000..76ce540 --- /dev/null +++ b/external/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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp new file mode 100644 index 0000000..de67398 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp new file mode 100644 index 0000000..9bc7fb1 --- /dev/null +++ b/external/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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp new file mode 100644 index 0000000..fa2dc4a --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp new file mode 100644 index 0000000..9e7a293 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp new file mode 100644 index 0000000..bf81873 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp new file mode 100644 index 0000000..faa3f2b --- /dev/null +++ b/external/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::type + , typename greater_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp new file mode 100644 index 0000000..392d142 --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp new file mode 100644 index 0000000..00f31c4 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp new file mode 100644 index 0000000..805790e --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp new file mode 100644 index 0000000..890a198 --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/less.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/less.hpp new file mode 100644 index 0000000..6451680 --- /dev/null +++ b/external/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::type + , typename less_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp new file mode 100644 index 0000000..00ae0d3 --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/list.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/list.hpp new file mode 100644 index 0000000..4e8ad53 --- /dev/null +++ b/external/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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp new file mode 100644 index 0000000..0b48a7f --- /dev/null +++ b/external/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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/no_ttp/map.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/map.hpp new file mode 100644 index 0000000..837e013 --- /dev/null +++ b/external/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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp new file mode 100644 index 0000000..bb67c59 --- /dev/null +++ b/external/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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp new file mode 100644 index 0000000..6fd0cab --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp new file mode 100644 index 0000000..7c940a5 --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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_ type; + }; +}; + +}} diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/or.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/or.hpp new file mode 100644 index 0000000..31e1aaa --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp new file mode 100644 index 0000000..cecead7 --- /dev/null +++ b/external/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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp new file mode 100644 index 0000000..e7a7f00 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp new file mode 100644 index 0000000..c468684 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..658f92a --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/no_ttp/set.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/set.hpp new file mode 100644 index 0000000..5721922 --- /dev/null +++ b/external/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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp new file mode 100644 index 0000000..cbeb932 --- /dev/null +++ b/external/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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp new file mode 100644 index 0000000..7ef4672 --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp new file mode 100644 index 0000000..91a98f7 --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp new file mode 100644 index 0000000..1164f0f --- /dev/null +++ b/external/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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +}}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/times.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/times.hpp new file mode 100644 index 0000000..d019b57 --- /dev/null +++ b/external/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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp new file mode 100644 index 0000000..2194ce9 --- /dev/null +++ b/external/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::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp new file mode 100644 index 0000000..bfa9565 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp new file mode 100644 index 0000000..0f1560d --- /dev/null +++ b/external/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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp b/external/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp new file mode 100644 index 0000000..26de94c --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_backward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_backward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_backward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename prior::type iter1; + typedef typename prior::type iter2; + typedef typename prior::type iter3; + typedef typename prior::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/external/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp b/external/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp new file mode 100644 index 0000000..b137cc7 --- /dev/null +++ b/external/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::type iter1; + typedef iter1 type; + }; +}; + +template<> +struct advance_forward<2> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef iter2 type; + }; +}; + +template<> +struct advance_forward<3> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef iter3 type; + }; +}; + +template<> +struct advance_forward<4> +{ + template< typename Iterator > struct apply + { + typedef Iterator iter0; + typedef typename next::type iter1; + typedef typename next::type iter2; + typedef typename next::type iter3; + typedef typename next::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/external/boost/mpl/aux_/preprocessed/plain/and.hpp b/external/boost/mpl/aux_/preprocessed/plain/and.hpp new file mode 100644 index 0000000..163913f --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/apply.hpp b/external/boost/mpl/aux_/preprocessed/plain/apply.hpp new file mode 100644 index 0000000..89d9e4b --- /dev/null +++ b/external/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::type + + > +{ +}; + +template< + typename F + > +struct apply< F,na,na,na,na,na > + : apply0 +{ +}; + +template< + typename F, typename T1 + > +struct apply1 + + : apply_wrap1< + typename lambda::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::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::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::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::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/external/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp b/external/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp new file mode 100644 index 0000000..b2ed5d5 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp b/external/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp new file mode 100644 index 0000000..34d51a1 --- /dev/null +++ b/external/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::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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/plain/arg.hpp b/external/boost/mpl/aux_/preprocessed/plain/arg.hpp new file mode 100644 index 0000000..6f2f8a8 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp b/external/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp new file mode 100644 index 0000000..b070232 --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/plain/bind.hpp b/external/boost/mpl/aux_/preprocessed/plain/bind.hpp new file mode 100644 index 0000000..0e9513a --- /dev/null +++ b/external/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, U1, U2, U3, U4, U5 > +{ + typedef typename apply_wrap5, 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, U1, U2, U3, U4, U5 + > +{ + typedef bind0 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 +{ +}; + +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/external/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp b/external/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp new file mode 100644 index 0000000..c4a5060 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/bitand.hpp b/external/boost/mpl/aux_/preprocessed/plain/bitand.hpp new file mode 100644 index 0000000..ee40fb3 --- /dev/null +++ b/external/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::type + , typename bitand_tag::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/external/boost/mpl/aux_/preprocessed/plain/bitor.hpp b/external/boost/mpl/aux_/preprocessed/plain/bitor.hpp new file mode 100644 index 0000000..1e28d3b --- /dev/null +++ b/external/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::type + , typename bitor_tag::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/external/boost/mpl/aux_/preprocessed/plain/bitxor.hpp b/external/boost/mpl/aux_/preprocessed/plain/bitxor.hpp new file mode 100644 index 0000000..2ba879d --- /dev/null +++ b/external/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::type + , typename bitxor_tag::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/external/boost/mpl/aux_/preprocessed/plain/deque.hpp b/external/boost/mpl/aux_/preprocessed/plain/deque.hpp new file mode 100644 index 0000000..de67398 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/plain/divides.hpp b/external/boost/mpl/aux_/preprocessed/plain/divides.hpp new file mode 100644 index 0000000..f365d62 --- /dev/null +++ b/external/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::type + , typename divides_tag::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/external/boost/mpl/aux_/preprocessed/plain/equal_to.hpp b/external/boost/mpl/aux_/preprocessed/plain/equal_to.hpp new file mode 100644 index 0000000..bbc6bf0 --- /dev/null +++ b/external/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::type + , typename equal_to_tag::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/external/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp new file mode 100644 index 0000000..9e7a293 --- /dev/null +++ b/external/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::type >::type state1; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::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::type >::type state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, state1, typename deref::type >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, state2, typename deref::type >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, state3, typename deref::type >::type state4; + typedef typename mpl::next::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::type + , Last + , typename apply2::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/external/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp b/external/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp new file mode 100644 index 0000000..bf81873 --- /dev/null +++ b/external/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::is_le +{ +}; + +template< int N, typename Tag > +struct lambda< arg, Tag > +{ + typedef true_ is_le; + typedef mpl::arg result_; // qualified for the sake of MIPSpro 7.41 + typedef mpl::protect type; +}; + +template< + typename F + , typename Tag + > +struct lambda< + bind0 + , 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 type; +}; + +} // namespace aux + +template< + template< typename P1 > class F + , typename T1 + , typename Tag + > +struct lambda< + F + , 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 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 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 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 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, Tag > +{ + typedef false_ is_le; + typedef mpl::protect 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 le_result_; + typedef typename le_result_::result_ result_; + typedef typename le_result_::type type; +}; + +BOOST_MPL_AUX_NA_SPEC(2, lambda) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/plain/greater.hpp b/external/boost/mpl/aux_/preprocessed/plain/greater.hpp new file mode 100644 index 0000000..38c8bb3 --- /dev/null +++ b/external/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::type + , typename greater_tag::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/external/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp b/external/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp new file mode 100644 index 0000000..2aa8370 --- /dev/null +++ b/external/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::type + , typename greater_equal_tag::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/external/boost/mpl/aux_/preprocessed/plain/inherit.hpp b/external/boost/mpl/aux_/preprocessed/plain/inherit.hpp new file mode 100644 index 0000000..8b34e71 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp b/external/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp new file mode 100644 index 0000000..6951795 --- /dev/null +++ b/external/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 +{ + 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 > 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 > 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/external/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp new file mode 100644 index 0000000..805790e --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,state1,iter1 >::type state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,state2,iter2 >::type state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,state3,iter3 >::type state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp b/external/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp new file mode 100644 index 0000000..f8f109c --- /dev/null +++ b/external/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 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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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_ > + , identity + >::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::type arity_; + typedef typename aux::lambda_impl + ::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::is_le +{ +}; + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/plain/less.hpp b/external/boost/mpl/aux_/preprocessed/plain/less.hpp new file mode 100644 index 0000000..928d0e3 --- /dev/null +++ b/external/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::type + , typename less_tag::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/external/boost/mpl/aux_/preprocessed/plain/less_equal.hpp b/external/boost/mpl/aux_/preprocessed/plain/less_equal.hpp new file mode 100644 index 0000000..364cd96 --- /dev/null +++ b/external/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::type + , typename less_equal_tag::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/external/boost/mpl/aux_/preprocessed/plain/list.hpp b/external/boost/mpl/aux_/preprocessed/plain/list.hpp new file mode 100644 index 0000000..4e8ad53 --- /dev/null +++ b/external/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 +{ + typedef typename list1::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/external/boost/mpl/aux_/preprocessed/plain/list_c.hpp b/external/boost/mpl/aux_/preprocessed/plain/list_c.hpp new file mode 100644 index 0000000..0b48a7f --- /dev/null +++ b/external/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 +{ + typedef typename list0_c::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/external/boost/mpl/aux_/preprocessed/plain/map.hpp b/external/boost/mpl/aux_/preprocessed/plain/map.hpp new file mode 100644 index 0000000..837e013 --- /dev/null +++ b/external/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 +{ + typedef typename map1::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/external/boost/mpl/aux_/preprocessed/plain/minus.hpp b/external/boost/mpl/aux_/preprocessed/plain/minus.hpp new file mode 100644 index 0000000..0b8b5ce --- /dev/null +++ b/external/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::type + , typename minus_tag::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/external/boost/mpl/aux_/preprocessed/plain/modulus.hpp b/external/boost/mpl/aux_/preprocessed/plain/modulus.hpp new file mode 100644 index 0000000..6a64e49 --- /dev/null +++ b/external/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::type + , typename modulus_tag::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/external/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp b/external/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp new file mode 100644 index 0000000..c08d7f0 --- /dev/null +++ b/external/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::type + , typename not_equal_to_tag::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/external/boost/mpl/aux_/preprocessed/plain/or.hpp b/external/boost/mpl/aux_/preprocessed/plain/or.hpp new file mode 100644 index 0000000..986b2e0 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/placeholders.hpp b/external/boost/mpl/aux_/preprocessed/plain/placeholders.hpp new file mode 100644 index 0000000..ff97364 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/plus.hpp b/external/boost/mpl/aux_/preprocessed/plain/plus.hpp new file mode 100644 index 0000000..ed2e432 --- /dev/null +++ b/external/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::type + , typename plus_tag::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/external/boost/mpl/aux_/preprocessed/plain/quote.hpp b/external/boost/mpl/aux_/preprocessed/plain/quote.hpp new file mode 100644 index 0000000..d7d0420 --- /dev/null +++ b/external/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 + , aux::has_type< F >::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/external/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp new file mode 100644 index 0000000..c468684 --- /dev/null +++ b/external/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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + + + typedef fwd_state1 bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + + + typedef fwd_state2 bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + + + typedef fwd_state3 bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::type iter4; + + + typedef fwd_state4 bkwd_state4; + typedef typename apply2< BackwardOp, bkwd_state4, typename deref::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type >::type fwd_state1; + typedef typename mpl::next::type iter1; + typedef typename apply2< ForwardOp, fwd_state1, typename deref::type >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp, fwd_state2, typename deref::type >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp, fwd_state3, typename deref::type >::type fwd_state4; + typedef typename mpl::next::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::type >::type bkwd_state3; + typedef typename apply2< BackwardOp, bkwd_state3, typename deref::type >::type bkwd_state2; + typedef typename apply2< BackwardOp, bkwd_state2, typename deref::type >::type bkwd_state1; + typedef typename apply2< BackwardOp, bkwd_state1, typename deref::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::type + , Last + , typename apply2::type>::type + , BackwardOp + , ForwardOp + > nested_step; + + typedef typename apply2< + BackwardOp + , typename nested_step::state + , typename deref::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/external/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp b/external/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp new file mode 100644 index 0000000..658f92a --- /dev/null +++ b/external/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::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::type iter1; + typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; + typedef typename mpl::next::type iter2; + typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; + typedef typename mpl::next::type iter3; + typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; + typedef typename mpl::next::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::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/external/boost/mpl/aux_/preprocessed/plain/set.hpp b/external/boost/mpl/aux_/preprocessed/plain/set.hpp new file mode 100644 index 0000000..5721922 --- /dev/null +++ b/external/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 +{ + typedef typename set1::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/external/boost/mpl/aux_/preprocessed/plain/set_c.hpp b/external/boost/mpl/aux_/preprocessed/plain/set_c.hpp new file mode 100644 index 0000000..cbeb932 --- /dev/null +++ b/external/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 +{ + typedef typename set0_c::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/external/boost/mpl/aux_/preprocessed/plain/shift_left.hpp b/external/boost/mpl/aux_/preprocessed/plain/shift_left.hpp new file mode 100644 index 0000000..cf9c837 --- /dev/null +++ b/external/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::type + , typename shift_left_tag::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/external/boost/mpl/aux_/preprocessed/plain/shift_right.hpp b/external/boost/mpl/aux_/preprocessed/plain/shift_right.hpp new file mode 100644 index 0000000..477229f --- /dev/null +++ b/external/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::type + , typename shift_right_tag::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/external/boost/mpl/aux_/preprocessed/plain/template_arity.hpp b/external/boost/mpl/aux_/preprocessed/plain/template_arity.hpp new file mode 100644 index 0000000..a23fc23 --- /dev/null +++ b/external/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/external/boost/mpl/aux_/preprocessed/plain/times.hpp b/external/boost/mpl/aux_/preprocessed/plain/times.hpp new file mode 100644 index 0000000..ca88d40 --- /dev/null +++ b/external/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::type + , typename times_tag::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/external/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp b/external/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp new file mode 100644 index 0000000..2194ce9 --- /dev/null +++ b/external/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::value,F, Args > + + { + }; +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args) + +}} + diff --git a/external/boost/mpl/aux_/preprocessed/plain/vector.hpp b/external/boost/mpl/aux_/preprocessed/plain/vector.hpp new file mode 100644 index 0000000..bfa9565 --- /dev/null +++ b/external/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 +{ + typedef typename vector1::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/external/boost/mpl/aux_/preprocessed/plain/vector_c.hpp b/external/boost/mpl/aux_/preprocessed/plain/vector_c.hpp new file mode 100644 index 0000000..0f1560d --- /dev/null +++ b/external/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 +{ + typedef typename vector0_c::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/external/boost/mpl/aux_/preprocessor/add.hpp b/external/boost/mpl/aux_/preprocessor/add.hpp new file mode 100644 index 0000000..9cf4a9a --- /dev/null +++ b/external/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. + +// $Id: add.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) +# include + +# 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 + +# define BOOST_MPL_PP_ADD(i,j) \ + BOOST_PP_ADD(i,j) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/preprocessor/def_params_tail.hpp b/external/boost/mpl/aux_/preprocessor/def_params_tail.hpp new file mode 100644 index 0000000..7b0b0af --- /dev/null +++ b/external/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. + +// $Id: def_params_tail.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#include +#include +#include +#include + +// 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): + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include +# include + +# 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 +# include +# include +# include +# include +# include + +# 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/external/boost/mpl/aux_/preprocessor/default_params.hpp b/external/boost/mpl/aux_/preprocessor/default_params.hpp new file mode 100644 index 0000000..63cf92e --- /dev/null +++ b/external/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. + +// $Id: default_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_DEFAULT_PARAMS(0,T,int): +// 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 + +# 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 +# include +# include +# include +# include + +# 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/external/boost/mpl/aux_/preprocessor/enum.hpp b/external/boost/mpl/aux_/preprocessor/enum.hpp new file mode 100644 index 0000000..a7f95e3 --- /dev/null +++ b/external/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. + +// $Id: enum.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_ENUM(0,int): +// 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 + +# 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 +# include + +# 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/external/boost/mpl/aux_/preprocessor/ext_params.hpp b/external/boost/mpl/aux_/preprocessor/ext_params.hpp new file mode 100644 index 0000000..6bbb111 --- /dev/null +++ b/external/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. + +// $Id: ext_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_EXT_PARAMS(2,2,T): +// 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 +# include + +# 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 +# include +# include +# include +# include +# include + +# 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/external/boost/mpl/aux_/preprocessor/filter_params.hpp b/external/boost/mpl/aux_/preprocessor/filter_params.hpp new file mode 100644 index 0000000..38f3cbf --- /dev/null +++ b/external/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. + +// $Id: filter_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#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/external/boost/mpl/aux_/preprocessor/params.hpp b/external/boost/mpl/aux_/preprocessor/params.hpp new file mode 100644 index 0000000..410a8d0 --- /dev/null +++ b/external/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. + +// $Id: params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +// BOOST_MPL_PP_PARAMS(0,T): +// 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 + +# 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 +# include +# include +# include + +# 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/external/boost/mpl/aux_/preprocessor/partial_spec_params.hpp b/external/boost/mpl/aux_/preprocessor/partial_spec_params.hpp new file mode 100644 index 0000000..346d9cd --- /dev/null +++ b/external/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. + +// $Id: partial_spec_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +#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/external/boost/mpl/aux_/preprocessor/range.hpp b/external/boost/mpl/aux_/preprocessor/range.hpp new file mode 100644 index 0000000..cd4c511 --- /dev/null +++ b/external/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. + +// $Id: range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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/external/boost/mpl/aux_/preprocessor/repeat.hpp b/external/boost/mpl/aux_/preprocessor/repeat.hpp new file mode 100644 index 0000000..cfebe04 --- /dev/null +++ b/external/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. + +// $Id: repeat.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +# 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 + +# 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/external/boost/mpl/aux_/preprocessor/sub.hpp b/external/boost/mpl/aux_/preprocessor/sub.hpp new file mode 100644 index 0000000..8ba8132 --- /dev/null +++ b/external/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. + +// $Id: sub.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES) + +# include + +#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) +# include + +# 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 + +# define BOOST_MPL_PP_SUB(i,j) \ + BOOST_PP_SUB(i,j) \ + /**/ + +#endif + +#endif // BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/preprocessor/tuple.hpp b/external/boost/mpl/aux_/preprocessor/tuple.hpp new file mode 100644 index 0000000..f46d0e9 --- /dev/null +++ b/external/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. + +// $Id: tuple.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#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/external/boost/mpl/aux_/push_back_impl.hpp b/external/boost/mpl/aux_/push_back_impl.hpp new file mode 100644 index 0000000..2f839cb --- /dev/null +++ b/external/boost/mpl/aux_/push_back_impl.hpp @@ -0,0 +1,70 @@ + +#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: push_back_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $ +// $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $ +// $Revision: 55679 $ + +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { namespace mpl { + +struct has_push_back_arg {}; + +// agurt 05/feb/04: no default implementation; the stub definition is needed +// to enable the default 'has_push_back' implementation below +template< typename Tag > +struct push_back_impl +{ + template< typename Sequence, typename T > struct apply + { + // should be instantiated only in the context of 'has_push_back_impl'; + // if you've got an assert here, you are requesting a 'push_back' + // specialization that doesn't exist. + BOOST_MPL_ASSERT_MSG( + ( boost::is_same< T, has_push_back_arg >::value ) + , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST + , ( Sequence ) + ); + }; +}; + +template< typename Tag > +struct has_push_back_impl +{ + template< typename Seq > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) + : aux::has_type< push_back< Seq, has_push_back_arg > > + { +#else + { + typedef aux::has_type< push_back< Seq, has_push_back_arg > > type; + BOOST_STATIC_CONSTANT(bool, value = + (aux::has_type< push_back< Seq, has_push_back_arg > >::value) + ); +#endif + }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl) +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl) + +}} + +#endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/push_front_impl.hpp b/external/boost/mpl/aux_/push_front_impl.hpp new file mode 100644 index 0000000..6723ea3 --- /dev/null +++ b/external/boost/mpl/aux_/push_front_impl.hpp @@ -0,0 +1,71 @@ + +#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: push_front_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $ +// $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $ +// $Revision: 55679 $ + +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { namespace mpl { + +struct has_push_front_arg {}; + +// agurt 05/feb/04: no default implementation; the stub definition is needed +// to enable the default 'has_push_front' implementation below + +template< typename Tag > +struct push_front_impl +{ + template< typename Sequence, typename T > struct apply + { + // should be instantiated only in the context of 'has_push_front_impl'; + // if you've got an assert here, you are requesting a 'push_front' + // specialization that doesn't exist. + BOOST_MPL_ASSERT_MSG( + ( boost::is_same< T, has_push_front_arg >::value ) + , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST + , ( Sequence ) + ); + }; +}; + +template< typename Tag > +struct has_push_front_impl +{ + template< typename Seq > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) + : aux::has_type< push_front< Seq, has_push_front_arg > > + { +#else + { + typedef aux::has_type< push_front< Seq, has_push_front_arg > > type; + BOOST_STATIC_CONSTANT(bool, value = + (aux::has_type< push_front< Seq, has_push_front_arg > >::value) + ); +#endif + }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl) +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl) + +}} + +#endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/reverse_fold_impl.hpp b/external/boost/mpl/aux_/reverse_fold_impl.hpp new file mode 100644 index 0000000..b8e2308 --- /dev/null +++ b/external/boost/mpl/aux_/reverse_fold_impl.hpp @@ -0,0 +1,44 @@ + +#ifndef BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: reverse_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) +# include +# include +# endif +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER reverse_fold_impl.hpp +# include + +#else + +# define AUX778076_FOLD_IMPL_OP(iter) typename deref::type +# define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/reverse_fold_impl_body.hpp b/external/boost/mpl/aux_/reverse_fold_impl_body.hpp new file mode 100644 index 0000000..7bd5618 --- /dev/null +++ b/external/boost/mpl/aux_/reverse_fold_impl_body.hpp @@ -0,0 +1,412 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#if !defined(BOOST_PP_IS_ITERATING) + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: reverse_fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +# include +# include +# include +# include + +# include +# include +# include +# include +# include + +// 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::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, )) +# 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::type + , Last + , typename apply2::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, )) +# 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::type + , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step) + , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step) + >::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_ + { + 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::type + , Last + , typename apply2::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 + ::template result_ +{ +}; + +#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 +{ + 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 +{ + 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_ + { + typedef int state; + typedef int iterator; + }; +#endif +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +# undef n_ + +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/sequence_wrapper.hpp b/external/boost/mpl/aux_/sequence_wrapper.hpp new file mode 100644 index 0000000..3f9f8ca --- /dev/null +++ b/external/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-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: sequence_wrapper.hpp 49271 2008-10-11 06:46:00Z agurtovoy $ +// $Date: 2008-10-11 02:46:00 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49271 $ + +# include +# include +# include + +# include +# include +# include +# include +# include +# include +# include +# include + +#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) \ + /**/ + +# if !defined(AUX778076_SEQUENCE_CONVERT_CN_TO) +# define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) BOOST_PP_CAT(C,n) +# endif + +# define AUX778076_SEQUENCE_N_ARGS(n) \ + T BOOST_PP_COMMA_IF(n) \ + BOOST_PP_ENUM(n,AUX778076_SEQUENCE_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, )) +#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 + +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_SEQUENCE_N_ARGS +# undef AUX778076_SEQUENCE_CONVERT_CN_TO +# 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) +{ + 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/external/boost/mpl/aux_/size_impl.hpp b/external/boost/mpl/aux_/size_impl.hpp new file mode 100644 index 0000000..0e4885d --- /dev/null +++ b/external/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. + +// $Id: size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::type + , typename end::type + > + { +#else + { + typedef typename distance< + typename begin::type + , typename end::type + >::type type; +#endif + }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, size_impl) + +}} + +#endif // BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/static_cast.hpp b/external/boost/mpl/aux_/static_cast.hpp new file mode 100644 index 0000000..133730d --- /dev/null +++ b/external/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. + +// $Id: static_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#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(expr) +#endif + +#endif // BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/template_arity.hpp b/external/boost/mpl/aux_/template_arity.hpp new file mode 100644 index 0000000..ed26ea2 --- /dev/null +++ b/external/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. + +// $Id: template_arity.hpp 61584 2010-04-26 18:48:26Z agurtovoy $ +// $Date: 2010-04-26 14:48:26 -0400 (Mon, 26 Apr 2010) $ +// $Revision: 61584 $ + +#include +#include + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) +# if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) +# include +# endif +# else +# include +# endif +#endif + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER template_arity.hpp +# include + +#else + +# if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) +# if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) + +# include +# include +# include +# include +# include + +# include +# include +# include +# include +# include + +# 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 +# include BOOST_PP_ITERATE() + +template< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) > +struct template_arity_impl +{ + BOOST_STATIC_CONSTANT(int, value = + sizeof(::boost::mpl::aux::arity_helper(type_wrapper(),arity_tag())) - 1 + ); +}; + +# define AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION(unused, i_, F) \ + BOOST_PP_COMMA_IF(i_) template_arity_impl::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_ 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 + +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 +{ + template< typename F > struct result_ + : F::arity + { + }; +}; + +template< typename F > +struct template_arity + : template_arity_impl< ::boost::mpl::aux::has_rebind::value > + ::template result_ +{ +}; + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) +template<> +struct template_arity + : 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::type +arity_helper(type_wrapper< F >, arity_tag); + +#undef i_ +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/aux_/template_arity_fwd.hpp b/external/boost/mpl/aux_/template_arity_fwd.hpp new file mode 100644 index 0000000..4b7c8b8 --- /dev/null +++ b/external/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. + +// $Id: template_arity_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { namespace aux { + +template< typename F > struct template_arity; + +}}} + +#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/traits_lambda_spec.hpp b/external/boost/mpl/aux_/traits_lambda_spec.hpp new file mode 100644 index 0000000..f312f6d --- /dev/null +++ b/external/boost/mpl/aux_/traits_lambda_spec.hpp @@ -0,0 +1,63 @@ + +#ifndef BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED +#define BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: traits_lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) + +# define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) /**/ + +#elif !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) + +# define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \ +template<> struct trait \ +{ \ + template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \ + { \ + }; \ +}; \ +/**/ + +#else + +# define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \ +template<> struct trait \ +{ \ + template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \ + { \ + }; \ +}; \ +template<> struct trait \ +{ \ + template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \ + { \ + typedef int type; \ + }; \ +}; \ +/**/ + +#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT + + +#define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) \ + BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \ + template<> struct trait {}; \ +/**/ + +#endif // BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/type_wrapper.hpp b/external/boost/mpl/aux_/type_wrapper.hpp new file mode 100644 index 0000000..0583f72 --- /dev/null +++ b/external/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. + +// $Id: type_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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' when the latter was the result of a +// 'typeof' expression +template< typename T > struct wrapped_type; + +template< typename T > struct wrapped_type< type_wrapper > +{ + 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/external/boost/mpl/aux_/unwrap.hpp b/external/boost/mpl/aux_/unwrap.hpp new file mode 100644 index 0000000..dd710a7 --- /dev/null +++ b/external/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. + +// $Id: unwrap.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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, int) +{ + return f; +} + +template< typename F > +inline +F& +unwrap(reference_wrapper const& f, int) +{ + return f; +} + +}}} + +#endif // BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/value_wknd.hpp b/external/boost/mpl/aux_/value_wknd.hpp new file mode 100644 index 0000000..9de1103 --- /dev/null +++ b/external/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. + +// $Id: value_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \ + || defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) + +# include + +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_<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 +{ + typedef int type; +}; +#endif + +}}} + +#endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED diff --git a/external/boost/mpl/aux_/yes_no.hpp b/external/boost/mpl/aux_/yes_no.hpp new file mode 100644 index 0000000..c3f567d --- /dev/null +++ b/external/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. + +// $Id: yes_no.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + + +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 +{ + 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/external/boost/mpl/back_fwd.hpp b/external/boost/mpl/back_fwd.hpp new file mode 100644 index 0000000..cc01e33 --- /dev/null +++ b/external/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. + +// $Id: back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct back_impl; +template< typename Sequence > struct back; + +}} + +#endif // BOOST_MPL_BACK_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/back_inserter.hpp b/external/boost/mpl/back_inserter.hpp new file mode 100644 index 0000000..fa4ede8 --- /dev/null +++ b/external/boost/mpl/back_inserter.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED +#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: back_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +namespace boost { +namespace mpl { + +template< + typename Sequence + > +struct back_inserter + : inserter< Sequence,push_back<> > +{ +}; + +}} + +#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED diff --git a/external/boost/mpl/begin_end.hpp b/external/boost/mpl/begin_end.hpp new file mode 100644 index 0000000..7d8d9eb --- /dev/null +++ b/external/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. + +// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::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::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/external/boost/mpl/begin_end_fwd.hpp b/external/boost/mpl/begin_end_fwd.hpp new file mode 100644 index 0000000..1ac62c6 --- /dev/null +++ b/external/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. + +// $Id: begin_end_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename 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/external/boost/mpl/bind.hpp b/external/boost/mpl/bind.hpp new file mode 100644 index 0000000..5d851ef --- /dev/null +++ b/external/boost/mpl/bind.hpp @@ -0,0 +1,551 @@ + +#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. + +// $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +# include +# endif +#endif + +#include +#include +#include + +#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 + +#else + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include + +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,AUX778076_BIND_PARAMS(U) > +{ + typedef typename AUX778076_APPLY, 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,AUX778076_BIND_PARAMS(U) > +{ + typedef bind f_; + typedef typename AUX778076_APPLY::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 +{ + 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::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::type next; + typedef Arg type; + }; +}; + +template< typename T, typename Arg > +struct replace_unnamed_arg + : replace_unnamed_arg_impl::template result_ +{ +}; + +# 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*); + +// 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*); +#endif + +template< BOOST_MPL_AUX_NTTP_DECL(int, N) > +aux::yes_tag is_bind_helper(arg*); + +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 +{ + template< typename T > struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast(0))) + == sizeof(aux::yes_tag) + ); + }; +}; + +template< typename T > struct is_bind_template + : is_bind_template_impl< ::boost::detail::is_reference_impl::value > + ::template result_ +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace aux + + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, )) +#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, )) +# 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, )) +# 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 +} + +// bind +template< + typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM() + > +struct bind + : aux::bind_chooser< + aux::bind_count_args::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 + +// For gcc 4.4 compatability, we must include the +// BOOST_PP_ITERATION_DEPTH test inside an #else clause. +#else // BOOST_PP_IS_ITERATING +#if 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_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_, )) +# 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::type f_; + /// +# else + typedef typename aux::resolve_bind_arg::type f_; + +# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT + +# if i_ > 0 +# define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, )) +# 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_),AUX778076_BIND_PARAMS(U) + > +{ + typedef BOOST_PP_CAT(bind,i_) f_; + typedef typename AUX778076_APPLY::type type; +}; + +#else + +template< + typename F AUX778076_BIND_N_PARAMS(i_, typename T) + > +aux::yes_tag +is_bind_helper(BOOST_PP_CAT(bind,i_)*); + +#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_) +{ +}; +#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_) +{ +}; +#endif + +# else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace aux { + +template<> +struct bind_chooser +{ + 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(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_ITERATION_DEPTH() +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/mpl/bind_fwd.hpp b/external/boost/mpl/bind_fwd.hpp new file mode 100644 index 0000000..18ac881 --- /dev/null +++ b/external/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. + +// $Id: bind_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER bind_fwd.hpp +# include + +#else + +# include +# include +# include +# include + +# include +# include +# include + +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, )) +#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/external/boost/mpl/bool.hpp b/external/boost/mpl/bool.hpp new file mode 100644 index 0000000..a815ac5 --- /dev/null +++ b/external/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. + +// $Id: bool.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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_::value; +#endif + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE + +#endif // BOOST_MPL_BOOL_HPP_INCLUDED diff --git a/external/boost/mpl/bool_fwd.hpp b/external/boost/mpl/bool_fwd.hpp new file mode 100644 index 0000000..080d876 --- /dev/null +++ b/external/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. + +// $Id: bool_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN + +template< bool C_ > struct bool_; + +// shorcuts +typedef bool_ true_; +typedef bool_ 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/external/boost/mpl/clear.hpp b/external/boost/mpl/clear.hpp new file mode 100644 index 0000000..c27f4b3 --- /dev/null +++ b/external/boost/mpl/clear.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_CLEAR_HPP_INCLUDED +#define BOOST_MPL_CLEAR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(Sequence) + > +struct clear + : clear_impl< typename sequence_tag::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/external/boost/mpl/clear_fwd.hpp b/external/boost/mpl/clear_fwd.hpp new file mode 100644 index 0000000..da5a6eb --- /dev/null +++ b/external/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. + +// $Id: clear_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct clear_impl; +template< typename Sequence > struct clear; + +}} + +#endif // BOOST_MPL_CLEAR_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/comparison.hpp b/external/boost/mpl/comparison.hpp new file mode 100644 index 0000000..005d280 --- /dev/null +++ b/external/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. + +// $Id: comparison.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +#endif // BOOST_MPL_COMPARISON_HPP_INCLUDED diff --git a/external/boost/mpl/contains.hpp b/external/boost/mpl/contains.hpp new file mode 100644 index 0000000..68e50bb --- /dev/null +++ b/external/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. + +// $Id: contains.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::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/external/boost/mpl/contains_fwd.hpp b/external/boost/mpl/contains_fwd.hpp new file mode 100644 index 0000000..57ae63f --- /dev/null +++ b/external/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. + +// $Id: contains_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct contains_impl; +template< typename Sequence, typename T > struct contains; + +}} + +#endif // BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/deref.hpp b/external/boost/mpl/deref.hpp new file mode 100644 index 0000000..fedf79e --- /dev/null +++ b/external/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. + +// $Id: deref.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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::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/external/boost/mpl/distance.hpp b/external/boost/mpl/distance.hpp new file mode 100644 index 0000000..9a180ab --- /dev/null +++ b/external/boost/mpl/distance.hpp @@ -0,0 +1,78 @@ + +#ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED +#define BOOST_MPL_DISTANCE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: distance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +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 + , mpl::long_<0> + , next<> + >::type > + { +#else + { + typedef typename iter_fold< + iterator_range + , mpl::long_<0> + , next<> + >::type type; + + BOOST_STATIC_CONSTANT(long, value = + (iter_fold< + iterator_range + , 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::type > + ::template apply +{ + 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/external/boost/mpl/distance_fwd.hpp b/external/boost/mpl/distance_fwd.hpp new file mode 100644 index 0000000..ddd8698 --- /dev/null +++ b/external/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. + +// $Id: distance_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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/external/boost/mpl/empty_fwd.hpp b/external/boost/mpl/empty_fwd.hpp new file mode 100644 index 0000000..28b2263 --- /dev/null +++ b/external/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. + +// $Id: empty_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct empty_impl; +template< typename Sequence > struct empty; + +}} + +#endif // BOOST_MPL_EMPTY_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/equal_to.hpp b/external/boost/mpl/equal_to.hpp new file mode 100644 index 0000000..dee5f59 --- /dev/null +++ b/external/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. + +// $Id: equal_to.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME equal_to +#define AUX778076_OP_TOKEN == +#include + +#endif // BOOST_MPL_EQUAL_TO_HPP_INCLUDED diff --git a/external/boost/mpl/eval_if.hpp b/external/boost/mpl/eval_if.hpp new file mode 100644 index 0000000..d483c72 --- /dev/null +++ b/external/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. + +// $Id: eval_if.hpp 61921 2010-05-11 21:33:24Z neilgroves $ +// $Date: 2010-05-11 17:33:24 -0400 (Tue, 11 May 2010) $ +// $Revision: 61921 $ + +#include +#include +#include +#include +#include +#include + +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_::type f_; + typedef typename f_::type type; +#else + : if_::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::type f_; + typedef typename f_::type type; +#else + : if_c::type +{ +#endif +}; + +BOOST_MPL_AUX_NA_SPEC(3, eval_if) + +}} + +#endif // BOOST_MPL_EVAL_IF_HPP_INCLUDED diff --git a/external/boost/mpl/find.hpp b/external/boost/mpl/find.hpp new file mode 100644 index 0000000..6d71a88 --- /dev/null +++ b/external/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. + +// $Id: find.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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 > +{ + 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/external/boost/mpl/find_if.hpp b/external/boost/mpl/find_if.hpp new file mode 100644 index 0000000..b1d41b7 --- /dev/null +++ b/external/boost/mpl/find_if.hpp @@ -0,0 +1,50 @@ + +#ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED +#define BOOST_MPL_FIND_IF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: find_if.hpp 49274 2008-10-11 07:22:05Z agurtovoy $ +// $Date: 2008-10-11 03:22:05 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49274 $ + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +BOOST_MPL_AUX_COMMON_NAME_WKND(find_if) + +template< + typename BOOST_MPL_AUX_NA_PARAM(Sequence) + , typename BOOST_MPL_AUX_NA_PARAM(Predicate) + > +struct find_if +{ + typedef typename iter_fold_if< + Sequence + , void + , mpl::arg<1> // ignore + , protect< aux::find_if_pred > + >::type result_; + + typedef typename second::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/external/boost/mpl/fold.hpp b/external/boost/mpl/fold.hpp new file mode 100644 index 0000000..9645681 --- /dev/null +++ b/external/boost/mpl/fold.hpp @@ -0,0 +1,48 @@ + +#ifndef BOOST_MPL_FOLD_HPP_INCLUDED +#define BOOST_MPL_FOLD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::value + , typename begin::type + , typename end::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/external/boost/mpl/for_each.hpp b/external/boost/mpl/for_each.hpp new file mode 100644 index 0000000..89abc85 --- /dev/null +++ b/external/boost/mpl/for_each.hpp @@ -0,0 +1,116 @@ + +#ifndef BOOST_MPL_FOR_EACH_HPP_INCLUDED +#define BOOST_MPL_FOR_EACH_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: for_each.hpp 55648 2009-08-18 05:16:53Z agurtovoy $ +// $Date: 2009-08-18 01:16:53 -0400 (Tue, 18 Aug 2009) $ +// $Revision: 55648 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +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 +{ + template< + typename Iterator + , typename LastIterator + , typename TransformFunc + , typename F + > + static void execute( + Iterator* + , LastIterator* + , TransformFunc* + , F f + ) + { + typedef typename deref::type item; + typedef typename apply1::type arg; + + // dwa 2002/9/10 -- make sure not to invoke undefined behavior + // when we pass arg. + value_initialized x; + aux::unwrap(f, 0)(boost::get(x)); + + typedef typename mpl::next::type iter; + for_each_impl::value> + ::execute( static_cast(0), static_cast(0), static_cast(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) +{ + BOOST_MPL_ASSERT(( is_sequence )); + + typedef typename begin::type first; + typedef typename end::type last; + + aux::for_each_impl< boost::is_same::value > + ::execute(static_cast(0), static_cast(0), static_cast(0), f); +} + +template< + typename Sequence + , typename F + > +inline +void for_each(F f, Sequence* = 0) +{ + for_each >(f); +} + +}} + +#endif // BOOST_MPL_FOR_EACH_HPP_INCLUDED diff --git a/external/boost/mpl/front_fwd.hpp b/external/boost/mpl/front_fwd.hpp new file mode 100644 index 0000000..65ffcf2 --- /dev/null +++ b/external/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. + +// $Id: front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct front_impl; +template< typename Sequence > struct front; + +}} + +#endif // BOOST_MPL_FRONT_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/front_inserter.hpp b/external/boost/mpl/front_inserter.hpp new file mode 100644 index 0000000..ee754cf --- /dev/null +++ b/external/boost/mpl/front_inserter.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED +#define BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: front_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +namespace boost { namespace mpl { + +template< + typename Sequence + > +struct front_inserter + : inserter< Sequence,push_front<> > +{ +}; + +}} + +#endif // BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED diff --git a/external/boost/mpl/greater.hpp b/external/boost/mpl/greater.hpp new file mode 100644 index 0000000..e33ae48 --- /dev/null +++ b/external/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. + +// $Id: greater.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME greater +#define AUX778076_OP_TOKEN > +#include + +#endif // BOOST_MPL_GREATER_HPP_INCLUDED diff --git a/external/boost/mpl/greater_equal.hpp b/external/boost/mpl/greater_equal.hpp new file mode 100644 index 0000000..91ccf83 --- /dev/null +++ b/external/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. + +// $Id: greater_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME greater_equal +#define AUX778076_OP_TOKEN >= +#include + +#endif // BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED diff --git a/external/boost/mpl/has_xxx.hpp b/external/boost/mpl/has_xxx.hpp new file mode 100644 index 0000000..9258759 --- /dev/null +++ b/external/boost/mpl/has_xxx.hpp @@ -0,0 +1,640 @@ + +#ifndef BOOST_MPL_HAS_XXX_HPP_INCLUDED +#define BOOST_MPL_HAS_XXX_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2006 +// Copyright David Abrahams 2002-2003 +// Copyright Daniel Walker 2007 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: has_xxx.hpp 64146 2010-07-19 00:46:31Z djwalker $ +// $Date: 2010-07-18 20:46:31 -0400 (Sun, 18 Jul 2010) $ +// $Revision: 64146 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) ) +# include +#endif + +#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 +# include + +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::type tester(type_wrapper); +#else + template< typename U > + static char (& tester(type_wrapper) )[sizeof(U)+1]; +#endif + + BOOST_STATIC_CONSTANT(bool, value = + sizeof(tester(type_wrapper())) == 1 + ); +}; + +template<> +struct msvc_is_incomplete +{ + 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(0))) \ + != sizeof(boost::mpl::aux::no_tag) \ + ); \ + typedef boost::mpl::bool_ type; \ +}; \ +\ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ + : boost::mpl::if_c< \ + boost::mpl::aux::msvc_is_incomplete::value \ + , boost::mpl::bool_ \ + , BOOST_PP_CAT(trait,_impl) \ + >::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 \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = false); \ + typedef boost::mpl::bool_ 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!) + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ +template< typename T > \ +struct BOOST_PP_CAT(trait, _msvc_sfinae_helper) \ +{ \ + typedef void type; \ +};\ +\ +template< typename T, typename U = void > \ +struct BOOST_PP_CAT(trait,_impl_) \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = false); \ + typedef boost::mpl::bool_ type; \ +}; \ +\ +template< typename T > \ +struct BOOST_PP_CAT(trait,_impl_)< \ + T \ + , typename BOOST_PP_CAT(trait, _msvc_sfinae_helper)< typename T::name >::type \ + > \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = true); \ + typedef boost::mpl::bool_ type; \ +}; \ +\ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ + : BOOST_PP_CAT(trait,_impl_) \ +{ \ +}; \ +/**/ + +# elif BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) ) + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF(trait, trait_tester, name, default_) \ +template< typename T, bool IS_CLASS > \ +struct trait_tester \ +{ \ + BOOST_STATIC_CONSTANT( bool, value = false ); \ +}; \ +template< typename T > \ +struct trait_tester< T, true > \ +{ \ + struct trait_tester_impl \ + { \ + template < class U > \ + static int resolve( boost::mpl::aux::type_wrapper const volatile * \ + , boost::mpl::aux::type_wrapper* = 0 ); \ + static char resolve( ... ); \ + }; \ + typedef boost::mpl::aux::type_wrapper t_; \ + BOOST_STATIC_CONSTANT( bool, value = ( sizeof( trait_tester_impl::resolve( static_cast< t_ * >(0) ) ) == sizeof(int) ) ); \ +}; \ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ +{ \ + BOOST_STATIC_CONSTANT( bool, value = (trait_tester< T, boost::is_class< T >::value >::value) ); \ + typedef boost::mpl::bool_< trait< T, fallback_ >::value > type; \ +}; + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ + BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF( trait \ + , BOOST_PP_CAT(trait,_tester) \ + , name \ + , default_ ) \ +/**/ + +# else // other SFINAE-capable compilers + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ +{ \ + struct gcc_3_2_wknd \ + { \ + template< typename U > \ + static boost::mpl::aux::yes_tag test( \ + boost::mpl::aux::type_wrapper const volatile* \ + , boost::mpl::aux::type_wrapper* = 0 \ + ); \ + \ + static boost::mpl::aux::no_tag test(...); \ + }; \ + \ + typedef boost::mpl::aux::type_wrapper t_; \ + BOOST_STATIC_CONSTANT(bool, value = \ + sizeof(gcc_3_2_wknd::test(static_cast(0))) \ + == sizeof(boost::mpl::aux::yes_tag) \ + ); \ + typedef boost::mpl::bool_ 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_ > \ +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) \ +/**/ + + +#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE) + +// Create a boolean Metafunction to detect a nested template +// member. This implementation is based on a USENET newsgroup's +// posting by Aleksey Gurtovoy (comp.lang.c++.moderated, 2002-03-19), +// Rani Sharoni's USENET posting cited above, the non-template has_xxx +// implementations above, and discussion on the Boost mailing list. + +# if !defined(BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES) +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) +# define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 1 +# endif +# endif + +# if !defined(BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION) +# if (defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)) +# define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 1 +# endif +# endif + +# if !defined(BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE) +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) +# define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 1 +# endif +# endif + +// NOTE: Many internal implementation macros take a Boost.Preprocessor +// array argument called args which is of the following form. +// ( 4, ( trait, name, max_arity, default_ ) ) + +# define BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \ + BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _introspect) \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \ + BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _substitute), n) \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) \ + BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _test) \ + /**/ + +// Thanks to Guillaume Melquiond for pointing out the need for the +// "substitute" template as an argument to the overloaded test +// functions to get SFINAE to work for member templates with the +// correct name but different number of arguments. +# define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE(z, n, args) \ + template< \ + template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename V) > class V \ + > \ + struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) { \ + }; \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \ + BOOST_PP_REPEAT( \ + BOOST_PP_ARRAY_ELEM(2, args) \ + , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE \ + , args \ + ) \ + /**/ + +# if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION +# define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \ + template< typename V > \ + static boost::mpl::aux::no_tag \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \ + /**/ +# else +# define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \ + static boost::mpl::aux::no_tag \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \ + /**/ +# endif + +# if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES +# define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT(z, n, args) \ + template< typename V > \ + static boost::mpl::aux::yes_tag \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \ + boost::mpl::aux::type_wrapper< V > const volatile* \ + , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) < \ + V::template BOOST_PP_ARRAY_ELEM(1, args) \ + >* = 0 \ + ); \ + /**/ +# define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \ + BOOST_PP_REPEAT( \ + BOOST_PP_ARRAY_ELEM(2, args) \ + , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT \ + , args \ + ) \ + /**/ +# else +# define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \ + template< typename V > \ + static boost::mpl::aux::yes_tag \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \ + V const volatile* \ + , member_macro(args, V, T)* = 0 \ + ); \ + /**/ +# endif + +# if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION +# define BOOST_MPL_HAS_MEMBER_TEST(args) \ + sizeof(BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U >(0)) \ + == sizeof(boost::mpl::aux::yes_tag) \ + /**/ +# else +# if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES +# define BOOST_MPL_HAS_MEMBER_TEST(args) \ + sizeof( \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \ + static_cast< boost::mpl::aux::type_wrapper< U >* >(0) \ + ) \ + ) == sizeof(boost::mpl::aux::yes_tag) \ + /**/ +# else +# define BOOST_MPL_HAS_MEMBER_TEST(args) \ + sizeof( \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \ + static_cast< U* >(0) \ + ) \ + ) == sizeof(boost::mpl::aux::yes_tag) \ + /**/ +# endif +# endif + +# define BOOST_MPL_HAS_MEMBER_INTROSPECT( \ + args, substitute_macro, member_macro \ + ) \ + template< typename U > \ + struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) { \ + BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \ + BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \ + BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \ + BOOST_STATIC_CONSTANT( \ + bool, value = BOOST_MPL_HAS_MEMBER_TEST(args) \ + ); \ + typedef boost::mpl::bool_< value > type; \ + }; \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \ + args, introspect_macro, substitute_macro, member_macro \ + ) \ + template< \ + typename T \ + , typename fallback_ \ + = boost::mpl::bool_< BOOST_PP_ARRAY_ELEM(3, args) > \ + > \ + class BOOST_PP_ARRAY_ELEM(0, args) { \ + introspect_macro(args, substitute_macro, member_macro) \ + public: \ + static const bool value \ + = BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< T >::value; \ + typedef typename BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< \ + T \ + >::type type; \ + }; \ + /**/ + +// BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE expands to the full +// implementation of the function-based metafunction. Compile with -E +// to see the preprocessor output for this macro. +# define BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \ + args, substitute_macro, member_macro \ + ) \ + BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \ + args \ + , BOOST_MPL_HAS_MEMBER_INTROSPECT \ + , substitute_macro \ + , member_macro \ + ) \ + /**/ + +# if BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE + +# if !defined(BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE) +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400) +# define BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE 1 +# endif +# endif + +# if !BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE +# define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \ + args, n \ + ) \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \ + /**/ +# else +# define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \ + args, n \ + ) \ + BOOST_PP_CAT( \ + boost_mpl_has_xxx_ \ + , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \ + ) \ + /**/ +# endif + +# define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME( \ + args \ + ) \ + BOOST_PP_CAT( \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \ + args, 0 \ + ) \ + , _tag \ + ) \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \ + z, n, args \ + ) \ + template< \ + template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename U) > class U \ + > \ + struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \ + args, n \ + ) { \ + typedef \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \ + type; \ + }; \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \ + args, substitute_macro \ + ) \ + typedef void \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args); \ + BOOST_PP_REPEAT( \ + BOOST_PP_ARRAY_ELEM(2, args) \ + , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE \ + , args \ + ) \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE( \ + args, member_macro \ + ) \ + template< \ + typename U \ + , typename V \ + = BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \ + > \ + struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) { \ + BOOST_STATIC_CONSTANT(bool, value = false); \ + typedef boost::mpl::bool_< value > type; \ + }; \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE( \ + z, n, args \ + ) \ + template< typename U > \ + struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< \ + U \ + , typename \ + BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \ + args, n \ + )< \ + BOOST_MSVC_TYPENAME U::BOOST_PP_ARRAY_ELEM(1, args)< > \ + >::type \ + > { \ + BOOST_STATIC_CONSTANT(bool, value = true); \ + typedef boost::mpl::bool_< value > type; \ + }; \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE( \ + args, member_macro \ + ) \ + BOOST_PP_REPEAT( \ + BOOST_PP_ARRAY_ELEM(2, args) \ + , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE \ + , args \ + ) \ + /**/ + +# define BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE( \ + args, substitute_macro, member_macro \ + ) \ + BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE(args, member_macro) \ + BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE(args, member_macro) \ + template< typename U > \ + struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \ + : BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U > { \ + }; \ + /**/ + +// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE expands to the full +// implementation of the template-based metafunction. Compile with -E +// to see the preprocessor output for this macro. +// +// Note that if BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE is +// defined BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE needs +// to be expanded at namespace level before +// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE can be used. +# define BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \ + args, substitute_macro, member_macro \ + ) \ + BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \ + args, substitute_macro \ + ) \ + BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \ + args \ + , BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE \ + , substitute_macro \ + , member_macro \ + ) \ + /**/ + +# endif // BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE + +// Note: In the current implementation the parameter and access macros +// are no longer expanded. +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400) +# define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \ + BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \ + ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \ + , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \ + , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \ + ) \ + /**/ +# else +# define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \ + BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \ + ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \ + , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \ + , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \ + ) \ + /**/ +# endif + +#else // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE + +// placeholder implementation + +# define BOOST_MPL_HAS_XXX_TEMPLATE_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 // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE + +# define BOOST_MPL_HAS_XXX_TEMPLATE_DEF(name) \ + BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF( \ + BOOST_PP_CAT(has_, name), name, false \ + ) \ + /**/ + +#endif // BOOST_MPL_HAS_XXX_HPP_INCLUDED diff --git a/external/boost/mpl/identity.hpp b/external/boost/mpl/identity.hpp new file mode 100644 index 0000000..d72540b --- /dev/null +++ b/external/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. + +// $Id: identity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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 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/external/boost/mpl/if.hpp b/external/boost/mpl/if.hpp new file mode 100644 index 0000000..aa14d88 --- /dev/null +++ b/external/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. + +// $Id: if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +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 +{ + 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 +{ + 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_::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_::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/external/boost/mpl/inserter.hpp b/external/boost/mpl/inserter.hpp new file mode 100644 index 0000000..8e2c676 --- /dev/null +++ b/external/boost/mpl/inserter.hpp @@ -0,0 +1,32 @@ + +#ifndef BOOST_MPL_INSERTER_HPP_INCLUDED +#define BOOST_MPL_INSERTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< + typename Sequence + , typename Operation + > +struct inserter +{ + typedef Sequence state; + typedef Operation operation; +}; + +}} + +#endif // BOOST_MPL_INSERTER_HPP_INCLUDED diff --git a/external/boost/mpl/int.hpp b/external/boost/mpl/int.hpp new file mode 100644 index 0000000..971ca90 --- /dev/null +++ b/external/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. + +// $Id: int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#define AUX_WRAPPER_VALUE_TYPE int +#include + +#endif // BOOST_MPL_INT_HPP_INCLUDED diff --git a/external/boost/mpl/int_fwd.hpp b/external/boost/mpl/int_fwd.hpp new file mode 100644 index 0000000..0a0140f --- /dev/null +++ b/external/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. + +// $Id: int_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/integral_c.hpp b/external/boost/mpl/integral_c.hpp new file mode 100644 index 0000000..6c4d2bc --- /dev/null +++ b/external/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. + +// $Id: integral_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#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 + + +#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 +{ + 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/external/boost/mpl/integral_c_fwd.hpp b/external/boost/mpl/integral_c_fwd.hpp new file mode 100644 index 0000000..46da935 --- /dev/null +++ b/external/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. + +// $Id: integral_c_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/integral_c_tag.hpp b/external/boost/mpl/integral_c_tag.hpp new file mode 100644 index 0000000..2b43e79 --- /dev/null +++ b/external/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. + +// $Id: integral_c_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +#include +#include + +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/external/boost/mpl/is_placeholder.hpp b/external/boost/mpl/is_placeholder.hpp new file mode 100644 index 0000000..5b28b47 --- /dev/null +++ b/external/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. + +// $Id: is_placeholder.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< typename T > +struct is_placeholder + : bool_ +{ +}; + +template< BOOST_MPL_AUX_NTTP_DECL(int, N) > +struct is_placeholder< arg > + : bool_ +{ +}; + +#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 >*); + +} // namespace aux + +template< typename T > +struct is_placeholder +{ + static aux::type_wrapper* get(); + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_placeholder_helper(get())) == sizeof(aux::yes_tag) + ); + + typedef bool_ type; +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +}} + +#endif // BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED diff --git a/external/boost/mpl/is_sequence.hpp b/external/boost/mpl/is_sequence.hpp new file mode 100644 index 0000000..0c1f67b --- /dev/null +++ b/external/boost/mpl/is_sequence.hpp @@ -0,0 +1,112 @@ + +#ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED +#define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: is_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# include +#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300) +# include +#endif + +#include + +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 >' +// 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 > + , identity< aux::has_begin > + > +{ +}; + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(T) + > +struct is_sequence + : if_< +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) + aux::msvc_is_class +#else + boost::is_class +#endif + , aux::is_sequence_impl + , bool_ + >::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_ +{ +}; + +#else + +template< + typename BOOST_MPL_AUX_NA_PARAM(T) + > +struct is_sequence + : not_< is_same< typename begin::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 + : bool_ +{ +}; +#endif + +BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence) + +}} + +#endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED diff --git a/external/boost/mpl/iter_fold.hpp b/external/boost/mpl/iter_fold.hpp new file mode 100644 index 0000000..cb24707 --- /dev/null +++ b/external/boost/mpl/iter_fold.hpp @@ -0,0 +1,49 @@ + +#ifndef BOOST_MPL_ITER_FOLD_HPP_INCLUDED +#define BOOST_MPL_ITER_FOLD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iter_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +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::value + , typename begin::type + , typename end::type + , State + , typename lambda::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/external/boost/mpl/iter_fold_if.hpp b/external/boost/mpl/iter_fold_if.hpp new file mode 100644 index 0000000..da80564 --- /dev/null +++ b/external/boost/mpl/iter_fold_if.hpp @@ -0,0 +1,117 @@ + +#ifndef BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED +#define BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright Eric Friedman 2003 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iter_fold_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +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 > + , apply1 + > + { +#else + { + typedef and_< + not_< is_same > + , apply1 + > 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::type first_; + typedef typename end::type last_; + + typedef typename eval_if< + is_na + , if_< is_na, always, always > + , identity + >::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/external/boost/mpl/iterator_range.hpp b/external/boost/mpl/iterator_range.hpp new file mode 100644 index 0000000..d3fd43b --- /dev/null +++ b/external/boost/mpl/iterator_range.hpp @@ -0,0 +1,42 @@ + +#ifndef BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED +#define BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iterator_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/iterator_tags.hpp b/external/boost/mpl/iterator_tags.hpp new file mode 100644 index 0000000..46431a3 --- /dev/null +++ b/external/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. + +// $Id: iterator_tags.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +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/external/boost/mpl/lambda.hpp b/external/boost/mpl/lambda.hpp new file mode 100644 index 0000000..165135f --- /dev/null +++ b/external/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. + +// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) +# include +#else +# include +# include +# define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS +#endif + +#endif // BOOST_MPL_LAMBDA_HPP_INCLUDED diff --git a/external/boost/mpl/lambda_fwd.hpp b/external/boost/mpl/lambda_fwd.hpp new file mode 100644 index 0000000..f02837b --- /dev/null +++ b/external/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. + +// $Id: lambda_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) + +# include +# include +# include + +namespace boost { namespace mpl { + +template< + typename T = na + , typename Tag = void_ + BOOST_MPL_AUX_LAMBDA_ARITY_PARAM( + typename Arity = int_< aux::template_arity::value > + ) + > +struct lambda; + +}} + +#else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT + +# include + +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/external/boost/mpl/less.hpp b/external/boost/mpl/less.hpp new file mode 100644 index 0000000..11d860d --- /dev/null +++ b/external/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. + +// $Id: less.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME less +#define AUX778076_OP_TOKEN < +#include + +#endif // BOOST_MPL_LESS_HPP_INCLUDED diff --git a/external/boost/mpl/less_equal.hpp b/external/boost/mpl/less_equal.hpp new file mode 100644 index 0000000..2284d1d --- /dev/null +++ b/external/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. + +// $Id: less_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME less_equal +#define AUX778076_OP_TOKEN <= +#include + +#endif // BOOST_MPL_LESS_EQUAL_HPP_INCLUDED diff --git a/external/boost/mpl/limits/arity.hpp b/external/boost/mpl/limits/arity.hpp new file mode 100644 index 0000000..91e4606 --- /dev/null +++ b/external/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. + +// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY) +# define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5 +#endif + +#endif // BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED diff --git a/external/boost/mpl/limits/list.hpp b/external/boost/mpl/limits/list.hpp new file mode 100644 index 0000000..ee9c7aa --- /dev/null +++ b/external/boost/mpl/limits/list.hpp @@ -0,0 +1,21 @@ + +#ifndef BOOST_MPL_LIMITS_LIST_HPP_INCLUDED +#define BOOST_MPL_LIMITS_LIST_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_LIMIT_LIST_SIZE) +# define BOOST_MPL_LIMIT_LIST_SIZE 20 +#endif + +#endif // BOOST_MPL_LIMITS_LIST_HPP_INCLUDED diff --git a/external/boost/mpl/limits/unrolling.hpp b/external/boost/mpl/limits/unrolling.hpp new file mode 100644 index 0000000..4ba3efb --- /dev/null +++ b/external/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. + +// $Id: unrolling.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_LIMIT_UNROLLING) +# define BOOST_MPL_LIMIT_UNROLLING 4 +#endif + +#endif // BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED diff --git a/external/boost/mpl/limits/vector.hpp b/external/boost/mpl/limits/vector.hpp new file mode 100644 index 0000000..9a0accf --- /dev/null +++ b/external/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. + +// $Id: vector.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_LIMIT_VECTOR_SIZE) +# define BOOST_MPL_LIMIT_VECTOR_SIZE 20 +#endif + +#endif // BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED diff --git a/external/boost/mpl/list.hpp b/external/boost/mpl/list.hpp new file mode 100644 index 0000000..838b8f4 --- /dev/null +++ b/external/boost/mpl/list.hpp @@ -0,0 +1,57 @@ + +#ifndef BOOST_MPL_LIST_HPP_INCLUDED +#define BOOST_MPL_LIST_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include + +# include +# include +# include + +#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 + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list.hpp +# include + +#else + +# include + +# define AUX778076_SEQUENCE_NAME list +# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_LIST_HPP_INCLUDED diff --git a/external/boost/mpl/list/aux_/O1_size.hpp b/external/boost/mpl/list/aux_/O1_size.hpp new file mode 100644 index 0000000..6ef2cf7 --- /dev/null +++ b/external/boost/mpl/list/aux_/O1_size.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/list/aux_/begin_end.hpp b/external/boost/mpl/list/aux_/begin_end.hpp new file mode 100644 index 0000000..dab60f3 --- /dev/null +++ b/external/boost/mpl/list/aux_/begin_end.hpp @@ -0,0 +1,44 @@ + +#ifndef BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template<> +struct begin_impl< aux::list_tag > +{ + template< typename List > struct apply + { + typedef l_iter type; + }; +}; + +template<> +struct end_impl< aux::list_tag > +{ + template< typename > struct apply + { + typedef l_iter type; + }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED diff --git a/external/boost/mpl/list/aux_/clear.hpp b/external/boost/mpl/list/aux_/clear.hpp new file mode 100644 index 0000000..247a4de --- /dev/null +++ b/external/boost/mpl/list/aux_/clear.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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/external/boost/mpl/list/aux_/empty.hpp b/external/boost/mpl/list/aux_/empty.hpp new file mode 100644 index 0000000..6ab60cf --- /dev/null +++ b/external/boost/mpl/list/aux_/empty.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +namespace boost { namespace mpl { + +template<> +struct empty_impl< aux::list_tag > +{ + template< typename List > struct apply + : not_ + { + }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED diff --git a/external/boost/mpl/list/aux_/front.hpp b/external/boost/mpl/list/aux_/front.hpp new file mode 100644 index 0000000..8defa99 --- /dev/null +++ b/external/boost/mpl/list/aux_/front.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/list/aux_/include_preprocessed.hpp b/external/boost/mpl/list/aux_/include_preprocessed.hpp new file mode 100644 index 0000000..431b51f --- /dev/null +++ b/external/boost/mpl/list/aux_/include_preprocessed.hpp @@ -0,0 +1,35 @@ + +// Copyright Aleksey Gurtovoy 2001-2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#include + +#include +#include + +# 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/external/boost/mpl/list/aux_/item.hpp b/external/boost/mpl/list/aux_/item.hpp new file mode 100644 index 0000000..37ddff7 --- /dev/null +++ b/external/boost/mpl/list/aux_/item.hpp @@ -0,0 +1,55 @@ + +#ifndef BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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/external/boost/mpl/list/aux_/iterator.hpp b/external/boost/mpl/list/aux_/iterator.hpp new file mode 100644 index 0000000..b94126c --- /dev/null +++ b/external/boost/mpl/list/aux_/iterator.hpp @@ -0,0 +1,76 @@ + +#ifndef BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +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 > +{ + typedef typename Node::item type; +}; + +template< typename Node > +struct next< l_iter > +{ + 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::type > next; +}; + +#endif + + +template<> struct l_iter +{ + 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/external/boost/mpl/list/aux_/numbered.hpp b/external/boost/mpl/list/aux_/numbered.hpp new file mode 100644 index 0000000..de8d404 --- /dev/null +++ b/external/boost/mpl/list/aux_/numbered.hpp @@ -0,0 +1,68 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Peter Dimov 2000-2002 +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if defined(BOOST_PP_IS_ITERATING) + +#include +#include +#include +#include + +#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_ + , 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/external/boost/mpl/list/aux_/numbered_c.hpp b/external/boost/mpl/list/aux_/numbered_c.hpp new file mode 100644 index 0000000..f304382 --- /dev/null +++ b/external/boost/mpl/list/aux_/numbered_c.hpp @@ -0,0 +1,71 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if defined(BOOST_PP_IS_ITERATING) + +#include +#include +#include +#include + +#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 + , 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) \ + /**/ + +template< + typename T + , BOOST_PP_ENUM_PARAMS(i, T C) + > +struct BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) + : l_item< + long_ + , integral_c + , 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/external/boost/mpl/list/aux_/pop_front.hpp b/external/boost/mpl/list/aux_/pop_front.hpp new file mode 100644 index 0000000..e053391 --- /dev/null +++ b/external/boost/mpl/list/aux_/pop_front.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +namespace boost { namespace mpl { + +template<> +struct pop_front_impl< aux::list_tag > +{ + template< typename List > struct apply + { + typedef typename mpl::next::type type; + }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED diff --git a/external/boost/mpl/list/aux_/preprocessed/plain/list10.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list10.hpp new file mode 100644 index 0000000..99368d2 --- /dev/null +++ b/external/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 + > +{ + 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/external/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp new file mode 100644 index 0000000..7133d71 --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list20.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list20.hpp new file mode 100644 index 0000000..750e495 --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp new file mode 100644 index 0000000..7f15acf --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list30.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list30.hpp new file mode 100644 index 0000000..5459101 --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp new file mode 100644 index 0000000..5393d79 --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list40.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list40.hpp new file mode 100644 index 0000000..68c6761 --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp new file mode 100644 index 0000000..0c51ba2 --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list50.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list50.hpp new file mode 100644 index 0000000..4cc22da --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp b/external/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp new file mode 100644 index 0000000..28c061d --- /dev/null +++ b/external/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/external/boost/mpl/list/aux_/push_back.hpp b/external/boost/mpl/list/aux_/push_back.hpp new file mode 100644 index 0000000..6adb7db --- /dev/null +++ b/external/boost/mpl/list/aux_/push_back.hpp @@ -0,0 +1,36 @@ + +#ifndef BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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/external/boost/mpl/list/aux_/push_front.hpp b/external/boost/mpl/list/aux_/push_front.hpp new file mode 100644 index 0000000..a601fea --- /dev/null +++ b/external/boost/mpl/list/aux_/push_front.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template<> +struct push_front_impl< aux::list_tag > +{ + template< typename List, typename T > struct apply + { + typedef l_item< + typename next::type + , T + , typename List::type + > type; + }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED diff --git a/external/boost/mpl/list/aux_/size.hpp b/external/boost/mpl/list/aux_/size.hpp new file mode 100644 index 0000000..4ecbab8 --- /dev/null +++ b/external/boost/mpl/list/aux_/size.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/list/aux_/tag.hpp b/external/boost/mpl/list/aux_/tag.hpp new file mode 100644 index 0000000..d44bfe4 --- /dev/null +++ b/external/boost/mpl/list/aux_/tag.hpp @@ -0,0 +1,24 @@ + +#ifndef BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { namespace aux { + +struct list_tag; +struct l_iter_tag; + +}}} + +#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED diff --git a/external/boost/mpl/list/list0.hpp b/external/boost/mpl/list/list0.hpp new file mode 100644 index 0000000..58e93cf --- /dev/null +++ b/external/boost/mpl/list/list0.hpp @@ -0,0 +1,42 @@ + +#ifndef BOOST_MPL_LIST_LIST0_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST0_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template< typename Dummy = na > struct list0; + +template<> struct list0 + : l_end +{ + typedef l_end type; +}; + +}} + +#endif // BOOST_MPL_LIST_LIST0_HPP_INCLUDED diff --git a/external/boost/mpl/list/list0_c.hpp b/external/boost/mpl/list/list0_c.hpp new file mode 100644 index 0000000..ed9bca5 --- /dev/null +++ b/external/boost/mpl/list/list0_c.hpp @@ -0,0 +1,31 @@ + +#ifndef BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/list/list10.hpp b/external/boost/mpl/list/list10.hpp new file mode 100644 index 0000000..4a4ee19 --- /dev/null +++ b/external/boost/mpl/list/list10.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST10_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST10_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list10.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(1, 10, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST10_HPP_INCLUDED diff --git a/external/boost/mpl/list/list10_c.hpp b/external/boost/mpl/list/list10_c.hpp new file mode 100644 index 0000000..e05ef87 --- /dev/null +++ b/external/boost/mpl/list/list10_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list10_c.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(1, 10, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED diff --git a/external/boost/mpl/list/list20.hpp b/external/boost/mpl/list/list20.hpp new file mode 100644 index 0000000..9321192 --- /dev/null +++ b/external/boost/mpl/list/list20.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST20_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST20_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list20.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(11, 20, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST20_HPP_INCLUDED diff --git a/external/boost/mpl/list/list20_c.hpp b/external/boost/mpl/list/list20_c.hpp new file mode 100644 index 0000000..bc807e6 --- /dev/null +++ b/external/boost/mpl/list/list20_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list20_c.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(11, 20, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED diff --git a/external/boost/mpl/list/list30.hpp b/external/boost/mpl/list/list30.hpp new file mode 100644 index 0000000..f736f8c --- /dev/null +++ b/external/boost/mpl/list/list30.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST30_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST30_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list30.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(21, 30, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST30_HPP_INCLUDED diff --git a/external/boost/mpl/list/list30_c.hpp b/external/boost/mpl/list/list30_c.hpp new file mode 100644 index 0000000..e682086 --- /dev/null +++ b/external/boost/mpl/list/list30_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(21, 30, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED diff --git a/external/boost/mpl/list/list40.hpp b/external/boost/mpl/list/list40.hpp new file mode 100644 index 0000000..8560d8f --- /dev/null +++ b/external/boost/mpl/list/list40.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST40_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST40_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list40.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(31, 40, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST40_HPP_INCLUDED diff --git a/external/boost/mpl/list/list40_c.hpp b/external/boost/mpl/list/list40_c.hpp new file mode 100644 index 0000000..5c5bfdf --- /dev/null +++ b/external/boost/mpl/list/list40_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list40_c.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(31, 40, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED diff --git a/external/boost/mpl/list/list50.hpp b/external/boost/mpl/list/list50.hpp new file mode 100644 index 0000000..dcaf18e --- /dev/null +++ b/external/boost/mpl/list/list50.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST50_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST50_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list50.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(41, 50, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST50_HPP_INCLUDED diff --git a/external/boost/mpl/list/list50_c.hpp b/external/boost/mpl/list/list50_c.hpp new file mode 100644 index 0000000..0f38e07 --- /dev/null +++ b/external/boost/mpl/list/list50_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: list50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER list50_c.hpp +# include + +#else + +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(41, 50, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED diff --git a/external/boost/mpl/logical.hpp b/external/boost/mpl/logical.hpp new file mode 100644 index 0000000..256ea32 --- /dev/null +++ b/external/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. + +// $Id: logical.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#endif // BOOST_MPL_LOGICAL_HPP_INCLUDED diff --git a/external/boost/mpl/long.hpp b/external/boost/mpl/long.hpp new file mode 100644 index 0000000..a3e35b1 --- /dev/null +++ b/external/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. + +// $Id: long.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#define AUX_WRAPPER_VALUE_TYPE long +#include + +#endif // BOOST_MPL_LONG_HPP_INCLUDED diff --git a/external/boost/mpl/long_fwd.hpp b/external/boost/mpl/long_fwd.hpp new file mode 100644 index 0000000..4c1b604 --- /dev/null +++ b/external/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. + +// $Id: long_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/minus.hpp b/external/boost/mpl/minus.hpp new file mode 100644 index 0000000..a737185 --- /dev/null +++ b/external/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. + +// $Id: minus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME minus +#define AUX778076_OP_TOKEN - +#include + +#endif // BOOST_MPL_MINUS_HPP_INCLUDED diff --git a/external/boost/mpl/multiplies.hpp b/external/boost/mpl/multiplies.hpp new file mode 100644 index 0000000..772b7bd --- /dev/null +++ b/external/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. + +// $Id: multiplies.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +// 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/external/boost/mpl/negate.hpp b/external/boost/mpl/negate.hpp new file mode 100644 index 0000000..bb8bcdd --- /dev/null +++ b/external/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. + +// $Id: negate.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include + +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::type + >::template apply::type +#else + : aux::msvc_eti_base< typename apply_wrap1< + negate_impl< typename negate_tag::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 type; +}; +} +#endif + +template<> +struct negate_impl +{ +#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/external/boost/mpl/next.hpp b/external/boost/mpl/next.hpp new file mode 100644 index 0000000..3d4e711 --- /dev/null +++ b/external/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. + +// $Id: next.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#endif // BOOST_MPL_NEXT_HPP_INCLUDED diff --git a/external/boost/mpl/next_prior.hpp b/external/boost/mpl/next_prior.hpp new file mode 100644 index 0000000..4a9655b --- /dev/null +++ b/external/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. + +// $Id: next_prior.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +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/external/boost/mpl/not.hpp b/external/boost/mpl/not.hpp new file mode 100644 index 0000000..2abc0db --- /dev/null +++ b/external/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. + +// $Id: not.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +namespace aux { + +template< BOOST_MPL_AUX_NTTP_DECL(long, C_) > // 'long' is intentional here +struct not_impl + : bool_ +{ +}; + +} // 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/external/boost/mpl/not_equal_to.hpp b/external/boost/mpl/not_equal_to.hpp new file mode 100644 index 0000000..00132b1 --- /dev/null +++ b/external/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. + +// $Id: not_equal_to.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME not_equal_to +#define AUX778076_OP_TOKEN != +#include + +#endif // BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED diff --git a/external/boost/mpl/numeric_cast.hpp b/external/boost/mpl/numeric_cast.hpp new file mode 100644 index 0000000..808ede0 --- /dev/null +++ b/external/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. + +// $Id: numeric_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +// 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/external/boost/mpl/or.hpp b/external/boost/mpl/or.hpp new file mode 100644 index 0000000..4706449 --- /dev/null +++ b/external/boost/mpl/or.hpp @@ -0,0 +1,61 @@ + +#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. + +// $Id: or.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# include +# include +# include +# include +# include + +// agurt, 19/may/04: workaround a conflict with 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) +#ifndef __GCCXML__ +#if defined(or) +# pragma push_macro("or") +# undef or +# define or(x) +#endif +#endif +#endif + +# define BOOST_MPL_PREPROCESSED_HEADER or.hpp +# include + +#if defined(_MSC_VER) +#ifndef __GCCXML__ +#if defined(or) +# pragma pop_macro("or") +#endif +#endif +#endif + +#else + +# define AUX778076_OP_NAME or_ +# define AUX778076_OP_VALUE1 true +# define AUX778076_OP_VALUE2 false +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_OR_HPP_INCLUDED diff --git a/external/boost/mpl/pair.hpp b/external/boost/mpl/pair.hpp new file mode 100644 index 0000000..b3fb026 --- /dev/null +++ b/external/boost/mpl/pair.hpp @@ -0,0 +1,70 @@ + +#ifndef BOOST_MPL_PAIR_HPP_INCLUDED +#define BOOST_MPL_PAIR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: pair.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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

    ::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

    ::type fun( const P& p ) + { + return p.first; + } + }; + + ////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_begin + { + #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 + static BOOST_RANGE_DEDUCED_TYPENAME range_value::type* fun(T& t) + { + return t; + } + #endif + }; + + } // namespace 'range_detail' + + namespace range_adl_barrier + { + template< typename C > + inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type + begin( C& c ) + { + return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range::type >::fun( c ); + } + } +} // namespace 'boost' + + +#endif diff --git a/external/boost/range/detail/common.hpp b/external/boost/range/detail/common.hpp new file mode 100644 index 0000000..f7539f5 --- /dev/null +++ b/external/boost/range/detail/common.hpp @@ -0,0 +1,117 @@ +// 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 +#include +#include +#include +#include +#include +#include + +////////////////////////////////////////////////////////////////////////////// +// 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::value )); + BOOST_STATIC_CONSTANT( bool, is_array_ = boost::is_array::value ); + + }; + + template< typename C > + class range + { + typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper::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::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::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::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::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::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::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::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::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::value, + boost::range_detail::std_container_, + char_array_t >::type type; + }; // class 'range' + } +} + +#endif + diff --git a/external/boost/range/detail/const_iterator.hpp b/external/boost/range/detail/const_iterator.hpp new file mode 100644 index 0000000..e5cb34a --- /dev/null +++ b/external/boost/range/detail/const_iterator.hpp @@ -0,0 +1,71 @@ +// 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 +#include + +////////////////////////////////////////////////////////////////////////////// +// missing partial specialization workaround. +////////////////////////////////////////////////////////////////////////////// + +namespace boost +{ + namespace range_detail + { + template< typename T > + struct range_const_iterator_; + + template<> + struct range_const_iterator_ + { + template< typename C > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME C::const_iterator type; + }; + }; + + template<> + struct range_const_iterator_ + { + template< typename P > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type; + }; + }; + + + template<> + struct range_const_iterator_ + { + template< typename T > + struct pts + { + typedef const BOOST_RANGE_DEDUCED_TYPENAME + remove_extent::type* type; + }; + }; + } + + template< typename C > + class range_const_iterator + { + typedef BOOST_DEDUCED_TYPENAME range_detail::range::type c_type; + public: + typedef BOOST_DEDUCED_TYPENAME range_detail::range_const_iterator_::BOOST_NESTED_TEMPLATE pts::type type; + }; + +} + +#endif diff --git a/external/boost/range/detail/detail_str.hpp b/external/boost/range/detail/detail_str.hpp new file mode 100644 index 0000000..5ef7a34 --- /dev/null +++ b/external/boost/range/detail/detail_str.hpp @@ -0,0 +1,376 @@ +// 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_DETAIL_STR_HPP +#define BOOST_RANGE_DETAIL_DETAIL_STR_HPP + +#include // BOOST_MSVC +#include + +namespace boost +{ + + namespace range_detail + { + // + // iterator + // + + template<> + struct range_iterator_ + { + template< typename T > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME + remove_extent::type* type; + }; + }; + + template<> + struct range_iterator_ + { + template< typename S > + struct pts + { + typedef char* type; + }; + }; + + template<> + struct range_iterator_ + { + template< typename S > + struct pts + { + typedef const char* type; + }; + }; + + template<> + struct range_iterator_ + { + template< typename S > + struct pts + { + typedef wchar_t* type; + }; + }; + + template<> + struct range_iterator_ + { + template< typename S > + struct pts + { + typedef const wchar_t* type; + }; + }; + + + // + // const iterator + // + + template<> + struct range_const_iterator_ + { + template< typename T > + struct pts + { + typedef const BOOST_RANGE_DEDUCED_TYPENAME + remove_extent::type* type; + }; + }; + + template<> + struct range_const_iterator_ + { + template< typename S > + struct pts + { + typedef const char* type; + }; + }; + + template<> + struct range_const_iterator_ + { + template< typename S > + struct pts + { + typedef const char* type; + }; + }; + + template<> + struct range_const_iterator_ + { + template< typename S > + struct pts + { + typedef const wchar_t* type; + }; + }; + + template<> + struct range_const_iterator_ + { + template< typename S > + struct pts + { + typedef const wchar_t* type; + }; + }; + } +} + +#include +#include +#include +#include +#include + +namespace boost +{ + + namespace range_detail + { + // + // str_begin() + // + template<> + struct range_begin + { + static char* fun( char* s ) + { + return s; + } + }; + + template<> + struct range_begin + { + static const char* fun( const char* s ) + { + return s; + } + }; + + template<> + struct range_begin + { + + static wchar_t* fun( wchar_t* s ) + { + return s; + } + }; + + template<> + struct range_begin + { + static const wchar_t* fun( const wchar_t* s ) + { + return s; + } + }; + + template< typename C > + inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type + str_begin( C& c ) + { + return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME + range_detail::range::type >::fun( c ); + } + + // + // str_end() + // + + template<> + struct range_end + { + 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 + { + 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 + { + static char* fun( char* s ) + { + return boost::range_detail::str_end( s ); + } + }; + + template<> + struct range_end + { + static const char* fun( const char* s ) + { + return boost::range_detail::str_end( s ); + } + }; + + template<> + struct range_end + { + static wchar_t* fun( wchar_t* s ) + { + return boost::range_detail::str_end( s ); + } + }; + + + template<> + struct range_end + { + static const wchar_t* fun( const wchar_t* s ) + { + return boost::range_detail::str_end( s ); + } + }; + + template< typename C > + inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type + str_end( C& c ) + { + return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME + range_detail::range::type >::fun( c ); + } + + // + // size_type + // + + template<> + struct range_size_type_ + { + template< typename A > + struct pts + { + typedef std::size_t type; + }; + }; + + template<> + struct range_size_type_ + { + template< typename S > + struct pts + { + typedef std::size_t type; + }; + }; + + template<> + struct range_size_type_ + { + template< typename S > + struct pts + { + typedef std::size_t type; + }; + }; + + template<> + struct range_size_type_ + { + template< typename S > + struct pts + { + typedef std::size_t type; + }; + }; + + template<> + struct range_size_type_ + { + template< typename S > + struct pts + { + typedef std::size_t type; + }; + }; + + // + // value_type + // + + template<> + struct range_value_type_ + { + template< typename T > + struct pts + { + typedef char type; + }; + }; + + template<> + struct range_value_type_ + { + template< typename S > + struct pts + { + typedef char type; + }; + }; + + template<> + struct range_value_type_ + { + template< typename S > + struct pts + { + typedef const char type; + }; + }; + + template<> + struct range_value_type_ + { + template< typename S > + struct pts + { + typedef wchar_t type; + }; + }; + + template<> + struct range_value_type_ + { + template< typename S > + struct pts + { + typedef const wchar_t type; + }; + }; + + } // namespace 'range_detail' + +} // namespace 'boost' + + +#endif diff --git a/external/boost/range/detail/end.hpp b/external/boost/range/detail/end.hpp new file mode 100644 index 0000000..8b5f35d --- /dev/null +++ b/external/boost/range/detail/end.hpp @@ -0,0 +1,101 @@ +// 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_MSVC +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# include +#else +# include +# include +# include +# if BOOST_WORKAROUND(BOOST_MSVC, < 1310) +# include +# endif + +namespace boost +{ + namespace range_detail + { + template< typename T > + struct range_end; + + ////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + template< typename C > + static BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type + fun( C& c ) + { + return c.end(); + }; + }; + + ////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + template< typename P > + static BOOST_RANGE_DEDUCED_TYPENAME range_iterator

    ::type + fun( const P& p ) + { + return p.second; + } + }; + + ////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + #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 + static BOOST_RANGE_DEDUCED_TYPENAME remove_extent::type* fun(T& t) + { + return t + remove_extent::size; + } + #endif + }; + + } // namespace 'range_detail' + + namespace range_adl_barrier + { + template< typename C > + inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type + end( C& c ) + { + return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range::type >::fun( c ); + } + } // namespace range_adl_barrier + +} // namespace 'boost' + +# endif // VC6 +#endif diff --git a/external/boost/range/detail/extract_optional_type.hpp b/external/boost/range/detail/extract_optional_type.hpp new file mode 100644 index 0000000..8292e34 --- /dev/null +++ b/external/boost/range/detail/extract_optional_type.hpp @@ -0,0 +1,52 @@ +// Boost.Range library +// +// Copyright Arno Schoedl & Neil Groves 2009. +// Use, modification and distribution is subject to the 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_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED +#define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include + +#ifdef BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION + +#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \ + template< typename C > \ + struct extract_ ## a_typedef \ + { \ + typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \ + }; + +#else + +namespace boost { + namespace range_detail { + template< typename T > struct exists { typedef void type; }; + } +} + +// Defines extract_some_typedef which exposes T::some_typedef as +// extract_some_typedef::type if T::some_typedef exists. Otherwise +// extract_some_typedef is empty. +#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \ + template< typename C, typename Enable=void > \ + struct extract_ ## a_typedef \ + {}; \ + template< typename C > \ + struct extract_ ## a_typedef< C \ + , BOOST_DEDUCED_TYPENAME boost::range_detail::exists< BOOST_DEDUCED_TYPENAME C::a_typedef >::type \ + > { \ + typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \ + }; + +#endif + +#endif // include guard diff --git a/external/boost/range/detail/implementation_help.hpp b/external/boost/range/detail/implementation_help.hpp new file mode 100644 index 0000000..1f7d163 --- /dev/null +++ b/external/boost/range/detail/implementation_help.hpp @@ -0,0 +1,103 @@ +// 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 +#include +#include +#include +#include + +#ifndef BOOST_NO_CWCHAR +#include +#endif + +namespace boost +{ + namespace range_detail + { + template + inline void boost_range_silence_warning( const T& ) { } + + ///////////////////////////////////////////////////////////////////// + // 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( str_end( s, s ) ); + } + + template< class T, std::size_t sz > + inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz] ) + { + return boost_range_array + sz; + } + + template< class T, std::size_t sz > + inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] ) + { + return boost_range_array + sz; + } + + ///////////////////////////////////////////////////////////////////// + // 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] ) + { + boost_range_silence_warning( boost_range_array ); + return sz; + } + + template< class T, std::size_t sz > + inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] ) + { + boost_range_silence_warning( boost_range_array ); + return sz; + } + + } // namespace 'range_detail' + +} // namespace 'boost' + + +#endif diff --git a/external/boost/range/detail/iterator.hpp b/external/boost/range/detail/iterator.hpp new file mode 100644 index 0000000..58346d4 --- /dev/null +++ b/external/boost/range/detail/iterator.hpp @@ -0,0 +1,78 @@ +// 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 +#include + +#include + +////////////////////////////////////////////////////////////////////////////// +// 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_ + { + template< typename C > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME C::iterator type; + }; + }; + + template<> + struct range_iterator_ + { + template< typename P > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type; + }; + }; + + template<> + struct range_iterator_ + { + template< typename T > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME + remove_extent::type* type; + }; + }; + + } + + template< typename C > + class range_mutable_iterator + { + typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range::type c_type; + public: + typedef typename range_detail::range_iterator_::BOOST_NESTED_TEMPLATE pts::type type; + }; +} + +#endif diff --git a/external/boost/range/detail/misc_concept.hpp b/external/boost/range/detail/misc_concept.hpp new file mode 100644 index 0000000..74cb919 --- /dev/null +++ b/external/boost/range/detail/misc_concept.hpp @@ -0,0 +1,33 @@ +// Boost.Range library concept checks +// +// Copyright Neil Groves 2009. Use, modification and distribution +// are subject to the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED +#define BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED + +#include + +namespace boost +{ + namespace range_detail + { + template + class SameTypeConcept + { + public: + BOOST_CONCEPT_USAGE(SameTypeConcept) + { + same_type(a,b); + } + private: + template void same_type(T,T) {} + T1 a; + T2 b; + }; + } +} + +#endif // include guard diff --git a/external/boost/range/detail/remove_extent.hpp b/external/boost/range/detail/remove_extent.hpp new file mode 100644 index 0000000..68e4597 --- /dev/null +++ b/external/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 // MSVC, NO_INTRINSIC_WCHAR_T, put size_t in std. +#include +#include +#include +#include + +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, mpl::eval_if< + Case2, mpl::identity, mpl::eval_if< + Case3, mpl::identity, mpl::eval_if< + Case4, mpl::identity, mpl::eval_if< + Case5, mpl::identity, mpl::eval_if< + Case6, mpl::identity, mpl::eval_if< + Case7, mpl::identity, mpl::eval_if< + Case8, mpl::identity, mpl::eval_if< + Case9, mpl::identity, mpl::if_< + Case10, Type10, mpl::void_ > > > > > > > > > + >::type result1; + typedef typename + mpl::eval_if< + Case11, mpl::identity, mpl::eval_if< + Case12, mpl::identity, mpl::eval_if< + Case13, mpl::identity, mpl::eval_if< + Case14, mpl::identity, mpl::eval_if< + Case15, mpl::identity, mpl::eval_if< + Case16, mpl::identity, mpl::eval_if< + Case17, mpl::identity, mpl::eval_if< + Case18, mpl::identity, mpl::eval_if< + Case19, mpl::identity, mpl::if_< + Case20, Type20, mpl::void_ > > > > > > > > > + > result2; + typedef typename + mpl::eval_if< + is_same, + result2, + mpl::identity + >::type type; + }; + + template + struct remove_extent { + static T* ar; + BOOST_STATIC_CONSTANT(std::size_t, size = sizeof(*ar) / sizeof((*ar)[0])); + + typedef typename + select< + is_same, bool, + is_same, char, + is_same, signed char, + is_same, unsigned char, + #ifndef BOOST_NO_INTRINSIC_WCHAR_T + is_same, wchar_t, + #endif + is_same, short, + is_same, unsigned short, + is_same, int, + is_same, unsigned int, + is_same, long, + is_same, unsigned long, + is_same, float, + is_same, double, + is_same, long double + >::type result1; + typedef typename + select< + is_same, const bool, + is_same, const char, + is_same, const signed char, + is_same, const unsigned char, + #ifndef BOOST_NO_INTRINSIC_WCHAR_T + is_same, const wchar_t, + #endif + is_same, const short, + is_same, const unsigned short, + is_same, const int, + is_same, const unsigned int, + is_same, const long, + is_same, const unsigned long, + is_same, const float, + is_same, const double, + is_same, const long double + > result2; + typedef typename + mpl::eval_if< + is_same, + result2, + mpl::identity + >::type type; + }; + + } // namespace 'range_detail' + +} // namespace 'boost' + + +#endif diff --git a/external/boost/range/detail/safe_bool.hpp b/external/boost/range/detail/safe_bool.hpp new file mode 100644 index 0000000..182e510 --- /dev/null +++ b/external/boost/range/detail/safe_bool.hpp @@ -0,0 +1,72 @@ +// This header intentionally has no include guards. +// +// Copyright (c) 2010 Neil Groves +// Distributed under the 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 utilises the experience gained during the evolution of +// +#ifndef BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP +#define BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP + +#include +#include + +namespace boost +{ + namespace range_detail + { + +template +class safe_bool +{ +public: + typedef safe_bool this_type; + +#if (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570)) || defined(__CINT_) + typedef bool unspecified_bool_type; + static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr) + { + return x; + } +#elif defined(_MANAGED) + static void unspecified_bool(this_type***) + { + } + typedef void(*unspecified_bool_type)(this_type***); + static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr) + { + return x ? unspecified_bool : 0; + } +#elif \ + ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \ + ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \ + ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) ) + + typedef bool (this_type::*unspecified_bool_type)() const; + + static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr) + { + return x ? &this_type::detail_safe_bool_member_fn : 0; + } +private: + bool detail_safe_bool_member_fn() const { return false; } +#else + typedef DataMemberPtr unspecified_bool_type; + static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr p) + { + return x ? p : 0; + } +#endif +private: + safe_bool(); + safe_bool(const safe_bool&); + void operator=(const safe_bool&); + ~safe_bool(); +}; + + } // namespace range_detail +} // namespace boost + +#endif // include guard diff --git a/external/boost/range/detail/sfinae.hpp b/external/boost/range/detail/sfinae.hpp new file mode 100644 index 0000000..5b2c61e --- /dev/null +++ b/external/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 +#include +#include +#include + + +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* ); + no_type is_pair_impl( ... ); + + ////////////////////////////////////////////////////////////////////// + // tags + ////////////////////////////////////////////////////////////////////// + + struct char_or_wchar_t_array_tag {}; + + } // namespace 'range_detail' + +} // namespace 'boost' + +#endif diff --git a/external/boost/range/detail/size_type.hpp b/external/boost/range/detail/size_type.hpp new file mode 100644 index 0000000..ec49f4d --- /dev/null +++ b/external/boost/range/detail/size_type.hpp @@ -0,0 +1,70 @@ +// 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 + +////////////////////////////////////////////////////////////////////////////// +// missing partial specialization workaround. +////////////////////////////////////////////////////////////////////////////// + +namespace boost +{ + namespace range_detail + { + template< typename T > + struct range_size_type_; + + template<> + struct range_size_type_ + { + template< typename C > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME C::size_type type; + }; + }; + + template<> + struct range_size_type_ + { + template< typename P > + struct pts + { + typedef std::size_t type; + }; + }; + + template<> + struct range_size_type_ + { + template< typename A > + struct pts + { + typedef std::size_t type; + }; + }; + + + } + + template< typename C > + class range_size + { + typedef typename range_detail::range::type c_type; + public: + typedef typename range_detail::range_size_type_::BOOST_NESTED_TEMPLATE pts::type type; + }; +} + +#endif + diff --git a/external/boost/range/detail/str_types.hpp b/external/boost/range/detail/str_types.hpp new file mode 100644 index 0000000..f8cab19 --- /dev/null +++ b/external/boost/range/detail/str_types.hpp @@ -0,0 +1,38 @@ +// Boost.Range 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/range/ +// + +#ifndef BOOST_RANGE_DETAIL_STR_TYPES_HPP +#define BOOST_RANGE_DETAIL_STR_TYPES_HPP + +#include +#include + +namespace boost +{ + template< class T > + struct range_mutable_iterator + { + typedef T* type; + }; + + template< class T > + struct range_const_iterator + { + typedef const T* type; + }; + + template< class T > + struct range_size + { + typedef std::size_t type; + }; +} + +#endif diff --git a/external/boost/range/detail/value_type.hpp b/external/boost/range/detail/value_type.hpp new file mode 100644 index 0000000..2784514 --- /dev/null +++ b/external/boost/range/detail/value_type.hpp @@ -0,0 +1,72 @@ +// 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 +#include +#include + +////////////////////////////////////////////////////////////////////////////// +// missing partial specialization workaround. +////////////////////////////////////////////////////////////////////////////// + +namespace boost +{ + namespace range_detail + { + template< typename T > + struct range_value_type_; + + template<> + struct range_value_type_ + { + template< typename C > + struct pts + { + typedef BOOST_RANGE_DEDUCED_TYPENAME C::value_type type; + }; + }; + + template<> + struct range_value_type_ + { + 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_ + { + template< typename T > + struct pts + { + typedef BOOST_DEDUCED_TYPENAME remove_extent::type type; + }; + }; + + } + + template< typename C > + class range_value + { + typedef BOOST_DEDUCED_TYPENAME range_detail::range::type c_type; + public: + typedef BOOST_DEDUCED_TYPENAME range_detail::range_value_type_::BOOST_NESTED_TEMPLATE pts::type type; + }; + +} + +#endif + diff --git a/external/boost/range/detail/vc6/end.hpp b/external/boost/range/detail/vc6/end.hpp new file mode 100644 index 0000000..4f76af5 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +namespace boost +{ + namespace range_detail + { + template< typename T > + struct range_end; + + ////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + template< typename C > + struct inner { + static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator::type + fun( C& c ) + { + return c.end(); + }; + }; + }; + + ////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + template< typename P > + struct inner { + static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator

    ::type + fun( const P& p ) + { + return p.second; + } + }; + }; + + ////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + template< typename T > + struct inner { + static BOOST_DEDUCED_TYPENAME remove_extent::type* + fun(T& t) + { + return t + remove_extent::size; + } + }; + }; + + + template<> + struct range_end + { + template< typename T > + struct inner { + static BOOST_DEDUCED_TYPENAME remove_extent::type* + fun(T& t) + { + return t + remove_extent::size; + } + }; + }; + + template<> + struct range_end + { + template< typename T > + struct inner { + static BOOST_DEDUCED_TYPENAME remove_extent::type* + fun(T& t) + { + return t + remove_extent::size; + } + }; + }; + + ////////////////////////////////////////////////////////////////////// + // string + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_end + { + template< typename T > + struct inner { + static char* fun( char* s ) + { + return boost::range_detail::str_end( s ); + } + }; + }; + + template<> + struct range_end + { + template< typename T > + struct inner { + static const char* fun( const char* s ) + { + return boost::range_detail::str_end( s ); + } + }; + }; + + template<> + struct range_end + { + template< typename T > + struct inner { + static wchar_t* fun( wchar_t* s ) + { + return boost::range_detail::str_end( s ); + } + }; + }; + + + template<> + struct range_end + { + 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::type + end( C& c ) + { + return range_detail::range_end::type>::inner::fun( c ); + } + +} // namespace 'boost' + + +#endif diff --git a/external/boost/range/difference_type.hpp b/external/boost/range/difference_type.hpp new file mode 100644 index 0000000..164288f --- /dev/null +++ b/external/boost/range/difference_type.hpp @@ -0,0 +1,29 @@ +// 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 +#include +#include + +namespace boost +{ + template< class T > + struct range_difference : iterator_difference< typename range_iterator::type > + { }; +} + +#endif diff --git a/external/boost/range/distance.hpp b/external/boost/range/distance.hpp new file mode 100644 index 0000000..42a106d --- /dev/null +++ b/external/boost/range/distance.hpp @@ -0,0 +1,34 @@ +// Boost.Range library +// +// Copyright Thorsten Ottosen 2003-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/range/ +// + +#ifndef BOOST_RANGE_DISTANCE_HPP +#define BOOST_RANGE_DISTANCE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include + +namespace boost +{ + + template< class T > + inline BOOST_DEDUCED_TYPENAME range_difference::type + distance( const T& r ) + { + return std::distance( boost::begin( r ), boost::end( r ) ); + } + +} // namespace 'boost' + +#endif diff --git a/external/boost/range/empty.hpp b/external/boost/range/empty.hpp new file mode 100644 index 0000000..78c4e85 --- /dev/null +++ b/external/boost/range/empty.hpp @@ -0,0 +1,34 @@ +// 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 +#include +#include + +namespace boost +{ + + template< class T > + inline bool empty( const T& r ) + { + return boost::begin( r ) == boost::end( r ); + } + +} // namepace 'boost' + + +#endif diff --git a/external/boost/range/end.hpp b/external/boost/range/end.hpp new file mode 100644 index 0000000..d5e6526 --- /dev/null +++ b/external/boost/range/end.hpp @@ -0,0 +1,136 @@ +// 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 + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +#include +#else + +#include +#include +#include + +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_iterator::type + range_end( C& c ) + { + // + // If you get a compile-error here, it is most likely because + // you have not implemented range_begin() properly in + // the namespace of C + // + return c.end(); + } + + ////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////// + + template< typename Iterator > + inline Iterator range_end( const std::pair& p ) + { + return p.second; + } + + template< typename Iterator > + inline Iterator range_end( std::pair& p ) + { + return p.second; + } + + ////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////// + + template< typename T, std::size_t sz > + inline const T* range_end( const T (&a)[sz] ) + { + return range_detail::array_end( a ); + } + + template< typename T, std::size_t sz > + inline T* range_end( T (&a)[sz] ) + { + return range_detail::array_end( a ); + } + +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ +} // namespace 'range_detail' +#endif + +namespace range_adl_barrier +{ + +template< class T > +inline BOOST_DEDUCED_TYPENAME range_iterator::type end( T& r ) +{ +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ + using namespace range_detail; +#endif + return range_end( r ); +} + +template< class T > +inline BOOST_DEDUCED_TYPENAME range_iterator::type end( const T& r ) +{ +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ + using namespace range_detail; +#endif + return range_end( r ); +} + + } // namespace range_adl_barrier +} // namespace 'boost' + +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +namespace boost +{ + namespace range_adl_barrier + { + template< class T > + inline BOOST_DEDUCED_TYPENAME range_iterator::type + const_end( const T& r ) + { + return boost::range_adl_barrier::end( r ); + } + } // namespace range_adl_barrier + using namespace range_adl_barrier; +} // namespace boost + +#endif + diff --git a/external/boost/range/functions.hpp b/external/boost/range/functions.hpp new file mode 100644 index 0000000..b8b8608 --- /dev/null +++ b/external/boost/range/functions.hpp @@ -0,0 +1,27 @@ +// Boost.Range library +// +// Copyright Thorsten Ottosen 2003-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/range/ +// + +#ifndef BOOST_RANGE_FUNCTIONS_HPP +#define BOOST_RANGE_FUNCTIONS_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include + +#endif + diff --git a/external/boost/range/iterator.hpp b/external/boost/range/iterator.hpp new file mode 100644 index 0000000..ec73ddc --- /dev/null +++ b/external/boost/range/iterator.hpp @@ -0,0 +1,72 @@ +// 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 >= 1020) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include + +namespace boost +{ + +#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) + + namespace range_detail_vc7_1 + { + template< typename C, typename Sig = void(C) > + struct range_iterator + { + typedef BOOST_RANGE_DEDUCED_TYPENAME + mpl::eval_if_c< is_const::value, + range_const_iterator< typename remove_const::type >, + range_mutable_iterator >::type type; + }; + + template< typename C, typename T > + struct range_iterator< C, void(T[]) > + { + typedef T* type; + }; + } + +#endif + + template< typename C > + struct range_iterator + { +#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) + + typedef BOOST_RANGE_DEDUCED_TYPENAME + range_detail_vc7_1::range_iterator::type type; + +#else + + typedef BOOST_RANGE_DEDUCED_TYPENAME + mpl::eval_if_c< is_const::value, + range_const_iterator< typename remove_const::type >, + range_mutable_iterator >::type type; + +#endif + }; + +} // namespace boost + +//#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif diff --git a/external/boost/range/iterator_range.hpp b/external/boost/range/iterator_range.hpp new file mode 100644 index 0000000..dfcd4d2 --- /dev/null +++ b/external/boost/range/iterator_range.hpp @@ -0,0 +1,16 @@ +// Boost.Range library +// +// Copyright Neil Groves 2009. +// Use, modification and distribution is subject to the 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_INCLUDED +#define BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED + +#include "boost/range/iterator_range_core.hpp" +#include "boost/range/iterator_range_io.hpp" + +#endif // include guard diff --git a/external/boost/range/iterator_range_core.hpp b/external/boost/range/iterator_range_core.hpp new file mode 100644 index 0000000..60c7670 --- /dev/null +++ b/external/boost/range/iterator_range_core.hpp @@ -0,0 +1,650 @@ +// Boost.Range library +// +// Copyright Neil Groves & 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_CORE_HPP_INCLUDED +#define BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED + +#include // Define __STL_CONFIG_H, if appropriate. +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) + #pragma warning( push ) + #pragma warning( disable : 4996 ) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*! \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 + struct iterator_range_impl { + template< class ForwardRange > + static IteratorT adl_begin( ForwardRange& r ) + { + return static_cast( boost::begin( r ) ); + } + + template< class ForwardRange > + static IteratorT adl_end( ForwardRange& r ) + { + return static_cast( boost::end( 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) ); + } + + template< class Left, class Right > + inline bool greater_than( const Left& l, const Right& r ) + { + return less_than(r,l); + } + + template< class Left, class Right > + inline bool less_or_equal_than( const Left& l, const Right& r ) + { + return !iterator_range_detail::less_than(r,l); + } + + template< class Left, class Right > + inline bool greater_or_equal_than( const Left& l, const Right& r ) + { + return !iterator_range_detail::less_than(l,r); + } + + // This version is maintained since it is used in other boost libraries + // such as Boost.Assign + template< class Left, class Right > + inline bool equal(const Left& l, const Right& r) + { + return boost::equal(l, 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 + class iterator_range + { + typedef range_detail::safe_bool< IteratorT iterator_range::* > safe_bool_t; + protected: // Used by sub_range + //! implementation class + typedef iterator_range_detail::iterator_range_impl impl; + public: + //! this type + typedef iterator_range type; + typedef BOOST_DEDUCED_TYPENAME safe_bool_t::unspecified_bool_type unspecified_bool_type; + //BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(value_type); + + //! Encapsulated value type + typedef BOOST_DEDUCED_TYPENAME + iterator_value::type value_type; + + //! Difference type + typedef BOOST_DEDUCED_TYPENAME + iterator_difference::type difference_type; + + //! Size type + typedef std::size_t size_type; // note: must be unsigned + + //! This type + typedef iterator_range this_type; + + //! Reference type + // + // Needed because value-type is the same for + // const and non-const iterators + // + typedef BOOST_DEDUCED_TYPENAME + iterator_reference::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; + + private: // for return value of operator()() + typedef BOOST_DEDUCED_TYPENAME + boost::mpl::if_< boost::is_abstract, + reference, value_type >::type abstract_value_type; + + public: + iterator_range() : m_Begin( iterator() ), m_End( iterator() ) + { } + + //! Constructor from a pair of iterators + template< class Iterator > + iterator_range( Iterator Begin, Iterator End ) : + m_Begin(Begin), m_End(End) + {} + + //! Constructor from a Range + template< class Range > + iterator_range( const Range& r ) : + m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ) + {} + + //! Constructor from a Range + template< class Range > + iterator_range( Range& r ) : + m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ) + {} + + //! 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 ) ) + {} + + //! 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 ) ) + {} + + #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + this_type& operator=( const this_type& r ) + { + m_Begin = r.begin(); + m_End = r.end(); + return *this; + } + #endif + + template< class Iterator > + iterator_range& operator=( const iterator_range& r ) + { + m_Begin = r.begin(); + m_End = r.end(); + return *this; + } + + template< class ForwardRange > + iterator_range& operator=( ForwardRange& r ) + { + m_Begin = impl::adl_begin( r ); + m_End = impl::adl_end( r ); + return *this; + } + + template< class ForwardRange > + iterator_range& operator=( const ForwardRange& r ) + { + m_Begin = impl::adl_begin( r ); + m_End = impl::adl_end( r ); + return *this; + } + + IteratorT begin() const + { + return m_Begin; + } + + IteratorT end() const + { + return m_End; + } + + difference_type size() const + { + return m_End - m_Begin; + } + + bool empty() const + { + return m_Begin == m_End; + } + + operator unspecified_bool_type() const + { + return safe_bool_t::to_unspecified_bool(m_Begin != m_End, &iterator_range::m_Begin); + } + + bool operator!() const + { + return empty(); + } + + bool equal( const iterator_range& r ) const + { + return m_Begin == r.m_Begin && m_End == r.m_End; + } + + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + + bool operator==( const iterator_range& r ) const + { + return boost::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 ); + } + + bool operator>( const iterator_range& r ) const + { + return iterator_range_detail::greater_than( *this, r ); + } + + bool operator<=( const iterator_range& r ) const + { + return iterator_range_detail::less_or_equal_than( *this, r ); + } + + bool operator>=( const iterator_range& r ) const + { + return iterator_range_detail::greater_or_equal_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; + } + + // pop_front() - added to model the SinglePassRangePrimitiveConcept + void pop_front() + { + BOOST_ASSERT( !empty() ); + ++m_Begin; + } + + // pop_back() - added to model the BidirectionalRangePrimitiveConcept + void pop_back() + { + BOOST_ASSERT( !empty() ); + --m_End; + } + + reference operator[]( difference_type at ) const + { + BOOST_ASSERT( at >= 0 && at < size() ); + return m_Begin[at]; + } + + // + // When storing transform iterators, operator[]() + // fails because it returns by reference. Therefore + // operator()() is provided for these cases. + // + abstract_value_type operator()( difference_type at ) const + { + BOOST_ASSERT( at >= 0 && at < size() ); + return m_Begin[at]; + } + + 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; + + protected: + // + // Allow subclasses an easy way to access the + // base type + // + typedef iterator_range iterator_range_; + }; + +// iterator range free-standing operators ---------------------------// + + ///////////////////////////////////////////////////////////////////// + // comparison operators + ///////////////////////////////////////////////////////////////////// + + template< class IteratorT, class ForwardRange > + inline bool operator==( const ForwardRange& l, + const iterator_range& r ) + { + return boost::equal( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator!=( const ForwardRange& l, + const iterator_range& r ) + { + return !boost::equal( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator<( const ForwardRange& l, + const iterator_range& r ) + { + return iterator_range_detail::less_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator<=( const ForwardRange& l, + const iterator_range& r ) + { + return iterator_range_detail::less_or_equal_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator>( const ForwardRange& l, + const iterator_range& r ) + { + return iterator_range_detail::greater_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator>=( const ForwardRange& l, + const iterator_range& r ) + { + return iterator_range_detail::greater_or_equal_than( l, r ); + } + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +#else + template< class Iterator1T, class Iterator2T > + inline bool operator==( const iterator_range& l, + const iterator_range& r ) + { + return boost::equal( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator==( const iterator_range& l, + const ForwardRange& r ) + { + return boost::equal( l, r ); + } + + + template< class Iterator1T, class Iterator2T > + inline bool operator!=( const iterator_range& l, + const iterator_range& r ) + { + return !boost::equal( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator!=( const iterator_range& l, + const ForwardRange& r ) + { + return !boost::equal( l, r ); + } + + + template< class Iterator1T, class Iterator2T > + inline bool operator<( const iterator_range& l, + const iterator_range& r ) + { + return iterator_range_detail::less_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator<( const iterator_range& l, + const ForwardRange& r ) + { + return iterator_range_detail::less_than( l, r ); + } + + template< class Iterator1T, class Iterator2T > + inline bool operator<=( const iterator_range& l, + const iterator_range& r ) + { + return iterator_range_detail::less_or_equal_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator<=( const iterator_range& l, + const ForwardRange& r ) + { + return iterator_range_detail::less_or_equal_than( l, r ); + } + + template< class Iterator1T, class Iterator2T > + inline bool operator>( const iterator_range& l, + const iterator_range& r ) + { + return iterator_range_detail::greater_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator>( const iterator_range& l, + const ForwardRange& r ) + { + return iterator_range_detail::greater_than( l, r ); + } + + template< class Iterator1T, class Iterator2T > + inline bool operator>=( const iterator_range& l, + const iterator_range& r ) + { + return iterator_range_detail::greater_or_equal_than( l, r ); + } + + template< class IteratorT, class ForwardRange > + inline bool operator>=( const iterator_range& l, + const ForwardRange& r ) + { + return iterator_range_detail::greater_or_equal_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( Begin, End ); + } + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + + template< typename Range > + inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::type > + make_iterator_range( Range& r ) + { + return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::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::type > + make_iterator_range( ForwardRange& r ) + { + return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::type > + ( r, iterator_range_detail::range_tag() ); + } + + template< class ForwardRange > + inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::type > + make_iterator_range( const ForwardRange& r ) + { + return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::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_iterator::type > + make_range_impl( Range& r, + BOOST_DEDUCED_TYPENAME range_difference::type advance_begin, + BOOST_DEDUCED_TYPENAME range_difference::type advance_end ) + { + // + // Not worth the effort + // + //if( advance_begin == 0 && advance_end == 0 ) + // return make_iterator_range( r ); + // + + BOOST_DEDUCED_TYPENAME range_iterator::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_iterator::type > + make_iterator_range( Range& r, + BOOST_DEDUCED_TYPENAME range_difference::type advance_begin, + BOOST_DEDUCED_TYPENAME range_difference::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::type > + make_iterator_range( Range& r, + BOOST_DEDUCED_TYPENAME range_difference::type advance_begin, + BOOST_DEDUCED_TYPENAME range_difference::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_iterator::type > + make_iterator_range( const Range& r, + BOOST_DEDUCED_TYPENAME range_difference::type advance_begin, + BOOST_DEDUCED_TYPENAME range_difference::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' + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) + #pragma warning( pop ) +#endif + +#endif + diff --git a/external/boost/range/iterator_range_io.hpp b/external/boost/range/iterator_range_io.hpp new file mode 100644 index 0000000..51e3a4f --- /dev/null +++ b/external/boost/range/iterator_range_io.hpp @@ -0,0 +1,93 @@ +// Boost.Range library +// +// Copyright Neil Groves 2009. +// Use, modification and distribution is subject to the 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_IO_HPP_INCLUDED +#define BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED + +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) + #pragma warning( push ) + #pragma warning( disable : 4996 ) +#endif + +// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch. +#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 + +#ifndef _STLP_NO_IOSTREAMS +# ifndef BOOST_OLD_IOSTREAMS +# include +# else +# include +# endif +#endif // _STLP_NO_IOSTREAMS + +#include +#include +#include +#include + +namespace boost +{ + +#ifndef _STLP_NO_IOSTREAMS +# 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& operator<<( + std::basic_ostream& Os, + const iterator_range& r ) + { + std::copy( r.begin(), r.end(), + std::ostream_iterator< BOOST_DEDUCED_TYPENAME + iterator_value::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& r ) + { + std::copy( r.begin(), r.end(), std::ostream_iterator(Os)); + return Os; + } + +# endif +#endif // _STLP_NO_IOSTREAMS + +} // namespace boost + +#undef BOOST_OLD_IOSTREAMS + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) + #pragma warning(pop) +#endif + +#endif // include guard diff --git a/external/boost/range/mutable_iterator.hpp b/external/boost/range/mutable_iterator.hpp new file mode 100644 index 0000000..7beca66 --- /dev/null +++ b/external/boost/range/mutable_iterator.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_MUTABLE_ITERATOR_HPP +#define BOOST_RANGE_MUTABLE_ITERATOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#else + +#include +#include +#include +#include + +namespace boost +{ + ////////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////////// + + namespace range_detail { + BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator ) + } + + template< typename C > + struct range_mutable_iterator : range_detail::extract_iterator + {}; + + ////////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////////// + + template< typename Iterator > + struct range_mutable_iterator< std::pair > + { + typedef Iterator type; + }; + + ////////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////////// + + template< typename T, std::size_t sz > + struct range_mutable_iterator< T[sz] > + { + typedef T* type; + }; + +} // namespace boost + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif diff --git a/external/boost/range/rbegin.hpp b/external/boost/range/rbegin.hpp new file mode 100644 index 0000000..78e5f61 --- /dev/null +++ b/external/boost/range/rbegin.hpp @@ -0,0 +1,65 @@ +// 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 +#include + +namespace boost +{ + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +template< class C > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +rbegin( C& c ) +{ + return BOOST_DEDUCED_TYPENAME range_reverse_iterator::type( boost::end( c ) ); +} + +#else + +template< class C > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +rbegin( C& c ) +{ + typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator::type + iter_type; + return iter_type( boost::end( c ) ); +} + +template< class C > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +rbegin( const C& c ) +{ + typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator::type + iter_type; + return iter_type( boost::end( c ) ); +} + +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +template< class T > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +const_rbegin( const T& r ) +{ + return boost::rbegin( r ); +} + +} // namespace 'boost' + +#endif + diff --git a/external/boost/range/rend.hpp b/external/boost/range/rend.hpp new file mode 100644 index 0000000..fd79aa2 --- /dev/null +++ b/external/boost/range/rend.hpp @@ -0,0 +1,65 @@ +// 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 +#include + +namespace boost +{ + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +template< class C > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +rend( C& c ) +{ + return BOOST_DEDUCED_TYPENAME range_reverse_iterator::type( boost::begin( c ) ); +} + +#else + +template< class C > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +rend( C& c ) +{ + typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator::type + iter_type; + return iter_type( boost::begin( c ) ); +} + +template< class C > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +rend( const C& c ) +{ + typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator::type + iter_type; + return iter_type( boost::begin( c ) ); +} + +#endif + +template< class T > +inline BOOST_DEDUCED_TYPENAME range_reverse_iterator::type +const_rend( const T& r ) +{ + return boost::rend( r ); +} + +} // namespace 'boost' + +#endif + diff --git a/external/boost/range/result_iterator.hpp b/external/boost/range/result_iterator.hpp new file mode 100644 index 0000000..ba09c5f --- /dev/null +++ b/external/boost/range/result_iterator.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_RESULT_ITERATOR_HPP +#define BOOST_RANGE_RESULT_ITERATOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include + +namespace boost +{ + // + // This interface is deprecated, use range_iterator + // + + template< typename C > + struct range_result_iterator : range_iterator + { }; + +} // namespace boost + + +#endif diff --git a/external/boost/range/reverse_iterator.hpp b/external/boost/range/reverse_iterator.hpp new file mode 100644 index 0000000..f8e9221 --- /dev/null +++ b/external/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 +#include +#include + + +namespace boost +{ + ////////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////////// + + template< typename C > + struct range_reverse_iterator + { + typedef reverse_iterator< + BOOST_DEDUCED_TYPENAME range_iterator::type > type; + }; + + +} // namespace boost + + +#endif diff --git a/external/boost/range/size.hpp b/external/boost/range/size.hpp new file mode 100644 index 0000000..4b4eebe --- /dev/null +++ b/external/boost/range/size.hpp @@ -0,0 +1,52 @@ +// 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 +#include +#include +#include +#include + +namespace boost +{ + namespace range_detail + { + template + inline BOOST_DEDUCED_TYPENAME range_difference::type + range_calculate_size(const SinglePassRange& rng) + { + BOOST_ASSERT( (boost::end(rng) - boost::begin(rng)) >= 0 && + "reachability invariant broken!" ); + return boost::end(rng) - boost::begin(rng); + } + } + + template + inline BOOST_DEDUCED_TYPENAME range_difference::type + size(const SinglePassRange& rng) + { +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ + using namespace range_detail; +#endif + return range_calculate_size(rng); + } + +} // namespace 'boost' + +#endif diff --git a/external/boost/range/size_type.hpp b/external/boost/range/size_type.hpp new file mode 100644 index 0000000..8c184f8 --- /dev/null +++ b/external/boost/range/size_type.hpp @@ -0,0 +1,79 @@ +// 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 + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#else + +#include +#include +#include + +namespace boost +{ + namespace detail + { + + ////////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////////// + + template< typename C > + struct range_size + { + typedef BOOST_DEDUCED_TYPENAME C::size_type type; + }; + + ////////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////////// + + template< typename Iterator > + struct range_size< std::pair > + { + typedef std::size_t type; + }; + + ////////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////////// + + template< typename T, std::size_t sz > + struct range_size< T[sz] > + { + typedef std::size_t type; + }; + } + + template< class T > + struct range_size : + detail::range_size + { }; + + template< class T > + struct range_size + : detail::range_size + { }; + +} // namespace boost + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + +#endif diff --git a/external/boost/range/value_type.hpp b/external/boost/range/value_type.hpp new file mode 100644 index 0000000..95c7580 --- /dev/null +++ b/external/boost/range/value_type.hpp @@ -0,0 +1,34 @@ +// 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 +#include + +//#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +//#include +//#else + +#include + +namespace boost +{ + template< class T > + struct range_value : iterator_value< typename range_iterator::type > + { }; +} + +#endif diff --git a/external/boost/ref.hpp b/external/boost/ref.hpp new file mode 100644 index 0000000..6058d69 --- /dev/null +++ b/external/boost/ref.hpp @@ -0,0 +1,189 @@ +#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 +#include +#include +#include + +// +// ref.hpp - ref/cref, useful helper functions +// +// Copyright (C) 1999, 2000 Jaakko Jarvi (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 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 inline reference_wrapper BOOST_REF_CONST ref(T & t) +{ + return reference_wrapper(t); +} + +template inline reference_wrapper BOOST_REF_CONST cref(T const & t) +{ + return reference_wrapper(t); +} + +# undef BOOST_REF_CONST + +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template +class is_reference_wrapper + : public mpl::false_ +{ +}; + +template +class unwrap_reference +{ + public: + typedef T type; +}; + +# define AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(X) \ +template \ +class is_reference_wrapper< X > \ + : public mpl::true_ \ +{ \ +}; \ +\ +template \ +class unwrap_reference< X > \ +{ \ + public: \ + typedef T type; \ +}; \ +/**/ + +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper) +#if !defined(BOOST_NO_CV_SPECIALIZATIONS) +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper const) +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper volatile) +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper const volatile) +#endif + +# undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF + +# else // no partial specialization + +} // namespace boost + +#include + +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 + yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper >); + + template + struct reference_unwrapper + { + template + struct apply + { + typedef T type; + }; + }; + + template<> + struct reference_unwrapper + { + template + struct apply + { + typedef typename T::type type; + }; + }; +} + +template +class is_reference_wrapper +{ + public: + BOOST_STATIC_CONSTANT( + bool, value = ( + sizeof(detail::is_reference_wrapper_test(type())) + == sizeof(detail::yes_reference_wrapper_t))); + + typedef ::boost::mpl::bool_ type; +}; + +template +class unwrap_reference + : public detail::reference_unwrapper< + is_reference_wrapper::value + >::template apply +{}; + +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template inline typename unwrap_reference::type& +unwrap_ref(T& t) +{ + return t; +} + +template inline T* get_pointer( reference_wrapper const & r ) +{ + return r.get_pointer(); +} + +} // namespace boost + +#endif // #ifndef BOOST_REF_HPP_INCLUDED diff --git a/external/boost/regex.hpp b/external/boost/regex.hpp new file mode 100644 index 0000000..6dc3dfb --- /dev/null +++ b/external/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 + * 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 +#endif + +#include + +#endif // include + + + + diff --git a/external/boost/regex/config.hpp b/external/boost/regex/config.hpp new file mode 100644 index 0000000..6b7db45 --- /dev/null +++ b/external/boost/regex/config.hpp @@ -0,0 +1,432 @@ +/* + * + * 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 + * 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 +#endif + +/***************************************************************************** + * + * Include all the headers we need here: + * + ****************************************************************************/ + +#ifdef __cplusplus + +# ifndef BOOST_REGEX_USER_CONFIG +# define BOOST_REGEX_USER_CONFIG +# endif + +# include BOOST_REGEX_USER_CONFIG + +# include + +#else + /* + * C build, + * don't include because that may + * do C++ specific things in future... + */ +# include +# include +# 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 doesn't allow + * masks to be combined, for example: + * std::use_facet >.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 +/* + * Visual C++ doesn't support external templates with C++ extensions turned off: + */ +#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS) +# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES +#endif +/* + * Shared regex lib will crash without this, frankly it looks a lot like a gcc bug: + */ +#if defined(__MINGW32__) +# 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: does not compile + * as a temporary fix include instead and prevent inclusion + * of STLPort version of */ +# include +# define __STLPORT_CWCTYPE +# define _STLP_CWCTYPE +# endif + +#ifdef __cplusplus +# include +#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 + (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. + * Note that this does NOT WORK with VC10 when the C++ locale is in effect as + * the locale's facets simply do not compile in that case. + */ +#if defined(__cplusplus) && (defined(BOOST_MSVC) || defined(__ICL)) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(BOOST_WINDOWS) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && !defined(BOOST_RWSTD_VER) && ((_MSC_VER < 1600) || !defined(BOOST_REGEX_USE_CPP_LOCALE)) +# define BOOST_REGEX_HAS_OTHER_WCHAR_T +# ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4251 4231 4660) +# endif +# if defined(_DLL) && defined(BOOST_MSVC) && (BOOST_MSVC < 1600) +# include + extern template class __declspec(dllimport) std::basic_string; +# endif +# ifdef BOOST_MSVC +# pragma warning(pop) +# endif +#endif + + +/***************************************************************************** + * + * Set up dll import/export options: + * + ****************************************************************************/ + +#ifndef BOOST_SYMBOL_EXPORT +# define BOOST_SYMBOL_EXPORT +# define BOOST_SYMBOL_IMPORT +#endif + +#if (defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_REGEX_STATIC_LINK) +# if defined(BOOST_REGEX_SOURCE) +# define BOOST_REGEX_DECL BOOST_SYMBOL_EXPORT +# define BOOST_REGEX_BUILD_DLL +# else +# define BOOST_REGEX_DECL BOOST_SYMBOL_IMPORT +# endif +#else +# 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 +#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) || defined(BOOST_REGEX_NO_FASTCALL) +# 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 + +#if defined(__CYGWIN__) +# define BOOST_REGEX_USE_C_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 +#include +#include + +# 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/external/boost/regex/config/borland.hpp b/external/boost/regex/config/borland.hpp new file mode 100644 index 0000000..51c2126 --- /dev/null +++ b/external/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 + * 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 +#undef strcmp +#undef strcpy +#endif + +#endif + + diff --git a/external/boost/regex/config/cwchar.hpp b/external/boost/regex/config/cwchar.hpp new file mode 100644 index 0000000..a55089d --- /dev/null +++ b/external/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 + * DESCRIPTION: regex wide character string fixes. + */ + +#ifndef BOOST_REGEX_CONFIG_CWCHAR_HPP +#define BOOST_REGEX_CONFIG_CWCHAR_HPP + +#include +#include +#include + +#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) && !defined(UNDER_CE) +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/external/boost/regex/icu.hpp b/external/boost/regex/icu.hpp new file mode 100644 index 0000000..772806e --- /dev/null +++ b/external/boost/regex/icu.hpp @@ -0,0 +1,1031 @@ +/* + * + * 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 + * DESCRIPTION: Unicode regular expressions on top of the ICU Library. + */ + +#ifndef BOOST_REGEX_ICU_HPP +#define BOOST_REGEX_ICU_HPP + +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_MSVC +#pragma warning (push) +#pragma warning (disable: 4251) +#endif + +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 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 get_icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& loc) +{ + return boost::shared_ptr(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 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(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(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, + offset_horizontal = U_CHAR_CATEGORY_COUNT+7, + offset_vertical = U_CHAR_CATEGORY_COUNT+8 + }; + + // + // 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 const char_class_type mask_horizontal; + static const char_class_type mask_vertical; + + 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 +#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 u32match; +typedef match_results 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 +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 conv_type; + return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt); +} + +template +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 conv_type; + return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt); +} + +template +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 +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 conv_type; + typedef std::vector vector_type; + vector_type v; + conv_type a(i, i, j), b(j, i, j); + while(a != b) + { + v.push_back(*a); + ++a; + } + if(v.size()) + return u32regex(&*v.begin(), v.size(), opt); + return u32regex(static_cast(0), static_cast(0), opt); +} + +template +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 conv_type; + typedef std::vector vector_type; + vector_type v; + conv_type a(i, i, j), b(j, i, j); + while(a != b) + { + v.push_back(*a); + ++a; + } + if(v.size()) + return u32regex(&*v.begin(), v.size(), opt); + return u32regex(static_cast(0), static_cast(0), opt); +} + +template +inline u32regex do_make_u32regex(InputIterator i, + InputIterator j, + boost::regex_constants::syntax_option_type opt, + const boost::mpl::int_<4>*) +{ + typedef std::vector vector_type; + vector_type v; + while(i != j) + { + v.push_back((UChar32)(*i)); + ++i; + } + if(v.size()) + return u32regex(&*v.begin(), v.size(), opt); + return u32regex(static_cast(0), static_cast(0), opt); +} +#endif +} + +// +// Construction from an iterator pair: +// +template +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 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 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(p)), opt, static_cast 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 const*>(0)); +} +#endif +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) +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 const*>(0)); +} +#endif +// +// construction from basic_string class-template: +// +template +inline u32regex make_u32regex(const std::basic_string& 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 const*>(0)); +} +// +// Construction from ICU string type: +// +inline u32regex make_u32regex(const U_NAMESPACE_QUALIFIER 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 const*>(0)); +} + +// +// regex_match overloads that widen the character type as appropriate: +// +namespace re_detail{ +template +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 +inline bool do_regex_match(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags, + boost::mpl::int_<4> const*) +{ + return ::boost::regex_match(first, last, m, e, flags); +} +template +bool do_regex_match(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags, + boost::mpl::int_<2> const*) +{ + typedef u16_to_u32_iterator conv_type; + typedef match_results match_type; + typedef typename match_type::allocator_type alloc_type; + match_type what; + bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags); + // copy results across to m: + if(result) copy_results(m, what); + return result; +} +template +bool do_regex_match(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags, + boost::mpl::int_<1> const*) +{ + typedef u8_to_u32_iterator conv_type; + typedef match_results match_type; + typedef typename match_type::allocator_type alloc_type; + match_type what; + bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags); + // copy results across to m: + if(result) copy_results(m, what); + return result; +} +} // namespace re_detail + +template +inline bool u32regex_match(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags = match_default) +{ + return re_detail::do_regex_match(first, last, m, e, flags, static_cast const*>(0)); +} +inline bool u32regex_match(const UChar* p, + match_results& 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 const*>(0)); +} +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX) +inline bool u32regex_match(const wchar_t* p, + match_results& 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 const*>(0)); +} +#endif +inline bool u32regex_match(const char* p, + match_results& 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 const*>(0)); +} +inline bool u32regex_match(const unsigned char* p, + match_results& 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 const*>(0)); +} +inline bool u32regex_match(const std::string& s, + match_results& 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 const*>(0)); +} +#ifndef BOOST_NO_STD_WSTRING +inline bool u32regex_match(const std::wstring& s, + match_results& 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 const*>(0)); +} +#endif +inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s, + match_results& 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 const*>(0)); +} +// +// regex_match overloads that do not return what matched: +// +template +inline bool u32regex_match(BidiIterator first, BidiIterator last, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(first, last, m, e, flags, static_cast const*>(0)); +} +inline bool u32regex_match(const UChar* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast const*>(0)); +} +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX) +inline bool u32regex_match(const wchar_t* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast const*>(0)); +} +#endif +inline bool u32regex_match(const char* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast const*>(0)); +} +inline bool u32regex_match(const unsigned char* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast const*>(0)); +} +inline bool u32regex_match(const std::string& s, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast 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 m; + return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast const*>(0)); +} +#endif +inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast const*>(0)); +} + +// +// regex_search overloads that widen the character type as appropriate: +// +namespace re_detail{ +template +inline bool do_regex_search(BidiIterator first, BidiIterator last, + match_results& 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 +bool do_regex_search(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags, + BidiIterator base, + boost::mpl::int_<2> const*) +{ + typedef u16_to_u32_iterator conv_type; + typedef match_results match_type; + typedef typename match_type::allocator_type alloc_type; + match_type what; + bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base)); + // copy results across to m: + if(result) copy_results(m, what); + return result; +} +template +bool do_regex_search(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags, + BidiIterator base, + boost::mpl::int_<1> const*) +{ + typedef u8_to_u32_iterator conv_type; + typedef match_results match_type; + typedef typename match_type::allocator_type alloc_type; + match_type what; + bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base)); + // copy results across to m: + if(result) copy_results(m, what); + return result; +} +} + +template +inline bool u32regex_search(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags = match_default) +{ + return re_detail::do_regex_search(first, last, m, e, flags, first, static_cast const*>(0)); +} +template +inline bool u32regex_search(BidiIterator first, BidiIterator last, + match_results& m, + const u32regex& e, + match_flag_type flags, + BidiIterator base) +{ + return re_detail::do_regex_search(first, last, m, e, flags, base, static_cast const*>(0)); +} +inline bool u32regex_search(const UChar* p, + match_results& 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 const*>(0)); +} +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX) +inline bool u32regex_search(const wchar_t* p, + match_results& 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 const*>(0)); +} +#endif +inline bool u32regex_search(const char* p, + match_results& 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 const*>(0)); +} +inline bool u32regex_search(const unsigned char* p, + match_results& 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 const*>(0)); +} +inline bool u32regex_search(const std::string& s, + match_results& 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 const*>(0)); +} +#ifndef BOOST_NO_STD_WSTRING +inline bool u32regex_search(const std::wstring& s, + match_results& 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 const*>(0)); +} +#endif +inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s, + match_results& 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 const*>(0)); +} +template +inline bool u32regex_search(BidiIterator first, BidiIterator last, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(first, last, m, e, flags, first, static_cast const*>(0)); +} +inline bool u32regex_search(const UChar* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast const*>(0)); +} +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX) +inline bool u32regex_search(const wchar_t* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast const*>(0)); +} +#endif +inline bool u32regex_search(const char* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast const*>(0)); +} +inline bool u32regex_search(const unsigned char* p, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast const*>(0)); +} +inline bool u32regex_search(const std::string& s, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast 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 m; + return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast const*>(0)); +} +#endif +inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s, + const u32regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return re_detail::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast const*>(0)); +} + +// +// overloads for regex_replace with utf-8 and utf-16 data types: +// +namespace re_detail{ +template +inline std::pair< boost::u8_to_u32_iterator, boost::u8_to_u32_iterator > + make_utf32_seq(I i, I j, mpl::int_<1> const*) +{ + return std::pair< boost::u8_to_u32_iterator, boost::u8_to_u32_iterator >(boost::u8_to_u32_iterator(i, i, j), boost::u8_to_u32_iterator(j, i, j)); +} +template +inline std::pair< boost::u16_to_u32_iterator, boost::u16_to_u32_iterator > + make_utf32_seq(I i, I j, mpl::int_<2> const*) +{ + return std::pair< boost::u16_to_u32_iterator, boost::u16_to_u32_iterator >(boost::u16_to_u32_iterator(i, i, j), boost::u16_to_u32_iterator(j, i, j)); +} +template +inline std::pair< I, I > + make_utf32_seq(I i, I j, mpl::int_<4> const*) +{ + return std::pair< I, I >(i, j); +} +template +inline std::pair< boost::u8_to_u32_iterator, boost::u8_to_u32_iterator > + make_utf32_seq(const charT* p, mpl::int_<1> const*) +{ + std::size_t len = std::strlen((const char*)p); + return std::pair< boost::u8_to_u32_iterator, boost::u8_to_u32_iterator >(boost::u8_to_u32_iterator(p, p, p+len), boost::u8_to_u32_iterator(p+len, p, p+len)); +} +template +inline std::pair< boost::u16_to_u32_iterator, boost::u16_to_u32_iterator > + make_utf32_seq(const charT* p, mpl::int_<2> const*) +{ + std::size_t len = u_strlen((const UChar*)p); + return std::pair< boost::u16_to_u32_iterator, boost::u16_to_u32_iterator >(boost::u16_to_u32_iterator(p, p, p + len), boost::u16_to_u32_iterator(p+len, p, p + len)); +} +template +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 +inline OutputIterator make_utf32_out(OutputIterator o, mpl::int_<4> const*) +{ + return o; +} +template +inline utf16_output_iterator make_utf32_out(OutputIterator o, mpl::int_<2> const*) +{ + return o; +} +template +inline utf8_output_iterator make_utf32_out(OutputIterator o, mpl::int_<1> const*) +{ + return o; +} + +template +OutputIterator do_regex_replace(OutputIterator out, + std::pair const& in, + const u32regex& e, + const std::pair& fmt, + match_flag_type flags + ) +{ + // unfortunately we have to copy the format string in order to pass in onward: + std::vector 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 i(in.first, in.second, e, flags); + regex_iterator 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(0), static_cast(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 +inline const BaseIterator& extract_output_base(const BaseIterator& b) +{ + return b; +} +template +inline BaseIterator extract_output_base(const utf8_output_iterator& b) +{ + return b.base(); +} +template +inline BaseIterator extract_output_base(const utf16_output_iterator& b) +{ + return b.base(); +} +} // re_detail + +template +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) + +#endif + ( + re_detail::do_regex_replace( + re_detail::make_utf32_out(out, static_cast const*>(0)), + re_detail::make_utf32_seq(first, last, static_cast const*>(0)), + e, + re_detail::make_utf32_seq(fmt, static_cast const*>(0)), + flags) + ); +} + +template +inline OutputIterator u32regex_replace(OutputIterator out, + Iterator first, + Iterator last, + const u32regex& e, + const std::basic_string& fmt, + match_flag_type flags = match_default) +{ + return re_detail::extract_output_base +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +#endif + ( + re_detail::do_regex_replace( + re_detail::make_utf32_out(out, static_cast const*>(0)), + re_detail::make_utf32_seq(first, last, static_cast const*>(0)), + e, + re_detail::make_utf32_seq(fmt.begin(), fmt.end(), static_cast const*>(0)), + flags) + ); +} + +template +inline OutputIterator u32regex_replace(OutputIterator out, + Iterator first, + Iterator last, + const u32regex& e, + const U_NAMESPACE_QUALIFIER UnicodeString& fmt, + match_flag_type flags = match_default) +{ + return re_detail::extract_output_base +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +#endif + ( + re_detail::do_regex_replace( + re_detail::make_utf32_out(out, static_cast const*>(0)), + re_detail::make_utf32_seq(first, last, static_cast const*>(0)), + e, + re_detail::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast const*>(0)), + flags) + ); +} + +template +std::basic_string u32regex_replace(const std::basic_string& s, + const u32regex& e, + const charT* fmt, + match_flag_type flags = match_default) +{ + std::basic_string result; + re_detail::string_out_iterator > i(result); + u32regex_replace(i, s.begin(), s.end(), e, fmt, flags); + return result; +} + +template +std::basic_string u32regex_replace(const std::basic_string& s, + const u32regex& e, + const std::basic_string& fmt, + match_flag_type flags = match_default) +{ + std::basic_string result; + re_detail::string_out_iterator > i(result); + u32regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags); + return result; +} + +namespace re_detail{ + +class unicode_string_out_iterator +{ + U_NAMESPACE_QUALIFIER UnicodeString* out; +public: + unicode_string_out_iterator(U_NAMESPACE_QUALIFIER 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 U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s, + const u32regex& e, + const UChar* fmt, + match_flag_type flags = match_default) +{ + U_NAMESPACE_QUALIFIER 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 U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s, + const u32regex& e, + const U_NAMESPACE_QUALIFIER UnicodeString& fmt, + match_flag_type flags = match_default) +{ + U_NAMESPACE_QUALIFIER UnicodeString result; + re_detail::unicode_string_out_iterator i(result); + re_detail::do_regex_replace( + re_detail::make_utf32_out(i, static_cast const*>(0)), + re_detail::make_utf32_seq(s.getBuffer(), s.getBuffer()+s.length(), static_cast const*>(0)), + e, + re_detail::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast const*>(0)), + flags); + return result; +} + +} // namespace boost. + +#ifdef BOOST_MSVC +#pragma warning (pop) +#endif + +#include +#include + +#endif diff --git a/external/boost/regex/pattern_except.hpp b/external/boost/regex/pattern_except.hpp new file mode 100644 index 0000000..57ea14c --- /dev/null +++ b/external/boost/regex/pattern_except.hpp @@ -0,0 +1,100 @@ +/* + * + * 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 + * DESCRIPTION: Declares pattern-matching exception classes. + */ + +#ifndef BOOST_RE_PAT_EXCEPT_HPP +#define BOOST_RE_PAT_EXCEPT_HPP + +#ifndef BOOST_REGEX_CONFIG_HPP +#include +#endif + +#include +#include +#include + +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#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 +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_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif + + + diff --git a/external/boost/regex/pending/object_cache.hpp b/external/boost/regex/pending/object_cache.hpp new file mode 100644 index 0000000..05b6bfa --- /dev/null +++ b/external/boost/regex/pending/object_cache.hpp @@ -0,0 +1,165 @@ +/* + * + * 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 + * DESCRIPTION: Implements a generic object cache. + */ + +#ifndef BOOST_REGEX_OBJECT_CACHE_HPP +#define BOOST_REGEX_OBJECT_CACHE_HPP + +#include +#include +#include +#include +#include +#include +#ifdef BOOST_HAS_THREADS +#include +#endif + +namespace boost{ + +template +class object_cache +{ +public: + typedef std::pair< ::boost::shared_ptr, Key const*> value_type; + typedef std::list list_type; + typedef typename list_type::iterator list_iterator; + typedef std::map map_type; + typedef typename map_type::iterator map_iterator; + typedef typename list_type::size_type size_type; + static boost::shared_ptr get(const Key& k, size_type l_max_cache_size); + +private: + static boost::shared_ptr do_get(const Key& k, size_type l_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 +boost::shared_ptr object_cache::get(const Key& k, size_type l_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, l_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")); +#if defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION) || defined(BOOST_NO_EXCEPTIONS) + return boost::shared_ptr(); +#endif +#else + return do_get(k, l_max_cache_size); +#endif +} + +template +boost::shared_ptr object_cache::do_get(const Key& k, size_type l_max_cache_size) +{ + typedef typename object_cache::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 result(new Object(k)); + // + // Add it to the list, and index it: + // + s_data.cont.push_back(value_type(result, static_cast(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 > l_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 > l_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/external/boost/regex/pending/static_mutex.hpp b/external/boost/regex/pending/static_mutex.hpp new file mode 100644 index 0000000..9c10050 --- /dev/null +++ b/external/boost/regex/pending/static_mutex.hpp @@ -0,0 +1,180 @@ +/* + * + * 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 + * 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 +#include // dll import/export options. + +#ifdef BOOST_HAS_PTHREADS +#include +#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 + +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 + { + return locked() ? this : 0; + } + bool locked()const + { + return m_have_lock; + } + 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&); +}; + +} // 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. +// +// Since this preprocessor path is almost never taken, we hide these header +// dependencies so that build tools don't find them. +// +#define B1 +#define B2 +#include B1 +#include B2 +#undef B1 +#undef B2 + +namespace boost{ + +class BOOST_REGEX_DECL scoped_static_mutex_lock; +extern "C" BOOST_REGEX_DECL void boost_regex_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/external/boost/regex/pending/unicode_iterator.hpp b/external/boost/regex/pending/unicode_iterator.hpp new file mode 100644 index 0000000..e6399b5 --- /dev/null +++ b/external/boost/regex/pending/unicode_iterator.hpp @@ -0,0 +1,756 @@ +/* + * + * 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 + * DESCRIPTION: Iterator adapters for converting between different Unicode encodings. + */ + +/**************************************************************************** + +Contents: +~~~~~~~~~ + +1) Read Only, Input Adapters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +template +class u32_to_u8_iterator; + +Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-8. + +template +class u8_to_u32_iterator; + +Adapts sequence of UTF-8 code points to "look like" a sequence of UTF-32. + +template +class u32_to_u16_iterator; + +Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-16. + +template +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 utf8_output_iterator; + +Accepts UTF-32 code points and forwards them on as UTF-8 code points. + +template +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 +#include +#include +#include +#include +#include +#ifndef BOOST_NO_STD_LOCALE +#include +#include +#endif +#include // 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 & 0xFFFFFC00u) == 0xd800u; +} +inline bool is_low_surrogate(::boost::uint16_t v) +{ + return (v & 0xFFFFFC00u) == 0xdc00u; +} +template +inline bool is_surrogate(T v) +{ + return (v & 0xFFFFF800u) == 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; +} + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4100) +#endif +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); +} +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + + +} // namespace detail + +template +class u32_to_u16_iterator + : public boost::iterator_facade, U16Type, std::bidirectional_iterator_tag, const U16Type> +{ + typedef boost::iterator_facade, 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::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(v >> 10) + detail::high_surrogate_base; + m_values[1] = static_cast(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(*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 u16_to_u32_iterator + : public boost::iterator_facade, U32Type, std::bidirectional_iterator_tag, const U32Type> +{ + typedef boost::iterator_facade, 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::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; + } + // + // Range checked version: + // + u16_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b) + { + m_value = pending_read; + // + // The range must not start with a low surrogate, or end in a high surrogate, + // otherwise we run the risk of running outside the underlying input range. + // Likewise b must not be located at a low surrogate. + // + boost::uint16_t val; + if(start != end) + { + if((b != start) && (b != end)) + { + val = *b; + if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u)) + invalid_code_point(val); + } + val = *start; + if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u)) + invalid_code_point(val); + val = *--end; + if(detail::is_high_surrogate(val)) + invalid_code_point(val); + } + } +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(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(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 u32_to_u8_iterator + : public boost::iterator_facade, U8Type, std::bidirectional_iterator_tag, const U8Type> +{ + typedef boost::iterator_facade, 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::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(c); + m_values[1] = static_cast(0u); + m_values[2] = static_cast(0u); + m_values[3] = static_cast(0u); + } + else if(c < 0x800u) + { + m_values[0] = static_cast(0xC0u + (c >> 6)); + m_values[1] = static_cast(0x80u + (c & 0x3Fu)); + m_values[2] = static_cast(0u); + m_values[3] = static_cast(0u); + } + else if(c < 0x10000u) + { + m_values[0] = static_cast(0xE0u + (c >> 12)); + m_values[1] = static_cast(0x80u + ((c >> 6) & 0x3Fu)); + m_values[2] = static_cast(0x80u + (c & 0x3Fu)); + m_values[3] = static_cast(0u); + } + else + { + m_values[0] = static_cast(0xF0u + (c >> 18)); + m_values[1] = static_cast(0x80u + ((c >> 12) & 0x3Fu)); + m_values[2] = static_cast(0x80u + ((c >> 6) & 0x3Fu)); + m_values[3] = static_cast(0x80u + (c & 0x3Fu)); + } + m_current= 0; + } + BaseIterator m_position; + mutable U8Type m_values[5]; + mutable unsigned m_current; +}; + +template +class u8_to_u32_iterator + : public boost::iterator_facade, U32Type, std::bidirectional_iterator_tag, const U32Type> +{ + typedef boost::iterator_facade, 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::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_sequence(); + 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; + } + // + // Checked constructor: + // + u8_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b) + { + m_value = pending_read; + // + // We must not start with a continuation character, or end with a + // truncated UTF-8 sequence otherwise we run the risk of going past + // the start/end of the underlying sequence: + // + if(start != end) + { + unsigned char v = *start; + if((v & 0xC0u) == 0x80u) + invalid_sequence(); + if((b != start) && (b != end) && ((*b & 0xC0u) == 0x80u)) + invalid_sequence(); + BaseIterator pos = end; + do + { + v = *--pos; + } + while((start != pos) && ((v & 0xC0u) == 0x80u)); + std::ptrdiff_t extra = detail::utf8_byte_count(v); + if(std::distance(pos, end) < extra) + invalid_sequence(); + } + } +private: + static void invalid_sequence() + { + 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(static_cast< ::boost::uint8_t>(*m_position)); + // we must not have a continuation character: + if((m_value & 0xC0u) == 0x80u) + invalid_sequence(); + // 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(*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(0x10FFFFu)) + invalid_sequence(); + } + BaseIterator m_position; + mutable U32Type m_value; +}; + +template +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(v >> 10) + detail::high_surrogate_base; + *m_position++ = static_cast(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(v); + } + } + mutable BaseIterator m_position; +}; + +template +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(c); + } + else if(c < 0x800u) + { + *m_position++ = static_cast(0xC0u + (c >> 6)); + *m_position++ = static_cast(0x80u + (c & 0x3Fu)); + } + else if(c < 0x10000u) + { + *m_position++ = static_cast(0xE0u + (c >> 12)); + *m_position++ = static_cast(0x80u + ((c >> 6) & 0x3Fu)); + *m_position++ = static_cast(0x80u + (c & 0x3Fu)); + } + else + { + *m_position++ = static_cast(0xF0u + (c >> 18)); + *m_position++ = static_cast(0x80u + ((c >> 12) & 0x3Fu)); + *m_position++ = static_cast(0x80u + ((c >> 6) & 0x3Fu)); + *m_position++ = static_cast(0x80u + (c & 0x3Fu)); + } + } + mutable BaseIterator m_position; +}; + +} // namespace boost + +#endif // BOOST_REGEX_UNICODE_ITERATOR_HPP + diff --git a/external/boost/regex/regex_traits.hpp b/external/boost/regex/regex_traits.hpp new file mode 100644 index 0000000..730ba6e --- /dev/null +++ b/external/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 + * DESCRIPTION: Declares regular expression traits classes. + */ + +#ifndef BOOST_REGEX_TRAITS_HPP +#define BOOST_REGEX_TRAITS_HPP + +#ifndef BOOST_REGEX_CONFIG_HPP +# include +#endif + +# ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED +# include +# endif + +#endif // include + + + + + diff --git a/external/boost/regex/user.hpp b/external/boost/regex/user.hpp new file mode 100644 index 0000000..33b1013 --- /dev/null +++ b/external/boost/regex/user.hpp @@ -0,0 +1,93 @@ +/* + * + * 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 + * 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 + +// define this if you want regex to use __cdecl calling convensions, even when __fastcall is available: +// #define BOOST_REGEX_NO_FASTCALL diff --git a/external/boost/regex/v4/basic_regex.hpp b/external/boost/regex/v4/basic_regex.hpp new file mode 100644 index 0000000..1e71877 --- /dev/null +++ b/external/boost/regex/v4/basic_regex.hpp @@ -0,0 +1,779 @@ +/* + * + * Copyright (c) 1998-2004 John Maddock + * Copyright 2011 Garmin Ltd. or its subsidiaries + * + * Distributed under the 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 + * DESCRIPTION: Declares template class basic_regex. + */ + +#ifndef BOOST_REGEX_V4_BASIC_REGEX_HPP +#define BOOST_REGEX_V4_BASIC_REGEX_HPP + +#include +#include + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable : 4251 4231 4660 4800) +#endif + +namespace re_detail{ + +// +// forward declaration, we will need this one later: +// +template +class basic_regex_parser; + +template +void bubble_down_one(I first, I last) +{ + if(first != last) + { + I next = last - 1; + while((next != first) && (*next < *(next-1))) + { + (next-1)->swap(*next); + --next; + } + } +} + +template +inline int hash_value_from_capture_name(Iterator i, Iterator j) +{ + std::size_t r = boost::hash_range(i, j); + r %= ((std::numeric_limits::max)() - 10001); + r += 10000; + return static_cast(r); +} + +class named_subexpressions +{ +public: + struct name + { + template + name(const charT* i, const charT* j, int idx) + : index(idx) + { + hash = hash_value_from_capture_name(i, j); + } + name(int h, int idx) + : index(idx), hash(h) + { + } + int index; + int hash; + bool operator < (const name& other)const + { + return hash < other.hash; + } + bool operator == (const name& other)const + { + return hash == other.hash; + } + void swap(name& other) + { + std::swap(index, other.index); + std::swap(hash, other.hash); + } + }; + + typedef std::vector::const_iterator const_iterator; + typedef std::pair range_type; + + named_subexpressions(){} + + template + void set_name(const charT* i, const charT* j, int index) + { + m_sub_names.push_back(name(i, j, index)); + bubble_down_one(m_sub_names.begin(), m_sub_names.end()); + } + template + int get_id(const charT* i, const charT* j)const + { + name t(i, j, 0); + typename std::vector::const_iterator pos = std::lower_bound(m_sub_names.begin(), m_sub_names.end(), t); + if((pos != m_sub_names.end()) && (*pos == t)) + { + return pos->index; + } + return -1; + } + template + range_type equal_range(const charT* i, const charT* j)const + { + name t(i, j, 0); + return std::equal_range(m_sub_names.begin(), m_sub_names.end(), t); + } + int get_id(int h)const + { + name t(h, 0); + std::vector::const_iterator pos = std::lower_bound(m_sub_names.begin(), m_sub_names.end(), t); + if((pos != m_sub_names.end()) && (*pos == t)) + { + return pos->index; + } + return -1; + } + range_type equal_range(int h)const + { + name t(h, 0); + return std::equal_range(m_sub_names.begin(), m_sub_names.end(), t); + } +private: + std::vector m_sub_names; +}; + +// +// class regex_data: +// represents the data we wish to expose to the matching algorithms. +// +template +struct regex_data : public named_subexpressions +{ + typedef regex_constants::syntax_option_type flag_type; + typedef std::size_t size_type; + + regex_data(const ::boost::shared_ptr< + ::boost::regex_traits_wrapper >& t) + : m_ptraits(t), m_expression(0), m_expression_len(0) {} + regex_data() + : m_ptraits(new ::boost::regex_traits_wrapper()), m_expression(0), m_expression_len(0) {} + + ::boost::shared_ptr< + ::boost::regex_traits_wrapper + > 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 + std::vector< + std::pair< + std::size_t, std::size_t> > m_subs; // Position of sub-expressions within the *string*. + bool m_has_recursions; // whether we have recursive expressions; +}; +// +// class basic_regex_implementation +// pimpl implementation class for basic_regex. +// +template +class basic_regex_implementation + : public regex_data +{ +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 >& t) + : regex_data(t) {} + void assign(const charT* arg_first, + const charT* arg_last, + flag_type f) + { + regex_data* pdat = this; + basic_regex_parser 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 BOOST_REGEX_CALL str()const + { + std::basic_string result; + if(this->m_status == 0) + result = std::basic_string(this->m_expression, this->m_expression_len); + return result; + } + const_iterator BOOST_REGEX_CALL expression()const + { + return this->m_expression; + } + std::pair BOOST_REGEX_CALL subexpression(std::size_t n)const + { + if(n == 0) + boost::throw_exception(std::out_of_range("0 is not a valid subexpression index.")); + const std::pair& pi = this->m_subs.at(n - 1); + std::pair p(expression() + pi.first, expression() + pi.second); + return p; + } + // + // 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& get_traits()const + { + return *(this->m_ptraits); + } + bool can_be_null()const + { + return this->m_can_be_null; + } + const regex_data& get_data()const + { + basic_regex_implementation const* p = this; + return *static_cast*>(p); + } +}; + +} // namespace re_detail +// +// class basic_regex: +// represents the compiled +// regular expression: +// + +#ifdef BOOST_REGEX_NO_FWD +template > +#else +template +#endif +class basic_regex : public regbase +{ +public: + // typedefs: + typedef std::size_t 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 + unsigned int BOOST_REGEX_CALL set_expression(const std::basic_string& p, flag_type f = regex_constants::normal) + { + return set_expression(p.data(), p.data() + p.size(), f); + } + + template + explicit basic_regex(const std::basic_string& p, flag_type f = regex_constants::normal) + { + assign(p, f); + } + + template + 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(static_cast(&*a.begin()), static_cast(&*a.begin() + a.size()), f); + else + assign(static_cast(0), static_cast(0), f); + } + + template + basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string& p) + { + return assign(p.data(), p.data() + p.size(), regex_constants::normal); + } + + template + basic_regex& BOOST_REGEX_CALL assign( + const std::basic_string& s, + flag_type f = regex_constants::normal) + { + return assign(s.data(), s.data() + s.size(), f); + } + + template + 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(0), static_cast(0), f); + } +#else + unsigned int BOOST_REGEX_CALL set_expression(const std::basic_string& p, flag_type f = regex_constants::normal) + { + return set_expression(p.data(), p.data() + p.size(), f); + } + + basic_regex(const std::basic_string& p, flag_type f = regex_constants::normal) + { + assign(p, f); + } + + basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string& p) + { + return assign(p.data(), p.data() + p.size(), regex_constants::normal); + } + + basic_regex& BOOST_REGEX_CALL assign( + const std::basic_string& 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 BOOST_REGEX_CALL str()const + { + return m_pimpl.get() ? m_pimpl->str() : std::basic_string(); + } + // + // begin, end, subexpression: + std::pair BOOST_REGEX_CALL subexpression(std::size_t n)const + { + if(!m_pimpl.get()) + boost::throw_exception(std::logic_error("Can't access subexpressions in an invalid regex.")); + return m_pimpl->subexpression(n); + } + 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& 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& get_data()const + { + BOOST_ASSERT(0 != m_pimpl.get()); + return m_pimpl->get_data(); + } + boost::shared_ptr get_named_subs()const + { + return m_pimpl; + } + +private: + shared_ptr > 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 +basic_regex& basic_regex::do_assign(const charT* p1, + const charT* p2, + flag_type f) +{ + shared_ptr > temp; + if(!m_pimpl.get()) + { + temp = shared_ptr >(new re_detail::basic_regex_implementation()); + } + else + { + temp = shared_ptr >(new re_detail::basic_regex_implementation(m_pimpl->m_ptraits)); + } + temp->assign(p1, p2, f); + temp.swap(m_pimpl); + return *this; +} + +template +typename basic_regex::locale_type BOOST_REGEX_CALL basic_regex::imbue(locale_type l) +{ + shared_ptr > temp(new re_detail::basic_regex_implementation()); + locale_type result = temp->imbue(l); + temp.swap(m_pimpl); + return result; +} + +// +// non-members: +// +template +void swap(basic_regex& e1, basic_regex& e2) +{ + e1.swap(e2); +} + +#ifndef BOOST_NO_STD_LOCALE +template +std::basic_ostream& + operator << (std::basic_ostream& os, + const basic_regex& e) +{ + return (os << e.str()); +} +#else +template +std::ostream& operator << (std::ostream& os, const basic_regex& 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 > +#else +template +#endif +class reg_expression : public basic_regex +{ +public: + typedef typename basic_regex::flag_type flag_type; + typedef typename basic_regex::size_type size_type; + explicit reg_expression(){} + explicit reg_expression(const charT* p, flag_type f = regex_constants::normal) + : basic_regex(p, f){} + reg_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal) + : basic_regex(p1, p2, f){} + reg_expression(const charT* p, size_type len, flag_type f) + : basic_regex(p, len, f){} + reg_expression(const reg_expression& that) + : basic_regex(that) {} + ~reg_expression(){} + reg_expression& BOOST_REGEX_CALL operator=(const reg_expression& that) + { + return this->assign(that); + } + +#if !defined(BOOST_NO_MEMBER_TEMPLATES) + template + explicit reg_expression(const std::basic_string& p, flag_type f = regex_constants::normal) + : basic_regex(p, f) + { + } + + template + reg_expression(InputIterator arg_first, InputIterator arg_last, flag_type f = regex_constants::normal) + : basic_regex(arg_first, arg_last, f) + { + } + + template + reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string& p) + { + this->assign(p); + return *this; + } +#else + explicit reg_expression(const std::basic_string& p, flag_type f = regex_constants::normal) + : basic_regex(p, f) + { + } + + reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string& p) + { + this->assign(p); + return *this; + } +#endif + +}; + +#ifdef BOOST_MSVC +#pragma warning (pop) +#endif + +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/basic_regex_creator.hpp b/external/boost/regex/v4/basic_regex_creator.hpp new file mode 100644 index 0000000..c4b1c04 --- /dev/null +++ b/external/boost/regex/v4/basic_regex_creator.hpp @@ -0,0 +1,1573 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4800) +#endif + +namespace boost{ + +namespace re_detail{ + +template +struct digraph : public std::pair +{ + digraph() : std::pair(0, 0){} + digraph(charT c1) : std::pair(c1, 0){} + digraph(charT c1, charT c2) : std::pair(c1, c2) + {} +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + digraph(const digraph& d) : std::pair(d.first, d.second){} +#endif + template + digraph(const Seq& s) : std::pair() + { + BOOST_ASSERT(s.size() <= 2); + BOOST_ASSERT(s.size()); + this->first = s[0]; + this->second = (s.size() > 1) ? s[1] : 0; + } +}; + +template +class basic_char_set +{ +public: + typedef digraph 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::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 m_singles; // a list of single characters to match + std::vector 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 m_equivalents; // a list of equivalence classes +}; + +template +class basic_regex_creator +{ +public: + basic_regex_creator(regex_data* 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(addr) - static_cast(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(static_cast(static_cast(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(f & regbase::icase)) + { + m_icase = static_cast(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& char_set); + re_syntax_base* append_set(const basic_char_set& char_set, mpl::false_*); + re_syntax_base* append_set(const basic_char_set& char_set, mpl::true_*); + void finalize(const charT* p1, const charT* p2); +protected: + regex_data* m_pdata; // pointer to the basic_regex_data struct we are filling in + const ::boost::regex_traits_wrapper& + 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 state_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; + bool m_has_recursions; // set when we have recursive expresisons to fixup + std::vector m_recursion_checks; // notes which recursions we've followed while analysing this expression + 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 fixup_recursions(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 +basic_regex_creator::basic_regex_creator(regex_data* 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_has_recursions(false) +{ + 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 +re_syntax_base* basic_regex_creator::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(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 +re_syntax_base* basic_regex_creator::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(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 +re_literal* basic_regex_creator::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(append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT))); + result->length = 1; + *static_cast(static_cast(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(getaddress(off)); + charT* characters = static_cast(static_cast(result+1)); + characters[result->length] = m_traits.translate(c, m_icase); + ++(result->length); + } + return result; +} + +template +inline re_syntax_base* basic_regex_creator::append_set( + const basic_char_set& char_set) +{ + typedef mpl::bool_< (sizeof(charT) == 1) > truth_type; + return char_set.has_digraphs() + ? append_set(char_set, static_cast(0)) + : append_set(char_set, static_cast(0)); +} + +template +re_syntax_base* basic_regex_creator::append_set( + const basic_char_set& char_set, mpl::false_*) +{ + typedef typename traits::string_type string_type; + typedef typename basic_char_set::list_iterator item_iterator; + typedef typename traits::char_class_type mask_type; + + re_set_long* result = static_cast*>(append_state(syntax_element_long_set, sizeof(re_set_long))); + // + // fill in the basics: + // + result->csingles = static_cast(::boost::re_detail::distance(char_set.singles_begin(), char_set.singles_end())); + result->cranges = static_cast(::boost::re_detail::distance(char_set.ranges_begin(), char_set.ranges_end())) / 2; + result->cequivalents = static_cast(::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(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 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 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(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(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*>(getaddress(offset)); + return result; +} + +namespace{ + +template +inline bool char_less(T t1, T t2) +{ + return t1 < t2; +} +template<> +inline bool char_less(char t1, char t2) +{ + return static_cast(t1) < static_cast(t2); +} +template<> +inline bool char_less(signed char t1, signed char t2) +{ + return static_cast(t1) < static_cast(t2); +} +} + +template +re_syntax_base* basic_regex_creator::append_set( + const basic_char_set& char_set, mpl::true_*) +{ + typedef typename traits::string_type string_type; + typedef typename basic_char_set::list_iterator item_iterator; + + re_set* result = static_cast(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(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(i); + string_type s3 = this->m_traits.transform(c3, c3 +1); + if((s1 <= s3) && (s3 <= s2)) + result->_map[i] = true; + } + } + else + { + if(char_less(c2, c1)) + { + // Oops error: + return 0; + } + // everything in range matches: + std::memset(result->_map + static_cast(c1), true, 1 + static_cast(c2) - static_cast(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(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(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(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(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 +void basic_regex_creator::finalize(const charT* p1, const charT* p2) +{ + if(this->m_pdata->m_status) + return; + // 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(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(m_pdata->m_data.data()); + // fixup pointers in the machine: + fixup_pointers(m_pdata->m_first_state); + if(m_has_recursions) + { + m_pdata->m_has_recursions = true; + fixup_recursions(m_pdata->m_first_state); + if(this->m_pdata->m_status) + return; + } + else + m_pdata->m_has_recursions = false; + // 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; + if(m_has_recursions) + m_recursion_checks.assign(1 + m_pdata->m_mark_count, false); + 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 +void basic_regex_creator::fixup_pointers(re_syntax_base* state) +{ + while(state) + { + switch(state->type) + { + case syntax_element_recurse: + m_has_recursions = true; + if(state->next.i) + state->next.p = getaddress(state->next.i, state); + else + state->next.p = 0; + break; + 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 state_id of this repeat: + static_cast(state)->state_id = m_repeater_id++; + // fall through: + case syntax_element_alt: + std::memset(static_cast(state)->_map, 0, sizeof(static_cast(state)->_map)); + static_cast(state)->can_be_null = 0; + // fall through: + case syntax_element_jump: + static_cast(state)->alt.p = getaddress(static_cast(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 +void basic_regex_creator::fixup_recursions(re_syntax_base* state) +{ + re_syntax_base* base = state; + while(state) + { + switch(state->type) + { + case syntax_element_assert_backref: + { + // just check that the index is valid: + int idx = static_cast(state)->index; + if(idx < 0) + { + idx = -idx-1; + if(idx >= 10000) + { + idx = m_pdata->get_id(idx); + if(idx <= 0) + { + // check of sub-expression that doesn't exist: + 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 = "Encountered a forward reference to a marked sub-expression that does not exist."; + boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); + e.raise(); + } + } + } + } + } + break; + case syntax_element_recurse: + { + bool ok = false; + re_syntax_base* p = base; + std::ptrdiff_t idx = static_cast(state)->alt.i; + if(idx > 10000) + { + // + // There may be more than one capture group with this hash, just do what Perl + // does and recurse to the leftmost: + // + idx = m_pdata->get_id(static_cast(idx)); + } + while(p) + { + if((p->type == syntax_element_startmark) && (static_cast(p)->index == idx)) + { + // + // We've found the target of the recursion, set the jump target: + // + static_cast(state)->alt.p = p; + ok = true; + // + // Now scan the target for nested repeats: + // + p = p->next.p; + int next_rep_id = 0; + while(p) + { + switch(p->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: + next_rep_id = static_cast(p)->state_id; + break; + case syntax_element_endmark: + if(static_cast(p)->index == idx) + next_rep_id = -1; + break; + default: + break; + } + if(next_rep_id) + break; + p = p->next.p; + } + if(next_rep_id > 0) + { + static_cast(state)->state_id = next_rep_id - 1; + } + + break; + } + p = p->next.p; + } + if(!ok) + { + // recursion to sub-expression that doesn't exist: + 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 = "Encountered a forward reference to a recursive sub-expression that does not exist."; + boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); + e.raise(); + } + } + } + default: + break; + } + state = state->next.p; + } +} + +template +void basic_regex_creator::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 > v; + + while(state) + { + switch(state->type) + { + case syntax_element_toggle_case: + // we need to track case changes here: + m_icase = static_cast(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(m_icase, state)); + state = state->next.p; + break; + case syntax_element_backstep: + // we need to calculate how big the backstep is: + static_cast(state)->index + = this->calculate_backstep(state->next.p); + if(static_cast(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 = "Invalid lookbehind assertion encountered in the regular expression."; + 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()) + { + // Initialize m_recursion_checks if we need it: + if(m_has_recursions) + m_recursion_checks.assign(1 + m_pdata->m_mark_count, false); + + const std::pair& 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(state)->_map, &static_cast(state)->can_be_null, mask_take); + m_bad_repeats = 0; + + if(m_has_recursions) + m_recursion_checks.assign(1 + m_pdata->m_mark_count, false); + create_startmap(static_cast(state)->alt.p, static_cast(state)->_map, &static_cast(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 +int basic_regex_creator::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(state)->index == -1) + || (static_cast(state)->index == -2)) + { + state = static_cast(state->next.p)->alt.p->next.p; + continue; + } + else if(static_cast(state)->index == -3) + { + state = state->next.p->next.p; + continue; + } + break; + case syntax_element_endmark: + if((static_cast(state)->index == -1) + || (static_cast(state)->index == -2)) + return result; + break; + case syntax_element_literal: + result += static_cast(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(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(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*>(rep->next.p)->singleton == 0) + return -1; + if(rep->max != rep->min) + return -1; + result += static_cast(rep->min); + state = rep->alt.p; + continue; + } + } + return -1; + case syntax_element_long_set: + if(static_cast*>(state)->singleton == 0) + return -1; + result += 1; + break; + case syntax_element_jump: + state = static_cast(state)->alt.p; + continue; + case syntax_element_alt: + { + int r1 = calculate_backstep(state->next.p); + int r2 = calculate_backstep(static_cast(state)->alt.p); + if((r1 < 0) || (r1 != r2)) + return -1; + return result + r1; + } + default: + break; + } + state = state->next.p; + } + return -1; +} + +template +void basic_regex_creator::create_startmap(re_syntax_base* state, unsigned char* l_map, unsigned int* pnull, unsigned char mask) +{ + int not_last_jump = 1; + re_syntax_base* recursion_start = 0; + int recursion_sub = 0; + re_syntax_base* recursion_restart = 0; + + // track case sensitivity: + bool l_icase = m_icase; + + while(state) + { + switch(state->type) + { + case syntax_element_toggle_case: + l_icase = static_cast(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(static_cast(static_cast(state) + 1)); + for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) + { + if(m_traits.translate(static_cast(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_recurse: + { + if(state->type == syntax_element_startmark) + recursion_sub = static_cast(state)->index; + else + recursion_sub = 0; + if(m_recursion_checks[recursion_sub]) + { + // Infinite recursion!! + 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 = "Encountered an infinite recursion."; + boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); + e.raise(); + } + } + else if(recursion_start == 0) + { + recursion_start = state; + recursion_restart = state->next.p; + state = static_cast(state)->alt.p; + m_recursion_checks[recursion_sub] = true; + break; + } + m_recursion_checks[recursion_sub] = true; + // fall through, can't handle nested recursion here... + } + 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(i), m_word_mask)) + l_map[i] &= static_cast(~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(i), m_word_mask)) + l_map[i] &= static_cast(~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*>(state)->singleton) + { + l_map[0] |= mask_init; + for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) + { + charT c = static_cast(i); + if(&c != re_is_set_member(&c, &c + 1, static_cast*>(state), *m_pdata, l_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(state)->_map[ + static_cast(m_traits.translate(static_cast(i), l_icase))]) + l_map[i] |= mask; + } + } + return; + case syntax_element_jump: + // take the jump: + state = static_cast(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(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(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(state)->index < 0) + { + // can be null, any character can match: + set_all_masks(l_map, mask); + if(pnull) + *pnull |= mask; + return; + } + else if(recursion_start && (recursion_sub != 0) && (recursion_sub == static_cast(state)->index)) + { + // recursion termination: + recursion_start = 0; + state = recursion_restart; + break; + } + + // + // Normally we just go to the next state... but if this sub-expression is + // the target of a recursion, then we might be ending a recursion, in which + // case we should check whatever follows that recursion, as well as whatever + // follows this state: + // + if(m_pdata->m_has_recursions && static_cast(state)->index) + { + bool ok = false; + re_syntax_base* p = m_pdata->m_first_state; + while(p) + { + if((p->type == syntax_element_recurse)) + { + re_brace* p2 = static_cast(static_cast(p)->alt.p); + if((p2->type == syntax_element_startmark) && (p2->index == static_cast(state)->index)) + { + ok = true; + break; + } + } + p = p->next.p; + } + if(ok) + { + create_startmap(p->next.p, l_map, pnull, mask); + } + } + state = state->next.p; + break; + + case syntax_element_startmark: + // need to handle independent subs as a special case: + if(static_cast(state)->index == -3) + { + state = state->next.p->next.p; + break; + } + // otherwise fall through: + default: + state = state->next.p; + } + ++not_last_jump; + } +} + +template +unsigned basic_regex_creator::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 +void basic_regex_creator::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 +bool basic_regex_creator::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 state_id = static_cast(pt)->state_id; + if(state_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 << state_id); + } + default: + return false; + } +} + +template +void basic_regex_creator::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 state_id = static_cast(pt)->state_id; + static const boost::uintmax_t one = 1uL; + if(state_id <= sizeof(m_bad_repeats) * CHAR_BIT) + m_bad_repeats |= (one << state_id); + } + default: + break; + } +} + +template +syntax_element_type basic_regex_creator::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(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*>(state->next.p)->singleton) + return re_detail::syntax_element_long_set_rep; + break; + default: + break; + } + } + } + return state->type; +} + +template +void basic_regex_creator::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(state)->index >= 0) + { + state = state->next.p; + continue; + } + if((static_cast(state)->index == -1) + || (static_cast(state)->index == -2)) + { + // skip past the zero width assertion: + state = static_cast(state->next.p)->alt.p->next.p; + continue; + } + if(static_cast(state)->index == -3) + { + // Have to skip the leading jump state: + state = state->next.p->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(state)->leading = true; + // fall through: + default: + return; + } + }while(state); +} + + +} // namespace re_detail + +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/basic_regex_parser.hpp b/external/boost/regex/v4/basic_regex_parser.hpp new file mode 100644 index 0000000..f524673 --- /dev/null +++ b/external/boost/regex/v4/basic_regex_parser.hpp @@ -0,0 +1,2821 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ +namespace re_detail{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244 4800) +#endif + +template +class basic_regex_parser : public basic_regex_creator +{ +public: + basic_regex_parser(regex_data* data); + void parse(const charT* p1, const charT* p2, unsigned flags); + void fail(regex_constants::error_type error_code, std::ptrdiff_t position); + void fail(regex_constants::error_type error_code, std::ptrdiff_t position, std::string message, std::ptrdiff_t start_pos); + void fail(regex_constants::error_type error_code, std::ptrdiff_t position, const std::string& message) + { + fail(error_code, position, message, 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::max)()); + bool parse_repeat_range(bool isbasic); + bool parse_alt(); + bool parse_set(); + bool parse_backref(); + void parse_set_literal(basic_char_set& char_set); + bool parse_inner_set(basic_char_set& 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 get_next_set_literal(basic_char_set& 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 + int m_mark_reset; // used to indicate that we're inside a (?|...) block. + unsigned m_max_mark; // largest mark count seen inside a (?|...) block. + 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 m_alt_jumps; // list of alternative in the current scope. +#else + std::vector 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 +basic_regex_parser::basic_regex_parser(regex_data* data) + : basic_regex_creator(data), m_mark_count(0), m_mark_reset(-1), m_max_mark(0), m_paren_start(0), m_alt_insert_point(0), m_has_case_change(false) +{ +} + +template +void basic_regex_parser::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) && + ( + ((l_flags & regbase::main_option_type) != regbase::perl_syntax_group) + || (l_flags & regbase::no_empty_expressions) + ) + ) + { + 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::parse_extended; + // + // Add a leading paren with index zero to give recursions a target: + // + re_brace* br = static_cast(this->append_state(syntax_element_startmark, sizeof(re_brace))); + br->index = 0; + br->icase = this->flags() & regbase::icase; + break; + } + case regbase::basic_syntax_group: + m_parser_proc = &basic_regex_parser::parse_basic; + break; + case regbase::literal: + m_parser_proc = &basic_regex_parser::parse_literal; + break; + default: + // Ooops, someone has managed to set more than one of the main option flags, + // so this must be an error: + fail(regex_constants::error_unknown, 0, "An invalid combination of regular expression syntax flags was used."); + return; + } + + // 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), "Found a closing ) with no corresponding openening parenthesis."); + 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 +void basic_regex_parser::fail(regex_constants::error_type error_code, std::ptrdiff_t position) +{ + // get the error message: + std::string message = this->m_pdata->m_ptraits->error_string(error_code); + fail(error_code, position, message); +} + +template +void basic_regex_parser::fail(regex_constants::error_type error_code, std::ptrdiff_t position, std::string message, std::ptrdiff_t start_pos) +{ + 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 + + // + // Augment error message with the regular expression text: + // + if(start_pos == position) + start_pos = (std::max)(static_cast(0), position - static_cast(10)); + std::ptrdiff_t end_pos = (std::min)(position + static_cast(10), static_cast(m_end - m_base)); + if(error_code != regex_constants::error_empty) + { + if((start_pos != 0) || (end_pos != (m_end - m_base))) + message += " The error occurred while parsing the regular expression fragment: '"; + else + message += " The error occurred while parsing the regular expression: '"; + if(start_pos != end_pos) + { + message += std::string(m_base + start_pos, m_base + position); + message += ">>>HERE>>>"; + message += std::string(m_base + position, m_base + end_pos); + } + message += "'."; + } + +#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 +bool basic_regex_parser::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 +bool basic_regex_parser::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 +bool basic_regex_parser::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, "The repeat operator \"*\" cannot start a regular expression."); + return false; + } + ++m_position; + return parse_repeat(); + case regex_constants::syntax_question: + if(m_position == this->m_base) + { + fail(regex_constants::error_badrepeat, 0, "The repeat operator \"?\" cannot start a regular expression."); + 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, "The repeat operator \"+\" cannot start a regular expression."); + 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_base, "Found a closing repetition operator } with no corresponding {."); + 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 +bool basic_regex_parser::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 +bool basic_regex_parser::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; +#ifndef BOOST_NO_STD_DISTANCE + if(this->flags() & regbase::save_subexpression_location) + this->m_pdata->m_subs.push_back(std::pair(std::distance(m_base, m_position) - 1, 0)); +#else + if(this->flags() & regbase::save_subexpression_location) + this->m_pdata->m_subs.push_back(std::pair((m_position - m_base) - 1, 0)); +#endif + } + re_brace* pb = static_cast(this->append_state(syntax_element_startmark, sizeof(re_brace))); + pb->index = markid; + pb->icase = this->flags() & regbase::icase; + 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... + // + // Back up branch reset data in case we have a nested (?|...) + // + int mark_reset = m_mark_reset; + m_mark_reset = -1; + // + // 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( + this->append_state(syntax_element_toggle_case, sizeof(re_case)) + )->icase = opts & regbase::icase; + } + this->flags(opts); + m_has_case_change = old_case_change; + // + // restore branch reset: + // + m_mark_reset = mark_reset; + // + // 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); +#ifndef BOOST_NO_STD_DISTANCE + if(markid && (this->flags() & regbase::save_subexpression_location)) + this->m_pdata->m_subs.at(markid - 1).second = std::distance(m_base, m_position); +#else + if(markid && (this->flags() & regbase::save_subexpression_location)) + this->m_pdata->m_subs.at(markid - 1).second = (m_position - m_base); +#endif + ++m_position; + // + // append closing parenthesis state: + // + pb = static_cast(this->append_state(syntax_element_endmark, sizeof(re_brace))); + pb->index = markid; + pb->icase = this->flags() & regbase::icase; + 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 +bool basic_regex_parser::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, "Found a closing repetition operator } with no corresponding {."); + 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 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, "The \\c and \\C escape sequences are not supported by POSIX basic regular expressions: try the Perl syntax instead."); + return false; + default: + break; + } + } + result = parse_literal(); + break; + } + return result; +} + +template +bool basic_regex_parser::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: + { +escape_type_class_jump: + 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 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, "Incomplete property escape found."); + 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, "Closing } missing from property escape sequence."); + 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 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, "Escape sequence was neither a valid property nor a valid character class name."); + return false; + } + case regex_constants::escape_type_reset_start_mark: + if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) + { + re_brace* pb = static_cast(this->append_state(syntax_element_startmark, sizeof(re_brace))); + pb->index = -5; + pb->icase = this->flags() & regbase::icase; + this->m_pdata->m_data.align(); + ++m_position; + return true; + } + goto escape_type_class_jump; + case regex_constants::escape_type_line_ending: + if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) + { + const charT* e = get_escape_R_string(); + const charT* old_position = m_position; + const charT* old_end = m_end; + const charT* old_base = m_base; + m_position = e; + m_base = e; + m_end = e + traits::length(e); + bool r = parse_all(); + m_position = ++old_position; + m_end = old_end; + m_base = old_base; + return r; + } + goto escape_type_class_jump; + case regex_constants::escape_type_extended_backref: + if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) + { + bool have_brace = false; + bool negative = false; + static const char* incomplete_message = "Incomplete \\g escape found."; + if(++m_position == m_end) + { + fail(regex_constants::error_escape, m_position - m_base, incomplete_message); + return false; + } + // maybe have \g{ddd} + regex_constants::syntax_type syn = this->m_traits.syntax_type(*m_position); + regex_constants::syntax_type syn_end = 0; + if((syn == regex_constants::syntax_open_brace) + || (syn == regex_constants::escape_type_left_word) + || (syn == regex_constants::escape_type_end_buffer)) + { + if(++m_position == m_end) + { + fail(regex_constants::error_escape, m_position - m_base, incomplete_message); + return false; + } + have_brace = true; + switch(syn) + { + case regex_constants::syntax_open_brace: + syn_end = regex_constants::syntax_close_brace; + break; + case regex_constants::escape_type_left_word: + syn_end = regex_constants::escape_type_right_word; + break; + default: + syn_end = regex_constants::escape_type_end_buffer; + break; + } + } + negative = (*m_position == static_cast('-')); + if((negative) && (++m_position == m_end)) + { + fail(regex_constants::error_escape, m_position - m_base, incomplete_message); + return false; + } + const charT* pc = m_position; + int i = this->m_traits.toi(pc, m_end, 10); + if((i < 0) && syn_end) + { + // Check for a named capture, get the leftmost one if there is more than one: + const charT* base = m_position; + while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != syn_end)) + { + ++m_position; + } + i = hash_value_from_capture_name(base, m_position); + pc = m_position; + } + if(negative) + i = 1 + m_mark_count - i; + if(((i > 0) && (this->m_backrefs & (1u << (i-1)))) || ((i > 10000) && (this->m_pdata->get_id(i) > 0) && (this->m_backrefs & (1u << (this->m_pdata->get_id(i)-1))))) + { + m_position = pc; + re_brace* pb = static_cast(this->append_state(syntax_element_backref, sizeof(re_brace))); + pb->index = i; + pb->icase = this->flags() & regbase::icase; + } + else + { + fail(regex_constants::error_backref, m_position - m_base); + return false; + } + m_position = pc; + if(have_brace) + { + if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != syn_end)) + { + fail(regex_constants::error_escape, m_position - m_base, incomplete_message); + return false; + } + ++m_position; + } + return true; + } + goto escape_type_class_jump; + case regex_constants::escape_type_control_v: + if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) + goto escape_type_class_jump; + // fallthrough: + default: + this->append_literal(unescape_character()); + break; + } + return true; +} + +template +bool basic_regex_parser::parse_match_any() +{ + // + // we have a '.' that can match any character: + // + ++m_position; + static_cast( + this->append_state(syntax_element_wild, sizeof(re_dot)) + )->mask = static_cast(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 +bool basic_regex_parser::parse_repeat(std::size_t low, std::size_t high) +{ + bool greedy = true; + bool pocessive = false; + 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 or emacs regex, check for a '?': + if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question) + { + greedy = false; + ++m_position; + } + // for perl regexes only check for pocessive ++ repeats. + if((m_position != m_end) + && (0 == (this->flags() & regbase::main_option_type)) + && (this->m_traits.syntax_type(*m_position) == regex_constants::syntax_plus)) + { + pocessive = true; + ++m_position; + } + } + if(0 == this->m_last_state) + { + fail(regex_constants::error_badrepeat, ::boost::re_detail::distance(m_base, m_position), "Nothing to repeat."); + 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(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(this->m_last_state); + charT c = (static_cast(static_cast(lit+1)))[lit->length - 1]; + --(lit->length); + // now append new state: + lit = static_cast(this->append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT))); + lit->length = 1; + (static_cast(static_cast(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: + case syntax_element_backstep: + // 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(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(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(this->getaddress(rep_off)); + rep->alt.i = this->m_pdata->m_data.size() - rep_off; + // + // If the repeat is pocessive then bracket the repeat with a (?>...) + // independent sub-expression construct: + // + if(pocessive) + { + if(m_position != m_end) + { + // + // Check for illegal following quantifier, we have to do this here, because + // the extra states we insert below circumvents our usual error checking :-( + // + switch(this->m_traits.syntax_type(*m_position)) + { + case regex_constants::syntax_star: + case regex_constants::syntax_plus: + case regex_constants::syntax_question: + case regex_constants::syntax_open_brace: + fail(regex_constants::error_badrepeat, m_position - m_base); + return false; + } + } + re_brace* pb = static_cast(this->insert_state(insert_point, syntax_element_startmark, sizeof(re_brace))); + pb->index = -3; + pb->icase = this->flags() & regbase::icase; + jmp = static_cast(this->insert_state(insert_point + sizeof(re_brace), syntax_element_jump, sizeof(re_jump))); + this->m_pdata->m_data.align(); + jmp->alt.i = this->m_pdata->m_data.size() - this->getoffset(jmp); + pb = static_cast(this->append_state(syntax_element_endmark, sizeof(re_brace))); + pb->index = -3; + pb->icase = this->flags() & regbase::icase; + } + return true; +} + +template +bool basic_regex_parser::parse_repeat_range(bool isbasic) +{ + static const char* incomplete_message = "Missing } in quantified repetition."; + // + // 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + return false; + } + // get the value if any: + v = this->m_traits.toi(m_position, m_end, 10); + max = (v >= 0) ? v : (std::numeric_limits::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, incomplete_message); + 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, incomplete_message); + return false; + } + } + else + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + } + if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_brace) + ++m_position; + else + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + // + // finally go and add the repeat, unless error: + // + if(min > max) + { + // Backtrack to error location: + m_position -= 2; + while(this->m_traits.isctype(*m_position, this->m_word_mask)) --m_position; + ++m_position; + fail(regex_constants::error_badbrace, m_position - m_base); + return false; + } + return parse_repeat(min, max); +} + +template +bool basic_regex_parser::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)) + && + !( + ((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) + && + ((this->flags() & regbase::no_empty_expressions) == 0) + ) + ) + { + fail(regex_constants::error_empty, this->m_position - this->m_base, "A regular expression can start with the alternation operator |."); + return false; + } + // + // Reset mark count if required: + // + if(m_max_mark < m_mark_count) + m_max_mark = m_mark_count; + if(m_mark_reset >= 0) + m_mark_count = m_mark_reset; + + ++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(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( + 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 +bool basic_regex_parser::parse_set() +{ + static const char* incomplete_message = "Character set declaration starting with [ terminated prematurely - either no ] was found or the set had no content."; + ++m_position; + if(m_position == m_end) + { + fail(regex_constants::error_brack, m_position - m_base, incomplete_message); + return false; + } + basic_char_set 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_ctype, 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 +bool basic_regex_parser::parse_inner_set(basic_char_set& char_set) +{ + static const char* incomplete_message = "Character class declaration starting with [ terminated prematurely - either no ] was found or the set had no content."; + // + // 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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, incomplete_message); + 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 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 +void basic_regex_parser::parse_set_literal(basic_char_set& char_set) +{ + digraph 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 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 +digraph basic_regex_parser::get_next_set_literal(basic_char_set& char_set) +{ + digraph 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 +bool valid_value(charT, int v, const mpl::true_&) +{ + return (v >> (sizeof(charT) * CHAR_BIT)) == 0; +} +template +bool valid_value(charT, int, const mpl::false_&) +{ + return true; // v will alsways fit in a charT +} +template +bool valid_value(charT c, int v) +{ + return valid_value(c, v, mpl::bool_<(sizeof(charT) < sizeof(int))>()); +} + +template +charT basic_regex_parser::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, "Escape sequence terminated prematurely."); + 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) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_escape, m_position - m_base, "ASCII escape sequence terminated prematurely."); + return result; + } + result = static_cast(*m_position % 32); + break; + case regex_constants::escape_type_hex: + ++m_position; + if(m_position == m_end) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_escape, m_position - m_base, "Hexadecimal escape sequence terminated prematurely."); + 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) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_escape, m_position - m_base, "Missing } in hexadecimal escape sequence."); + return result; + } + int i = this->m_traits.toi(m_position, m_end, 16); + if((m_position == m_end) + || (i < 0) + || ((std::numeric_limits::is_specialized) && (i > (int)(std::numeric_limits::max)())) + || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace)) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_badbrace, m_position - m_base, "Hexadecimal escape sequence was invalid."); + return result; + } + ++m_position; + result = charT(i); + } + else + { + std::ptrdiff_t len = (std::min)(static_cast(2), static_cast(m_end - m_position)); + int i = this->m_traits.toi(m_position, m_position + len, 16); + if((i < 0) + || !valid_value(charT(0), i)) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_escape, m_position - m_base, "Escape sequence did not encode a valid character."); + 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(4)); + const charT* bp = m_position; + int val = this->m_traits.toi(bp, bp + 1, 8); + if(val != 0) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + // Oops not an octal escape after all: + fail(regex_constants::error_escape, m_position - m_base, "Invalid octal escape sequence."); + return result; + } + val = this->m_traits.toi(m_position, m_position + len, 8); + if(val < 0) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_escape, m_position - m_base, "Octal escape sequence is invalid."); + return result; + } + return static_cast(val); + } + case regex_constants::escape_type_named_char: + { + ++m_position; + if(m_position == m_end) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + 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) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + 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()) + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_collate, m_position - m_base); + return false; + } + if(s.size() == 1) + { + return s[0]; + } + } + // fall through is a failure: + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + 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 +bool basic_regex_parser::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(this->append_state(syntax_element_backref, sizeof(re_brace))); + pb->index = i; + pb->icase = this->flags() & regbase::icase; + } + else + { + // Rewind to start of escape: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_backref, m_position - m_base); + return false; + } + return true; +} + +template +bool basic_regex_parser::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, "Unterminated \\Q...\\E sequence."); + 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 +bool basic_regex_parser::parse_perl_extension() +{ + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, 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(this->append_state(syntax_element_startmark, sizeof(re_brace))); + pb->icase = this->flags() & regbase::icase; + 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; + charT name_delim; + int mark_reset = m_mark_reset; + int max_mark = m_max_mark; + m_mark_reset = -1; + m_max_mark = m_mark_count; + int v; + // + // select the actual extension used: + // + switch(this->m_traits.syntax_type(*m_position)) + { + case regex_constants::syntax_or: + m_mark_reset = m_mark_count; + // fall through: + case regex_constants::syntax_colon: + // + // a non-capturing mark: + // + pb->index = markid = 0; + ++m_position; + break; + case regex_constants::syntax_digit: + { + // + // a recursive subexpression: + // + v = this->m_traits.toi(m_position, m_end, 10); + if((v < 0) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base, "The recursive sub-expression refers to an invalid marking group, or is unterminated."); + return false; + } +insert_recursion: + pb->index = markid = 0; + re_recurse* pr = static_cast(this->append_state(syntax_element_recurse, sizeof(re_recurse))); + pr->alt.i = v; + pr->state_id = 0; + static_cast( + this->append_state(syntax_element_toggle_case, sizeof(re_case)) + )->icase = this->flags() & regbase::icase; + break; + } + case regex_constants::syntax_plus: + // + // A forward-relative recursive subexpression: + // + ++m_position; + v = this->m_traits.toi(m_position, m_end, 10); + if((v <= 0) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression."); + return false; + } + v += m_mark_count; + goto insert_recursion; + case regex_constants::syntax_dash: + // + // Possibly a backward-relative recursive subexpression: + // + ++m_position; + v = this->m_traits.toi(m_position, m_end, 10); + if(v <= 0) + { + --m_position; + // Oops not a relative recursion at all, but a (?-imsx) group: + goto option_group_jump; + } + v = m_mark_count + 1 - v; + if(v <= 0) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression."); + return false; + } + goto insert_recursion; + 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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, 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 + { + // Probably a named capture which also starts (?< : + name_delim = '>'; + --m_position; + goto named_capture_jump; + } + ++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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + v = this->m_traits.toi(m_position, m_end, 10); + if(*m_position == charT('R')) + { + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(*m_position == charT('&')) + { + const charT* base = ++m_position; + while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) + ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + v = -static_cast(hash_value_from_capture_name(base, m_position)); + } + else + { + v = -this->m_traits.toi(m_position, m_end, 10); + } + re_brace* br = static_cast(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); + br->index = v < 0 ? (v - 1) : 0; + if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + } + else if((*m_position == charT('\'')) || (*m_position == charT('<'))) + { + const charT* base = ++m_position; + while((m_position != m_end) && (*m_position != charT('>')) && (*m_position != charT('\''))) + ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + v = static_cast(hash_value_from_capture_name(base, m_position)); + re_brace* br = static_cast(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); + br->index = v; + if(((*m_position != charT('>')) && (*m_position != charT('\''))) || (++m_position == m_end)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base, "Unterminated named capture."); + return false; + } + if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + } + else if(*m_position == charT('D')) + { + const char* def = "DEFINE"; + while(*def && (m_position != m_end) && (*m_position == charT(*def))) + ++m_position, ++def; + if((m_position == m_end) || *def) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + re_brace* br = static_cast(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); + br->index = 9999; // special magic value! + if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + } + else if(v > 0) + { + re_brace* br = static_cast(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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, 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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, 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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, 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)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, 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)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + m_position -= 2; + } + } + break; + } + case regex_constants::syntax_close_mark: + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + case regex_constants::escape_type_end_buffer: + { + name_delim = *m_position; +named_capture_jump: + markid = 0; + if(0 == (this->flags() & regbase::nosubs)) + { + markid = ++m_mark_count; + #ifndef BOOST_NO_STD_DISTANCE + if(this->flags() & regbase::save_subexpression_location) + this->m_pdata->m_subs.push_back(std::pair(std::distance(m_base, m_position) - 2, 0)); + #else + if(this->flags() & regbase::save_subexpression_location) + this->m_pdata->m_subs.push_back(std::pair((m_position - m_base) - 2, 0)); + #endif + } + pb->index = markid; + const charT* base = ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + while((m_position != m_end) && (*m_position != name_delim)) + ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + this->m_pdata->set_name(base, m_position, markid); + ++m_position; + break; + } + default: + if(*m_position == charT('R')) + { + ++m_position; + v = 0; + if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + goto insert_recursion; + } + if(*m_position == charT('&')) + { + ++m_position; + const charT* base = m_position; + while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) + ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + v = static_cast(hash_value_from_capture_name(base, m_position)); + goto insert_recursion; + } + if(*m_position == charT('P')) + { + ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + if(*m_position == charT('>')) + { + ++m_position; + const charT* base = m_position; + while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) + ++m_position; + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + v = static_cast(hash_value_from_capture_name(base, m_position)); + goto insert_recursion; + } + } + // + // lets assume that we have a (?imsx) group and try and parse it: + // +option_group_jump: + regex_constants::syntax_option_type opts = parse_options(); + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + 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 + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base); + return false; + } + + // finally append a case change state if we need it: + if(m_has_case_change) + { + static_cast( + 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)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base, "Invalid alternation operators within (?...) block."); + return false; + } + // + // we either have a ')' or we have run out of characters prematurely: + // + if(m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + 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( + 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(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: + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_perl_extension, m_position - m_base, "Invalid or empty zero width assertion."); + 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); + // Make sure we have exactly one alternative following this state: + if(b->type != syntax_element_alt) + { + re_alt* alt = static_cast(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(b)->alt.i, b)->type == syntax_element_alt) + { + // Can't have seen more than one alternative: + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_bad_pattern, m_position - m_base, "More than one alternation operator | was encountered inside a conditional expression."); + return false; + } + else + { + // We must *not* have seen an alternative inside a (DEFINE) block: + b = this->getaddress(b->next.i, b); + if((b->type == syntax_element_assert_backref) && (static_cast(b)->index == 9999)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_bad_pattern, m_position - m_base, "Alternation operators are not allowed inside a DEFINE block."); + return false; + } + } + // check for invalid repetition of next state: + b = this->getaddress(expected_alt_point); + b = this->getaddress(static_cast(b)->next.i, b); + if((b->type != syntax_element_assert_backref) + && (b->type != syntax_element_startmark)) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_badrepeat, m_position - m_base, "A repetition operator cannot be applied to a zero-width assertion."); + return false; + } + } + // + // append closing parenthesis state: + // + pb = static_cast(this->append_state(syntax_element_endmark, sizeof(re_brace))); + pb->index = markid; + pb->icase = this->flags() & regbase::icase; + 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; + // + // And the mark_reset data: + // + if(m_max_mark > m_mark_count) + { + m_mark_count = m_max_mark; + } + m_mark_reset = mark_reset; + m_max_mark = max_mark; + + + if(markid > 0) + { +#ifndef BOOST_NO_STD_DISTANCE + if(this->flags() & regbase::save_subexpression_location) + this->m_pdata->m_subs.at(markid - 1).second = std::distance(m_base, m_position) - 1; +#else + if(this->flags() & regbase::save_subexpression_location) + this->m_pdata->m_subs.at(markid - 1).second = (m_position - m_base) - 1; +#endif + // + // allow backrefs to this mark: + // + if((markid > 0) && (markid < (int)(sizeof(unsigned) * CHAR_BIT))) + this->m_backrefs |= 1u << (markid - 1); + } + return true; +} + +template +bool basic_regex_parser::add_emacs_code(bool negate) +{ + // + // parses an emacs style \sx or \Sx construct. + // + if(++m_position == m_end) + { + // Rewind to start of sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; + fail(regex_constants::error_escape, m_position - m_base); + return false; + } + basic_char_set 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('$'))); + char_set.add_single(digraph(charT('&'))); + char_set.add_single(digraph(charT('*'))); + char_set.add_single(digraph(charT('+'))); + char_set.add_single(digraph(charT('-'))); + char_set.add_single(digraph(charT('_'))); + char_set.add_single(digraph(charT('<'))); + char_set.add_single(digraph(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('('))); + char_set.add_single(digraph(charT('['))); + char_set.add_single(digraph(charT('{'))); + break; + case ')': + char_set.add_single(digraph(charT(')'))); + char_set.add_single(digraph(charT(']'))); + char_set.add_single(digraph(charT('}'))); + break; + case '"': + char_set.add_single(digraph(charT('"'))); + char_set.add_single(digraph(charT('\''))); + char_set.add_single(digraph(charT('`'))); + break; + case '\'': + char_set.add_single(digraph(charT('\''))); + char_set.add_single(digraph(charT(','))); + char_set.add_single(digraph(charT('#'))); + break; + case '<': + char_set.add_single(digraph(charT(';'))); + break; + case '>': + char_set.add_single(digraph(charT('\n'))); + char_set.add_single(digraph(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 +regex_constants::syntax_option_type basic_regex_parser::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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_paren, m_position - m_base); + return false; + } + } + while(!breakout); + + breakout = false; + + if(*m_position == static_cast('-')) + { + if(++m_position == m_end) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + 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) + { + // Rewind to start of (? sequence: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; + fail(regex_constants::error_paren, m_position - m_base); + return false; + } + } + while(!breakout); + } + return f; +} + +template +bool basic_regex_parser::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(this->m_pdata->m_data.size())) + && m_alt_jumps.size() && (m_alt_jumps.back() > last_paren_start) + && + !( + ((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) + && + ((this->flags() & regbase::no_empty_expressions) == 0) + ) + ) + { + fail(regex_constants::error_empty, this->m_position - this->m_base, "Can't terminate a sub-expression with an alternation operator |."); + 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(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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif diff --git a/external/boost/regex/v4/c_regex_traits.hpp b/external/boost/regex/v4/c_regex_traits.hpp new file mode 100644 index 0000000..d99b0f3 --- /dev/null +++ b/external/boost/regex/v4/c_regex_traits.hpp @@ -0,0 +1,211 @@ +/* + * + * 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 + * 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 +#endif +#ifndef BOOST_REGEX_WORKAROUND_HPP +#include +#endif + +#include + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::strlen; using ::tolower; +} +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ + +template +struct c_regex_traits; + +template<> +struct BOOST_REGEX_DECL c_regex_traits +{ + 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((std::tolower)(static_cast(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 +{ + 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 +{ + c_regex_traits(){} + typedef unsigned short char_type; + typedef std::size_t size_type; + typedef std::basic_string 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + + + diff --git a/external/boost/regex/v4/char_regex_traits.hpp b/external/boost/regex/v4/char_regex_traits.hpp new file mode 100644 index 0000000..e8a501c --- /dev/null +++ b/external/boost/regex/v4/char_regex_traits.hpp @@ -0,0 +1,81 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ + +namespace deprecated{ +// +// class char_regex_traits_i +// provides case insensitive traits classes (deprecated): +template +class char_regex_traits_i : public regex_traits {}; + +template<> +class char_regex_traits_i : public regex_traits +{ +public: + typedef char char_type; + typedef unsigned char uchar_type; + typedef unsigned int size_type; + typedef regex_traits base_type; + +}; + +#ifndef BOOST_NO_WREGEX +template<> +class char_regex_traits_i : public regex_traits +{ +public: + typedef wchar_t char_type; + typedef unsigned short uchar_type; + typedef unsigned int size_type; + typedef regex_traits base_type; + +}; +#endif +} // namespace deprecated +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif // include + diff --git a/external/boost/regex/v4/cpp_regex_traits.hpp b/external/boost/regex/v4/cpp_regex_traits.hpp new file mode 100644 index 0000000..bcae455 --- /dev/null +++ b/external/boost/regex/v4/cpp_regex_traits.hpp @@ -0,0 +1,1096 @@ +/* + * + * Copyright (c) 2004 John Maddock + * Copyright 2011 Garmin Ltd. or its subsidiaries + * + * Use, modification and distribution are subject to the + * 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 + * DESCRIPTION: Declares regular expression traits class cpp_regex_traits. + */ + +#ifndef BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED +#define BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED + +#include + +#ifndef BOOST_NO_STD_LOCALE + +#ifndef BOOST_RE_PAT_EXCEPT_HPP +#include +#endif +#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED +#include +#endif +#ifdef BOOST_HAS_THREADS +#include +#endif +#ifndef BOOST_REGEX_PRIMARY_TRANSFORM +#include +#endif +#ifndef BOOST_REGEX_OBJECT_CACHE_HPP +#include +#endif + +#include +#include +#include + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4786 4251) +#endif + +namespace boost{ + +// +// forward declaration is needed by some compilers: +// +template +class cpp_regex_traits; + +namespace re_detail{ + +// +// class parser_buf: +// acts as a stream buffer which wraps around a pair of pointers: +// +template > +class parser_buf : public ::std::basic_streambuf +{ + typedef ::std::basic_streambuf 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* setbuf(char_type* s, streamsize n); + typename parser_buf::pos_type seekpos(pos_type sp, ::std::ios_base::openmode which); + typename parser_buf::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 +std::basic_streambuf* +parser_buf::setbuf(char_type* s, streamsize n) +{ + this->setg(s, s, s + n); + return this; +} + +template +typename parser_buf::pos_type +parser_buf::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 = static_cast(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(this->gptr() - this->eback()); +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} + +template +typename parser_buf::pos_type +parser_buf::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(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 +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 const* m_pctype; +#ifndef BOOST_NO_STD_MESSAGES + std::messages const* m_pmessages; +#endif + std::collate 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_pcollate < b.m_pcollate; + } + 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 +std::locale cpp_regex_traits_base::imbue(const std::locale& l) +{ + std::locale result(m_locale); + m_locale = l; + m_pctype = &BOOST_USE_FACET(std::ctype, l); +#ifndef BOOST_NO_STD_MESSAGES + m_pmessages = BOOST_HAS_FACET(std::messages, l) ? &BOOST_USE_FACET(std::messages, l) : 0; +#endif + m_pcollate = &BOOST_USE_FACET(std::collate, l); + return result; +} + +// +// class cpp_regex_traits_char_layer: +// implements methods that require specialisation for narrow characters: +// +template +class cpp_regex_traits_char_layer : public cpp_regex_traits_base +{ + typedef std::basic_string string_type; + typedef std::map 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(l) + { + init(); + } + cpp_regex_traits_char_layer(const cpp_regex_traits_base& b) + : cpp_regex_traits_base(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 +void cpp_regex_traits_char_layer::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::catalog cat = static_cast::catalog>(-1); +#else + typename std::messages::catalog cat = reinterpret_cast::catalog>(-1); +#endif + std::string cat_name(cpp_regex_traits::get_catalog_name()); + if(cat_name.size() && (this->m_pmessages != 0)) + { + 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) + { +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + 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); +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + if(this->m_pmessages) + this->m_pmessages->close(cat); + throw; + } +#endif + } + 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 +typename cpp_regex_traits_char_layer::string_type + cpp_regex_traits_char_layer::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 : public cpp_regex_traits_base +{ + typedef std::string string_type; +public: + cpp_regex_traits_char_layer(const std::locale& l) + : cpp_regex_traits_base(l) + { + init(); + } + cpp_regex_traits_char_layer(const cpp_regex_traits_base& l) + : cpp_regex_traits_base(l) + { + init(); + } + + regex_constants::syntax_type syntax_type(char c)const + { + return m_char_map[static_cast(c)]; + } + regex_constants::escape_syntax_type escape_syntax_type(char c) const + { + return m_char_map[static_cast(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, + char_class_horizontal_space=1<<12, + char_class_vertical_space=1<<13 +}; + +#endif + +// +// class cpp_regex_traits_implementation: +// provides pimpl implementation for cpp_regex_traits. +// +template +class cpp_regex_traits_implementation : public cpp_regex_traits_char_layer +{ +public: + typedef typename cpp_regex_traits::char_class_type char_class_type; + typedef typename std::ctype::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); + BOOST_STATIC_CONSTANT(char_class_type, mask_horizontal = 1u << 27); + BOOST_STATIC_CONSTANT(char_class_type, mask_vertical = 1u << 28); +#endif + + typedef std::basic_string string_type; + typedef charT char_type; + //cpp_regex_traits_implementation(); + cpp_regex_traits_implementation(const std::locale& l) + : cpp_regex_traits_char_layer(l) + { + init(); + } + cpp_regex_traits_implementation(const cpp_regex_traits_base& l) + : cpp_regex_traits_char_layer(l) + { + init(); + } + std::string error_string(regex_constants::error_type n) const + { + if(!m_error_strings.empty()) + { + std::map::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 m_error_strings; // error messages indexed by numberic ID + std::map m_custom_class_names; // character class names + std::map 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 +typename cpp_regex_traits_implementation::char_class_type const cpp_regex_traits_implementation::mask_blank; +template +typename cpp_regex_traits_implementation::char_class_type const cpp_regex_traits_implementation::mask_word; +template +typename cpp_regex_traits_implementation::char_class_type const cpp_regex_traits_implementation::mask_unicode; +template +typename cpp_regex_traits_implementation::char_class_type const cpp_regex_traits_implementation::mask_vertical; +template +typename cpp_regex_traits_implementation::char_class_type const cpp_regex_traits_implementation::mask_horizontal; + +#endif +#endif + +template +typename cpp_regex_traits_implementation::string_type + cpp_regex_traits_implementation::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... + // +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + // + // 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; + } +#ifndef BOOST_NO_EXCEPTIONS + }catch(...){} +#endif + 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 +typename cpp_regex_traits_implementation::string_type + cpp_regex_traits_implementation::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; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + 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::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()); +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + } +#endif + return result; +} + + +template +typename cpp_regex_traits_implementation::string_type + cpp_regex_traits_implementation::lookup_collatename(const charT* p1, const charT* p2) const +{ + typedef typename std::map::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 +void cpp_regex_traits_implementation::init() +{ +#ifndef BOOST_NO_STD_MESSAGES +#ifndef __IBMCPP__ + typename std::messages::catalog cat = static_cast::catalog>(-1); +#else + typename std::messages::catalog cat = reinterpret_cast::catalog>(-1); +#endif + std::string cat_name(cpp_regex_traits::get_catalog_name()); + if(cat_name.size() && (this->m_pmessages != 0)) + { + 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(0); + i <= boost::regex_constants::error_unknown; + i = static_cast(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[16] = + { + std::ctype::alnum, + std::ctype::alpha, + std::ctype::cntrl, + std::ctype::digit, + std::ctype::graph, + cpp_regex_traits_implementation::mask_horizontal, + std::ctype::lower, + std::ctype::print, + std::ctype::punct, + std::ctype::space, + std::ctype::upper, + cpp_regex_traits_implementation::mask_vertical, + std::ctype::xdigit, + cpp_regex_traits_implementation::mask_blank, + cpp_regex_traits_implementation::mask_word, + cpp_regex_traits_implementation::mask_unicode, + }; +#else + static const char_class_type masks[16] = + { + ::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_horizontal_space, + ::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_vertical_space, + ::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 +typename cpp_regex_traits_implementation::char_class_type + cpp_regex_traits_implementation::lookup_classname_imp(const charT* p1, const charT* p2) const +{ +#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET + static const char_class_type masks[22] = + { + 0, + std::ctype::alnum, + std::ctype::alpha, + cpp_regex_traits_implementation::mask_blank, + std::ctype::cntrl, + std::ctype::digit, + std::ctype::digit, + std::ctype::graph, + cpp_regex_traits_implementation::mask_horizontal, + std::ctype::lower, + std::ctype::lower, + std::ctype::print, + std::ctype::punct, + std::ctype::space, + std::ctype::space, + std::ctype::upper, + cpp_regex_traits_implementation::mask_unicode, + std::ctype::upper, + cpp_regex_traits_implementation::mask_vertical, + std::ctype::alnum | cpp_regex_traits_implementation::mask_word, + std::ctype::alnum | cpp_regex_traits_implementation::mask_word, + std::ctype::xdigit, + }; +#else + static const char_class_type masks[22] = + { + 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_horizontal_space, + ::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_vertical_space, + ::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, 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 state_id = 1 + re_detail::get_default_class_id(p1, p2); + BOOST_ASSERT(state_id < sizeof(masks) / sizeof(masks[0])); + return masks[state_id]; +} + +#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET +template +bool cpp_regex_traits_implementation::isctype(const charT c, char_class_type mask) const +{ + return + ((mask & ::boost::re_detail::char_class_space) && (this->m_pctype->is(std::ctype::space, c))) + || ((mask & ::boost::re_detail::char_class_print) && (this->m_pctype->is(std::ctype::print, c))) + || ((mask & ::boost::re_detail::char_class_cntrl) && (this->m_pctype->is(std::ctype::cntrl, c))) + || ((mask & ::boost::re_detail::char_class_upper) && (this->m_pctype->is(std::ctype::upper, c))) + || ((mask & ::boost::re_detail::char_class_lower) && (this->m_pctype->is(std::ctype::lower, c))) + || ((mask & ::boost::re_detail::char_class_alpha) && (this->m_pctype->is(std::ctype::alpha, c))) + || ((mask & ::boost::re_detail::char_class_digit) && (this->m_pctype->is(std::ctype::digit, c))) + || ((mask & ::boost::re_detail::char_class_punct) && (this->m_pctype->is(std::ctype::punct, c))) + || ((mask & ::boost::re_detail::char_class_xdigit) && (this->m_pctype->is(std::ctype::xdigit, c))) + || ((mask & ::boost::re_detail::char_class_blank) && (this->m_pctype->is(std::ctype::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)) + || ((mask & ::boost::re_detail::char_class_vertical_space) && (is_separator(c) || (c == '\v'))) + || ((mask & ::boost::re_detail::char_class_horizontal_space) && this->m_pctype->is(std::ctype::space, c) && !(is_separator(c) || (c == '\v'))); +} +#endif + + +template +inline boost::shared_ptr > create_cpp_regex_traits(const std::locale& l BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(charT)) +{ + cpp_regex_traits_base key(l); + return ::boost::object_cache, cpp_regex_traits_implementation >::get(key, 5); +} + +} // re_detail + +template +class cpp_regex_traits +{ +private: + typedef std::ctype ctype_type; +public: + typedef charT char_type; + typedef std::size_t size_type; + typedef std::basic_string 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(std::locale())) + { } + static size_type length(const char_type* p) + { + return std::char_traits::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::mask ctype_mask; + + static const ctype_mask mask_base = + static_cast( + 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); + + if((f & mask_base) + && (m_pimpl->m_pctype->is( + static_cast(f & mask_base), c))) + return true; + else if((f & re_detail::cpp_regex_traits_implementation::mask_unicode) && re_detail::is_extended(c)) + return true; + else if((f & re_detail::cpp_regex_traits_implementation::mask_word) && (c == '_')) + return true; + else if((f & re_detail::cpp_regex_traits_implementation::mask_blank) + && m_pimpl->m_pctype->is(std::ctype::space, c) + && !re_detail::is_separator(c)) + return true; + else if((f & re_detail::cpp_regex_traits_implementation::mask_vertical) + && (::boost::re_detail::is_separator(c) || (c == '\v'))) + return true; + else if((f & re_detail::cpp_regex_traits_implementation::mask_horizontal) + && this->isctype(c, std::ctype::space) && !this->isctype(c, re_detail::cpp_regex_traits_implementation::mask_vertical)) + 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(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 > m_pimpl; + // + // catalog name handler: + // + static std::string& get_catalog_name_inst(); + +#ifdef BOOST_HAS_THREADS + static static_mutex& get_mutex_inst(); +#endif +}; + + +template +int cpp_regex_traits::toi(const charT*& first, const charT* last, int radix)const +{ + re_detail::parser_buf sbuf; // buffer for parsing numbers. + std::basic_istream 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, is.getloc()).thousands_sep()); + + sbuf.pubsetbuf(const_cast(static_cast(first)), static_cast(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 +std::string cpp_regex_traits::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 +std::string& cpp_regex_traits::get_catalog_name_inst() +{ + static std::string s_name; + return s_name; +} + +template +std::string cpp_regex_traits::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 +static_mutex& cpp_regex_traits::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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + +#endif + + diff --git a/external/boost/regex/v4/cregex.hpp b/external/boost/regex/v4/cregex.hpp new file mode 100644 index 0000000..7b3df1e --- /dev/null +++ b/external/boost/regex/v4/cregex.hpp @@ -0,0 +1,330 @@ +/* + * + * 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 + * 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 +#endif +#include +#include + +#ifdef __cplusplus +#include +#else +#include +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#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_PERL = 20; /* Perl (?...) error */ +static const reg_error_t REG_E_UNKNOWN = 21; /* unknown error */ +static const reg_error_t REG_ENOSYS = 21; /* = 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef __cplusplus +} /* extern "C" */ +} /* namespace */ +#endif + +#if defined(__cplusplus) +/* + * C++ high level wrapper goes here: + */ +#include +#include +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#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& v, const char* p, match_flag_type flags = match_default); + unsigned int Grep(std::vector& v, const std::string& s, match_flag_type flags = match_default) { return Grep(v, s.c_str(), flags); } + unsigned int Grep(std::vector& v, const char* p, match_flag_type flags = match_default); + unsigned int Grep(std::vector& 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& 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} /* namespace boost */ + +#endif /* __cplusplus */ + +#endif /* include guard */ + + + + + + + + + + diff --git a/external/boost/regex/v4/error_type.hpp b/external/boost/regex/v4/error_type.hpp new file mode 100644 index 0000000..afcc71e --- /dev/null +++ b/external/boost/regex/v4/error_type.hpp @@ -0,0 +1,59 @@ +/* + * + * 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 + * 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_perl_extension = 20, + error_unknown = 21 +}; + +} +} +#endif /* __cplusplus */ + +#endif diff --git a/external/boost/regex/v4/fileiter.hpp b/external/boost/regex/v4/fileiter.hpp new file mode 100644 index 0000000..f13c4b2 --- /dev/null +++ b/external/boost/regex/v4/fileiter.hpp @@ -0,0 +1,455 @@ +/* + * + * 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 + * 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 +#endif +#include + +#ifndef BOOST_REGEX_NO_FILEITER + +#if (defined(__CYGWIN__) || defined(__CYGWIN32__)) && !defined(BOOST_REGEX_NO_W32) +#error "Sorry, can't mix 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 +#endif + +#if defined(BOOST_REGEX_FI_WIN32_DIR) + +#include + +namespace boost{ + namespace re_detail{ + +#ifndef BOOST_NO_ANSI_APIS +typedef WIN32_FIND_DATAA _fi_find_data; +#else +typedef WIN32_FIND_DATAW _fi_find_data; +#endif +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 +#include +#include +#include +#include +#include +#include + +#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 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 +#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/external/boost/regex/v4/instances.hpp b/external/boost/regex/v4/instances.hpp new file mode 100644 index 0000000..c62d136 --- /dev/null +++ b/external/boost/regex/v4/instances.hpp @@ -0,0 +1,219 @@ +/* + * + * 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 + * 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 +#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::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 +# if BOOST_MSVC > 1310 +# define BOOST_REGEX_TEMPLATE_DECL +# endif +# define template extern template +# endif +# endif + +#ifndef BOOST_REGEX_TEMPLATE_DECL +# define BOOST_REGEX_TEMPLATE_DECL BOOST_REGEX_DECL +#endif + +# ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4251 4231 4660) +# endif + +template class BOOST_REGEX_TEMPLATE_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >; + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +template class BOOST_REGEX_TEMPLATE_DECL match_results< const BOOST_REGEX_CHAR_T* >; +#endif +#ifndef BOOST_NO_STD_ALLOCATOR +template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher::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_TEMPLATE_DECL match_results< std::basic_string::const_iterator >; +#endif +#ifndef BOOST_NO_STD_ALLOCATOR +template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher< std::basic_string::const_iterator, match_results< std::basic_string::const_iterator >::allocator_type, boost::regex_traits >; +#endif +#endif + + +# ifdef BOOST_MSVC +# pragma warning(pop) +# endif + +# ifdef template +# undef template +# endif + +#undef BOOST_REGEX_TEMPLATE_DECL + +#elif (defined(__GNUC__) && (__GNUC__ >= 3)) || !defined(BOOST_NO_EXTERN_TEMPLATE) + +# ifndef BOOST_REGEX_INSTANTIATE +# ifdef __GNUC__ +# define template __extension__ extern template +# else +# define template extern template +# endif +# 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::imbue(const std::locale& l); + +template BOOST_REGEX_DECL +cpp_regex_traits_implementation::string_type + cpp_regex_traits_implementation::transform_primary(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; +template BOOST_REGEX_DECL +cpp_regex_traits_implementation::string_type + cpp_regex_traits_implementation::transform(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; +template BOOST_REGEX_DECL +cpp_regex_traits_implementation::string_type + cpp_regex_traits_implementation::lookup_collatename(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; +template BOOST_REGEX_DECL +void cpp_regex_traits_implementation::init(); +template BOOST_REGEX_DECL +cpp_regex_traits_implementation::char_class_type + cpp_regex_traits_implementation::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::isctype(const BOOST_REGEX_CHAR_T c, char_class_type mask) const; +#endif +} // namespace +template BOOST_REGEX_DECL +int cpp_regex_traits::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::catalog_name(const std::string& name); +template BOOST_REGEX_DECL +std::string& cpp_regex_traits::get_catalog_name_inst(); +template BOOST_REGEX_DECL +std::string cpp_regex_traits::get_catalog_name(); +#ifdef BOOST_HAS_THREADS +template BOOST_REGEX_DECL +static_mutex& cpp_regex_traits::get_mutex_inst(); +#endif +#endif + +template BOOST_REGEX_DECL basic_regex& + basic_regex::do_assign( + const BOOST_REGEX_CHAR_T* p1, + const BOOST_REGEX_CHAR_T* p2, + flag_type f); +template BOOST_REGEX_DECL basic_regex::locale_type BOOST_REGEX_CALL + basic_regex::imbue(locale_type l); + +template BOOST_REGEX_DECL void BOOST_REGEX_CALL + match_results::maybe_assign( + const match_results& m); + +namespace re_detail{ +template BOOST_REGEX_DECL void perl_matcher::allocator_type BOOST_REGEX_TRAITS_T >::construct_init( + const basic_regex& e, match_flag_type f); +template BOOST_REGEX_DECL bool perl_matcher::allocator_type BOOST_REGEX_TRAITS_T >::match(); +template BOOST_REGEX_DECL bool perl_matcher::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::const_iterator>::maybe_assign( + const match_results::const_iterator>& m); + +namespace re_detail{ +template BOOST_REGEX_DECL void perl_matcher::const_iterator, match_results< std::basic_string::const_iterator >::allocator_type, boost::regex_traits >::construct_init( + const basic_regex& e, match_flag_type f); +template BOOST_REGEX_DECL bool perl_matcher::const_iterator, match_results< std::basic_string::const_iterator >::allocator_type, boost::regex_traits >::match(); +template BOOST_REGEX_DECL bool perl_matcher::const_iterator, match_results< std::basic_string::const_iterator >::allocator_type, boost::regex_traits >::find(); +} // namespace +#endif + +# ifdef template +# undef template +# endif + + +#endif + +} // namespace boost + +#endif // BOOST_REGEX_NO_EXTERNAL_TEMPLATES + + + + + diff --git a/external/boost/regex/v4/iterator_category.hpp b/external/boost/regex/v4/iterator_category.hpp new file mode 100644 index 0000000..9e40142 --- /dev/null +++ b/external/boost/regex/v4/iterator_category.hpp @@ -0,0 +1,91 @@ +/* + * + * 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 + * 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 +#include +#include + +namespace boost{ +namespace detail{ + +template +struct is_random_imp +{ +#ifndef BOOST_NO_STD_ITERATOR_TRAITS +private: + typedef typename std::iterator_traits::iterator_category cat; +public: + BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible::value)); +#else + BOOST_STATIC_CONSTANT(bool, value = false); +#endif +}; + +template +struct is_random_pointer_imp +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template +struct is_random_imp_selector +{ + template + struct rebind + { + typedef is_random_imp type; + }; +}; + +template <> +struct is_random_imp_selector +{ + template + struct rebind + { + typedef is_random_pointer_imp type; + }; +}; + +} + +template +struct is_random_access_iterator +{ +private: + typedef detail::is_random_imp_selector< ::boost::is_pointer::value> selector; + typedef typename selector::template rebind bound_type; + typedef typename bound_type::type answer; +public: + BOOST_STATIC_CONSTANT(bool, value = answer::value); +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +template +const bool is_random_access_iterator::value; +#endif + +} + +#endif + diff --git a/external/boost/regex/v4/iterator_traits.hpp b/external/boost/regex/v4/iterator_traits.hpp new file mode 100644 index 0000000..f7afacb --- /dev/null +++ b/external/boost/regex/v4/iterator_traits.hpp @@ -0,0 +1,135 @@ +/* + * + * 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 + * DESCRIPTION: Declares iterator traits workarounds. + */ + +#ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP +#define BOOST_REGEX_V4_ITERATOR_TRAITS_HPP + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ +namespace re_detail{ + +#if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +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 +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 +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 : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; +// +// the follwoing are needed for ICU support: +// +template<> +struct regex_iterator_traits : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; + +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +template<> +struct regex_iterator_traits : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; +#endif + +#if defined(__SGI_STL_PORT) && defined(__STL_DEBUG) +template<> +struct regex_iterator_traits : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; +#ifndef BOOST_NO_STD_WSTRING +template<> +struct regex_iterator_traits : pointer_iterator_traits{}; +template<> +struct regex_iterator_traits : const_pointer_iterator_traits{}; +#endif // BOOST_NO_WSTRING +#endif // stport + +#else + +template +struct regex_iterator_traits : public std::iterator_traits {}; + +#endif + +} // namespace re_detail +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/match_flags.hpp b/external/boost/regex/v4/match_flags.hpp new file mode 100644 index 0000000..26bde9a --- /dev/null +++ b/external/boost/regex/v4/match_flags.hpp @@ -0,0 +1,138 @@ +/* + * + * 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 + * DESCRIPTION: Declares match_flags type. + */ + +#ifndef BOOST_REGEX_V4_MATCH_FLAGS +#define BOOST_REGEX_V4_MATCH_FLAGS + +#ifdef __cplusplus +# include +#endif + +#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 (defined(_MSC_VER) && (_MSC_VER < 1300)) || defined(__BORLANDC__) +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(static_cast(m1) & static_cast(m2)); } +inline match_flags operator|(match_flags m1, match_flags m2) +{ return static_cast(static_cast(m1) | static_cast(m2)); } +inline match_flags operator^(match_flags m1, match_flags m2) +{ return static_cast(static_cast(m1) ^ static_cast(m2)); } +inline match_flags operator~(match_flags m1) +{ return static_cast(~static_cast(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/external/boost/regex/v4/match_results.hpp b/external/boost/regex/v4/match_results.hpp new file mode 100644 index 0000000..ca9898f --- /dev/null +++ b/external/boost/regex/v4/match_results.hpp @@ -0,0 +1,699 @@ +/* + * + * Copyright (c) 1998-2009 + * 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 + * DESCRIPTION: Declares template class match_results. + */ + +#ifndef BOOST_REGEX_V4_MATCH_RESULTS_HPP +#define BOOST_REGEX_V4_MATCH_RESULTS_HPP + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable : 4251 4231 4660) +#endif + +namespace re_detail{ + +class named_subexpressions; + +} + +template +class match_results +{ +private: +#ifndef BOOST_NO_STD_ALLOCATOR + typedef std::vector, Allocator> vector_type; +#else + typedef std::vector > vector_type; +#endif +public: + typedef sub_match 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 string_type; + typedef re_detail::named_subexpressions named_sub_type; + + // construct/copy/destroy: + explicit match_results(const Allocator& a = Allocator()) +#ifndef BOOST_NO_STD_ALLOCATOR + : m_subs(a), m_base(), m_last_closed_paren(0), m_is_singular(true) {} +#else + : m_subs(), m_base(), m_last_closed_paren(0), m_is_singular(true) { (void)a; } +#endif + match_results(const match_results& m) + : m_subs(m.m_subs), m_named_subs(m.m_named_subs), m_last_closed_paren(m.m_last_closed_paren), m_is_singular(m.m_is_singular) + { + if(!m_is_singular) + { + m_base = m.m_base; + m_null = m.m_null; + } + } + match_results& operator=(const match_results& m) + { + m_subs = m.m_subs; + m_named_subs = m.m_named_subs; + m_last_closed_paren = m.m_last_closed_paren; + m_is_singular = m.m_is_singular; + if(!m_is_singular) + { + m_base = m.m_base; + m_null = m.m_null; + } + 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 + { + if(m_is_singular) + raise_logic_error(); + sub += 2; + if((sub < (int)m_subs.size()) && (sub > 0)) + return m_subs[sub].length(); + return 0; + } + difference_type length(const char_type* sub) const + { + if(m_is_singular) + raise_logic_error(); + const char_type* sub_end = sub; + while(*sub_end) ++sub_end; + return length(named_subexpression_index(sub, sub_end)); + } + template + difference_type length(const charT* sub) const + { + if(m_is_singular) + raise_logic_error(); + const charT* sub_end = sub; + while(*sub_end) ++sub_end; + return length(named_subexpression_index(sub, sub_end)); + } + template + difference_type length(const std::basic_string& sub) const + { + return length(sub.c_str()); + } + difference_type position(size_type sub = 0) const + { + if(m_is_singular) + raise_logic_error(); + sub += 2; + if(sub < m_subs.size()) + { + const sub_match& s = m_subs[sub]; + if(s.matched || (sub == 2)) + { + return ::boost::re_detail::distance((BidiIterator)(m_base), (BidiIterator)(s.first)); + } + } + return ~static_cast(0); + } + difference_type position(const char_type* sub) const + { + const char_type* sub_end = sub; + while(*sub_end) ++sub_end; + return position(named_subexpression_index(sub, sub_end)); + } + template + difference_type position(const charT* sub) const + { + const charT* sub_end = sub; + while(*sub_end) ++sub_end; + return position(named_subexpression_index(sub, sub_end)); + } + template + difference_type position(const std::basic_string& sub) const + { + return position(sub.c_str()); + } + string_type str(int sub = 0) const + { + if(m_is_singular) + raise_logic_error(); + sub += 2; + string_type result; + if(sub < (int)m_subs.size() && (sub > 0)) + { + const sub_match& s = m_subs[sub]; + if(s.matched) + { + result = s.str(); + } + } + return result; + } + string_type str(const char_type* sub) const + { + return (*this)[sub].str(); + } + template + string_type str(const std::basic_string& sub) const + { + return (*this)[sub].str(); + } + template + string_type str(const charT* sub) const + { + return (*this)[sub].str(); + } + template + string_type str(const std::basic_string& sub) const + { + return (*this)[sub].str(); + } + const_reference operator[](int sub) const + { + if(m_is_singular && m_subs.empty()) + raise_logic_error(); + sub += 2; + if(sub < (int)m_subs.size() && (sub >= 0)) + { + return m_subs[sub]; + } + return m_null; + } + // + // Named sub-expressions: + // + const_reference named_subexpression(const char_type* i, const char_type* j) const + { + // + // Scan for the leftmost *matched* subexpression with the specified named: + // + if(m_is_singular) + raise_logic_error(); + re_detail::named_subexpressions::range_type r = m_named_subs->equal_range(i, j); + while((r.first != r.second) && ((*this)[r.first->index].matched == false)) + ++r.first; + return r.first != r.second ? (*this)[r.first->index] : m_null; + } + template + const_reference named_subexpression(const charT* i, const charT* j) const + { + BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); + if(i == j) + return m_null; + std::vector s; + while(i != j) + s.insert(s.end(), *i++); + return named_subexpression(&*s.begin(), &*s.begin() + s.size()); + } + int named_subexpression_index(const char_type* i, const char_type* j) const + { + // + // Scan for the leftmost *matched* subexpression with the specified named. + // If none found then return the leftmost expression with that name, + // otherwise an invalid index: + // + if(m_is_singular) + raise_logic_error(); + re_detail::named_subexpressions::range_type s, r; + s = r = m_named_subs->equal_range(i, j); + while((r.first != r.second) && ((*this)[r.first->index].matched == false)) + ++r.first; + if(r.first == r.second) + r = s; + return r.first != r.second ? r.first->index : -20; + } + template + int named_subexpression_index(const charT* i, const charT* j) const + { + BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); + if(i == j) + return -20; + std::vector s; + while(i != j) + s.insert(s.end(), *i++); + return named_subexpression_index(&*s.begin(), &*s.begin() + s.size()); + } + template + const_reference operator[](const std::basic_string& s) const + { + return named_subexpression(s.c_str(), s.c_str() + s.size()); + } + const_reference operator[](const char_type* p) const + { + const char_type* e = p; + while(*e) ++e; + return named_subexpression(p, e); + } + + template + const_reference operator[](const charT* p) const + { + BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); + if(*p == 0) + return m_null; + std::vector s; + while(*p) + s.insert(s.end(), *p++); + return named_subexpression(&*s.begin(), &*s.begin() + s.size()); + } + template + const_reference operator[](const std::basic_string& ns) const + { + BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); + if(ns.empty()) + return m_null; + std::vector s; + for(unsigned i = 0; i < ns.size(); ++i) + s.insert(s.end(), ns[i]); + return named_subexpression(&*s.begin(), &*s.begin() + s.size()); + } + + const_reference prefix() const + { + if(m_is_singular) + raise_logic_error(); + return (*this)[-1]; + } + + const_reference suffix() const + { + if(m_is_singular) + raise_logic_error(); + 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 + OutputIterator format(OutputIterator out, + Functor fmt, + match_flag_type flags = format_default) const + { + if(m_is_singular) + raise_logic_error(); + typedef typename re_detail::compute_functor_type, OutputIterator>::type F; + F func(fmt); + return func(*this, out, flags); + } + template + string_type format(Functor fmt, match_flag_type flags = format_default) const + { + if(m_is_singular) + raise_logic_error(); + std::basic_string result; + re_detail::string_out_iterator > i(result); + + typedef typename re_detail::compute_functor_type, re_detail::string_out_iterator > >::type F; + F func(fmt); + + func(*this, i, flags); + return result; + } + // format with locale: + template + OutputIterator format(OutputIterator out, + Functor fmt, + match_flag_type flags, + const RegexT& re) const + { + if(m_is_singular) + raise_logic_error(); + typedef ::boost::regex_traits_wrapper traits_type; + typedef typename re_detail::compute_functor_type, OutputIterator, traits_type>::type F; + F func(fmt); + return func(*this, out, flags, re.get_traits()); + } + template + string_type format(Functor fmt, + match_flag_type flags, + const RegexT& re) const + { + if(m_is_singular) + raise_logic_error(); + typedef ::boost::regex_traits_wrapper traits_type; + std::basic_string result; + re_detail::string_out_iterator > i(result); + + typedef typename re_detail::compute_functor_type, re_detail::string_out_iterator >, traits_type >::type F; + F func(fmt); + + func(*this, i, flags, re.get_traits()); + return result; + } + + const_reference get_last_closed_paren()const + { + if(m_is_singular) + raise_logic_error(); + return m_last_closed_paren == 0 ? m_null : (*this)[m_last_closed_paren]; + } + + 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_named_subs, that.m_named_subs); + std::swap(m_last_closed_paren, that.m_last_closed_paren); + if(m_is_singular) + { + if(!that.m_is_singular) + { + m_base = that.m_base; + m_null = that.m_null; + } + } + else if(that.m_is_singular) + { + that.m_base = m_base; + that.m_null = m_null; + } + else + { + std::swap(m_base, that.m_base); + std::swap(m_null, that.m_null); + } + std::swap(m_is_singular, that.m_is_singular); + } + bool operator==(const match_results& that)const + { + if(m_is_singular) + { + return that.m_is_singular; + } + else if(that.m_is_singular) + { + return false; + } + return (m_subs == that.m_subs) && (m_base == that.m_base) && (m_last_closed_paren == that.m_last_closed_paren); + } + bool operator!=(const match_results& that)const + { return !(*this == that); } + +#ifdef BOOST_REGEX_MATCH_EXTRA + typedef typename sub_match::capture_sequence_type capture_sequence_type; + + const capture_sequence_type& captures(int i)const + { + if(m_is_singular) + raise_logic_error(); + 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; + m_is_singular = false; + } + + void BOOST_REGEX_CALL set_second(BidiIterator i, size_type pos, bool m = true, bool escape_k = false) + { + if(pos) + m_last_closed_paren = static_cast(pos); + pos += 2; + BOOST_ASSERT(m_subs.size() > pos); + m_subs[pos].second = i; + m_subs[pos].matched = m; + if((pos == 2) && !escape_k) + { + 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; + m_is_singular = 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; + m_last_closed_paren = 0; + } + 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) + { + BOOST_ASSERT(m_subs.size() > 2); + // 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, bool escape_k = false) + { + BOOST_ASSERT(pos+2 < m_subs.size()); + if(pos || escape_k) + { + m_subs[pos+2].first = i; + if(escape_k) + { + m_subs[1].second = i; + m_subs[1].matched = (m_subs[1].first != m_subs[1].second); + } + } + else + set_first(i); + } + void BOOST_REGEX_CALL maybe_assign(const match_results& m); + + void BOOST_REGEX_CALL set_named_subs(boost::shared_ptr subs) + { + m_named_subs = subs; + } + +private: + // + // Error handler called when an uninitialized match_results is accessed: + // + static void raise_logic_error() + { + std::logic_error e("Attempt to access an uninitialzed boost::match_results<> class."); + boost::throw_exception(e); + } + + + vector_type m_subs; // subexpressions + BidiIterator m_base; // where the search started from + sub_match m_null; // a null match + boost::shared_ptr m_named_subs; // Shared copy of named subs in the regex object + int m_last_closed_paren; // Last ) to be seen - used for formatting + bool m_is_singular; // True if our stored iterators are singular +}; + +template +void BOOST_REGEX_CALL match_results::maybe_assign(const match_results& m) +{ + if(m_is_singular) + { + *this = m; + return; + } + 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 +void swap(match_results& a, match_results& b) +{ + a.swap(b); +} + +#ifndef BOOST_NO_STD_LOCALE +template +std::basic_ostream& + operator << (std::basic_ostream& os, + const match_results& s) +{ + return (os << s.str()); +} +#else +template +std::ostream& operator << (std::ostream& os, + const match_results& s) +{ + return (os << s.str()); +} +#endif + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + + diff --git a/external/boost/regex/v4/mem_block_cache.hpp b/external/boost/regex/v4/mem_block_cache.hpp new file mode 100644 index 0000000..222142d --- /dev/null +++ b/external/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 + * 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 +#ifdef BOOST_HAS_THREADS +#include +#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(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/external/boost/regex/v4/perl_matcher.hpp b/external/boost/regex/v4/perl_matcher.hpp new file mode 100644 index 0000000..52cc55c --- /dev/null +++ b/external/boost/regex/v4/perl_matcher.hpp @@ -0,0 +1,584 @@ +/* + * + * 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 + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4800) +#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 +inline bool can_start(charT c, const unsigned char* map, unsigned char mask) +{ + return ((c < static_cast(0)) ? true : ((c >= static_cast(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) && !defined(__WINSCW__)// WCHAR_MIN not usable in pp-directives. +#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 >= static_cast(1u << CHAR_BIT)) ? true : map[c] & mask); +} +#endif +#endif +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) +inline bool can_start(unsigned int c, const unsigned char* map, unsigned char mask) +{ + return (((c >= static_cast(1u << CHAR_BIT)) ? true : map[c] & mask)); +} +#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 +inline int string_compare(const std::basic_string& 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 +inline int string_compare(const std::basic_string& 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 +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 +inline const charT* re_skip_past_null(const charT* p) +{ + while (*p != static_cast(0)) ++p; + return ++p; +} + +template +iterator BOOST_REGEX_CALL re_is_set_member(iterator next, + iterator last, + const re_set_long* set_, + const regex_data& e, bool icase) +{ + const charT* p = reinterpret_cast(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_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(0)) + { + // treat null string as special case: + if(traits_inst.translate(*ptr, icase) != *p) + { + while(*p == static_cast(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(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 repeater_count +{ + repeater_count** stack; + repeater_count* next; + int state_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; + state_id = -1; + count = 0; + } + repeater_count(int i, repeater_count** s, BidiIterator start) + : start_pos(start) + { + state_id = i; + stack = s; + next = *stack; + *stack = this; + if(state_id > next->state_id) + count = 0; + else + { + repeater_count* p = next; + while(p && (p->state_id != state_id)) + p = p->next; + if(p) + { + count = p->count; + start_pos = p->start_pos; + } + else + count = 0; + } + } + ~repeater_count() + { + if(next) + *stack = next; + } + std::size_t get_count() { return count; } + int get_id() { return state_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 +}; + +template +struct recursion_info +{ + typedef typename Results::value_type value_type; + typedef typename value_type::iterator iterator; + int idx; + const re_syntax_base* preturn_address; + Results results; + repeater_count* repeater_stack; +}; + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable : 4251 4231 4660) +#endif + +template +class perl_matcher +{ +public: + typedef typename traits::char_type char_type; + typedef perl_matcher self_type; + typedef bool (self_type::*matcher_proc_type)(void); + typedef std::size_t traits_size_type; + typedef typename is_byte::width_type width_type; + typedef typename regex_iterator_traits::difference_type difference_type; + typedef match_results results_type; + + perl_matcher(BidiIterator first, BidiIterator end, + match_results& what, + const basic_regex& 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& 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_dot_repeat_dispatch() + { + return ::boost::is_random_access_iterator::value ? match_dot_repeat_fast() : 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 + bool match_recursion(); + + // 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& m_result; + // temporary result for POSIX matches: + scoped_ptr > m_temp_match; + // pointer to actual result structure to fill in: + match_results* 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& re; + // the expression's traits class: + const ::boost::regex_traits_wrapper& 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: + std::ptrdiff_t state_count; + // max number of states to examine before giving up: + std::ptrdiff_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* next_count; + // the first repeat being examined (top of linked list): + repeater_count 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; + // recursion information: + std::vector > recursion_stack; + +#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); + bool unwind_recursion(bool); + bool unwind_recursion_pop(bool); + void destroy_single_repeat(); + void push_matched_paren(int index, const sub_match& 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** s); + void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id); + void push_non_greedy_repeat(const re_syntax_base* ps); + void push_recursion(int idx, const re_syntax_base* p, results_type* presults); + void push_recursion_pop(); + + // 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +// +// include the implementation of perl_matcher: +// +#ifdef BOOST_REGEX_RECURSIVE +#include +#else +#include +#endif +// this one has to be last: +#include + +#endif + diff --git a/external/boost/regex/v4/perl_matcher_common.hpp b/external/boost/regex/v4/perl_matcher_common.hpp new file mode 100644 index 0000000..b8c4e96 --- /dev/null +++ b/external/boost/regex/v4/perl_matcher_common.hpp @@ -0,0 +1,990 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef __BORLANDC__ +# pragma option push -w-8008 -w-8066 +#endif +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4800) +#endif + +namespace boost{ +namespace re_detail{ + +template +void perl_matcher::construct_init(const basic_regex& e, match_flag_type f) +{ + typedef typename regex_iterator_traits::iterator_category category; + typedef typename basic_regex::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(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()); + 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((f & match_not_dot_newline) ? re_detail::test_not_newline : re_detail::test_newline); +} + +template +void perl_matcher::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 std::ptrdiff_t k = 100000; + std::ptrdiff_t dist = boost::re_detail::distance(base, last); + if(dist == 0) + dist = 1; + std::ptrdiff_t states = re.size(); + if(states == 0) + states = 1; + states *= states; + if((std::numeric_limits::max)() / dist < states) + { + max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits::max)() - 2); + return; + } + states *= dist; + if((std::numeric_limits::max)() - k < states) + { + max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits::max)() - 2); + return; + } + states += k; + + max_state_count = states; + + // + // Now calculate N^2: + // + states = dist; + if((std::numeric_limits::max)() / dist < states) + { + max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits::max)() - 2); + return; + } + states *= dist; + if((std::numeric_limits::max)() - k < states) + { + max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits::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 +inline void perl_matcher::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 +inline bool perl_matcher::protected_call( + protected_proc_type proc) +{ + ::boost::re_detail::concrete_protected_call + > + obj(this, proc); + return obj.execute(); + +} +#endif + +template +inline bool perl_matcher::match() +{ +#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD + return protected_call(&perl_matcher::match_imp); +#else + return match_imp(); +#endif +} + +template +bool perl_matcher::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); + m_presult->set_named_subs(this->re.get_named_subs()); + 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) && (m_result[0].first == base); + +#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 +inline bool perl_matcher::find() +{ +#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD + return protected_call(&perl_matcher::find_imp); +#else + return find_imp(); +#endif +} + +template +bool perl_matcher::find_imp() +{ + static matcher_proc_type const s_find_vtable[7] = + { + &perl_matcher::find_restart_any, + &perl_matcher::find_restart_word, + &perl_matcher::find_restart_line, + &perl_matcher::find_restart_buf, + &perl_matcher::match_prefix, + &perl_matcher::find_restart_lit, + &perl_matcher::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_presult->set_named_subs(this->re.get_named_subs()); + 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(regbase::restart_continue) + : static_cast(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 +bool perl_matcher::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::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 +bool perl_matcher::match_literal() +{ + unsigned int len = static_cast(pstate)->length; + const char_type* what = reinterpret_cast(static_cast(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 +bool perl_matcher::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('\r')) && (*position == static_cast('\n'))) ) + { + pstate = pstate->next.p; + return true; + } + } + else if(is_separator(*t)) + { + pstate = pstate->next.p; + return true; + } + return false; +} + +template +bool perl_matcher::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('\r')) && (*position == static_cast('\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 +bool perl_matcher::match_wild() +{ + if(position == last) + return false; + if(is_separator(*position) && ((match_any_mask & static_cast(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 +bool perl_matcher::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 +bool perl_matcher::match_within_word() +{ + if(position == last) + return false; + // both prev and this character must be m_word_mask: + bool prev = 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 == prev) + { + pstate = pstate->next.p; + return true; + } + } + return false; +} + +template +bool perl_matcher::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 +bool perl_matcher::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 +bool perl_matcher::match_buffer_start() +{ + if((position != backstop) || (m_match_flags & match_not_bob)) + return false; + // OK match: + pstate = pstate->next.p; + return true; +} + +template +bool perl_matcher::match_buffer_end() +{ + if((position != last) || (m_match_flags & match_not_eob)) + return false; + // OK match: + pstate = pstate->next.p; + return true; +} + +template +bool perl_matcher::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. + // + int index = static_cast(pstate)->index; + if(index >= 10000) + { + named_subexpressions::range_type r = re.get_data().equal_range(index); + BOOST_ASSERT(r.first != r.second); + do + { + index = r.first->index; + ++r.first; + }while((r.first != r.second) && ((*m_presult)[index].matched != true)); + } + + if((m_match_flags & match_perl) && !(*m_presult)[index].matched) + return false; + + BidiIterator i = (*m_presult)[index].first; + BidiIterator j = (*m_presult)[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 +bool perl_matcher::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*>(pstate), re.get_data(), icase); + if(t != position) + { + pstate = pstate->next.p; + position = t; + return true; + } + return false; +} + +template +bool perl_matcher::match_set() +{ + if(position == last) + return false; + if(static_cast(pstate)->_map[static_cast(traits_inst.translate(*position, icase))]) + { + pstate = pstate->next.p; + ++position; + return true; + } + return false; +} + +template +bool perl_matcher::match_jump() +{ + pstate = static_cast(pstate)->alt.p; + return true; +} + +template +bool perl_matcher::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 +bool perl_matcher::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 +bool perl_matcher::match_restart_continue() +{ + if(position == search_base) + { + pstate = pstate->next.p; + return true; + } + return false; +} + +template +bool perl_matcher::match_backstep() +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if( ::boost::is_random_access_iterator::value) + { + std::ptrdiff_t maxlen = ::boost::re_detail::distance(backstop, position); + if(maxlen < static_cast(pstate)->index) + return false; + std::advance(position, -static_cast(pstate)->index); + } + else + { + int c = static_cast(pstate)->index; + while(c--) + { + if(position == backstop) + return false; + --position; + } + } + pstate = pstate->next.p; + return true; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} + +template +inline bool perl_matcher::match_assert_backref() +{ + // return true if marked sub-expression N has been matched: + int index = static_cast(pstate)->index; + bool result = false; + if(index == 9999) + { + // Magic value for a (DEFINE) block: + return false; + } + else if(index > 0) + { + // Have we matched subexpression "index"? + // Check if index is a hash value: + if(index >= 10000) + { + named_subexpressions::range_type r = re.get_data().equal_range(index); + while(r.first != r.second) + { + if((*m_presult)[r.first->index].matched) + { + result = true; + break; + } + ++r.first; + } + } + else + { + result = (*m_presult)[index].matched; + } + pstate = pstate->next.p; + } + else + { + // Have we recursed into subexpression "index"? + // If index == 0 then check for any recursion at all, otherwise for recursion to -index-1. + int idx = -index-1; + if(idx >= 10000) + { + named_subexpressions::range_type r = re.get_data().equal_range(idx); + int stack_index = recursion_stack.empty() ? -1 : recursion_stack.back().idx; + while(r.first != r.second) + { + result |= (stack_index == r.first->index); + if(result)break; + ++r.first; + } + } + else + { + result = !recursion_stack.empty() && ((recursion_stack.back().idx == idx) || (index == 0)); + } + pstate = pstate->next.p; + } + return result; +} + +template +bool perl_matcher::match_toggle_case() +{ + // change our case sensitivity: + this->icase = static_cast(pstate)->icase; + pstate = pstate->next.p; + return true; +} + + +template +bool perl_matcher::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 +bool perl_matcher::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 +bool perl_matcher::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 +bool perl_matcher::find_restart_buf() +{ + if((position == base) && ((m_match_flags & match_not_bob) == 0)) + return match_prefix(); + return false; +} + +template +bool perl_matcher::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(regbase::restart_continue) + : static_cast(re.get_restart_type()); + + const kmp_info* 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 BOOST_MSVC +# pragma warning(pop) +#endif + +#ifdef __BORLANDC__ +# pragma option pop +#endif +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/perl_matcher_non_recursive.hpp b/external/boost/regex/v4/perl_matcher_non_recursive.hpp new file mode 100644 index 0000000..7ab6781 --- /dev/null +++ b/external/boost/regex/v4/perl_matcher_non_recursive.hpp @@ -0,0 +1,1639 @@ +/* + * + * 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 + * 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 + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4800) +#endif + +namespace boost{ +namespace re_detail{ + +template +inline void inplace_destroy(T* p) +{ + (void)p; // warning suppression + p->~T(); +} + +struct saved_state +{ + union{ + unsigned int state_id; + // this padding ensures correct alignment on 64-bit platforms: + std::size_t padding1; + std::ptrdiff_t padding2; + void* padding3; + }; + saved_state(unsigned i) : state_id(i) {} +}; + +template +struct saved_matched_paren : public saved_state +{ + int index; + sub_match sub; + saved_matched_paren(int i, const sub_match& s) : saved_state(1), index(i), sub(s){}; +}; + +template +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 +struct saved_assertion : public saved_position +{ + bool positive; + saved_assertion(bool p, const re_syntax_base* ps, BidiIterator pos) + : saved_position(ps, pos, saved_type_assertion), positive(p){}; +}; + +template +struct saved_repeater : public saved_state +{ + repeater_count count; + saved_repeater(int i, repeater_count** 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(get_mem_block()); + *end = reinterpret_cast(reinterpret_cast(*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 +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 +struct saved_recursion : public saved_state +{ + saved_recursion(int idx, const re_syntax_base* p, Results* pr) + : saved_state(14), recursion_id(idx), preturn_address(p), results(*pr) + {} + int recursion_id; + const re_syntax_base* preturn_address; + Results results; +}; + +template +bool perl_matcher::match_all_states() +{ + static matcher_proc_type const s_match_vtable[30] = + { + (&perl_matcher::match_startmark), + &perl_matcher::match_endmark, + &perl_matcher::match_literal, + &perl_matcher::match_start_line, + &perl_matcher::match_end_line, + &perl_matcher::match_wild, + &perl_matcher::match_match, + &perl_matcher::match_word_boundary, + &perl_matcher::match_within_word, + &perl_matcher::match_word_start, + &perl_matcher::match_word_end, + &perl_matcher::match_buffer_start, + &perl_matcher::match_buffer_end, + &perl_matcher::match_backref, + &perl_matcher::match_long_set, + &perl_matcher::match_set, + &perl_matcher::match_jump, + &perl_matcher::match_alt, + &perl_matcher::match_rep, + &perl_matcher::match_combining, + &perl_matcher::match_soft_buffer_end, + &perl_matcher::match_restart_continue, + // Although this next line *should* be evaluated at compile time, in practice + // some compilers (VC++) emit run-time initialisation which breaks thread + // safety, so use a dispatch function instead: + //(::boost::is_random_access_iterator::value ? &perl_matcher::match_dot_repeat_fast : &perl_matcher::match_dot_repeat_slow), + &perl_matcher::match_dot_repeat_dispatch, + &perl_matcher::match_char_repeat, + &perl_matcher::match_set_repeat, + &perl_matcher::match_long_set_repeat, + &perl_matcher::match_backstep, + &perl_matcher::match_assert_backref, + &perl_matcher::match_toggle_case, + &perl_matcher::match_recursion, + }; + + 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_complexity); + 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 +void perl_matcher::extend_stack() +{ + if(used_block_count) + { + --used_block_count; + saved_state* stack_base; + saved_state* backup_state; + stack_base = static_cast(get_mem_block()); + backup_state = reinterpret_cast(reinterpret_cast(stack_base)+BOOST_REGEX_BLOCKSIZE); + saved_extra_block* block = static_cast(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_stack); +} + +template +inline void perl_matcher::push_matched_paren(int index, const sub_match& sub) +{ + //BOOST_ASSERT(index); + saved_matched_paren* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_matched_paren(index, sub); + m_backup_state = pmp; +} + +template +inline void perl_matcher::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 +inline void perl_matcher::push_assertion(const re_syntax_base* ps, bool positive) +{ + saved_assertion* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_assertion(positive, ps, position); + m_backup_state = pmp; +} + +template +inline void perl_matcher::push_alt(const re_syntax_base* ps) +{ + saved_position* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_position(ps, position, saved_state_alt); + m_backup_state = pmp; +} + +template +inline void perl_matcher::push_non_greedy_repeat(const re_syntax_base* ps) +{ + saved_position* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_position(ps, position, saved_state_non_greedy_long_repeat); + m_backup_state = pmp; +} + +template +inline void perl_matcher::push_repeater_count(int i, repeater_count** s) +{ + saved_repeater* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_repeater(i, s, position); + m_backup_state = pmp; +} + +template +inline void perl_matcher::push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id) +{ + saved_single_repeat* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_single_repeat(c, r, last_position, state_id); + m_backup_state = pmp; +} + +template +inline void perl_matcher::push_recursion(int idx, const re_syntax_base* p, results_type* presults) +{ + saved_recursion* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_recursion(idx, p, presults); + m_backup_state = pmp; +} + +template +bool perl_matcher::match_startmark() +{ + int index = static_cast(pstate)->index; + icase = static_cast(pstate)->icase; + switch(index) + { + case 0: + pstate = pstate->next.p; + break; + case -1: + case -2: + { + // forward lookahead assert: + const re_syntax_base* next_pstate = static_cast(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(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 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::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(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(pstate)->index == -2; + BidiIterator saved_position = position; + const re_syntax_base* next_pstate = static_cast(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; + } + } + case -5: + { + push_matched_paren(0, (*m_presult)[0]); + m_presult->set_first(position, 0, true); + pstate = pstate->next.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 +bool perl_matcher::match_alt() +{ + bool take_first, take_second; + const re_alt* jmp = static_cast(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 +bool perl_matcher::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(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((m_backup_state->state_id != saved_state_repeater_count) + || (static_cast*>(m_backup_state)->count.get_id() != rep->state_id) + || (next_count->get_id() != rep->state_id)) + { + // we're moving to a different repeat from the last + // one, so set up a counter object: + push_repeater_count(rep->state_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 +bool perl_matcher::match_dot_repeat_slow() +{ + unsigned count = 0; + const re_repeat* rep = static_cast(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 +bool perl_matcher::match_dot_repeat_fast() +{ + if(m_match_flags & match_not_dot_null) + return match_dot_repeat_slow(); + if((static_cast(pstate->next.p)->mask & match_any_mask) == 0) + return match_dot_repeat_slow(); + + const re_repeat* rep = static_cast(pstate); + bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); + unsigned count = static_cast((std::min)(static_cast(::boost::re_detail::distance(position, last)), static_cast(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 +bool perl_matcher::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(pstate); + BOOST_ASSERT(1 == static_cast(rep->next.p)->length); + const char_type what = *reinterpret_cast(static_cast(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::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 +bool perl_matcher::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(pstate); + const unsigned char* map = static_cast(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::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(traits_inst.translate(*position, icase))]) + { + ++position; + } + count = (unsigned)::boost::re_detail::distance(origin, position); + } + else + { + while((count < desired) && (position != last) && map[static_cast(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 +bool perl_matcher::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(pstate); + const re_set_long* set = static_cast*>(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::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 +} + +template +bool perl_matcher::match_recursion() +{ + BOOST_ASSERT(pstate->type == syntax_element_recurse); + // + // Backup call stack: + // + push_recursion_pop(); + // + // Set new call stack: + // + if(recursion_stack.capacity() == 0) + { + recursion_stack.reserve(50); + } + recursion_stack.push_back(recursion_info()); + recursion_stack.back().preturn_address = pstate->next.p; + recursion_stack.back().results = *m_presult; + if(static_cast(pstate)->state_id > 0) + { + push_repeater_count(static_cast(pstate)->state_id, &next_count); + } + pstate = static_cast(pstate)->alt.p; + recursion_stack.back().idx = static_cast(pstate)->index; + + return true; +} + +template +bool perl_matcher::match_endmark() +{ + int index = static_cast(pstate)->index; + icase = static_cast(pstate)->icase; + if(index > 0) + { + if((m_match_flags & match_nosubs) == 0) + { + m_presult->set_second(position, index); + } + if(!recursion_stack.empty()) + { + if(index == recursion_stack.back().idx) + { + pstate = recursion_stack.back().preturn_address; + *m_presult = recursion_stack.back().results; + push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, &recursion_stack.back().results); + recursion_stack.pop_back(); + } + } + } + else if((index < 0) && (index != -4)) + { + // matched forward lookahead: + pstate = 0; + return true; + } + pstate = pstate->next.p; + return true; +} + +template +bool perl_matcher::match_match() +{ + if(!recursion_stack.empty()) + { + BOOST_ASSERT(0 == recursion_stack.back().idx); + pstate = recursion_stack.back().preturn_address; + *m_presult = recursion_stack.back().results; + push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, &recursion_stack.back().results); + recursion_stack.pop_back(); + return true; + } + 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; +} + +/**************************************************************************** + +Unwind and associated proceedures follow, these perform what normal stack +unwinding does in the recursive implementation. + +****************************************************************************/ + +template +bool perl_matcher::unwind(bool have_match) +{ + static unwind_proc_type const s_unwind_table[18] = + { + &perl_matcher::unwind_end, + &perl_matcher::unwind_paren, + &perl_matcher::unwind_recursion_stopper, + &perl_matcher::unwind_assertion, + &perl_matcher::unwind_alt, + &perl_matcher::unwind_repeater_counter, + &perl_matcher::unwind_extra_block, + &perl_matcher::unwind_greedy_single_repeat, + &perl_matcher::unwind_slow_dot_repeat, + &perl_matcher::unwind_fast_dot_repeat, + &perl_matcher::unwind_char_repeat, + &perl_matcher::unwind_short_set_repeat, + &perl_matcher::unwind_long_set_repeat, + &perl_matcher::unwind_non_greedy_repeat, + &perl_matcher::unwind_recursion, + &perl_matcher::unwind_recursion_pop, + }; + + 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->state_id]; + cont = (this->*unwinder)(m_recursive_result); + }while(cont); + // + // return true if we have more states to try: + // + return pstate ? true : false; +} + +template +bool perl_matcher::unwind_end(bool) +{ + pstate = 0; // nothing left to search + return false; // end of stack nothing more to search +} + +template +bool perl_matcher::unwind_paren(bool have_match) +{ + saved_matched_paren* pmp = static_cast*>(m_backup_state); + // restore previous values if no match was found: + if(have_match == false) + { + m_presult->set_first(pmp->sub.first, pmp->index, pmp->index == 0); + m_presult->set_second(pmp->sub.second, pmp->index, pmp->sub.matched, pmp->index == 0); + } +#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 +bool perl_matcher::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 +bool perl_matcher::unwind_assertion(bool r) +{ + saved_assertion* pmp = static_cast*>(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 +bool perl_matcher::unwind_alt(bool r) +{ + saved_position* pmp = static_cast*>(m_backup_state); + if(!r) + { + pstate = pmp->pstate; + position = pmp->position; + } + boost::re_detail::inplace_destroy(pmp++); + m_backup_state = pmp; + return r; +} + +template +bool perl_matcher::unwind_repeater_counter(bool) +{ + saved_repeater* pmp = static_cast*>(m_backup_state); + boost::re_detail::inplace_destroy(pmp++); + m_backup_state = pmp; + return true; // keep looking +} + +template +bool perl_matcher::unwind_extra_block(bool) +{ + saved_extra_block* pmp = static_cast(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 +inline void perl_matcher::destroy_single_repeat() +{ + saved_single_repeat* p = static_cast*>(m_backup_state); + boost::re_detail::inplace_destroy(p++); + m_backup_state = p; +} + +template +bool perl_matcher::unwind_greedy_single_repeat(bool r) +{ + saved_single_repeat* pmp = static_cast*>(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 +bool perl_matcher::unwind_slow_dot_repeat(bool r) +{ + saved_single_repeat* pmp = static_cast*>(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 +bool perl_matcher::unwind_fast_dot_repeat(bool r) +{ + saved_single_repeat* pmp = static_cast*>(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 +bool perl_matcher::unwind_char_repeat(bool r) +{ + saved_single_repeat* pmp = static_cast*>(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(static_cast(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)); + } + // remember where we got to if this is a leading repeat: + if((rep->leading) && (count < rep->max)) + restart = position; + 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 +bool perl_matcher::unwind_short_set_repeat(bool r) +{ + saved_single_repeat* pmp = static_cast*>(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(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(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)); + } + // remember where we got to if this is a leading repeat: + if((rep->leading) && (count < rep->max)) + restart = position; + 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 +bool perl_matcher::unwind_long_set_repeat(bool r) +{ + typedef typename traits::char_class_type mask_type; + saved_single_repeat* pmp = static_cast*>(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* set = static_cast*>(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)); + } + // remember where we got to if this is a leading repeat: + if((rep->leading) && (count < rep->max)) + restart = position; + 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 +bool perl_matcher::unwind_non_greedy_repeat(bool r) +{ + saved_position* pmp = static_cast*>(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; +} + +template +bool perl_matcher::unwind_recursion(bool r) +{ + saved_recursion* pmp = static_cast*>(m_backup_state); + if(!r) + { + recursion_stack.push_back(recursion_info()); + recursion_stack.back().idx = pmp->recursion_id; + recursion_stack.back().preturn_address = pmp->preturn_address; + recursion_stack.back().results = pmp->results; + } + boost::re_detail::inplace_destroy(pmp++); + m_backup_state = pmp; + return true; +} + +template +bool perl_matcher::unwind_recursion_pop(bool r) +{ + saved_state* pmp = static_cast(m_backup_state); + if(!r) + { + recursion_stack.pop_back(); + } + boost::re_detail::inplace_destroy(pmp++); + m_backup_state = pmp; + return true; +} + +template +void perl_matcher::push_recursion_pop() +{ + saved_state* pmp = static_cast(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast(m_backup_state); + --pmp; + } + (void) new (pmp)saved_state(15); + m_backup_state = pmp; +} +/* +template +bool perl_matcher::unwind_parenthesis_pop(bool r) +{ + saved_state* pmp = static_cast(m_backup_state); + if(!r) + { + --parenthesis_stack_position; + } + boost::re_detail::inplace_destroy(pmp++); + m_backup_state = pmp; + return true; +} + +template +void perl_matcher::push_parenthesis_pop() +{ + saved_state* pmp = static_cast(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast(m_backup_state); + --pmp; + } + (void) new (pmp)saved_state(16); + m_backup_state = pmp; +} + +template +bool perl_matcher::unwind_parenthesis_push(bool r) +{ + saved_position* pmp = static_cast*>(m_backup_state); + if(!r) + { + parenthesis_stack[parenthesis_stack_position++] = pmp->position; + } + boost::re_detail::inplace_destroy(pmp++); + m_backup_state = pmp; + return true; +} + +template +inline void perl_matcher::push_parenthesis_push(BidiIterator p) +{ + saved_position* pmp = static_cast*>(m_backup_state); + --pmp; + if(pmp < m_stack_base) + { + extend_stack(); + pmp = static_cast*>(m_backup_state); + --pmp; + } + (void) new (pmp)saved_position(0, p, 17); + m_backup_state = pmp; +} +*/ +} // namespace re_detail +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + + diff --git a/external/boost/regex/v4/perl_matcher_recursive.hpp b/external/boost/regex/v4/perl_matcher_recursive.hpp new file mode 100644 index 0000000..07a1c20 --- /dev/null +++ b/external/boost/regex/v4/perl_matcher_recursive.hpp @@ -0,0 +1,991 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4800) +#endif + +namespace boost{ +namespace re_detail{ + +template +class backup_subex +{ + int index; + sub_match sub; +public: + template + backup_subex(const match_results& w, int i) + : index(i), sub(w[i], false) {} + template + void restore(match_results& w) + { + w.set_first(sub.first, index, index == 0); + w.set_second(sub.second, index, sub.matched, index == 0); + } + const sub_match& get() { return sub; } +}; + +template +bool perl_matcher::match_all_states() +{ + static matcher_proc_type const s_match_vtable[30] = + { + (&perl_matcher::match_startmark), + &perl_matcher::match_endmark, + &perl_matcher::match_literal, + &perl_matcher::match_start_line, + &perl_matcher::match_end_line, + &perl_matcher::match_wild, + &perl_matcher::match_match, + &perl_matcher::match_word_boundary, + &perl_matcher::match_within_word, + &perl_matcher::match_word_start, + &perl_matcher::match_word_end, + &perl_matcher::match_buffer_start, + &perl_matcher::match_buffer_end, + &perl_matcher::match_backref, + &perl_matcher::match_long_set, + &perl_matcher::match_set, + &perl_matcher::match_jump, + &perl_matcher::match_alt, + &perl_matcher::match_rep, + &perl_matcher::match_combining, + &perl_matcher::match_soft_buffer_end, + &perl_matcher::match_restart_continue, + // Although this next line *should* be evaluated at compile time, in practice + // some compilers (VC++) emit run-time initialisation which breaks thread + // safety, so use a dispatch function instead: + //(::boost::is_random_access_iterator::value ? &perl_matcher::match_dot_repeat_fast : &perl_matcher::match_dot_repeat_slow), + &perl_matcher::match_dot_repeat_dispatch, + &perl_matcher::match_char_repeat, + &perl_matcher::match_set_repeat, + &perl_matcher::match_long_set_repeat, + &perl_matcher::match_backstep, + &perl_matcher::match_assert_backref, + &perl_matcher::match_toggle_case, + &perl_matcher::match_recursion, + }; + + if(state_count > max_state_count) + raise_error(traits_inst, regex_constants::error_complexity); + 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 +bool perl_matcher::match_startmark() +{ + int index = static_cast(pstate)->index; + icase = static_cast(pstate)->icase; + 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(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(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 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::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(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(pstate)->index == -2; + BidiIterator saved_position = position; + const re_syntax_base* next_pstate = static_cast(pstate->next.p)->alt.p->next.p; + pstate = pstate->next.p->next.p; + bool res = match_all_states(); + position = saved_position; + if(negated) + res = !res; + if(res) + pstate = next_pstate; + else + pstate = alt->alt.p; + break; + } + } + case -5: + { + // Reset start of $0, since we have a \K escape + backup_subex sub(*m_presult, 0); + m_presult->set_first(position, 0, true); + pstate = pstate->next.p; + r = match_all_states(); + if(r == false) + sub.restore(*m_presult); + break; + } + default: + { + BOOST_ASSERT(index > 0); + if((m_match_flags & match_nosubs) == 0) + { + backup_subex 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 +bool perl_matcher::match_alt() +{ + bool take_first, take_second; + const re_alt* jmp = static_cast(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 +bool perl_matcher::match_rep() +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4127 4244) +#endif + const re_repeat* rep = static_cast(pstate); + // + // Always copy the repeat count, so that the state is restored + // when we exit this scope: + // + repeater_count r(rep->state_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 +bool perl_matcher::match_dot_repeat_slow() +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4127) +#endif + unsigned count = 0; + const re_repeat* rep = static_cast(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 +bool perl_matcher::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(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(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(::boost::re_detail::distance(position, last)), static_cast(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 +bool perl_matcher::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(pstate); + BOOST_ASSERT(1 == static_cast(rep->next.p)->length); + const char_type what = *reinterpret_cast(static_cast(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::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 +bool perl_matcher::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(pstate); + const unsigned char* map = static_cast(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::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(traits_inst.translate(*position, icase))]) + { + ++position; + } + count = (unsigned)::boost::re_detail::distance(origin, position); + } + else + { + while((count < desired) && (position != last) && map[static_cast(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(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(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 +bool perl_matcher::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(pstate); + const re_set_long* set = static_cast*>(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::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 +bool perl_matcher::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(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 +} + +template +bool perl_matcher::match_recursion() +{ + BOOST_ASSERT(pstate->type == syntax_element_recurse); + // + // Set new call stack: + // + if(recursion_stack.capacity() == 0) + { + recursion_stack.reserve(50); + } + recursion_stack.push_back(recursion_info()); + recursion_stack.back().preturn_address = pstate->next.p; + recursion_stack.back().results = *m_presult; + recursion_stack.back().repeater_stack = next_count; + pstate = static_cast(pstate)->alt.p; + recursion_stack.back().idx = static_cast(pstate)->index; + + repeater_count* saved = next_count; + repeater_count r(&next_count); // resets all repeat counts since we're recursing and starting fresh on those + next_count = &r; + bool result = match_all_states(); + next_count = saved; + + if(!result) + { + next_count = recursion_stack.back().repeater_stack; + *m_presult = recursion_stack.back().results; + recursion_stack.pop_back(); + return false; + } + return true; +} + +template +bool perl_matcher::match_endmark() +{ + int index = static_cast(pstate)->index; + icase = static_cast(pstate)->icase; + if(index > 0) + { + if((m_match_flags & match_nosubs) == 0) + { + m_presult->set_second(position, index); + } + if(!recursion_stack.empty()) + { + if(index == recursion_stack.back().idx) + { + recursion_info saved = recursion_stack.back(); + recursion_stack.pop_back(); + pstate = saved.preturn_address; + repeater_count* saved_count = next_count; + next_count = saved.repeater_stack; + *m_presult = saved.results; + if(!match_all_states()) + { + recursion_stack.push_back(saved); + next_count = saved_count; + return false; + } + } + } + } + else if((index < 0) && (index != -4)) + { + // matched forward lookahead: + pstate = 0; + return true; + } + pstate = pstate ? pstate->next.p : 0; + return true; +} + +template +bool perl_matcher::match_match() +{ + if(!recursion_stack.empty()) + { + BOOST_ASSERT(0 == recursion_stack.back().idx); + const re_syntax_base* saved_state = pstate = recursion_stack.back().preturn_address; + *m_presult = recursion_stack.back().results; + recursion_stack.pop_back(); + if(!match_all_states()) + { + recursion_stack.push_back(recursion_info()); + recursion_stack.back().preturn_address = saved_state; + recursion_stack.back().results = *m_presult; + return false; + } + return true; + } + 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; +} + + + +} // namespace re_detail +} // namespace boost +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/primary_transform.hpp b/external/boost/regex/v4/primary_transform.hpp new file mode 100644 index 0000000..989f500 --- /dev/null +++ b/external/boost/regex/v4/primary_transform.hpp @@ -0,0 +1,146 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ + namespace re_detail{ + + +enum{ + sort_C, + sort_fixed, + sort_delim, + sort_unknown +}; + +template +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 +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(sa.size())) && (pos <= static_cast(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::max)(), should be true for all types + // I can't imagine 127 character fields... + *delim = static_cast(++pos); + return sort_fixed; + } + // + // don't know what it is: + // + *delim = 0; + return sort_unknown; +} + + + } // namespace re_detail +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + + + + + + + diff --git a/external/boost/regex/v4/protected_call.hpp b/external/boost/regex/v4/protected_call.hpp new file mode 100644 index 0000000..ebf15ba --- /dev/null +++ b/external/boost/regex/v4/protected_call.hpp @@ -0,0 +1,81 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#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 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 +bool concrete_protected_call::call()const +{ + return (obj->*proc)(); +} + +} +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif diff --git a/external/boost/regex/v4/regbase.hpp b/external/boost/regex/v4/regbase.hpp new file mode 100644 index 0000000..2b737d5 --- /dev/null +++ b/external/boost/regex/v4/regbase.hpp @@ -0,0 +1,180 @@ +/* + * + * 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 + * DESCRIPTION: Declares class regbase. + */ + +#ifndef BOOST_REGEX_V4_REGBASE_HPP +#define BOOST_REGEX_V4_REGBASE_HPP + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#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 + save_subexpression_location = 1 << 23, // save subexpression locations + no_empty_expressions = 1 << 24, // no empty expressions allowed + 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, + save_subexpression_location = ::boost::regbase::save_subexpression_location, + no_empty_expressions = ::boost::regbase::no_empty_expressions, + + 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/regex.hpp b/external/boost/regex/v4/regex.hpp new file mode 100644 index 0000000..7cc260a --- /dev/null +++ b/external/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 + * 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 +#endif +#ifndef BOOST_REGEX_WORKAROUND_HPP +#include +#endif + +#ifndef BOOST_REGEX_FWD_HPP +#include +#endif +#ifndef BOOST_REGEX_TRAITS_HPP +#include +#endif +#ifndef BOOST_REGEX_RAW_BUFFER_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_MATCH_FLAGS +#include +#endif +#ifndef BOOST_REGEX_RAW_BUFFER_HPP +#include +#endif +#ifndef BOOST_RE_PAT_EXCEPT_HPP +#include +#endif + +#ifndef BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_STATES_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_REGBASE_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_BASIC_REGEX_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_SUB_MATCH_HPP +#include +#endif +#ifndef BOOST_REGEX_FORMAT_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_MATCH_RESULTS_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_PROTECTED_CALL_HPP +#include +#endif +#ifndef BOOST_REGEX_MATCHER_HPP +#include +#endif +// +// template instances: +// +#define BOOST_REGEX_CHAR_T char +#ifdef BOOST_REGEX_NARROW_INSTANTIATE +# define BOOST_REGEX_INSTANTIATE +#endif +#include +#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 +#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 +#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 > regex; +#ifndef BOOST_NO_WREGEX +typedef basic_regex > wregex; +#endif +#endif + +typedef match_results cmatch; +typedef match_results smatch; +#ifndef BOOST_NO_WREGEX +typedef match_results wcmatch; +typedef match_results wsmatch; +#endif + +} // namespace boost +#ifndef BOOST_REGEX_MATCH_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_REGEX_SEARCH_HPP +#include +#endif +#ifndef BOOST_REGEX_ITERATOR_HPP +#include +#endif +#ifndef BOOST_REGEX_TOKEN_ITERATOR_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_REGEX_GREP_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP +#include +#endif +#ifndef BOOST_REGEX_V4_REGEX_MERGE_HPP +#include +#endif +#ifndef BOOST_REGEX_SPLIT_HPP +#include +#endif + +#endif // __cplusplus + +#endif // include + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/boost/regex/v4/regex_format.hpp b/external/boost/regex/v4/regex_format.hpp new file mode 100644 index 0000000..e05862f --- /dev/null +++ b/external/boost/regex/v4/regex_format.hpp @@ -0,0 +1,1149 @@ +/* + * + * Copyright (c) 1998-2009 John Maddock + * Copyright 2008 Eric Niebler. + * + * Use, modification and distribution are subject to the + * 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 + * 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_NO_SFINAE +#include +#endif +#include + +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +// +// Forward declaration: +// + template >::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 +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 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_restore_state(output_copy), m_have_conditional(false) {} + OutputIterator format(ForwardIter p1, ForwardIter p2, match_flag_type f); + OutputIterator format(ForwardIter 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(); + bool handle_perl_verb(bool have_brace); + + inline typename Results::value_type const& get_named_sub(ForwardIter i, ForwardIter j, const mpl::false_&) + { + std::vector v(i, j); + return (i != j) ? this->m_results.named_subexpression(&v[0], &v[0] + v.size()) + : this->m_results.named_subexpression(static_cast(0), static_cast(0)); + } + inline typename Results::value_type const& get_named_sub(ForwardIter i, ForwardIter j, const mpl::true_&) + { + return this->m_results.named_subexpression(i, j); + } + inline typename Results::value_type const& get_named_sub(ForwardIter i, ForwardIter j) + { + typedef typename boost::is_convertible::type tag_type; + return get_named_sub(i, j, tag_type()); + } + inline int get_named_sub_index(ForwardIter i, ForwardIter j, const mpl::false_&) + { + std::vector v(i, j); + return (i != j) ? this->m_results.named_subexpression_index(&v[0], &v[0] + v.size()) + : this->m_results.named_subexpression_index(static_cast(0), static_cast(0)); + } + inline int get_named_sub_index(ForwardIter i, ForwardIter j, const mpl::true_&) + { + return this->m_results.named_subexpression_index(i, j); + } + inline int get_named_sub_index(ForwardIter i, ForwardIter j) + { + typedef typename boost::is_convertible::type tag_type; + return get_named_sub_index(i, j, tag_type()); + } +#ifdef BOOST_MSVC + // msvc-8.0 issues a spurious warning on the call to std::advance here: +#pragma warning(push) +#pragma warning(disable:4244) +#endif + inline int toi(ForwardIter& i, ForwardIter j, int base, const boost::mpl::false_&) + { + if(i != j) + { + std::vector v(i, j); + const char_type* start = &v[0]; + const char_type* pos = start; + int r = m_traits.toi(pos, &v[0] + v.size(), base); + std::advance(i, pos - start); + return r; + } + return -1; + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + inline int toi(ForwardIter& i, ForwardIter j, int base, const boost::mpl::true_&) + { + return m_traits.toi(i, j, base); + } + inline int toi(ForwardIter& i, ForwardIter j, int base) + { + typedef typename boost::is_convertible::type tag_type; + return toi(i, j, base, tag_type()); + } + + 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. + ForwardIter m_position; // format string, current position + ForwardIter 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 + output_state m_restore_state; // what state to restore to. + 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 +OutputIterator basic_regex_formatter::format(ForwardIter p1, ForwardIter p2, match_flag_type f) +{ + m_position = p1; + m_end = p2; + m_flags = f; + format_all(); + return m_out; +} + +template +void basic_regex_formatter::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(')')); + ++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 +void basic_regex_formatter::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: + // + bool have_brace = false; + ForwardIter save_position = m_position; + 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; + case '+': + if((++m_position != m_end) && (*m_position == '{')) + { + ForwardIter base = ++m_position; + while((m_position != m_end) && (*m_position != '}')) ++m_position; + if(m_position != m_end) + { + // Named sub-expression: + put(get_named_sub(base, m_position)); + ++m_position; + break; + } + else + { + m_position = --base; + } + } + put((this->m_results)[this->m_results.size() > 1 ? static_cast(this->m_results.size() - 1) : 1]); + break; + case '{': + have_brace = true; + ++m_position; + // fall through.... + default: + // see if we have a number: + { + std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end); + //len = (std::min)(static_cast(2), len); + int v = this->toi(m_position, m_position + len, 10); + if((v < 0) || (have_brace && ((m_position == m_end) || (*m_position != '}')))) + { + // Look for a Perl-5.10 verb: + if(!handle_perl_verb(have_brace)) + { + // leave the $ as is, and carry on: + m_position = --save_position; + put(*m_position); + ++m_position; + } + break; + } + // otherwise output sub v: + put(this->m_results[v]); + if(have_brace) + ++m_position; + } + } +} + +template +bool basic_regex_formatter::handle_perl_verb(bool have_brace) +{ + // + // We may have a capitalised string containing a Perl action: + // + static const char_type MATCH[] = { 'M', 'A', 'T', 'C', 'H' }; + static const char_type PREMATCH[] = { 'P', 'R', 'E', 'M', 'A', 'T', 'C', 'H' }; + static const char_type POSTMATCH[] = { 'P', 'O', 'S', 'T', 'M', 'A', 'T', 'C', 'H' }; + static const char_type LAST_PAREN_MATCH[] = { 'L', 'A', 'S', 'T', '_', 'P', 'A', 'R', 'E', 'N', '_', 'M', 'A', 'T', 'C', 'H' }; + static const char_type LAST_SUBMATCH_RESULT[] = { 'L', 'A', 'S', 'T', '_', 'S', 'U', 'B', 'M', 'A', 'T', 'C', 'H', '_', 'R', 'E', 'S', 'U', 'L', 'T' }; + static const char_type LAST_SUBMATCH_RESULT_ALT[] = { '^', 'N' }; + + if(m_position == m_end) + return false; + if(have_brace && (*m_position == '^')) + ++m_position; + + std::ptrdiff_t max_len = m_end - m_position; + + if((max_len >= 5) && std::equal(m_position, m_position + 5, MATCH)) + { + m_position += 5; + if(have_brace) + { + if((m_position != m_end) && (*m_position == '}')) + ++m_position; + else + { + m_position -= 5; + return false; + } + } + put(this->m_results[0]); + return true; + } + if((max_len >= 8) && std::equal(m_position, m_position + 8, PREMATCH)) + { + m_position += 8; + if(have_brace) + { + if((m_position != m_end) && (*m_position == '}')) + ++m_position; + else + { + m_position -= 8; + return false; + } + } + put(this->m_results.prefix()); + return true; + } + if((max_len >= 9) && std::equal(m_position, m_position + 9, POSTMATCH)) + { + m_position += 9; + if(have_brace) + { + if((m_position != m_end) && (*m_position == '}')) + ++m_position; + else + { + m_position -= 9; + return false; + } + } + put(this->m_results.suffix()); + return true; + } + if((max_len >= 16) && std::equal(m_position, m_position + 16, LAST_PAREN_MATCH)) + { + m_position += 16; + if(have_brace) + { + if((m_position != m_end) && (*m_position == '}')) + ++m_position; + else + { + m_position -= 16; + return false; + } + } + put((this->m_results)[this->m_results.size() > 1 ? static_cast(this->m_results.size() - 1) : 1]); + return true; + } + if((max_len >= 20) && std::equal(m_position, m_position + 20, LAST_SUBMATCH_RESULT)) + { + m_position += 20; + if(have_brace) + { + if((m_position != m_end) && (*m_position == '}')) + ++m_position; + else + { + m_position -= 20; + return false; + } + } + put(this->m_results.get_last_closed_paren()); + return true; + } + if((max_len >= 2) && std::equal(m_position, m_position + 2, LAST_SUBMATCH_RESULT_ALT)) + { + m_position += 2; + if(have_brace) + { + if((m_position != m_end) && (*m_position == '}')) + ++m_position; + else + { + m_position -= 2; + return false; + } + } + put(this->m_results.get_last_closed_paren()); + return true; + } + return false; +} + +template +void basic_regex_formatter::format_escape() +{ + // skip the escape and check for trailing escape: + if(++m_position == m_end) + { + put(static_cast('\\')); + return; + } + // now switch on the escape type: + switch(*m_position) + { + case 'a': + put(static_cast('\a')); + ++m_position; + break; + case 'f': + put(static_cast('\f')); + ++m_position; + break; + case 'n': + put(static_cast('\n')); + ++m_position; + break; + case 'r': + put(static_cast('\r')); + ++m_position; + break; + case 't': + put(static_cast('\t')); + ++m_position; + break; + case 'v': + put(static_cast('\v')); + ++m_position; + break; + case 'x': + if(++m_position == m_end) + { + put(static_cast('x')); + return; + } + // maybe have \x{ddd} + if(*m_position == static_cast('{')) + { + ++m_position; + int val = this->toi(m_position, m_end, 16); + if(val < 0) + { + // invalid value treat everything as literals: + put(static_cast('x')); + put(static_cast('{')); + return; + } + if((m_position == m_end) || (*m_position != static_cast('}'))) + { + --m_position; + while(*m_position != static_cast('\\')) + --m_position; + ++m_position; + put(*m_position++); + return; + } + ++m_position; + put(static_cast(val)); + return; + } + else + { + std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end); + len = (std::min)(static_cast(2), len); + int val = this->toi(m_position, m_position + len, 16); + if(val < 0) + { + --m_position; + put(*m_position++); + return; + } + put(static_cast(val)); + } + break; + case 'c': + if(++m_position == m_end) + { + --m_position; + put(*m_position++); + return; + } + put(static_cast(*m_position++ % 32)); + break; + case 'e': + put(static_cast(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_restore_state = m_state; + m_state = output_next_lower; + breakout = true; + break; + case 'L': + ++m_position; + m_state = output_lower; + breakout = true; + break; + case 'u': + ++m_position; + m_restore_state = m_state; + 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: + std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end); + len = (std::min)(static_cast(1), len); + int v = this->toi(m_position, m_position+len, 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; + len = ::boost::re_detail::distance(m_position, m_end); + len = (std::min)(static_cast(4), len); + v = this->toi(m_position, m_position + len, 8); + BOOST_ASSERT(v >= 0); + put(static_cast(v)); + break; + } + // Otherwise output the character "as is": + put(*m_position++); + break; + } +} + +template +void basic_regex_formatter::format_conditional() +{ + if(m_position == m_end) + { + // oops trailing '?': + put(static_cast('?')); + return; + } + int v; + if(*m_position == '{') + { + ForwardIter base = m_position; + ++m_position; + v = this->toi(m_position, m_end, 10); + if(v < 0) + { + // Try a named subexpression: + while((m_position != m_end) && (*m_position != '}')) + ++m_position; + v = this->get_named_sub_index(base + 1, m_position); + } + if((v < 0) || (*m_position != '}')) + { + m_position = base; + // oops trailing '?': + put(static_cast('?')); + return; + } + // Skip trailing '}': + ++m_position; + } + else + { + std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end); + len = (std::min)(static_cast(2), len); + v = this->toi(m_position, m_position + len, 10); + } + if(v < 0) + { + // oops not a number: + put(static_cast('?')); + 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(':'))) + { + // 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(':'))) + { + // skip the ':': + ++m_position; + // format the rest of this scope: + format_until_scope_end(); + } + } +} + +template +void basic_regex_formatter::format_until_scope_end() +{ + do + { + format_all(); + if((m_position == m_end) || (*m_position == static_cast(')'))) + return; + put(*m_position++); + }while(m_position != m_end); +} + +template +void basic_regex_formatter::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 = m_restore_state; + break; + case output_next_upper: + c = m_traits.toupper(c); + this->m_state = m_restore_state; + 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 +void basic_regex_formatter::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 string_out_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator +#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 +OutputIterator regex_format_imp(OutputIterator out, + const match_results& m, + ForwardIter p1, ForwardIter 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, + traits, ForwardIter> f(out, m, t); + return f.format(p1, p2, flags); +} + +#ifndef BOOST_NO_SFINAE + +BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator) + +struct any_type +{ + template + any_type(const T&); + template + any_type(const T&, const U&); + template + any_type(const T&, const U&, const V&); +}; +typedef char no_type; +typedef char (&unary_type)[2]; +typedef char (&binary_type)[3]; +typedef char (&ternary_type)[4]; + +no_type check_is_formatter(unary_type, binary_type, ternary_type); +template +unary_type check_is_formatter(T const &, binary_type, ternary_type); +template +binary_type check_is_formatter(unary_type, T const &, ternary_type); +template +binary_type check_is_formatter(T const &, U const &, ternary_type); +template +ternary_type check_is_formatter(unary_type, binary_type, T const &); +template +ternary_type check_is_formatter(T const &, binary_type, U const &); +template +ternary_type check_is_formatter(unary_type, T const &, U const &); +template +ternary_type check_is_formatter(T const &, U const &, V const &); + +struct unary_binary_ternary +{ + typedef unary_type (*unary_fun)(any_type); + typedef binary_type (*binary_fun)(any_type, any_type); + typedef ternary_type (*ternary_fun)(any_type, any_type, any_type); + operator unary_fun(); + operator binary_fun(); + operator ternary_fun(); +}; + +template::value> +struct formatter_wrapper + : Formatter + , unary_binary_ternary +{ + formatter_wrapper(){} +}; + +template +struct formatter_wrapper + : unary_binary_ternary +{ + operator Formatter *(); +}; + +template +struct formatter_wrapper + : unary_binary_ternary +{ + operator Formatter *(); +}; + +template +struct format_traits_imp +{ +private: + // + // F must be a pointer, a function, or a class with a function call operator: + // + BOOST_STATIC_ASSERT((::boost::is_pointer::value || ::boost::is_function::value || ::boost::is_class::value)); + static formatter_wrapper::type> f; + static M m; + static O out; + static boost::regex_constants::match_flag_type flags; +public: + BOOST_STATIC_CONSTANT(int, value = sizeof(check_is_formatter(f(m), f(m, out), f(m, out, flags)))); +}; + +template +struct format_traits +{ +public: + // + // Type is mpl::int_ where N is one of: + // + // 0 : F is a pointer to a presumably null-terminated string. + // 1 : F is a character-container such as a std::string. + // 2 : F is a Unary Functor. + // 3 : F is a Binary Functor. + // 4 : F is a Ternary Functor. + // + typedef typename boost::mpl::if_< + boost::mpl::and_, boost::mpl::not_::type> > >, + boost::mpl::int_<0>, + typename boost::mpl::if_< + has_const_iterator, + boost::mpl::int_<1>, + boost::mpl::int_::value> + >::type + >::type type; + // + // This static assertion will fail if the functor passed does not accept + // the same type of arguments passed. + // + BOOST_STATIC_ASSERT( boost::is_class::value && !has_const_iterator::value ? (type::value > 1) : true); +}; + +#else // BOOST_NO_SFINAE + +template +struct format_traits +{ +public: + // + // Type is mpl::int_ where N is one of: + // + // 0 : F is a pointer to a presumably null-terminated string. + // 1 : F is a character-container such as a std::string. + // + // Other options such as F being a Functor are not supported without + // SFINAE support. + // + typedef typename boost::mpl::if_< + boost::is_pointer, + boost::mpl::int_<0>, + boost::mpl::int_<1> + >::type type; +}; + +#endif // BOOST_NO_SFINAE + +template +struct format_functor3 +{ + format_functor3(Base b) : func(b) {} + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f) + { + return boost::unwrap_ref(func)(m, i, f); + } + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&) + { + return (*this)(m, i, f); + } +private: + Base func; + format_functor3(const format_functor3&); + format_functor3& operator=(const format_functor3&); +}; + +template +struct format_functor2 +{ + format_functor2(Base b) : func(b) {} + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type /*f*/) + { + return boost::unwrap_ref(func)(m, i); + } + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&) + { + return (*this)(m, i, f); + } +private: + Base func; + format_functor2(const format_functor2&); + format_functor2& operator=(const format_functor2&); +}; + +template +struct format_functor1 +{ + format_functor1(Base b) : func(b) {} + + template + OutputIter do_format_string(const S& s, OutputIter i) + { + return re_detail::copy(s.begin(), s.end(), i); + } + template + inline OutputIter do_format_string(const S* s, OutputIter i) + { + while(s && *s) + { + *i = *s; + ++i; + ++s; + } + return i; + } + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type /*f*/) + { + return do_format_string(boost::unwrap_ref(func)(m), i); + } + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&) + { + return (*this)(m, i, f); + } +private: + Base func; + format_functor1(const format_functor1&); + format_functor1& operator=(const format_functor1&); +}; + +template +struct format_functor_c_string +{ + format_functor_c_string(const charT* ps) : func(ps) {} + + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits()) + { + typedef typename Match::char_type char_type; + const charT* end = func; + while(*end) ++end; + return regex_format_imp(i, m, func, end, f, t); + } +private: + const charT* func; + format_functor_c_string(const format_functor_c_string&); + format_functor_c_string& operator=(const format_functor_c_string&); +}; + +template +struct format_functor_container +{ + format_functor_container(const Container& c) : func(c) {} + + template + OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits()) + { + typedef typename Match::char_type char_type; + return re_detail::regex_format_imp(i, m, func.begin(), func.end(), f, t); + } +private: + const Container& func; + format_functor_container(const format_functor_container&); + format_functor_container& operator=(const format_functor_container&); +}; + +template > +struct compute_functor_type +{ + typedef typename format_traits::type tag; + typedef typename boost::remove_cv< typename boost::remove_pointer::type>::type maybe_char_type; + + typedef typename mpl::if_< + ::boost::is_same >, format_functor_c_string, + typename mpl::if_< + ::boost::is_same >, format_functor_container, + typename mpl::if_< + ::boost::is_same >, format_functor1, + typename mpl::if_< + ::boost::is_same >, format_functor2, + format_functor3 + >::type + >::type + >::type + >::type type; +}; + +} // namespace re_detail + +template +inline OutputIterator regex_format(OutputIterator out, + const match_results& m, + Functor fmt, + match_flag_type flags = format_all + ) +{ + return m.format(out, fmt, flags); +} + +template +inline std::basic_string::char_type> regex_format(const match_results& m, + Functor fmt, + match_flag_type flags = format_all) +{ + return m.format(fmt, flags); +} + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_FORMAT_HPP + + + + + + diff --git a/external/boost/regex/v4/regex_fwd.hpp b/external/boost/regex/v4/regex_fwd.hpp new file mode 100644 index 0000000..3076b06 --- /dev/null +++ b/external/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 + * 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 +#endif + +// +// define BOOST_REGEX_NO_FWD if this +// header doesn't work! +// +#ifdef BOOST_REGEX_NO_FWD +# ifndef BOOST_RE_REGEX_HPP +# include +# endif +#else + +namespace boost{ + +template +class cpp_regex_traits; +template +struct c_regex_traits; +template +class w32_regex_traits; + +#ifdef BOOST_REGEX_USE_WIN32_LOCALE +template > +struct regex_traits; +#elif defined(BOOST_REGEX_USE_CPP_LOCALE) +template > +struct regex_traits; +#else +template > +struct regex_traits; +#endif + +template > +class basic_regex; + +typedef basic_regex > regex; +#ifndef BOOST_NO_WREGEX +typedef basic_regex > wregex; +#endif + +} // namespace boost + +#endif // BOOST_REGEX_NO_FWD + +#endif + + + + diff --git a/external/boost/regex/v4/regex_grep.hpp b/external/boost/regex/v4/regex_grep.hpp new file mode 100644 index 0000000..3a3d906 --- /dev/null +++ b/external/boost/regex/v4/regex_grep.hpp @@ -0,0 +1,155 @@ +/* + * + * 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 + * DESCRIPTION: Provides regex_grep implementation. + */ + +#ifndef BOOST_REGEX_V4_REGEX_GREP_HPP +#define BOOST_REGEX_V4_REGEX_GREP_HPP + + +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +// +// regex_grep: +// find all non-overlapping matches within the sequence first last: +// +template +inline unsigned int regex_grep(Predicate foo, + BidiIterator first, + BidiIterator last, + const basic_regex& e, + match_flag_type flags = match_default) +{ + if(e.flags() & regex_constants::failbit) + return false; + + typedef typename match_results::allocator_type match_allocator_type; + + match_results m; + re_detail::perl_matcher 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 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 +inline unsigned int regex_grep(Predicate foo, const charT* str, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_grep(foo, str, str + traits::length(str), e, flags); +} + +template +inline unsigned int regex_grep(Predicate foo, const std::basic_string& s, + const basic_regex& 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&), 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::const_iterator>&), + const std::basic_string& s, + const wregex& e, + match_flag_type flags = match_default) +{ + return regex_grep(foo, s.begin(), s.end(), e, flags); +} +#endif +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_V4_REGEX_GREP_HPP + diff --git a/external/boost/regex/v4/regex_iterator.hpp b/external/boost/regex/v4/regex_iterator.hpp new file mode 100644 index 0000000..c2f2c49 --- /dev/null +++ b/external/boost/regex/v4/regex_iterator.hpp @@ -0,0 +1,201 @@ +/* + * + * 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 + * DESCRIPTION: Provides regex_iterator implementation. + */ + +#ifndef BOOST_REGEX_V4_REGEX_ITERATOR_HPP +#define BOOST_REGEX_V4_REGEX_ITERATOR_HPP + +#include + +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +class regex_iterator_implementation +{ + typedef basic_regex regex_type; + + match_results 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& 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 ::value_type, + class traits = regex_traits > +class regex_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator< + std::forward_iterator_tag, + match_results, + typename re_detail::regex_iterator_traits::difference_type, + const match_results*, + const match_results& > +#endif +{ +private: + typedef regex_iterator_implementation impl; + typedef shared_ptr pimpl; +public: + typedef basic_regex regex_type; + typedef match_results value_type; + typedef typename re_detail::regex_iterator_traits::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 cregex_iterator; +typedef regex_iterator sregex_iterator; +#ifndef BOOST_NO_WREGEX +typedef regex_iterator wcregex_iterator; +typedef regex_iterator wsregex_iterator; +#endif + +// make_regex_iterator: +template +inline regex_iterator make_regex_iterator(const charT* p, const basic_regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_iterator(p, p+traits::length(p), e, m); +} +template +inline regex_iterator::const_iterator, charT, traits> make_regex_iterator(const std::basic_string& p, const basic_regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_iterator::const_iterator, charT, traits>(p.begin(), p.end(), e, m); +} + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_V4_REGEX_ITERATOR_HPP + diff --git a/external/boost/regex/v4/regex_match.hpp b/external/boost/regex/v4/regex_match.hpp new file mode 100644 index 0000000..e947a15 --- /dev/null +++ b/external/boost/regex/v4/regex_match.hpp @@ -0,0 +1,382 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +// +// proc regex_match +// returns true if the specified regular expression matches +// the whole of the input. Fills in what matched in m. +// +template +bool regex_match(BidiIterator first, BidiIterator last, + match_results& m, + const basic_regex& e, + match_flag_type flags = match_default) +{ + re_detail::perl_matcher matcher(first, last, m, e, flags, first); + return matcher.match(); +} +template +bool regex_match(iterator first, iterator last, + const basic_regex& e, + match_flag_type flags = match_default) +{ + match_results 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 +inline bool regex_match(const charT* str, + match_results& m, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_match(str, str + traits::length(str), m, e, flags); +} + +template +inline bool regex_match(const std::basic_string& s, + match_results::const_iterator, Allocator>& m, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_match(s.begin(), s.end(), m, e, flags); +} +template +inline bool regex_match(const charT* str, + const basic_regex& e, + match_flag_type flags = match_default) +{ + match_results m; + return regex_match(str, str + traits::length(str), m, e, flags | regex_constants::match_any); +} + +template +inline bool regex_match(const std::basic_string& s, + const basic_regex& e, + match_flag_type flags = match_default) +{ + typedef typename std::basic_string::const_iterator iterator; + match_results 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 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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 >& 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 >& e, + match_flag_type flags = match_default) +{ + match_results 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& s, + match_results::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& s, + const wregex& e, + match_flag_type flags = match_default) +{ + match_results::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& s, + match_results::const_iterator>& m, + const basic_regex >& 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& s, + const basic_regex >& e, + match_flag_type flags = match_default) +{ + match_results::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& s, + match_results::const_iterator>& m, + const basic_regex >& 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& s, + const basic_regex >& e, + match_flag_type flags = match_default) +{ + match_results::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& s, + match_results::const_iterator>& m, + const basic_regex >& 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& s, + const basic_regex >& e, + match_flag_type flags = match_default) +{ + match_results::const_iterator> m; + return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); +} +#endif +#endif + +#endif + + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_MATCH_HPP + + + + + + + + + + + + + + + + + + diff --git a/external/boost/regex/v4/regex_merge.hpp b/external/boost/regex/v4/regex_merge.hpp new file mode 100644 index 0000000..404ca77 --- /dev/null +++ b/external/boost/regex/v4/regex_merge.hpp @@ -0,0 +1,93 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +inline OutputIterator regex_merge(OutputIterator out, + Iterator first, + Iterator last, + const basic_regex& e, + const charT* fmt, + match_flag_type flags = match_default) +{ + return regex_replace(out, first, last, e, fmt, flags); +} + +template +inline OutputIterator regex_merge(OutputIterator out, + Iterator first, + Iterator last, + const basic_regex& e, + const std::basic_string& fmt, + match_flag_type flags = match_default) +{ + return regex_merge(out, first, last, e, fmt.c_str(), flags); +} + +template +inline std::basic_string regex_merge(const std::basic_string& s, + const basic_regex& e, + const charT* fmt, + match_flag_type flags = match_default) +{ + return regex_replace(s, e, fmt, flags); +} + +template +inline std::basic_string regex_merge(const std::basic_string& s, + const basic_regex& e, + const std::basic_string& fmt, + match_flag_type flags = match_default) +{ + return regex_replace(s, e, fmt, flags); +} + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_V4_REGEX_MERGE_HPP + + diff --git a/external/boost/regex/v4/regex_raw_buffer.hpp b/external/boost/regex/v4/regex_raw_buffer.hpp new file mode 100644 index 0000000..52d45a2 --- /dev/null +++ b/external/boost/regex/v4/regex_raw_buffer.hpp @@ -0,0 +1,210 @@ +/* + * + * 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 + * 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 +#endif + +#include +#include + +namespace boost{ + namespace re_detail{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +struct empty_padding{}; + +union padding +{ + void* p; + unsigned int i; +}; + +template +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::padding_size, + padding_mask = padding3::padding_mask +}; + +// +// class raw_storage +// basically this is a simplified vector +// 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(ptr) - static_cast(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(::operator new(n)); + BOOST_REGEX_NOEH_ASSERT(start) + last = start + n; +} + + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace re_detail +} // namespace boost + +#endif + + + + + + diff --git a/external/boost/regex/v4/regex_replace.hpp b/external/boost/regex/v4/regex_replace.hpp new file mode 100644 index 0000000..ac8e3c8 --- /dev/null +++ b/external/boost/regex/v4/regex_replace.hpp @@ -0,0 +1,99 @@ +/* + * + * Copyright (c) 1998-2009 + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +OutputIterator regex_replace(OutputIterator out, + BidirectionalIterator first, + BidirectionalIterator last, + const basic_regex& e, + Formatter fmt, + match_flag_type flags = match_default) +{ + regex_iterator i(first, last, e, flags); + regex_iterator 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 +std::basic_string regex_replace(const std::basic_string& s, + const basic_regex& e, + Formatter fmt, + match_flag_type flags = match_default) +{ + std::basic_string result; + re_detail::string_out_iterator > i(result); + regex_replace(i, s.begin(), s.end(), e, fmt, flags); + return result; +} + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_V4_REGEX_REPLACE_HPP + + diff --git a/external/boost/regex/v4/regex_search.hpp b/external/boost/regex/v4/regex_search.hpp new file mode 100644 index 0000000..cf5579d --- /dev/null +++ b/external/boost/regex/v4/regex_search.hpp @@ -0,0 +1,217 @@ +/* + * + * 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 + * DESCRIPTION: Provides regex_search implementation. + */ + +#ifndef BOOST_REGEX_V4_REGEX_SEARCH_HPP +#define BOOST_REGEX_V4_REGEX_SEARCH_HPP + + +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +bool regex_search(BidiIterator first, BidiIterator last, + match_results& m, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_search(first, last, m, e, flags, first); +} + +template +bool regex_search(BidiIterator first, BidiIterator last, + match_results& m, + const basic_regex& e, + match_flag_type flags, + BidiIterator base) +{ + if(e.flags() & regex_constants::failbit) + return false; + + re_detail::perl_matcher 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 +inline bool regex_search(const charT* str, + match_results& m, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_search(str, str + traits::length(str), m, e, flags); +} + +template +inline bool regex_search(const std::basic_string& s, + match_results::const_iterator, Allocator>& m, + const basic_regex& 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& 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 +bool regex_search(BidiIterator first, BidiIterator last, + const basic_regex& e, + match_flag_type flags = match_default) +{ + if(e.flags() & regex_constants::failbit) + return false; + + match_results m; + typedef typename match_results::allocator_type match_alloc_type; + re_detail::perl_matcher matcher(first, last, m, e, flags | regex_constants::match_any, first); + return matcher.find(); +} + +#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +template +inline bool regex_search(const charT* str, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_search(str, str + traits::length(str), e, flags); +} + +template +inline bool regex_search(const std::basic_string& s, + const basic_regex& 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& 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_V4_REGEX_SEARCH_HPP + + diff --git a/external/boost/regex/v4/regex_split.hpp b/external/boost/regex/v4/regex_split.hpp new file mode 100644 index 0000000..a7ae350 --- /dev/null +++ b/external/boost/regex/v4/regex_split.hpp @@ -0,0 +1,172 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4800) +#endif + +namespace re_detail{ + +template +const basic_regex& get_default_expression(charT) +{ + static const charT expression_text[4] = { '\\', 's', '+', '\00', }; + static const basic_regex e(expression_text); + return e; +} + +template +class split_pred +{ + typedef std::basic_string 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& what); +}; + +template +bool split_pred::operator() + (const match_results& 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& 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 +std::size_t regex_split(OutputIterator out, + std::basic_string& s, + const basic_regex& e, + match_flag_type flags, + std::size_t max_split) +{ + typedef typename std::basic_string::const_iterator ci_t; + typedef typename match_results::allocator_type match_allocator; + ci_t last = s.begin(); + std::size_t init_size = max_split; + re_detail::split_pred 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((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 +inline std::size_t regex_split(OutputIterator out, + std::basic_string& s, + const basic_regex& e, + match_flag_type flags = match_default) +{ + return regex_split(out, s, e, flags, UINT_MAX); +} + +template +inline std::size_t regex_split(OutputIterator out, + std::basic_string& s) +{ + return regex_split(out, s, re_detail::get_default_expression(charT(0)), match_default, UINT_MAX); +} + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif + + diff --git a/external/boost/regex/v4/regex_token_iterator.hpp b/external/boost/regex/v4/regex_token_iterator.hpp new file mode 100644 index 0000000..4e8bc36 --- /dev/null +++ b/external/boost/regex/v4/regex_token_iterator.hpp @@ -0,0 +1,342 @@ +/* + * + * 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 + * DESCRIPTION: Provides regex_token_iterator implementation. + */ + +#ifndef BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP +#define BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP + +#include +#include +#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 +#include +#endif + +namespace boost{ + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) +# pragma warning(push) +# pragma warning(disable:4700) +#endif + +template +class regex_token_iterator_implementation +{ + typedef basic_regex regex_type; + typedef sub_match value_type; + + match_results 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 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& 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 + 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::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 + 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 ::value_type, + class traits = regex_traits > +class regex_token_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator< + std::forward_iterator_tag, + sub_match, + typename re_detail::regex_iterator_traits::difference_type, + const sub_match*, + const sub_match& > +#endif +{ +private: + typedef regex_token_iterator_implementation impl; + typedef shared_ptr pimpl; +public: + typedef basic_regex regex_type; + typedef sub_match value_type; + typedef typename re_detail::regex_iterator_traits::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& 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 + 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 + 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 cregex_token_iterator; +typedef regex_token_iterator sregex_token_iterator; +#ifndef BOOST_NO_WREGEX +typedef regex_token_iterator wcregex_token_iterator; +typedef regex_token_iterator wsregex_token_iterator; +#endif + +template +inline regex_token_iterator make_regex_token_iterator(const charT* p, const basic_regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_token_iterator(p, p+traits::length(p), e, submatch, m); +} +template +inline regex_token_iterator::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string& p, const basic_regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_token_iterator::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m); +} +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +template +inline regex_token_iterator make_regex_token_iterator(const charT* p, const basic_regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_token_iterator(p, p+traits::length(p), e, submatch, m); +} +template +inline regex_token_iterator::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string& p, const basic_regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_token_iterator::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m); +} +#endif +template +inline regex_token_iterator make_regex_token_iterator(const charT* p, const basic_regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_token_iterator(p, p+traits::length(p), e, submatch, m); +} +template +inline regex_token_iterator::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string& p, const basic_regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return regex_token_iterator::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m); +} + +#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) +# pragma warning(pop) +#endif +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +} // namespace boost + +#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP + + + + diff --git a/external/boost/regex/v4/regex_traits.hpp b/external/boost/regex/v4/regex_traits.hpp new file mode 100644 index 0000000..f5f0402 --- /dev/null +++ b/external/boost/regex/v4/regex_traits.hpp @@ -0,0 +1,189 @@ +/* + * + * 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 + * DESCRIPTION: Declares regular expression traits classes. + */ + +#ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED +#define BOOST_REGEX_TRAITS_HPP_INCLUDED + +#ifndef BOOST_REGEX_CONFIG_HPP +#include +#endif +#ifndef BOOST_REGEX_WORKAROUND_HPP +#include +#endif +#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP +#include +#endif +#ifndef BOOST_REGEX_ERROR_TYPE_HPP +#include +#endif +#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED +#include +#endif +#ifndef BOOST_NO_STD_LOCALE +# ifndef BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED +# include +# endif +#endif +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) +# ifndef BOOST_C_REGEX_TRAITS_HPP_INCLUDED +# include +# endif +#endif +#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) +# ifndef BOOST_W32_REGEX_TRAITS_HPP_INCLUDED +# include +# endif +#endif +#ifndef BOOST_REGEX_FWD_HPP_INCLUDED +#include +#endif + +#include "boost/mpl/has_xxx.hpp" +#include + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ + +template +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 +struct has_boost_extensions_tag +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; +#endif + +template +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(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(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 +struct compute_wrapper_base +{ + typedef BaseT type; +}; +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__HP_aCC, < 60000) +template +struct compute_wrapper_base +{ + typedef default_wrapper type; +}; +#else +template <> +struct compute_wrapper_base, false> +{ + typedef default_wrapper > type; +}; +#ifndef BOOST_NO_WREGEX +template <> +struct compute_wrapper_base, false> +{ + typedef default_wrapper > type; +}; +#endif +#endif + +} // namespace re_detail + +template +struct regex_traits_wrapper + : public ::boost::re_detail::compute_wrapper_base< + BaseT, + ::boost::re_detail::has_boost_extensions_tag::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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif // include + diff --git a/external/boost/regex/v4/regex_traits_defaults.hpp b/external/boost/regex/v4/regex_traits_defaults.hpp new file mode 100644 index 0000000..ca13f19 --- /dev/null +++ b/external/boost/regex/v4/regex_traits_defaults.hpp @@ -0,0 +1,371 @@ +/* + * + * 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 + * 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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP +#include +#endif +#ifndef BOOST_REGEX_ERROR_TYPE_HPP +#include +#endif + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::strlen; +} +#endif + +namespace boost{ namespace re_detail{ + + +// +// helpers to suppress warnings: +// +template +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 +inline bool is_combining(charT c) +{ + return (c <= static_cast(0)) ? false : ((c >= static_cast((std::numeric_limits::max)())) ? false : is_combining_implementation(static_cast(c))); +} +template <> +inline bool is_combining(char) +{ + return false; +} +template <> +inline bool is_combining(signed char) +{ + return false; +} +template <> +inline bool is_combining(unsigned char) +{ + return false; +} +#if !defined(__hpux) && !defined(__WINSCW__) // can't use WCHAR_MAX/MIN in pp-directives +#ifdef _MSC_VER +template<> +inline bool is_combining(wchar_t c) +{ + return is_combining_implementation(static_cast(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 c) +{ + return is_combining_implementation(static_cast(c)); +} +#else +template<> +inline bool is_combining(wchar_t c) +{ + return (c >= (std::numeric_limits::max)()) ? false : is_combining_implementation(static_cast(c)); +} +#endif +#endif +#endif + +// +// is a charT c a line separator? +// +template +inline bool is_separator(charT c) +{ + return BOOST_REGEX_MAKE_BOOL( + (c == static_cast('\n')) + || (c == static_cast('\r')) + || (c == static_cast('\f')) + || (static_cast(c) == 0x2028u) + || (static_cast(c) == 0x2029u) + || (static_cast(c) == 0x85u)); +} +template <> +inline bool is_separator(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 state_id of a character clasification, the individual +// traits classes then transform that state_id into a bitmask: +// +template +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 +int get_default_class_id(const charT* p1, const charT* p2) +{ + static const charT data[73] = { + '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', + 'v', + 'w', 'o', 'r', 'd', + 'x', 'd', 'i', 'g', 'i', 't', + }; + + static const character_pointer_range ranges[21] = + { + {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+29, data+30,}, // h + {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,}, // v + {data+63, data+64,}, // w + {data+63, data+67,}, // word + {data+67, data+73,}, // xdigit + }; + static const character_pointer_range* ranges_begin = ranges; + static const character_pointer_range* ranges_end = ranges + (sizeof(ranges)/sizeof(ranges[0])); + + character_pointer_range t = { p1, p2, }; + const character_pointer_range* p = std::lower_bound(ranges_begin, ranges_end, t); + if((p != ranges_end) && (t == *p)) + return static_cast(p - ranges); + return -1; +} + +// +// helper functions: +// +template +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(const char* p) +{ + return (std::strlen)(p); +} +#ifndef BOOST_NO_WREGEX +template<> +inline std::ptrdiff_t global_length(const wchar_t* p) +{ + return (std::wcslen)(p); +} +#endif +template +inline charT BOOST_REGEX_CALL global_lower(charT c) +{ + return c; +} +template +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 c){ return do_global_lower(c); } +template<> inline char BOOST_REGEX_CALL global_upper(char c){ return do_global_upper(c); } +#ifndef BOOST_NO_WREGEX +template<> inline wchar_t BOOST_REGEX_CALL global_lower(wchar_t c){ return do_global_lower(c); } +template<> inline wchar_t BOOST_REGEX_CALL global_upper(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 c){ return do_global_lower(c); } +template<> inline unsigned short BOOST_REGEX_CALL global_upper(unsigned short c){ return do_global_upper(c); } +#endif + +template +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 +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; +} + +template +inline const charT* get_escape_R_string() +{ +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable:4309 4245) +#endif + static const charT e1[] = { '(', '?', '>', '\x0D', '\x0A', '?', + '|', '[', '\x0A', '\x0B', '\x0C', '\x85', '\\', 'x', '{', '2', '0', '2', '8', '}', + '\\', 'x', '{', '2', '0', '2', '9', '}', ']', ')', '\0' }; + static const charT e2[] = { '(', '?', '>', '\x0D', '\x0A', '?', + '|', '[', '\x0A', '\x0B', '\x0C', '\x85', ']', ')', '\0' }; + + charT c = static_cast(0x2029u); + bool b = (static_cast(c) == 0x2029u); + + return (b ? e1 : e2); +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif +} + +template <> +inline const char* get_escape_R_string() +{ +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable:4309) +#endif + static const char e2[] = { '(', '?', '>', '\x0D', '\x0A', '?', + '|', '[', '\x0A', '\x0B', '\x0C', '\x85', ']', ')', '\0' }; + return e2; +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif +} + +} // re_detail +} // boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif diff --git a/external/boost/regex/v4/regex_workaround.hpp b/external/boost/regex/v4/regex_workaround.hpp new file mode 100644 index 0000000..46a8a8d --- /dev/null +++ b/external/boost/regex/v4/regex_workaround.hpp @@ -0,0 +1,232 @@ +/* + * + * 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 + * DESCRIPTION: Declares Misc workarounds. + */ + +#ifndef BOOST_REGEX_WORKAROUND_HPP +#define BOOST_REGEX_WORKAROUND_HPP + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_NO_STD_LOCALE +# include +#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 +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((x) ? true : false) +#else +# define BOOST_REGEX_MAKE_BOOL(x) static_cast(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 +inline void pointer_destroy(T* p) +{ p->~T(); (void)p; } + +#ifdef BOOST_MSVC +#pragma warning (pop) +#endif + +template +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) && BOOST_WORKAROUND(BOOST_MSVC, <1600) && defined(_CPPLIB_VER) && defined(BOOST_DINKUMWARE_STDLIB) && !(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 + inline OutputIterator copy( + InputIterator first, + InputIterator last, + OutputIterator dest + ) + { + return stdext::unchecked_copy(first, last, dest); + } + template + inline bool equal( + InputIterator1 first, + InputIterator1 last, + InputIterator2 with + ) + { + return stdext::unchecked_equal(first, last, with); + } +#elif BOOST_WORKAROUND(BOOST_MSVC, > 1500) + // + // MSVC 10 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"). What's more Microsoft have removed their + // non-standard "unchecked" versions, even though their still in the MS + // documentation!! Work around this as best we can: + // + template + inline OutputIterator copy( + InputIterator first, + InputIterator last, + OutputIterator dest + ) + { + while(first != last) + *dest++ = *first++; + return dest; + } + template + inline bool equal( + InputIterator1 first, + InputIterator1 last, + InputIterator2 with + ) + { + while(first != last) + if(*first++ != *with++) return false; + return true; + } +#else + using std::copy; + using std::equal; +#endif +#if BOOST_WORKAROUND(BOOST_MSVC,>=1400) && defined(__STDC_WANT_SECURE_LIB__) && __STDC_WANT_SECURE_LIB__ + + // use safe versions of strcpy etc: + using ::strcpy_s; + using ::strcat_s; +#else + 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 // __cplusplus + +#endif // include guard + diff --git a/external/boost/regex/v4/states.hpp b/external/boost/regex/v4/states.hpp new file mode 100644 index 0000000..38690b2 --- /dev/null +++ b/external/boost/regex/v4/states.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 states.cpp + * VERSION see + * DESCRIPTION: Declares internal state machine structures. + */ + +#ifndef BOOST_REGEX_V4_STATES_HPP +#define BOOST_REGEX_V4_STATES_HPP + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#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 struct is_byte; +template<> struct is_byte { typedef _narrow_type width_type; }; +template<> struct is_byte{ typedef _narrow_type width_type; }; +template<> struct is_byte { typedef _narrow_type width_type; }; +template 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, + // a recursive expression: + syntax_element_recurse = syntax_element_toggle_case + 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; + bool icase; +}; + +/*** 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 +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 state_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 +}; + +/*** struct re_recurse ************************************************ +Recurse to a particular subexpression. +**********************************************************************/ +struct re_recurse : public re_jump +{ + int state_id; // identifier of first nested repeat within the recursion. +}; + +/*** 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 +struct regex_data; + +template +iterator BOOST_REGEX_CALL re_is_set_member(iterator next, + iterator last, + const re_set_long* set_, + const regex_data& e, bool icase); + +} // namespace re_detail + +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + + diff --git a/external/boost/regex/v4/sub_match.hpp b/external/boost/regex/v4/sub_match.hpp new file mode 100644 index 0000000..34a8684 --- /dev/null +++ b/external/boost/regex/v4/sub_match.hpp @@ -0,0 +1,512 @@ +/* + * + * 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 + * DESCRIPTION: Declares template class sub_match. + */ + +#ifndef BOOST_REGEX_V4_SUB_MATCH_HPP +#define BOOST_REGEX_V4_SUB_MATCH_HPP + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +namespace boost{ + +template +struct sub_match : public std::pair +{ + typedef typename re_detail::regex_iterator_traits::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::difference_type difference_type; +#endif + typedef BidiIterator iterator_type; + typedef BidiIterator iterator; + typedef BidiIterator const_iterator; + + bool matched; + + sub_match() : std::pair(), matched(false) {} + sub_match(BidiIterator i) : std::pair(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 + operator std::basic_string ()const + { + return matched ? std::basic_string(this->first, this->second) : std::basic_string(); + } +#else + operator std::basic_string ()const + { + return str(); + } +#endif + difference_type BOOST_REGEX_CALL length()const + { + difference_type n = matched ? ::boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second) : 0; + return n; + } + std::basic_string str()const + { + std::basic_string result; + if(matched) + { + 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(matched) - static_cast(s.matched); + return str().compare(s.str()); + } + int compare(const std::basic_string& 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 > 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 m_captures; +public: + +#endif + sub_match(const sub_match& that, bool +#ifdef BOOST_REGEX_MATCH_EXTRA + deep_copy +#endif + = true + ) + : std::pair(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 csub_match; +typedef sub_match ssub_match; +#ifndef BOOST_NO_WREGEX +typedef sub_match wcsub_match; +typedef sub_match wssub_match; +#endif + +// comparison to std::basic_string<> part 1: +template +inline bool operator == (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ return s.compare(m.str()) == 0; } +template +inline bool operator != (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ return s.compare(m.str()) != 0; } +template +inline bool operator < (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ return s.compare(m.str()) < 0; } +template +inline bool operator <= (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ return s.compare(m.str()) <= 0; } +template +inline bool operator >= (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ return s.compare(m.str()) >= 0; } +template +inline bool operator > (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ return s.compare(m.str()) > 0; } +// comparison to std::basic_string<> part 2: +template +inline bool operator == (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ return m.str().compare(s) == 0; } +template +inline bool operator != (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ return m.str().compare(s) != 0; } +template +inline bool operator < (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ return m.str().compare(s) < 0; } +template +inline bool operator > (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ return m.str().compare(s) > 0; } +template +inline bool operator <= (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ return m.str().compare(s) <= 0; } +template +inline bool operator >= (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ return m.str().compare(s) >= 0; } +// comparison to const charT* part 1: +template +inline bool operator == (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const* s) +{ return m.str().compare(s) == 0; } +template +inline bool operator != (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const* s) +{ return m.str().compare(s) != 0; } +template +inline bool operator > (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const* s) +{ return m.str().compare(s) > 0; } +template +inline bool operator < (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const* s) +{ return m.str().compare(s) < 0; } +template +inline bool operator >= (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const* s) +{ return m.str().compare(s) >= 0; } +template +inline bool operator <= (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const* s) +{ return m.str().compare(s) <= 0; } +// comparison to const charT* part 2: +template +inline bool operator == (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ return m.str().compare(s) == 0; } +template +inline bool operator != (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ return m.str().compare(s) != 0; } +template +inline bool operator < (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ return m.str().compare(s) > 0; } +template +inline bool operator > (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ return m.str().compare(s) < 0; } +template +inline bool operator <= (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ return m.str().compare(s) >= 0; } +template +inline bool operator >= (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ return m.str().compare(s) <= 0; } + +// comparison to const charT& part 1: +template +inline bool operator == (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ return m.str().compare(0, m.length(), &s, 1) == 0; } +template +inline bool operator != (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ return m.str().compare(0, m.length(), &s, 1) != 0; } +template +inline bool operator > (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ return m.str().compare(0, m.length(), &s, 1) > 0; } +template +inline bool operator < (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ return m.str().compare(0, m.length(), &s, 1) < 0; } +template +inline bool operator >= (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ return m.str().compare(0, m.length(), &s, 1) >= 0; } +template +inline bool operator <= (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ return m.str().compare(0, m.length(), &s, 1) <= 0; } +// comparison to const charT* part 2: +template +inline bool operator == (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ return m.str().compare(0, m.length(), &s, 1) == 0; } +template +inline bool operator != (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ return m.str().compare(0, m.length(), &s, 1) != 0; } +template +inline bool operator < (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ return m.str().compare(0, m.length(), &s, 1) > 0; } +template +inline bool operator > (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ return m.str().compare(0, m.length(), &s, 1) < 0; } +template +inline bool operator <= (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ return m.str().compare(0, m.length(), &s, 1) >= 0; } +template +inline bool operator >= (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ return m.str().compare(0, m.length(), &s, 1) <= 0; } + +// addition operators: +template +inline std::basic_string::value_type, traits, Allocator> +operator + (const std::basic_string::value_type, traits, Allocator>& s, + const sub_match& m) +{ + std::basic_string::value_type, traits, Allocator> result; + result.reserve(s.size() + m.length() + 1); + return result.append(s).append(m.first, m.second); +} +template +inline std::basic_string::value_type, traits, Allocator> +operator + (const sub_match& m, + const std::basic_string::value_type, traits, Allocator>& s) +{ + std::basic_string::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 +inline std::basic_string::value_type> +operator + (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ + std::basic_string::value_type> result; + result.reserve(std::char_traits::value_type>::length(s) + m.length() + 1); + return result.append(s).append(m.first, m.second); +} +template +inline std::basic_string::value_type> +operator + (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const * s) +{ + std::basic_string::value_type> result; + result.reserve(std::char_traits::value_type>::length(s) + m.length() + 1); + return result.append(m.first, m.second).append(s); +} +#else +// worwaround versions: +template +inline std::basic_string::value_type> +operator + (typename re_detail::regex_iterator_traits::value_type const* s, + const sub_match& m) +{ + return s + m.str(); +} +template +inline std::basic_string::value_type> +operator + (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const * s) +{ + return m.str() + s; +} +#endif +template +inline std::basic_string::value_type> +operator + (typename re_detail::regex_iterator_traits::value_type const& s, + const sub_match& m) +{ + std::basic_string::value_type> result; + result.reserve(m.length() + 2); + return result.append(1, s).append(m.first, m.second); +} +template +inline std::basic_string::value_type> +operator + (const sub_match& m, + typename re_detail::regex_iterator_traits::value_type const& s) +{ + std::basic_string::value_type> result; + result.reserve(m.length() + 2); + return result.append(m.first, m.second).append(1, s); +} +template +inline std::basic_string::value_type> +operator + (const sub_match& m1, + const sub_match& m2) +{ + std::basic_string::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 +std::basic_ostream& + operator << (std::basic_ostream& os, + const sub_match& s) +{ + return (os << s.str()); +} +#else +template +std::ostream& operator << (std::ostream& os, + const sub_match& s) +{ + return (os << s.str()); +} +#endif + +#ifdef BOOST_OLD_REGEX_H +namespace re_detail{ +template +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 +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 +sub_match::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 +sub_match::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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif + diff --git a/external/boost/regex/v4/syntax_type.hpp b/external/boost/regex/v4/syntax_type.hpp new file mode 100644 index 0000000..3efdf0b --- /dev/null +++ b/external/boost/regex/v4/syntax_type.hpp @@ -0,0 +1,105 @@ +/* + * + * 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 + * 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 escape_type_extended_backref = 57; // for \g +static const escape_syntax_type escape_type_reset_start_mark = 58; // for \K +static const escape_syntax_type escape_type_line_ending = 59; // for \R + +static const escape_syntax_type syntax_max = 60; + +} +} + + +#endif diff --git a/external/boost/regex/v4/u32regex_iterator.hpp b/external/boost/regex/v4/u32regex_iterator.hpp new file mode 100644 index 0000000..65ebd7f --- /dev/null +++ b/external/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 + * 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 u32regex_iterator_implementation +{ + typedef u32regex regex_type; + + match_results 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& 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 u32regex_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator< + std::forward_iterator_tag, + match_results, + typename re_detail::regex_iterator_traits::difference_type, + const match_results*, + const match_results& > +#endif +{ +private: + typedef u32regex_iterator_implementation impl; + typedef shared_ptr pimpl; +public: + typedef u32regex regex_type; + typedef match_results value_type; + typedef typename re_detail::regex_iterator_traits::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 utf8regex_iterator; +typedef u32regex_iterator utf16regex_iterator; +typedef u32regex_iterator utf32regex_iterator; + +inline u32regex_iterator make_u32regex_iterator(const char* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_iterator(p, p+std::strlen(p), e, m); +} +#ifndef BOOST_NO_WREGEX +inline u32regex_iterator make_u32regex_iterator(const wchar_t* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_iterator(p, p+std::wcslen(p), e, m); +} +#endif +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) +inline u32regex_iterator make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_iterator(p, p+u_strlen(p), e, m); +} +#endif +template +inline u32regex_iterator::const_iterator> make_u32regex_iterator(const std::basic_string& p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + typedef typename std::basic_string::const_iterator iter_type; + return u32regex_iterator(p.begin(), p.end(), e, m); +} +inline u32regex_iterator make_u32regex_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_iterator(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/external/boost/regex/v4/u32regex_token_iterator.hpp b/external/boost/regex/v4/u32regex_token_iterator.hpp new file mode 100644 index 0000000..de16771 --- /dev/null +++ b/external/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 + * 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 +#include +#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 u32regex_token_iterator_implementation +{ + typedef u32regex regex_type; + typedef sub_match value_type; + + match_results 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 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& 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 + 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::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 + 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 u32regex_token_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator< + std::forward_iterator_tag, + sub_match, + typename re_detail::regex_iterator_traits::difference_type, + const sub_match*, + const sub_match& > +#endif +{ +private: + typedef u32regex_token_iterator_implementation impl; + typedef shared_ptr pimpl; +public: + typedef u32regex regex_type; + typedef sub_match value_type; + typedef typename re_detail::regex_iterator_traits::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& 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 + 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 + 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 utf8regex_token_iterator; +typedef u32regex_token_iterator utf16regex_token_iterator; +typedef u32regex_token_iterator utf32regex_token_iterator; + +// construction from an integral sub_match state_id: +inline u32regex_token_iterator 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(p, p+std::strlen(p), e, submatch, m); +} +#ifndef BOOST_NO_WREGEX +inline u32regex_token_iterator 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(p, p+std::wcslen(p), e, submatch, m); +} +#endif +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) +inline u32regex_token_iterator 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(p, p+u_strlen(p), e, submatch, m); +} +#endif +template +inline u32regex_token_iterator::const_iterator> make_u32regex_token_iterator(const std::basic_string& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) +{ + typedef typename std::basic_string::const_iterator iter_type; + return u32regex_token_iterator(p.begin(), p.end(), e, submatch, m); +} +inline u32regex_token_iterator make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_token_iterator(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m); +} + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +// construction from a reference to an array: +template +inline u32regex_token_iterator 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(p, p+std::strlen(p), e, submatch, m); +} +#ifndef BOOST_NO_WREGEX +template +inline u32regex_token_iterator 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(p, p+std::wcslen(p), e, submatch, m); +} +#endif +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) +template +inline u32regex_token_iterator 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(p, p+u_strlen(p), e, submatch, m); +} +#endif +template +inline u32regex_token_iterator::const_iterator> make_u32regex_token_iterator(const std::basic_string& p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) +{ + typedef typename std::basic_string::const_iterator iter_type; + return u32regex_token_iterator(p.begin(), p.end(), e, submatch, m); +} +template +inline u32regex_token_iterator make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_token_iterator(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m); +} +#endif // BOOST_MSVC < 1300 + +// construction from a vector of sub_match state_id's: +inline u32regex_token_iterator make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_token_iterator(p, p+std::strlen(p), e, submatch, m); +} +#ifndef BOOST_NO_WREGEX +inline u32regex_token_iterator make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_token_iterator(p, p+std::wcslen(p), e, submatch, m); +} +#endif +#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) +inline u32regex_token_iterator make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_token_iterator(p, p+u_strlen(p), e, submatch, m); +} +#endif +template +inline u32regex_token_iterator::const_iterator> make_u32regex_token_iterator(const std::basic_string& p, const u32regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + typedef typename std::basic_string::const_iterator iter_type; + return u32regex_token_iterator(p.begin(), p.end(), e, submatch, m); +} +inline u32regex_token_iterator make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const std::vector& submatch, regex_constants::match_flag_type m = regex_constants::match_default) +{ + return u32regex_token_iterator(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m); +} + +#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) +# 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/external/boost/regex/v4/w32_regex_traits.hpp b/external/boost/regex/v4/w32_regex_traits.hpp new file mode 100644 index 0000000..d556207 --- /dev/null +++ b/external/boost/regex/v4/w32_regex_traits.hpp @@ -0,0 +1,741 @@ +/* + * + * 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 + * 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 +#endif +#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED +#include +#endif +#ifdef BOOST_HAS_THREADS +#include +#endif +#ifndef BOOST_REGEX_PRIMARY_TRANSFORM +#include +#endif +#ifndef BOOST_REGEX_OBJECT_CACHE_HPP +#include +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4786) +#pragma warning(disable:4800) +#endif + +namespace boost{ + +// +// forward declaration is needed by some compilers: +// +template +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 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 state_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 state_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 state_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 state_id, int i, const std::wstring& def); +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL std::basic_string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::basic_string& def); +#endif +#endif +BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type state_id, const char* p1, const char* p2); +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type state_id, const wchar_t* p1, const wchar_t* p2); +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL std::basic_string BOOST_REGEX_CALL w32_transform(lcid_type state_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 state_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 state_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 +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 +inline lcid_type w32_regex_traits_base::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 w32_regex_traits_char_layer : public w32_regex_traits_base +{ + typedef std::basic_string string_type; + typedef std::map 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 +w32_regex_traits_char_layer::w32_regex_traits_char_layer(::boost::re_detail::lcid_type l) + : w32_regex_traits_base(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::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(*ptr)] = i; + ++ptr; + } + } + } +} + +template +typename w32_regex_traits_char_layer::string_type + w32_regex_traits_char_layer::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(*ptr)); + ++ptr; + } + return result; +} + +// +// specialised version for narrow characters: +// +template <> +class BOOST_REGEX_DECL w32_regex_traits_char_layer : public w32_regex_traits_base +{ + typedef std::string string_type; +public: + w32_regex_traits_char_layer(::boost::re_detail::lcid_type l) + : w32_regex_traits_base(l) + { + init(); + } + + regex_constants::syntax_type syntax_type(char c)const + { + return m_char_map[static_cast(c)]; + } + regex_constants::escape_syntax_type escape_syntax_type(char c) const + { + return m_char_map[static_cast(c)]; + } + char tolower(char c)const + { + return m_lower_map[static_cast(c)]; + } + bool isctype(boost::uint32_t mask, char c)const + { + return m_type_map[static_cast(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 w32_regex_traits_implementation : public w32_regex_traits_char_layer +{ +public: + typedef typename w32_regex_traits::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_horizontal = 0x1000); // must be C1_DEFINED << 3 + BOOST_STATIC_CONSTANT(char_class_type, mask_vertical = 0x2000); // must be C1_DEFINED << 4 + BOOST_STATIC_CONSTANT(char_class_type, mask_base = 0x3ff); // all the masks used by the CT_CTYPE1 group + + typedef std::basic_string 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::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 m_error_strings; // error messages indexed by numberic ID + std::map m_custom_class_names; // character class names + std::map 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 +typename w32_regex_traits_implementation::string_type + w32_regex_traits_implementation::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 +typename w32_regex_traits_implementation::string_type + w32_regex_traits_implementation::lookup_collatename(const charT* p1, const charT* p2) const +{ + typedef typename std::map::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 +w32_regex_traits_implementation::w32_regex_traits_implementation(::boost::re_detail::lcid_type l) +: w32_regex_traits_char_layer(l) +{ + cat_type cat; + std::string cat_name(w32_regex_traits::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(0); + i <= boost::regex_constants::error_unknown; + i = static_cast(i + 1)) + { + const char* p = get_default_error_string(i); + string_type default_message; + while(*p) + { + default_message.append(1, static_cast(*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(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::mask_word, + w32_regex_traits_implementation::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 +typename w32_regex_traits_implementation::char_class_type + w32_regex_traits_implementation::lookup_classname_imp(const charT* p1, const charT* p2) const +{ + static const char_class_type masks[22] = + { + 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 + w32_regex_traits_implementation::mask_horizontal, + 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::mask_unicode, + 0x0001u, // C1_UPPER + w32_regex_traits_implementation::mask_vertical, + 0x0104u | w32_regex_traits_implementation::mask_word, + 0x0104u | w32_regex_traits_implementation::mask_word, + 0x0080u, // C1_XDIGIT + }; + if(m_custom_class_names.size()) + { + typedef typename std::map, 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 state_id = 1 + re_detail::get_default_class_id(p1, p2); + if(state_id < sizeof(masks) / sizeof(masks[0])) + return masks[state_id]; + return masks[0]; +} + + +template +boost::shared_ptr > 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 >::get(l, 5); +} + +} // re_detail + +template +class w32_regex_traits +{ +public: + typedef charT char_type; + typedef std::size_t size_type; + typedef std::basic_string 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(::boost::re_detail::w32_get_default_locale())) + { } + static size_type length(const char_type* p) + { + return std::char_traits::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::mask_base) + && (this->m_pimpl->isctype(f & re_detail::w32_regex_traits_implementation::mask_base, c))) + return true; + else if((f & re_detail::w32_regex_traits_implementation::mask_unicode) && re_detail::is_extended(c)) + return true; + else if((f & re_detail::w32_regex_traits_implementation::mask_word) && (c == '_')) + return true; + else if((f & re_detail::w32_regex_traits_implementation::mask_vertical) + && (::boost::re_detail::is_separator(c) || (c == '\v'))) + return true; + else if((f & re_detail::w32_regex_traits_implementation::mask_horizontal) + && this->isctype(c, 0x0008u) && !this->isctype(c, re_detail::w32_regex_traits_implementation::mask_vertical)) + 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(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 > m_pimpl; + // + // catalog name handler: + // + static std::string& get_catalog_name_inst(); + +#ifdef BOOST_HAS_THREADS + static static_mutex& get_mutex_inst(); +#endif +}; + +template +std::string w32_regex_traits::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 +std::string& w32_regex_traits::get_catalog_name_inst() +{ + static std::string s_name; + return s_name; +} + +template +std::string w32_regex_traits::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 +static_mutex& w32_regex_traits::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_MSVC +#pragma warning(push) +#pragma warning(disable: 4103) +#endif +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif diff --git a/external/boost/regex_fwd.hpp b/external/boost/regex_fwd.hpp new file mode 100644 index 0000000..2ee4a24 --- /dev/null +++ b/external/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 + * 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 +#endif + +#include + +#endif + + + + diff --git a/external/boost/scoped_array.hpp b/external/boost/scoped_array.hpp new file mode 100644 index 0000000..c02fa31 --- /dev/null +++ b/external/boost/scoped_array.hpp @@ -0,0 +1,16 @@ +#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 + +#endif // #ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED diff --git a/external/boost/scoped_ptr.hpp b/external/boost/scoped_ptr.hpp new file mode 100644 index 0000000..cb916da --- /dev/null +++ b/external/boost/scoped_ptr.hpp @@ -0,0 +1,16 @@ +#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 + +#endif // #ifndef BOOST_SCOPED_PTR_HPP_INCLUDED diff --git a/external/boost/shared_array.hpp b/external/boost/shared_array.hpp new file mode 100644 index 0000000..0700ce4 --- /dev/null +++ b/external/boost/shared_array.hpp @@ -0,0 +1,19 @@ +#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 + +#endif // #ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED diff --git a/external/boost/shared_ptr.hpp b/external/boost/shared_ptr.hpp new file mode 100644 index 0000000..d31978c --- /dev/null +++ b/external/boost/shared_ptr.hpp @@ -0,0 +1,19 @@ +#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-2008 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 + +#endif // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED diff --git a/external/boost/smart_ptr.hpp b/external/boost/smart_ptr.hpp new file mode 100644 index 0000000..b5e569d --- /dev/null +++ b/external/boost/smart_ptr.hpp @@ -0,0 +1,31 @@ +#ifndef BOOST_SMART_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_HPP_INCLUDED + +// +// 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 + +#include +#include +#include +#include + +#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES) +# include +# include +# include +# include +#endif + +#endif // #ifndef BOOST_SMART_PTR_HPP_INCLUDED diff --git a/external/boost/smart_ptr/bad_weak_ptr.hpp b/external/boost/smart_ptr/bad_weak_ptr.hpp new file mode 100644 index 0000000..3e0a1b7 --- /dev/null +++ b/external/boost/smart_ptr/bad_weak_ptr.hpp @@ -0,0 +1,59 @@ +#ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/smart_ptr/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 + +#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_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/atomic_count.hpp b/external/boost/smart_ptr/detail/atomic_count.hpp new file mode 100644 index 0000000..cc44ac2 --- /dev/null +++ b/external/boost/smart_ptr/detail/atomic_count.hpp @@ -0,0 +1,119 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED +#define BOOST_SMART_PTR_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 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: (long) the new value of a +// +// --a; +// +// Effects: Atomically decrements the value of a +// Returns: (long) the new value of a +// +// 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 +#include + +#ifndef BOOST_HAS_THREADS + +namespace boost +{ + +namespace detail +{ + +typedef long atomic_count; + +} + +} + +#elif defined(BOOST_AC_USE_PTHREADS) +# include + +#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) +# include + +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# include + +#elif defined( BOOST_SP_HAS_SYNC ) +# include + +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +# include + +#elif defined(BOOST_HAS_PTHREADS) + +# define BOOST_AC_USE_PTHREADS +# include + +#else + +// Use #define BOOST_DISABLE_THREADS to avoid the error +#error Unrecognized threading platform + +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/atomic_count_gcc.hpp b/external/boost/smart_ptr/detail/atomic_count_gcc.hpp new file mode 100644 index 0000000..54807e9 --- /dev/null +++ b/external/boost/smart_ptr/detail/atomic_count_gcc.hpp @@ -0,0 +1,72 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +// 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__ * 100 + __GNUC_MINOR__ >= 402 +# include +#else +# include +#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 ) {} + + long operator++() + { + return __exchange_and_add( &value_, +1 ) + 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_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp b/external/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp new file mode 100644 index 0000000..5c44d7c --- /dev/null +++ b/external/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp @@ -0,0 +1,77 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED + +// +// boost/detail/atomic_count_gcc_x86.hpp +// +// atomic_count for g++ on 486+/AMD64 +// +// Copyright 2007 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) +// + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +public: + + explicit atomic_count( long v ) : value_( static_cast< int >( v ) ) {} + + long operator++() + { + return atomic_exchange_and_add( &value_, +1 ) + 1; + } + + long operator--() + { + return atomic_exchange_and_add( &value_, -1 ) - 1; + } + + operator long() const + { + return atomic_exchange_and_add( &value_, 0 ); + } + +private: + + atomic_count(atomic_count const &); + atomic_count & operator=(atomic_count const &); + + mutable int value_; + +private: + + static 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) + "1"( dv ): // inputs (%2 == %1) + "memory", "cc" // clobbers + ); + + return r; + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/atomic_count_pthreads.hpp b/external/boost/smart_ptr/detail/atomic_count_pthreads.hpp new file mode 100644 index 0000000..05f7867 --- /dev/null +++ b/external/boost/smart_ptr/detail/atomic_count_pthreads.hpp @@ -0,0 +1,96 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +// +// 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_); + } + + long operator++() + { + scoped_lock lock(mutex_); + return ++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_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/atomic_count_sync.hpp b/external/boost/smart_ptr/detail/atomic_count_sync.hpp new file mode 100644 index 0000000..b6359b5 --- /dev/null +++ b/external/boost/smart_ptr/detail/atomic_count_sync.hpp @@ -0,0 +1,61 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED + +// +// boost/detail/atomic_count_sync.hpp +// +// atomic_count for g++ 4.1+ +// +// http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html +// +// Copyright 2007 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 defined( __ia64__ ) && defined( __INTEL_COMPILER ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +public: + + explicit atomic_count( long v ) : value_( v ) {} + + long operator++() + { + return __sync_add_and_fetch( &value_, 1 ); + } + + long operator--() + { + return __sync_add_and_fetch( &value_, -1 ); + } + + operator long() const + { + return __sync_fetch_and_add( &value_, 0 ); + } + +private: + + atomic_count(atomic_count const &); + atomic_count & operator=(atomic_count const &); + + mutable long value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/atomic_count_win32.hpp b/external/boost/smart_ptr/detail/atomic_count_win32.hpp new file mode 100644 index 0000000..60a0569 --- /dev/null +++ b/external/boost/smart_ptr/detail/atomic_count_win32.hpp @@ -0,0 +1,63 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +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( value_ ); + } + +private: + + atomic_count( atomic_count const & ); + atomic_count & operator=( atomic_count const & ); + + long value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/lightweight_mutex.hpp b/external/boost/smart_ptr/detail/lightweight_mutex.hpp new file mode 100644 index 0000000..d46b193 --- /dev/null +++ b/external/boost/smart_ptr/detail/lightweight_mutex.hpp @@ -0,0 +1,42 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED +#define BOOST_SMART_PTR_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 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 + +#if !defined(BOOST_HAS_THREADS) +# include +#elif defined(BOOST_HAS_PTHREADS) +# include +#elif defined(BOOST_HAS_WINTHREADS) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# include +#else +// Use #define BOOST_DISABLE_THREADS to avoid the error +# error Unrecognized threading platform +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/lwm_nop.hpp b/external/boost/smart_ptr/detail/lwm_nop.hpp new file mode 100644 index 0000000..521a88e --- /dev/null +++ b/external/boost/smart_ptr/detail/lwm_nop.hpp @@ -0,0 +1,37 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED +#define BOOST_SMART_PTR_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_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/lwm_pthreads.hpp b/external/boost/smart_ptr/detail/lwm_pthreads.hpp new file mode 100644 index 0000000..8eda518 --- /dev/null +++ b/external/boost/smart_ptr/detail/lwm_pthreads.hpp @@ -0,0 +1,87 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include + +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_) + BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 ); +#else + BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 ); +#endif + } + + ~lightweight_mutex() + { + BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 ); + } + + 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_) + { + BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 ); + } + + ~scoped_lock() + { + BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 ); + } + }; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/lwm_win32_cs.hpp b/external/boost/smart_ptr/detail/lwm_win32_cs.hpp new file mode 100644 index 0000000..00477e4 --- /dev/null +++ b/external/boost/smart_ptr/detail/lwm_win32_cs.hpp @@ -0,0 +1,108 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#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 *); + +#else + +typedef ::CRITICAL_SECTION 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_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/operator_bool.hpp b/external/boost/smart_ptr/detail/operator_bool.hpp new file mode 100644 index 0000000..842a05d --- /dev/null +++ b/external/boost/smart_ptr/detail/operator_bool.hpp @@ -0,0 +1,56 @@ +// This header intentionally has no include guards. +// +// Copyright (c) 2001-2009 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 ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__) + + 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) ) || \ + ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) ) + + 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; + } diff --git a/external/boost/smart_ptr/detail/quick_allocator.hpp b/external/boost/smart_ptr/detail/quick_allocator.hpp new file mode 100644 index 0000000..159bd5e --- /dev/null +++ b/external/boost/smart_ptr/detail/quick_allocator.hpp @@ -0,0 +1,199 @@ +#ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +#include +#include +#include + +#include // ::operator new, ::operator delete +#include // std::size_t + +namespace boost +{ + +namespace detail +{ + +template union freeblock +{ + typedef typename boost::type_with_alignment::type aligner_type; + aligner_type aligner; + char bytes[size]; + freeblock * next; +}; + +template struct allocator_impl +{ + typedef freeblock 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 freeblock< sizeof( lightweight_mutex ), boost::alignment_of< lightweight_mutex >::value > fbm; + static lightweight_mutex * pm = new( &fbm ) lightweight_mutex; + return *pm; + } + + 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(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(pv); + pb->next = free; + free = pb; + } + } +}; + +#ifdef BOOST_HAS_THREADS + +template + lightweight_mutex * allocator_impl::mutex_init = &allocator_impl::mutex(); + +#endif + +template + freeblock * allocator_impl::free = 0; + +template + freeblock * allocator_impl::page = 0; + +template + unsigned allocator_impl::last = allocator_impl::items_per_page; + +template +struct quick_allocator: public allocator_impl< sizeof(T), boost::alignment_of::value > +{ +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/shared_array_nmt.hpp b/external/boost/smart_ptr/detail/shared_array_nmt.hpp new file mode 100644 index 0000000..450c9bc --- /dev/null +++ b/external/boost/smart_ptr/detail/shared_array_nmt.hpp @@ -0,0 +1,151 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include +#include +#include + +#include // for std::ptrdiff_t +#include // for std::swap +#include // for std::less +#include // for std::bad_alloc + +namespace boost +{ + +template 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 & 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 inline bool operator==(shared_array const & a, shared_array const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_array const & a, shared_array const & b) +{ + return a.get() != b.get(); +} + +template inline bool operator<(shared_array const & a, shared_array const & b) +{ + return std::less()(a.get(), b.get()); +} + +template void swap(shared_array & a, shared_array & b) +{ + a.swap(b); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/shared_count.hpp b/external/boost/smart_ptr/detail/shared_count.hpp new file mode 100644 index 0000000..f96a220 --- /dev/null +++ b/external/boost/smart_ptr/detail/shared_count.hpp @@ -0,0 +1,532 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include +#include +#include +#include +#include +#include +// In order to avoid circular dependencies with Boost.TR1 +// we make sure that our include of doesn't try to +// pull in the TR1 headers: that's why we use this header +// rather than including directly: +#include // std::auto_ptr +#include // std::less +#include // std::bad_alloc + +namespace boost +{ + +namespace detail +{ + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + +int const shared_count_id = 0x2C35F101; +int const weak_count_id = 0x298C38A4; + +#endif + +struct sp_nothrow_tag {}; + +template< class D > struct sp_inplace_tag +{ +}; + +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 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( p ); + } + catch(...) + { + boost::checked_delete( p ); + throw; + } + +#else + + pi_ = new sp_counted_impl_p( p ); + + if( pi_ == 0 ) + { + boost::checked_delete( p ); + boost::throw_exception( std::bad_alloc() ); + } + +#endif + } + +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) + template shared_count( Y * p, D d ): pi_(0) +#else + template shared_count( P p, D d ): pi_(0) +#endif +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) + typedef Y* P; +#endif +#ifndef BOOST_NO_EXCEPTIONS + + try + { + pi_ = new sp_counted_impl_pd(p, d); + } + catch(...) + { + d(p); // delete p + throw; + } + +#else + + pi_ = new sp_counted_impl_pd(p, d); + + if(pi_ == 0) + { + d(p); // delete p + boost::throw_exception(std::bad_alloc()); + } + +#endif + } + +#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING ) + + template< class P, class D > shared_count( P p, sp_inplace_tag ): 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 ); + } + catch( ... ) + { + D()( p ); // delete p + throw; + } + +#else + + pi_ = new sp_counted_impl_pd< P, D >( p ); + + if( pi_ == 0 ) + { + D()( p ); // delete p + boost::throw_exception( std::bad_alloc() ); + } + +#endif // #ifndef BOOST_NO_EXCEPTIONS + } + +#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING ) + + template 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 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 + } + +#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING ) + + template< class P, class D, class A > shared_count( P p, sp_inplace_tag< 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, 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, a ); + } + else + { + D()( p ); + boost::throw_exception( std::bad_alloc() ); + } + +#endif // #ifndef BOOST_NO_EXCEPTIONS + } + +#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING ) + +#ifndef BOOST_NO_AUTO_PTR + + // auto_ptr is special cased to provide the strong guarantee + + template + explicit shared_count( std::auto_ptr & r ): pi_( new sp_counted_impl_p( 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(); + } + +#if defined( BOOST_HAS_RVALUE_REFS ) + + shared_count(shared_count && r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { + r.pi_ = 0; + } + +#endif + + explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0 + shared_count( weak_count const & r, sp_nothrow_tag ); // constructs an empty *this 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; + } + + bool empty() const // nothrow + { + return pi_ == 0; + } + + 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()( a.pi_, b.pi_ ); + } + + void * get_deleter( sp_typeinfo 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_(weak_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_(weak_count_id) +#endif + { + if(pi_ != 0) pi_->weak_add_ref(); + } + +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + weak_count(weak_count && r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(weak_count_id) +#endif + { + r.pi_ = 0; + } + +#endif + + ~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 != 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 != 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; + } + + bool empty() const // nothrow + { + return pi_ == 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()(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() ); + } +} + +inline shared_count::shared_count( weak_count const & r, sp_nothrow_tag ): pi_( r.pi_ ) +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif +{ + if( pi_ != 0 && !pi_->add_ref_lock() ) + { + pi_ = 0; + } +} + +} // namespace detail + +} // namespace boost + +#ifdef __BORLANDC__ +# pragma warn .8027 // Functions containing try are not expanded inline +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/shared_ptr_nmt.hpp b/external/boost/smart_ptr/detail/shared_ptr_nmt.hpp new file mode 100644 index 0000000..afc1ec0 --- /dev/null +++ b/external/boost/smart_ptr/detail/shared_ptr_nmt.hpp @@ -0,0 +1,182 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include +#include +#include + +#ifndef BOOST_NO_AUTO_PTR +# include // for std::auto_ptr +#endif + +#include // for std::swap +#include // for std::less +#include // for std::bad_alloc + +namespace boost +{ + +template 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 & 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 & 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 & 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 inline bool operator==(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() != b.get(); +} + +template inline bool operator<(shared_ptr const & a, shared_ptr const & b) +{ + return std::less()(a.get(), b.get()); +} + +template void swap(shared_ptr & a, shared_ptr & b) +{ + a.swap(b); +} + +// get_pointer() enables boost::mem_fn to recognize shared_ptr + +template inline T * get_pointer(shared_ptr const & p) +{ + return p.get(); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_convertible.hpp b/external/boost/smart_ptr/detail/sp_convertible.hpp new file mode 100644 index 0000000..eb39797 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_convertible.hpp @@ -0,0 +1,76 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_convertible.hpp +// +// Copyright 2008 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 + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( BOOST_NO_SFINAE ) +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ < 303 ) +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x630 ) +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + +namespace boost +{ + +namespace detail +{ + +template< class Y, class T > struct sp_convertible +{ + typedef char (&yes) [1]; + typedef char (&no) [2]; + + static yes f( T* ); + static no f( ... ); + + enum _vt { value = sizeof( (f)( static_cast(0) ) ) == sizeof(yes) }; +}; + +struct sp_empty +{ +}; + +template< bool > struct sp_enable_if_convertible_impl; + +template<> struct sp_enable_if_convertible_impl +{ + typedef sp_empty type; +}; + +template<> struct sp_enable_if_convertible_impl +{ +}; + +template< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value > +{ +}; + +} // namespace detail + +} // namespace boost + +#endif // !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base.hpp b/external/boost/smart_ptr/detail/sp_counted_base.hpp new file mode 100644 index 0000000..8401bfe --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base.hpp @@ -0,0 +1,73 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED +#define BOOST_SMART_PTR_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, 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) +// + +#include +#include + +#if defined( BOOST_SP_DISABLE_THREADS ) +# include + +#elif defined( BOOST_SP_USE_SPINLOCK ) +# include + +#elif defined( BOOST_SP_USE_PTHREADS ) +# include + +#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 ) +# include + +#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) +# include + +#elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER ) +# include + +#elif defined(__HP_aCC) && defined(__ia64) +# include + +#elif defined( __MWERKS__ ) && defined( __POWERPC__ ) +# include + +#elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) ) +# include + +#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) +# include + +#elif defined( BOOST_SP_HAS_SYNC ) +# include + +#elif defined(__GNUC__) && ( defined( __sparcv9 ) || ( defined( __sparcv8 ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 402 ) ) ) +# include + +#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__) +# include + +#elif defined( _AIX ) +# include + +#elif !defined( BOOST_HAS_THREADS ) +# include + +#else +# include + +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp b/external/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp new file mode 100644 index 0000000..dffd995 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp @@ -0,0 +1,150 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED + +// +// detail/sp_counted_base_acc_ia64.hpp - aC++ on HP-UX IA64 +// +// Copyright 2007 Baruch Zilber +// Copyright 2007 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int * pw ) +{ + // ++*pw; + + _Asm_fetchadd(_FASZ_W, _SEM_REL, pw, +1, _LDHINT_NONE); +} + +inline int atomic_decrement( int * pw ) +{ + // return --*pw; + + int r = static_cast(_Asm_fetchadd(_FASZ_W, _SEM_REL, pw, -1, _LDHINT_NONE)); + if (1 == r) + { + _Asm_mf(); + } + + return r - 1; +} + +inline int atomic_conditional_increment( int * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int v = *pw; + + for (;;) + { + if (0 == v) + { + return 0; + } + + _Asm_mov_to_ar(_AREG_CCV, + v, + (_UP_CALL_FENCE | _UP_SYS_FENCE | _DOWN_CALL_FENCE | _DOWN_SYS_FENCE)); + int r = static_cast(_Asm_cmpxchg(_SZ_W, _SEM_ACQ, pw, v + 1, _LDHINT_NONE)); + if (r == v) + { + return r + 1; + } + + v = r; + } +} + +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( sp_typeinfo 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( use_count_ ); // TODO use ld.acq here + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_aix.hpp b/external/boost/smart_ptr/detail/sp_counted_base_aix.hpp new file mode 100644 index 0000000..0208678 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_aix.hpp @@ -0,0 +1,142 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED + +// +// detail/sp_counted_base_aix.hpp +// based on: detail/sp_counted_base_w32.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// Copyright 2006 Michael van der Westhuizen +// +// Distributed under the 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 +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int32_t* pw ) +{ + // ++*pw; + + fetch_and_add( pw, 1 ); +} + +inline int32_t atomic_decrement( int32_t * pw ) +{ + // return --*pw; + + int32_t originalValue; + + __lwsync(); + originalValue = fetch_and_add( pw, -1 ); + __isync(); + + return (originalValue - 1); +} + +inline int32_t atomic_conditional_increment( int32_t * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int32_t tmp = fetch_and_add( pw, 0 ); + for( ;; ) + { + if( tmp == 0 ) return 0; + if( compare_and_swap( pw, &tmp, tmp + 1 ) ) return (tmp + 1); + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int32_t use_count_; // #shared + int32_t 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( sp_typeinfo 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 fetch_and_add( const_cast(&use_count_), 0 ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp b/external/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp new file mode 100644 index 0000000..51ac56a --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp @@ -0,0 +1,170 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +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( sp_typeinfo 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( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp b/external/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp new file mode 100644 index 0000000..d122a49 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp @@ -0,0 +1,157 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +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( sp_typeinfo 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( use_count_ ); // TODO use ld.acq here + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp b/external/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp new file mode 100644 index 0000000..3f1f449 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp @@ -0,0 +1,181 @@ +#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED +#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_gcc_mips.hpp - g++ on MIPS +// +// Copyright (c) 2009, Spirent Communications, 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int * pw ) +{ + // ++*pw; + + int tmp; + + __asm__ __volatile__ + ( + "0:\n\t" + ".set push\n\t" + ".set mips2\n\t" + "ll %0, %1\n\t" + "addiu %0, 1\n\t" + "sc %0, %1\n\t" + ".set pop\n\t" + "beqz %0, 0b": + "=&r"( tmp ), "=m"( *pw ): + "m"( *pw ) + ); +} + +inline int atomic_decrement( int * pw ) +{ + // return --*pw; + + int rv, tmp; + + __asm__ __volatile__ + ( + "0:\n\t" + ".set push\n\t" + ".set mips2\n\t" + "ll %1, %2\n\t" + "addiu %0, %1, -1\n\t" + "sc %0, %2\n\t" + ".set pop\n\t" + "beqz %0, 0b\n\t" + "addiu %0, %1, -1": + "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ): + "m"( *pw ): + "memory" + ); + + return rv; +} + +inline int atomic_conditional_increment( int * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int rv, tmp; + + __asm__ __volatile__ + ( + "0:\n\t" + ".set push\n\t" + ".set mips2\n\t" + "ll %0, %2\n\t" + "beqz %0, 1f\n\t" + "addiu %1, %0, 1\n\t" + "sc %1, %2\n\t" + ".set pop\n\t" + "beqz %1, 0b\n\t" + "addiu %0, %0, 1\n\t" + "1:": + "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ): + "m"( *pw ): + "memory" + ); + + 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( sp_typeinfo 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( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp b/external/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp new file mode 100644 index 0000000..7f5c414 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp @@ -0,0 +1,181 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +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( sp_typeinfo 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( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp b/external/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp new file mode 100644 index 0000000..21fa59d --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp @@ -0,0 +1,166 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+ +// +// Copyright (c) 2006 Piotr Wyderski +// Copyright (c) 2006 Tomas Puverle +// 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 +// +// Thanks to Michael van der Westhuizen + +#include +#include // int32_t + +namespace boost +{ + +namespace detail +{ + +inline int32_t compare_and_swap( int32_t * dest_, int32_t compare_, int32_t swap_ ) +{ + __asm__ __volatile__( "cas [%1], %2, %0" + : "+r" (swap_) + : "r" (dest_), "r" (compare_) + : "memory" ); + + return swap_; +} + +inline int32_t atomic_fetch_and_add( int32_t * pw, int32_t dv ) +{ + // long r = *pw; + // *pw += dv; + // return r; + + for( ;; ) + { + int32_t r = *pw; + + if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) ) + { + return r; + } + } +} + +inline void atomic_increment( int32_t * pw ) +{ + atomic_fetch_and_add( pw, 1 ); +} + +inline int32_t atomic_decrement( int32_t * pw ) +{ + return atomic_fetch_and_add( pw, -1 ); +} + +inline int32_t atomic_conditional_increment( int32_t * pw ) +{ + // long r = *pw; + // if( r != 0 ) ++*pw; + // return r; + + for( ;; ) + { + int32_t r = *pw; + + if( r == 0 ) + { + return r; + } + + if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) ) + { + return r; + } + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int32_t use_count_; // #shared + int32_t 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( sp_typeinfo 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_ ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return const_cast< int32_t const volatile & >( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp b/external/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp new file mode 100644 index 0000000..4d7fa8d --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp @@ -0,0 +1,173 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +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( sp_typeinfo 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( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_nt.hpp b/external/boost/smart_ptr/detail/sp_counted_base_nt.hpp new file mode 100644 index 0000000..dfd70e7 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_nt.hpp @@ -0,0 +1,107 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +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( sp_typeinfo 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_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_pt.hpp b/external/boost/smart_ptr/detail/sp_counted_base_pt.hpp new file mode 100644 index 0000000..3c56fec --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_pt.hpp @@ -0,0 +1,135 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include + +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( sp_typeinfo 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_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_spin.hpp b/external/boost/smart_ptr/detail/sp_counted_base_spin.hpp new file mode 100644 index 0000000..bbd11e6 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_spin.hpp @@ -0,0 +1,131 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_spin.hpp - spinlock pool atomic emulation +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2008 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 +#include + +namespace boost +{ + +namespace detail +{ + +inline int atomic_exchange_and_add( int * pw, int dv ) +{ + spinlock_pool<1>::scoped_lock lock( pw ); + + int r = *pw; + *pw += dv; + return r; +} + +inline void atomic_increment( int * pw ) +{ + spinlock_pool<1>::scoped_lock lock( pw ); + ++*pw; +} + +inline int atomic_conditional_increment( int * pw ) +{ + spinlock_pool<1>::scoped_lock lock( pw ); + + int rv = *pw; + if( rv != 0 ) ++*pw; + 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( sp_typeinfo 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 + { + spinlock_pool<1>::scoped_lock lock( &use_count_ ); + return use_count_; + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_sync.hpp b/external/boost/smart_ptr/detail/sp_counted_base_sync.hpp new file mode 100644 index 0000000..41f654e --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_sync.hpp @@ -0,0 +1,155 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_counted_base_sync.hpp - g++ 4.1+ __sync intrinsics +// +// Copyright (c) 2007 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 +#include + +#if defined( __ia64__ ) && defined( __INTEL_COMPILER ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +#if INT_MAX >= 2147483647 + +typedef int sp_int32_t; + +#else + +typedef long sp_int32_t; + +#endif + +inline void atomic_increment( sp_int32_t * pw ) +{ + __sync_fetch_and_add( pw, 1 ); +} + +inline sp_int32_t atomic_decrement( sp_int32_t * pw ) +{ + return __sync_fetch_and_add( pw, -1 ); +} + +inline sp_int32_t atomic_conditional_increment( sp_int32_t * pw ) +{ + // long r = *pw; + // if( r != 0 ) ++*pw; + // return r; + + sp_int32_t r = *pw; + + for( ;; ) + { + if( r == 0 ) + { + return r; + } + + sp_int32_t r2 = __sync_val_compare_and_swap( pw, r, r + 1 ); + + if( r2 == r ) + { + return r; + } + else + { + r = r2; + } + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + sp_int32_t use_count_; // #shared + sp_int32_t 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( sp_typeinfo 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_ ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return const_cast< sp_int32_t const volatile & >( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_base_w32.hpp b/external/boost/smart_ptr/detail/sp_counted_base_w32.hpp new file mode 100644 index 0000000..06aa456 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_base_w32.hpp @@ -0,0 +1,130 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include +#include + +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( sp_typeinfo 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( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_counted_impl.hpp b/external/boost/smart_ptr/detail/sp_counted_impl.hpp new file mode 100644 index 0000000..aab39bd --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_counted_impl.hpp @@ -0,0 +1,239 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +#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 +#include + +#if defined(BOOST_SP_USE_QUICK_ALLOCATOR) +#include +#endif + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) +#include // std::allocator +#endif + +#include // 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 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 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( detail::sp_typeinfo const & ) + { + return 0; + } + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) + + void * operator new( std::size_t ) + { + return std::allocator().allocate( 1, static_cast(0) ); + } + + void operator delete( void * p ) + { + std::allocator().deallocate( static_cast(p), 1 ); + } + +#endif + +#if defined(BOOST_SP_USE_QUICK_ALLOCATOR) + + void * operator new( std::size_t ) + { + return quick_allocator::alloc(); + } + + void operator delete( void * p ) + { + quick_allocator::dealloc( p ); + } + +#endif +}; + +// +// Borland's Codeguard trips up over the -Vx- option here: +// +#ifdef __CODEGUARD__ +# pragma option push -Vx- +#endif + +template 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 this_type; + +public: + + // pre: d(p) must not throw + + sp_counted_impl_pd( P p, D & d ): ptr( p ), del( d ) + { + } + + sp_counted_impl_pd( P p ): ptr( p ), del() + { + } + + virtual void dispose() // nothrow + { + del( ptr ); + } + + virtual void * get_deleter( detail::sp_typeinfo const & ti ) + { + return ti == BOOST_SP_TYPEID(D)? &reinterpret_cast( del ): 0; + } + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) + + void * operator new( std::size_t ) + { + return std::allocator().allocate( 1, static_cast(0) ); + } + + void operator delete( void * p ) + { + std::allocator().deallocate( static_cast(p), 1 ); + } + +#endif + +#if defined(BOOST_SP_USE_QUICK_ALLOCATOR) + + void * operator new( std::size_t ) + { + return quick_allocator::alloc(); + } + + void operator delete( void * p ) + { + quick_allocator::dealloc( p ); + } + +#endif +}; + +template 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 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 ) + { + } + + sp_counted_impl_pda( P p, A a ): p_( p ), 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( detail::sp_typeinfo const & ti ) + { + return ti == BOOST_SP_TYPEID( D )? &reinterpret_cast( d_ ): 0; + } +}; + +#ifdef __CODEGUARD__ +# pragma option pop +#endif + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/sp_has_sync.hpp b/external/boost/smart_ptr/detail/sp_has_sync.hpp new file mode 100644 index 0000000..12acea8 --- /dev/null +++ b/external/boost/smart_ptr/detail/sp_has_sync.hpp @@ -0,0 +1,53 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/smart_ptr/detail/sp_has_sync.hpp +// +// Copyright (c) 2008, 2009 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) +// +// Defines the BOOST_SP_HAS_SYNC macro if the __sync_* intrinsics +// are available. +// + +#if defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) && !defined( BOOST_SP_NO_SYNC ) + +#define BOOST_SP_HAS_SYNC + +#if defined( __arm__ ) || defined( __armel__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __hppa ) || defined( __hppa__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __m68k__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __sh__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __sparc__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1100 ) +#undef BOOST_SP_HAS_SYNC +#endif + +#endif // __GNUC__ * 100 + __GNUC_MINOR__ >= 401 + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock.hpp b/external/boost/smart_ptr/detail/spinlock.hpp new file mode 100644 index 0000000..88d7ad6 --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock.hpp @@ -0,0 +1,56 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/spinlock.hpp +// +// Copyright (c) 2008 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) +// +// struct spinlock +// { +// void lock(); +// bool try_lock(); +// void unlock(); +// +// class scoped_lock; +// }; +// +// #define BOOST_DETAIL_SPINLOCK_INIT +// + +#include +#include + +#if defined( BOOST_SP_USE_PTHREADS ) +# include + +#elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) +# include + +#elif defined( BOOST_SP_HAS_SYNC ) +# include + +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# include + +#elif defined(BOOST_HAS_PTHREADS) +# include + +#elif !defined(BOOST_HAS_THREADS) +# include + +#else +# error Unrecognized threading platform +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock_gcc_arm.hpp b/external/boost/smart_ptr/detail/spinlock_gcc_arm.hpp new file mode 100644 index 0000000..f58ea44 --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock_gcc_arm.hpp @@ -0,0 +1,102 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED + +// +// Copyright (c) 2008, 2011 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 + +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) + +# define BOOST_SP_ARM_BARRIER "dmb" + +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) + +# define BOOST_SP_ARM_BARRIER "mcr p15, 0, r0, c7, c10, 5" + +#else + +# define BOOST_SP_ARM_BARRIER "" + +#endif + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + int v_; + +public: + + bool try_lock() + { + int r; + + __asm__ __volatile__( + "swp %0, %1, [%2]\n\t" + BOOST_SP_ARM_BARRIER : + "=&r"( r ): // outputs + "r"( 1 ), "r"( &v_ ): // inputs + "memory", "cc" ); + + return r == 0; + } + + void lock() + { + for( unsigned k = 0; !try_lock(); ++k ) + { + boost::detail::yield( k ); + } + } + + void unlock() + { + __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" ); + *const_cast< int volatile* >( &v_ ) = 0; + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT {0} + +#undef BOOST_SP_ARM_BARRIER + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock_nt.hpp b/external/boost/smart_ptr/detail/spinlock_nt.hpp new file mode 100644 index 0000000..1f399d0 --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock_nt.hpp @@ -0,0 +1,89 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 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 + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + bool locked_; + +public: + + inline bool try_lock() + { + if( locked_ ) + { + return false; + } + else + { + locked_ = true; + return true; + } + } + + inline void lock() + { + BOOST_ASSERT( !locked_ ); + locked_ = true; + } + + inline void unlock() + { + BOOST_ASSERT( locked_ ); + locked_ = false; + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT { false } + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock_pool.hpp b/external/boost/smart_ptr/detail/spinlock_pool.hpp new file mode 100644 index 0000000..f09d5c6 --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock_pool.hpp @@ -0,0 +1,91 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/spinlock_pool.hpp +// +// Copyright (c) 2008 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) +// +// spinlock_pool<0> is reserved for atomic<>, when/if it arrives +// spinlock_pool<1> is reserved for shared_ptr reference counts +// spinlock_pool<2> is reserved for shared_ptr atomic access +// + +#include +#include +#include + +namespace boost +{ + +namespace detail +{ + +template< int I > class spinlock_pool +{ +private: + + static spinlock pool_[ 41 ]; + +public: + + static spinlock & spinlock_for( void const * pv ) + { +#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 + std::size_t i = reinterpret_cast< unsigned long long >( pv ) % 41; +#else + std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41; +#endif + return pool_[ i ]; + } + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) ) + { + sp_.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +template< int I > spinlock spinlock_pool< I >::pool_[ 41 ] = +{ + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT +}; + +} // namespace detail +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock_pt.hpp b/external/boost/smart_ptr/detail/spinlock_pt.hpp new file mode 100644 index 0000000..f9cabfc --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock_pt.hpp @@ -0,0 +1,79 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 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 + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + pthread_mutex_t v_; + +public: + + bool try_lock() + { + return pthread_mutex_trylock( &v_ ) == 0; + } + + void lock() + { + pthread_mutex_lock( &v_ ); + } + + void unlock() + { + pthread_mutex_unlock( &v_ ); + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER } + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock_sync.hpp b/external/boost/smart_ptr/detail/spinlock_sync.hpp new file mode 100644 index 0000000..a7145c5 --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock_sync.hpp @@ -0,0 +1,87 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 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 + +#if defined( __ia64__ ) && defined( __INTEL_COMPILER ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + int v_; + +public: + + bool try_lock() + { + int r = __sync_lock_test_and_set( &v_, 1 ); + return r == 0; + } + + void lock() + { + for( unsigned k = 0; !try_lock(); ++k ) + { + boost::detail::yield( k ); + } + } + + void unlock() + { + __sync_lock_release( &v_ ); + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT {0} + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/spinlock_w32.hpp b/external/boost/smart_ptr/detail/spinlock_w32.hpp new file mode 100644 index 0000000..fb97629 --- /dev/null +++ b/external/boost/smart_ptr/detail/spinlock_w32.hpp @@ -0,0 +1,113 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 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 +#include + +// BOOST_COMPILER_FENCE + +#if defined(__INTEL_COMPILER) + +#define BOOST_COMPILER_FENCE __memory_barrier(); + +#elif defined( _MSC_VER ) && _MSC_VER >= 1310 + +extern "C" void _ReadWriteBarrier(); +#pragma intrinsic( _ReadWriteBarrier ) + +#define BOOST_COMPILER_FENCE _ReadWriteBarrier(); + +#elif defined(__GNUC__) + +#define BOOST_COMPILER_FENCE __asm__ __volatile__( "" : : : "memory" ); + +#else + +#define BOOST_COMPILER_FENCE + +#endif + +// + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + long v_; + +public: + + bool try_lock() + { + long r = BOOST_INTERLOCKED_EXCHANGE( &v_, 1 ); + + BOOST_COMPILER_FENCE + + return r == 0; + } + + void lock() + { + for( unsigned k = 0; !try_lock(); ++k ) + { + boost::detail::yield( k ); + } + } + + void unlock() + { + BOOST_COMPILER_FENCE + *const_cast< long volatile* >( &v_ ) = 0; + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT {0} + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED diff --git a/external/boost/smart_ptr/detail/yield_k.hpp b/external/boost/smart_ptr/detail/yield_k.hpp new file mode 100644 index 0000000..23eadd8 --- /dev/null +++ b/external/boost/smart_ptr/detail/yield_k.hpp @@ -0,0 +1,149 @@ +#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// yield_k.hpp +// +// Copyright (c) 2008 Peter Dimov +// +// void yield( unsigned k ); +// +// Typical use: +// +// for( unsigned k = 0; !try_lock(); ++k ) yield( k ); +// +// Distributed under the 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_SMT_PAUSE + +#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) ) + +extern "C" void _mm_pause(); +#pragma intrinsic( _mm_pause ) + +#define BOOST_SMT_PAUSE _mm_pause(); + +#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) + +#define BOOST_SMT_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" ); + +#endif + +// + +#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ ) + +#if defined( BOOST_USE_WINDOWS_H ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +#if !defined( BOOST_USE_WINDOWS_H ) + extern "C" void __stdcall Sleep( unsigned long ms ); +#endif + +inline void yield( unsigned k ) +{ + if( k < 4 ) + { + } +#if defined( BOOST_SMT_PAUSE ) + else if( k < 16 ) + { + BOOST_SMT_PAUSE + } +#endif + else if( k < 32 ) + { + Sleep( 0 ); + } + else + { + Sleep( 1 ); + } +} + +} // namespace detail + +} // namespace boost + +#elif defined( BOOST_HAS_PTHREADS ) + +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline void yield( unsigned k ) +{ + if( k < 4 ) + { + } +#if defined( BOOST_SMT_PAUSE ) + else if( k < 16 ) + { + BOOST_SMT_PAUSE + } +#endif + else if( k < 32 || k & 1 ) + { + sched_yield(); + } + else + { + // g++ -Wextra warns on {} or {0} + struct timespec rqtp = { 0, 0 }; + + // POSIX says that timespec has tv_sec and tv_nsec + // But it doesn't guarantee order or placement + + rqtp.tv_sec = 0; + rqtp.tv_nsec = 1000; + + nanosleep( &rqtp, 0 ); + } +} + +} // namespace detail + +} // namespace boost + +#else + +namespace boost +{ + +namespace detail +{ + +inline void yield( unsigned ) +{ +} + +} // namespace detail + +} // namespace boost + +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED diff --git a/external/boost/smart_ptr/enable_shared_from_this.hpp b/external/boost/smart_ptr/enable_shared_from_this.hpp new file mode 100644 index 0000000..f7b1445 --- /dev/null +++ b/external/boost/smart_ptr/enable_shared_from_this.hpp @@ -0,0 +1,79 @@ +#ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED +#define BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED + +// +// enable_shared_from_this.hpp +// +// Copyright 2002, 2009 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 +#include +#include +#include + +namespace boost +{ + +template 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 shared_from_this() + { + shared_ptr p( weak_this_ ); + BOOST_ASSERT( p.get() == this ); + return p; + } + + shared_ptr shared_from_this() const + { + shared_ptr p( weak_this_ ); + BOOST_ASSERT( p.get() == this ); + return p; + } + +public: // actually private, but avoids compiler template friendship issues + + // Note: invoked automatically by shared_ptr; do not call + template void _internal_accept_owner( shared_ptr const * ppx, Y * py ) const + { + if( weak_this_.expired() ) + { + weak_this_ = shared_ptr( *ppx, py ); + } + } + +private: + + mutable weak_ptr weak_this_; +}; + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED diff --git a/external/boost/smart_ptr/intrusive_ptr.hpp b/external/boost/smart_ptr/intrusive_ptr.hpp new file mode 100644 index 0000000..a575223 --- /dev/null +++ b/external/boost/smart_ptr/intrusive_ptr.hpp @@ -0,0 +1,299 @@ +#ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_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 + +#include +#include +#include + +#include // for std::less + +#if !defined(BOOST_NO_IOSTREAM) +#if !defined(BOOST_NO_IOSFWD) +#include // for std::basic_ostream +#else +#include +#endif +#endif + + +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 intrusive_ptr +{ +private: + + typedef intrusive_ptr this_type; + +public: + + typedef T element_type; + + intrusive_ptr(): px( 0 ) + { + } + + intrusive_ptr( T * p, bool add_ref = true ): px( p ) + { + if( px != 0 && add_ref ) intrusive_ptr_add_ref( px ); + } + +#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES) + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + intrusive_ptr( intrusive_ptr const & rhs, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + intrusive_ptr( intrusive_ptr const & rhs ) + +#endif + : px( rhs.get() ) + { + if( px != 0 ) intrusive_ptr_add_ref( px ); + } + +#endif + + intrusive_ptr(intrusive_ptr const & rhs): px( rhs.px ) + { + if( px != 0 ) intrusive_ptr_add_ref( px ); + } + + ~intrusive_ptr() + { + if( px != 0 ) intrusive_ptr_release( px ); + } + +#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES) + + template intrusive_ptr & operator=(intrusive_ptr const & rhs) + { + this_type(rhs).swap(*this); + return *this; + } + +#endif + +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + intrusive_ptr(intrusive_ptr && rhs): px( rhs.px ) + { + rhs.px = 0; + } + + intrusive_ptr & operator=(intrusive_ptr && rhs) + { + this_type( static_cast< intrusive_ptr && >( 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; + } + + void reset() + { + this_type().swap( *this ); + } + + void reset( T * rhs ) + { + this_type( rhs ).swap( *this ); + } + + T * get() const + { + return px; + } + + T & operator*() const + { + BOOST_ASSERT( px != 0 ); + return *px; + } + + T * operator->() const + { + BOOST_ASSERT( px != 0 ); + return px; + } + +// implicit conversion to "bool" +#include + + void swap(intrusive_ptr & rhs) + { + T * tmp = px; + px = rhs.px; + rhs.px = tmp; + } + +private: + + T * px; +}; + +template inline bool operator==(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return a.get() != b.get(); +} + +template inline bool operator==(intrusive_ptr const & a, U * b) +{ + return a.get() == b; +} + +template inline bool operator!=(intrusive_ptr const & a, U * b) +{ + return a.get() != b; +} + +template inline bool operator==(T * a, intrusive_ptr const & b) +{ + return a == b.get(); +} + +template inline bool operator!=(T * a, intrusive_ptr 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 inline bool operator!=(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return a.get() != b.get(); +} + +#endif + +template inline bool operator<(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return std::less()(a.get(), b.get()); +} + +template void swap(intrusive_ptr & lhs, intrusive_ptr & rhs) +{ + lhs.swap(rhs); +} + +// mem_fn support + +template T * get_pointer(intrusive_ptr const & p) +{ + return p.get(); +} + +template intrusive_ptr static_pointer_cast(intrusive_ptr const & p) +{ + return static_cast(p.get()); +} + +template intrusive_ptr const_pointer_cast(intrusive_ptr const & p) +{ + return const_cast(p.get()); +} + +template intrusive_ptr dynamic_pointer_cast(intrusive_ptr const & p) +{ + return dynamic_cast(p.get()); +} + +// operator<< + +#if !defined(BOOST_NO_IOSTREAM) + +#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) && (__GNUC__ < 3) ) + +template std::ostream & operator<< (std::ostream & os, intrusive_ptr 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 basic_ostream & operator<< (basic_ostream & os, intrusive_ptr const & p) +# else +template std::basic_ostream & operator<< (std::basic_ostream & os, intrusive_ptr const & p) +# endif +{ + os << p.get(); + return os; +} + +#endif // _STLP_NO_IOSTREAMS + +#endif // __GNUC__ < 3 + +#endif // !defined(BOOST_NO_IOSTREAM) + +// hash_value + +template< class T > struct hash; + +template< class T > std::size_t hash_value( boost::intrusive_ptr const & p ) +{ + return boost::hash< T* >()( p.get() ); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED diff --git a/external/boost/smart_ptr/make_shared.hpp b/external/boost/smart_ptr/make_shared.hpp new file mode 100644 index 0000000..7b605e2 --- /dev/null +++ b/external/boost/smart_ptr/make_shared.hpp @@ -0,0 +1,981 @@ +#ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED +#define BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED + +// make_shared.hpp +// +// Copyright (c) 2007, 2008 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/make_shared.html +// for documentation. + +#include +#include +#include +#include +#include +#include + +namespace boost +{ + +namespace detail +{ + +template< std::size_t N, std::size_t A > struct sp_aligned_storage +{ + union type + { + char data_[ N ]; + typename boost::type_with_alignment< A >::type align_; + }; +}; + +template< class T > class sp_ms_deleter +{ +private: + + typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type; + + bool initialized_; + storage_type storage_; + +private: + + void destroy() + { + if( initialized_ ) + { +#if defined( __GNUC__ ) + + // fixes incorrect aliasing warning + T * p = reinterpret_cast< T* >( storage_.data_ ); + p->~T(); + +#else + + reinterpret_cast< T* >( storage_.data_ )->~T(); + +#endif + + initialized_ = false; + } + } + +public: + + sp_ms_deleter(): initialized_( false ) + { + } + + // optimization: do not copy storage_ + sp_ms_deleter( sp_ms_deleter const & ): initialized_( false ) + { + } + + ~sp_ms_deleter() + { + destroy(); + } + + void operator()( T * ) + { + destroy(); + } + + void * address() + { + return storage_.data_; + } + + void set_initialized() + { + initialized_ = true; + } +}; + +#if defined( BOOST_HAS_RVALUE_REFS ) + +template< class T > T&& sp_forward( T & t ) +{ + return static_cast< T&& >( t ); +} + +#endif + +} // namespace detail + +#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING ) +# define BOOST_SP_MSD( T ) boost::detail::sp_inplace_tag< boost::detail::sp_ms_deleter< T > >() +#else +# define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >() +#endif + +// Zero-argument versions +// +// Used even when variadic templates are available because of the new T() vs new T issue + +template< class T > boost::shared_ptr< T > make_shared() +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T(); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A > boost::shared_ptr< T > allocate_shared( A const & a ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T(); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#if defined( BOOST_HAS_VARIADIC_TMPL ) && defined( BOOST_HAS_RVALUE_REFS ) + +// Variadic templates, rvalue reference + +template< class T, class Arg1, class... Args > boost::shared_ptr< T > make_shared( Arg1 && arg1, Args && ... args ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( boost::detail::sp_forward( arg1 ), boost::detail::sp_forward( args )... ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class Arg1, class... Args > boost::shared_ptr< T > allocate_shared( A const & a, Arg1 && arg1, Args && ... args ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( boost::detail::sp_forward( arg1 ), boost::detail::sp_forward( args )... ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#elif defined( BOOST_HAS_RVALUE_REFS ) + +// For example MSVC 10.0 + +template< class T, class A1 > +boost::shared_ptr< T > make_shared( A1 && a1 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ), + boost::detail::sp_forward( a7 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ), + boost::detail::sp_forward( a7 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ), + boost::detail::sp_forward( a7 ), + boost::detail::sp_forward( a8 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ), + boost::detail::sp_forward( a7 ), + boost::detail::sp_forward( a8 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > +boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ), + boost::detail::sp_forward( a7 ), + boost::detail::sp_forward( a8 ), + boost::detail::sp_forward( a9 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( + boost::detail::sp_forward( a1 ), + boost::detail::sp_forward( a2 ), + boost::detail::sp_forward( a3 ), + boost::detail::sp_forward( a4 ), + boost::detail::sp_forward( a5 ), + boost::detail::sp_forward( a6 ), + boost::detail::sp_forward( a7 ), + boost::detail::sp_forward( a8 ), + boost::detail::sp_forward( a9 ) + ); + + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#else + +// C++03 version + +template< class T, class A1 > +boost::shared_ptr< T > make_shared( A1 const & a1 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); + + boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#endif + +#undef BOOST_SP_MSD + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED diff --git a/external/boost/smart_ptr/scoped_array.hpp b/external/boost/smart_ptr/scoped_array.hpp new file mode 100644 index 0000000..483460f --- /dev/null +++ b/external/boost/smart_ptr/scoped_array.hpp @@ -0,0 +1,107 @@ +#ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include +#include // in case ptrdiff_t not in std + +#include + +#include // 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 scoped_array // noncopyable +{ +private: + + T * px; + + scoped_array(scoped_array const &); + scoped_array & operator=(scoped_array const &); + + typedef scoped_array this_type; + + void operator==( scoped_array const& ) const; + void operator!=( scoped_array const& ) const; + +public: + + typedef T element_type; + + explicit scoped_array( T * p = 0 ) : px( p ) // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_array_constructor_hook( px ); +#endif + } + + ~scoped_array() // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_array_destructor_hook( px ); +#endif + boost::checked_array_delete( px ); + } + + void reset(T * p = 0) // never throws + { + BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors + this_type(p).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" +#include + + void swap(scoped_array & b) // never throws + { + T * tmp = b.px; + b.px = px; + px = tmp; + } +}; + +template inline void swap(scoped_array & a, scoped_array & b) // never throws +{ + a.swap(b); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED diff --git a/external/boost/smart_ptr/scoped_ptr.hpp b/external/boost/smart_ptr/scoped_ptr.hpp new file mode 100644 index 0000000..df479e5 --- /dev/null +++ b/external/boost/smart_ptr/scoped_ptr.hpp @@ -0,0 +1,131 @@ +#ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_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 +#include +#include + +#ifndef BOOST_NO_AUTO_PTR +# include // 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 scoped_ptr // noncopyable +{ +private: + + T * px; + + scoped_ptr(scoped_ptr const &); + scoped_ptr & operator=(scoped_ptr const &); + + typedef scoped_ptr this_type; + + void operator==( scoped_ptr const& ) const; + void operator!=( scoped_ptr const& ) const; + +public: + + typedef T element_type; + + explicit scoped_ptr( T * p = 0 ): px( p ) // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_constructor_hook( px ); +#endif + } + +#ifndef BOOST_NO_AUTO_PTR + + explicit scoped_ptr( std::auto_ptr p ): px( p.release() ) // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_constructor_hook( px ); +#endif + } + +#endif + + ~scoped_ptr() // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_destructor_hook( px ); +#endif + boost::checked_delete( px ); + } + + void reset(T * p = 0) // never throws + { + BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors + this_type(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; + } + +// implicit conversion to "bool" +#include + + void swap(scoped_ptr & b) // never throws + { + T * tmp = b.px; + b.px = px; + px = tmp; + } +}; + +template inline void swap(scoped_ptr & a, scoped_ptr & b) // never throws +{ + a.swap(b); +} + +// get_pointer(p) is a generic way to say p.get() + +template inline T * get_pointer(scoped_ptr const & p) +{ + return p.get(); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED diff --git a/external/boost/smart_ptr/shared_array.hpp b/external/boost/smart_ptr/shared_array.hpp new file mode 100644 index 0000000..36799e6 --- /dev/null +++ b/external/boost/smart_ptr/shared_array.hpp @@ -0,0 +1,175 @@ +#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED +#define BOOST_SMART_PTR_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 // for broken compiler workarounds + +#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +#include +#else + +#include // TR1 cyclic inclusion fix + +#include +#include + +#include +#include + +#include // for std::ptrdiff_t +#include // for std::swap +#include // 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 shared_array +{ +private: + + // Borland 5.5.1 specific workarounds + typedef checked_array_deleter deleter; + typedef shared_array 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 shared_array(T * p, D d): px(p), pn(p, d) + { + } + +// generated copy constructor, destructor are fine... + +#if defined( BOOST_HAS_RVALUE_REFS ) + +// ... except in C++0x, move disables the implicit copy + + shared_array( shared_array const & r ): px( r.px ), pn( r.pn ) // never throws + { + } + +#endif + + // assignment + + shared_array & operator=( shared_array const & r ) // never throws + { + this_type( r ).swap( *this ); + return *this; + } + + void reset(T * p = 0) + { + BOOST_ASSERT(p == 0 || p != px); + this_type(p).swap(*this); + } + + template 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" +#include + + bool unique() const // never throws + { + return pn.unique(); + } + + long use_count() const // never throws + { + return pn.use_count(); + } + + void swap(shared_array & other) // never throws + { + std::swap(px, other.px); + pn.swap(other.pn); + } + + void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const + { + return pn.get_deleter( ti ); + } + +private: + + T * px; // contained pointer + detail::shared_count pn; // reference counter + +}; // shared_array + +template inline bool operator==(shared_array const & a, shared_array const & b) // never throws +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_array const & a, shared_array const & b) // never throws +{ + return a.get() != b.get(); +} + +template inline bool operator<(shared_array const & a, shared_array const & b) // never throws +{ + return std::less()(a.get(), b.get()); +} + +template void swap(shared_array & a, shared_array & b) // never throws +{ + a.swap(b); +} + +template< class D, class T > D * get_deleter( shared_array const & p ) +{ + return static_cast< D * >( p._internal_get_deleter( BOOST_SP_TYPEID(D) ) ); +} + +} // namespace boost + +#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) + +#endif // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED diff --git a/external/boost/smart_ptr/shared_ptr.hpp b/external/boost/smart_ptr/shared_ptr.hpp new file mode 100644 index 0000000..1bfb75c --- /dev/null +++ b/external/boost/smart_ptr/shared_ptr.hpp @@ -0,0 +1,717 @@ +#ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED + +// +// shared_ptr.hpp +// +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001-2008 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 // for broken compiler workarounds + +#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +#include +#else + +// In order to avoid circular dependencies with Boost.TR1 +// we make sure that our include of doesn't try to +// pull in the TR1 headers: that's why we use this header +// rather than including directly: +#include // std::auto_ptr + +#include +#include +#include +#include +#include +#include + +#if !defined(BOOST_SP_NO_ATOMIC_ACCESS) +#include +#include +#endif + +#include // for std::swap +#include // for std::less +#include // for std::bad_cast +#include // for std::size_t + +#if !defined(BOOST_NO_IOSTREAM) +#if !defined(BOOST_NO_IOSFWD) +#include // for std::basic_ostream +#else +#include +#endif +#endif + +namespace boost +{ + +template class shared_ptr; +template class weak_ptr; +template class enable_shared_from_this; +template class enable_shared_from_this2; + +namespace detail +{ + +struct static_cast_tag {}; +struct const_cast_tag {}; +struct dynamic_cast_tag {}; +struct polymorphic_cast_tag {}; + +template struct shared_ptr_traits +{ + typedef T & reference; +}; + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +#endif + +// enable_shared_from_this support + +template< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr const * ppx, Y const * py, boost::enable_shared_from_this< T > const * pe ) +{ + if( pe != 0 ) + { + pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) ); + } +} + +template< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr * ppx, Y const * py, boost::enable_shared_from_this2< T > const * pe ) +{ + if( pe != 0 ) + { + pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) ); + } +} + +#ifdef _MANAGED + +// Avoid C4793, ... causes native code generation + +struct sp_any_pointer +{ + template sp_any_pointer( T* ) {} +}; + +inline void sp_enable_shared_from_this( sp_any_pointer, sp_any_pointer, sp_any_pointer ) +{ +} + +#else // _MANAGED + +inline void sp_enable_shared_from_this( ... ) +{ +} + +#endif // _MANAGED + +#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 shared_ptr +{ +private: + + // Borland 5.5.1 specific workaround + typedef shared_ptr this_type; + +public: + + typedef T element_type; + typedef T value_type; + typedef T * pointer; + typedef typename boost::detail::shared_ptr_traits::reference reference; + + shared_ptr(): px(0), pn() // never throws in 1.30+ + { + } + + template + explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete + { + boost::detail::sp_enable_shared_from_this( this, p, p ); + } + + // + // Requirements: D's copy constructor must not throw + // + // shared_ptr will release p by calling d(p) + // + + template shared_ptr(Y * p, D d): px(p), pn(p, d) + { + boost::detail::sp_enable_shared_from_this( this, p, p ); + } + + // As above, but with allocator. A's copy constructor shall not throw. + + template shared_ptr( Y * p, D d, A a ): px( p ), pn( p, d, a ) + { + boost::detail::sp_enable_shared_from_this( this, p, p ); + } + +// generated copy constructor, destructor are fine... + +#if defined( BOOST_HAS_RVALUE_REFS ) + +// ... except in C++0x, move disables the implicit copy + + shared_ptr( shared_ptr const & r ): px( r.px ), pn( r.pn ) // never throws + { + } + +#endif + + template + explicit shared_ptr(weak_ptr 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 + shared_ptr( weak_ptr const & r, boost::detail::sp_nothrow_tag ): px( 0 ), pn( r.pn, boost::detail::sp_nothrow_tag() ) // never throws + { + if( !pn.empty() ) + { + px = r.px; + } + } + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + shared_ptr( shared_ptr const & r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + shared_ptr( shared_ptr const & r ) + +#endif + : px( r.px ), pn( r.pn ) // never throws + { + } + + // aliasing + template< class Y > + shared_ptr( shared_ptr const & r, T * p ): px( p ), pn( r.pn ) // never throws + { + } + + template + shared_ptr(shared_ptr const & r, boost::detail::static_cast_tag): px(static_cast(r.px)), pn(r.pn) + { + } + + template + shared_ptr(shared_ptr const & r, boost::detail::const_cast_tag): px(const_cast(r.px)), pn(r.pn) + { + } + + template + shared_ptr(shared_ptr const & r, boost::detail::dynamic_cast_tag): px(dynamic_cast(r.px)), pn(r.pn) + { + if(px == 0) // need to allocate new counter -- the cast failed + { + pn = boost::detail::shared_count(); + } + } + + template + shared_ptr(shared_ptr const & r, boost::detail::polymorphic_cast_tag): px(dynamic_cast(r.px)), pn(r.pn) + { + if(px == 0) + { + boost::throw_exception(std::bad_cast()); + } + } + +#ifndef BOOST_NO_AUTO_PTR + + template + explicit shared_ptr(std::auto_ptr & r): px(r.get()), pn() + { + Y * tmp = r.get(); + pn = boost::detail::shared_count(r); + boost::detail::sp_enable_shared_from_this( this, tmp, tmp ); + } + +#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) + + template + explicit shared_ptr( Ap r, typename boost::detail::sp_enable_if_auto_ptr::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( this, tmp, tmp ); + } + + +#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_NO_AUTO_PTR + + // assignment + + shared_ptr & operator=( shared_ptr const & r ) // never throws + { + this_type(r).swap(*this); + return *this; + } + +#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400) + + template + shared_ptr & operator=(shared_ptr const & r) // never throws + { + this_type(r).swap(*this); + return *this; + } + +#endif + +#ifndef BOOST_NO_AUTO_PTR + + template + shared_ptr & operator=( std::auto_ptr & r ) + { + this_type(r).swap(*this); + return *this; + } + +#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) + + template + 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 + +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + shared_ptr( shared_ptr && r ): px( r.px ), pn() // never throws + { + pn.swap( r.pn ); + r.px = 0; + } + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + shared_ptr( shared_ptr && r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + shared_ptr( shared_ptr && r ) + +#endif + : px( r.px ), pn() // never throws + { + pn.swap( r.pn ); + r.px = 0; + } + + shared_ptr & operator=( shared_ptr && r ) // never throws + { + this_type( static_cast< shared_ptr && >( r ) ).swap( *this ); + return *this; + } + + template + shared_ptr & operator=( shared_ptr && r ) // never throws + { + this_type( static_cast< shared_ptr && >( r ) ).swap( *this ); + return *this; + } + +#endif + + void reset() // never throws in 1.30+ + { + this_type().swap(*this); + } + + template void reset(Y * p) // Y must be complete + { + BOOST_ASSERT(p == 0 || p != px); // catch self-reset errors + this_type(p).swap(*this); + } + + template void reset( Y * p, D d ) + { + this_type( p, d ).swap( *this ); + } + + template void reset( Y * p, D d, A a ) + { + this_type( p, d, a ).swap( *this ); + } + + template void reset( shared_ptr const & r, T * p ) + { + this_type( r, p ).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" +#include + + bool unique() const // never throws + { + return pn.unique(); + } + + long use_count() const // never throws + { + return pn.use_count(); + } + + void swap(shared_ptr & other) // never throws + { + std::swap(px, other.px); + pn.swap(other.pn); + } + + template bool owner_before( shared_ptr const & rhs ) const + { + return pn < rhs.pn; + } + + template bool owner_before( weak_ptr const & rhs ) const + { + return pn < rhs.pn; + } + + void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const + { + return pn.get_deleter( ti ); + } + + bool _internal_equiv( shared_ptr const & r ) const + { + return px == r.px && pn == r.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 friend class shared_ptr; + template friend class weak_ptr; + + +#endif + + T * px; // contained pointer + boost::detail::shared_count pn; // reference counter + +}; // shared_ptr + +template inline bool operator==(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_ptr const & a, shared_ptr 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 inline bool operator!=(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() != b.get(); +} + +#endif + +template inline bool operator<(shared_ptr const & a, shared_ptr const & b) +{ + return a.owner_before( b ); +} + +template inline void swap(shared_ptr & a, shared_ptr & b) +{ + a.swap(b); +} + +template shared_ptr static_pointer_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::static_cast_tag()); +} + +template shared_ptr const_pointer_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::const_cast_tag()); +} + +template shared_ptr dynamic_pointer_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::dynamic_cast_tag()); +} + +// shared_*_cast names are deprecated. Use *_pointer_cast instead. + +template shared_ptr shared_static_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::static_cast_tag()); +} + +template shared_ptr shared_dynamic_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::dynamic_cast_tag()); +} + +template shared_ptr shared_polymorphic_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::polymorphic_cast_tag()); +} + +template shared_ptr shared_polymorphic_downcast(shared_ptr const & r) +{ + BOOST_ASSERT(dynamic_cast(r.get()) == r.get()); + return shared_static_cast(r); +} + +// get_pointer() enables boost::mem_fn to recognize shared_ptr + +template inline T * get_pointer(shared_ptr const & p) +{ + return p.get(); +} + +// operator<< + +#if !defined(BOOST_NO_IOSTREAM) + +#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) && (__GNUC__ < 3) ) + +template std::ostream & operator<< (std::ostream & os, shared_ptr 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 basic_ostream & operator<< (basic_ostream & os, shared_ptr const & p) +# else +template std::basic_ostream & operator<< (std::basic_ostream & os, shared_ptr const & p) +# endif +{ + os << p.get(); + return os; +} + +#endif // _STLP_NO_IOSTREAMS + +#endif // __GNUC__ < 3 + +#endif // !defined(BOOST_NO_IOSTREAM) + +// get_deleter + +#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(void *) +// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it + +template D * get_deleter(shared_ptr const & p) +{ + void const * q = p._internal_get_deleter(BOOST_SP_TYPEID(D)); + return const_cast(static_cast(q)); +} + +#else + +template D * get_deleter(shared_ptr const & p) +{ + return static_cast(p._internal_get_deleter(BOOST_SP_TYPEID(D))); +} + +#endif + +// atomic access + +#if !defined(BOOST_SP_NO_ATOMIC_ACCESS) + +template inline bool atomic_is_lock_free( shared_ptr const * /*p*/ ) +{ + return false; +} + +template shared_ptr atomic_load( shared_ptr const * p ) +{ + boost::detail::spinlock_pool<2>::scoped_lock lock( p ); + return *p; +} + +template inline shared_ptr atomic_load_explicit( shared_ptr const * p, memory_order /*mo*/ ) +{ + return atomic_load( p ); +} + +template void atomic_store( shared_ptr * p, shared_ptr r ) +{ + boost::detail::spinlock_pool<2>::scoped_lock lock( p ); + p->swap( r ); +} + +template inline void atomic_store_explicit( shared_ptr * p, shared_ptr r, memory_order /*mo*/ ) +{ + atomic_store( p, r ); // std::move( r ) +} + +template shared_ptr atomic_exchange( shared_ptr * p, shared_ptr r ) +{ + boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p ); + + sp.lock(); + p->swap( r ); + sp.unlock(); + + return r; // return std::move( r ) +} + +template shared_ptr atomic_exchange_explicit( shared_ptr * p, shared_ptr r, memory_order /*mo*/ ) +{ + return atomic_exchange( p, r ); // std::move( r ) +} + +template bool atomic_compare_exchange( shared_ptr * p, shared_ptr * v, shared_ptr w ) +{ + boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p ); + + sp.lock(); + + if( p->_internal_equiv( *v ) ) + { + p->swap( w ); + + sp.unlock(); + + return true; + } + else + { + shared_ptr tmp( *p ); + + sp.unlock(); + + tmp.swap( *v ); + return false; + } +} + +template inline bool atomic_compare_exchange_explicit( shared_ptr * p, shared_ptr * v, shared_ptr w, memory_order /*success*/, memory_order /*failure*/ ) +{ + return atomic_compare_exchange( p, v, w ); // std::move( w ) +} + +#endif // !defined(BOOST_SP_NO_ATOMIC_ACCESS) + +// hash_value + +template< class T > struct hash; + +template< class T > std::size_t hash_value( boost::shared_ptr const & p ) +{ + return boost::hash< T* >()( p.get() ); +} + +} // namespace boost + +#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) + +#endif // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED diff --git a/external/boost/smart_ptr/weak_ptr.hpp b/external/boost/smart_ptr/weak_ptr.hpp new file mode 100644 index 0000000..2e35583 --- /dev/null +++ b/external/boost/smart_ptr/weak_ptr.hpp @@ -0,0 +1,242 @@ +#ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_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 // boost.TR1 include order fix +#include +#include + +namespace boost +{ + +template class weak_ptr +{ +private: + + // Borland 5.5.1 specific workarounds + typedef weak_ptr this_type; + +public: + + typedef T element_type; + + weak_ptr(): px(0), pn() // never throws in 1.30+ + { + } + +// generated copy constructor, assignment, destructor are fine... + +#if defined( BOOST_HAS_RVALUE_REFS ) + +// ... except in C++0x, move disables the implicit copy + + weak_ptr( weak_ptr const & r ): px( r.px ), pn( r.pn ) // never throws + { + } + + weak_ptr & operator=( weak_ptr const & r ) // never throws + { + px = r.px; + pn = r.pn; + return *this; + } + +#endif + +// +// The "obvious" converting constructor implementation: +// +// template +// weak_ptr(weak_ptr 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 +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + weak_ptr( weak_ptr const & r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + weak_ptr( weak_ptr const & r ) + +#endif + : px(r.lock().get()), pn(r.pn) // never throws + { + } + +#if defined( BOOST_HAS_RVALUE_REFS ) + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + weak_ptr( weak_ptr && r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + weak_ptr( weak_ptr && r ) + +#endif + : px( r.lock().get() ), pn( static_cast< boost::detail::weak_count && >( r.pn ) ) // never throws + { + r.px = 0; + } + + // for better efficiency in the T == Y case + weak_ptr( weak_ptr && r ): px( r.px ), pn( static_cast< boost::detail::weak_count && >( r.pn ) ) // never throws + { + r.px = 0; + } + + // for better efficiency in the T == Y case + weak_ptr & operator=( weak_ptr && r ) // never throws + { + this_type( static_cast< weak_ptr && >( r ) ).swap( *this ); + return *this; + } + + +#endif + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + weak_ptr( shared_ptr const & r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + weak_ptr( shared_ptr const & r ) + +#endif + : px( r.px ), pn( r.pn ) // never throws + { + } + +#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300) + + template + weak_ptr & operator=(weak_ptr const & r) // never throws + { + px = r.lock().get(); + pn = r.pn; + return *this; + } + +#if defined( BOOST_HAS_RVALUE_REFS ) + + template + weak_ptr & operator=( weak_ptr && r ) + { + this_type( static_cast< weak_ptr && >( r ) ).swap( *this ); + return *this; + } + +#endif + + template + weak_ptr & operator=(shared_ptr const & r) // never throws + { + px = r.px; + pn = r.pn; + return *this; + } + +#endif + + shared_ptr lock() const // never throws + { + return shared_ptr( *this, boost::detail::sp_nothrow_tag() ); + } + + long use_count() const // never throws + { + return pn.use_count(); + } + + bool expired() const // never throws + { + return pn.use_count() == 0; + } + + bool _empty() const // extension, not in std::weak_ptr + { + return pn.empty(); + } + + 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 bool owner_before( weak_ptr const & rhs ) const + { + return pn < rhs.pn; + } + + template bool owner_before( shared_ptr 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 friend class weak_ptr; + template friend class shared_ptr; + +#endif + + T * px; // contained pointer + boost::detail::weak_count pn; // reference counter + +}; // weak_ptr + +template inline bool operator<(weak_ptr const & a, weak_ptr const & b) +{ + return a.owner_before( b ); +} + +template void swap(weak_ptr & a, weak_ptr & b) +{ + a.swap(b); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED diff --git a/external/boost/static_assert.hpp b/external/boost/static_assert.hpp new file mode 100644 index 0000000..9fe9bc0 --- /dev/null +++ b/external/boost/static_assert.hpp @@ -0,0 +1,138 @@ +// (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 +#include + +#ifndef BOOST_NO_STATIC_ASSERT +# define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert(B, Msg) +#else +# define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B ) +#endif + +#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 + +// +// If the compiler issues warnings about old C style casts, +// then enable this: +// +#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))) +# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true) +#else +# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x) +#endif + +#ifndef BOOST_NO_STATIC_ASSERT +# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B) +#else + +namespace boost{ + +// HP aCC cannot deal with missing names for template value parameters +template struct STATIC_ASSERTION_FAILURE; + +template <> struct STATIC_ASSERTION_FAILURE { enum { value = 1 }; }; + +// HP aCC cannot deal with missing names for template value parameters +template 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< BOOST_STATIC_ASSERT_BOOL_CAST ( 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< BOOST_STATIC_ASSERT_BOOL_CAST( 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< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) ) +#else +// generic version +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( 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 // defined(BOOST_NO_STATIC_ASSERT) + +#endif // BOOST_STATIC_ASSERT_HPP + + diff --git a/external/boost/swap.hpp b/external/boost/swap.hpp new file mode 100644 index 0000000..dfc11f0 --- /dev/null +++ b/external/boost/swap.hpp @@ -0,0 +1,12 @@ +// Copyright (C) 2007 Joseph Gauterin +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_SWAP_HPP +#define BOOST_SWAP_HPP + +#include "boost/utility/swap.hpp" + +#endif diff --git a/external/boost/system/api_config.hpp b/external/boost/system/api_config.hpp new file mode 100644 index 0000000..28b8bec --- /dev/null +++ b/external/boost/system/api_config.hpp @@ -0,0 +1,42 @@ +// boost/system/api_config.hpp -------------------------------------------------------// + +// Copyright Beman Dawes 2003, 2006, 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// See http://www.boost.org/libs/system for documentation. + +//--------------------------------------------------------------------------------------// + +// Boost.System calls operating system API functions to implement system error category +// functions. Usually there is no question as to which API is to be used. +// +// In the case of MinGW or Cygwin/MinGW, however, both POSIX and Windows API's are +// available. Chaos ensues if other code thinks one is in use when Boost.System was +// actually built with the other. This header centralizes the API choice and prevents +// user definition of API macros, thus elminating the possibility of mismatches and the +// need to test configurations with little or no practical value. +// + +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_SYSTEM_API_CONFIG_HPP +#define BOOST_SYSTEM_API_CONFIG_HPP + +# if defined(BOOST_POSIX_API) || defined(BOOST_WINDOWS_API) +# error user defined BOOST_POSIX_API or BOOST_WINDOWS_API not supported +# endif + +// BOOST_POSIX_API or BOOST_WINDOWS_API specify which API to use +// Cygwin/MinGW does not predefine _WIN32. +// Standalone MinGW and all other known Windows compilers do predefine _WIN32 +// Compilers that predefine _WIN32 or __MINGW32__ do so for Windows 64-bit builds too. + +# if defined(_WIN32) || defined(__CYGWIN__) // Windows default, including MinGW and Cygwin +# define BOOST_WINDOWS_API +# else +# define BOOST_POSIX_API +# endif + +#endif // BOOST_SYSTEM_API_CONFIG_HPP diff --git a/external/boost/system/config.hpp b/external/boost/system/config.hpp new file mode 100644 index 0000000..bf78051 --- /dev/null +++ b/external/boost/system/config.hpp @@ -0,0 +1,52 @@ +// boost/system/config.hpp -----------------------------------------------------------// + +// Copyright Beman Dawes 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) + +// See http://www.boost.org/libs/system for documentation. + +#ifndef BOOST_SYSTEM_CONFIG_HPP +#define BOOST_SYSTEM_CONFIG_HPP + +#include +#include // for BOOST_POSIX_API or BOOST_WINDOWS_API + +// This header implements separate compilation features as described in +// http://www.boost.org/more/separate_compilation.html + +// enable dynamic or static linking as requested --------------------------------------// + +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SYSTEM_DYN_LINK) +# if defined(BOOST_SYSTEM_SOURCE) +# define BOOST_SYSTEM_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_SYSTEM_DECL BOOST_SYMBOL_IMPORT +# endif +#else +# define BOOST_SYSTEM_DECL +#endif + +// enable automatic library variant selection ----------------------------------------// + +#if !defined(BOOST_SYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SYSTEM_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_system +// +// If we're importing code from a dll, then tell auto_link.hpp about it: +// +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SYSTEM_DYN_LINK) +# define BOOST_DYN_LINK +#endif +// +// And include the header that does the work: +// +#include +#endif // auto-linking disabled + +#endif // BOOST_SYSTEM_CONFIG_HPP + diff --git a/external/boost/system/error_code.hpp b/external/boost/system/error_code.hpp new file mode 100644 index 0000000..b22775f --- /dev/null +++ b/external/boost/system/error_code.hpp @@ -0,0 +1,513 @@ +// boost/system/error_code.hpp ---------------------------------------------// + +// Copyright Beman Dawes 2006, 2007 +// Copyright Christoper Kohlhoff 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 library home page at http://www.boost.org/libs/system + +#ifndef BOOST_ERROR_CODE_HPP +#define BOOST_ERROR_CODE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// TODO: undef these macros if not already defined +#include + +#if !defined(BOOST_POSIX_API) && !defined(BOOST_WINDOWS_API) +# error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined +#endif + +#include // must be the last #include + +namespace boost +{ + namespace system + { + + class error_code; + class error_condition; + + // "Concept" helpers ---------------------------------------------------// + + template< class T > + struct is_error_code_enum { static const bool value = false; }; + + template< class T > + struct is_error_condition_enum { static const bool value = false; }; + + // generic error_conditions --------------------------------------------// + + namespace errc + { + enum errc_t + { + success = 0, + address_family_not_supported = EAFNOSUPPORT, + address_in_use = EADDRINUSE, + address_not_available = EADDRNOTAVAIL, + already_connected = EISCONN, + argument_list_too_long = E2BIG, + argument_out_of_domain = EDOM, + bad_address = EFAULT, + bad_file_descriptor = EBADF, + bad_message = EBADMSG, + broken_pipe = EPIPE, + connection_aborted = ECONNABORTED, + connection_already_in_progress = EALREADY, + connection_refused = ECONNREFUSED, + connection_reset = ECONNRESET, + cross_device_link = EXDEV, + destination_address_required = EDESTADDRREQ, + device_or_resource_busy = EBUSY, + directory_not_empty = ENOTEMPTY, + executable_format_error = ENOEXEC, + file_exists = EEXIST, + file_too_large = EFBIG, + filename_too_long = ENAMETOOLONG, + function_not_supported = ENOSYS, + host_unreachable = EHOSTUNREACH, + identifier_removed = EIDRM, + illegal_byte_sequence = EILSEQ, + inappropriate_io_control_operation = ENOTTY, + interrupted = EINTR, + invalid_argument = EINVAL, + invalid_seek = ESPIPE, + io_error = EIO, + is_a_directory = EISDIR, + message_size = EMSGSIZE, + network_down = ENETDOWN, + network_reset = ENETRESET, + network_unreachable = ENETUNREACH, + no_buffer_space = ENOBUFS, + no_child_process = ECHILD, + no_link = ENOLINK, + no_lock_available = ENOLCK, + no_message_available = ENODATA, + no_message = ENOMSG, + no_protocol_option = ENOPROTOOPT, + no_space_on_device = ENOSPC, + no_stream_resources = ENOSR, + no_such_device_or_address = ENXIO, + no_such_device = ENODEV, + no_such_file_or_directory = ENOENT, + no_such_process = ESRCH, + not_a_directory = ENOTDIR, + not_a_socket = ENOTSOCK, + not_a_stream = ENOSTR, + not_connected = ENOTCONN, + not_enough_memory = ENOMEM, + not_supported = ENOTSUP, + operation_canceled = ECANCELED, + operation_in_progress = EINPROGRESS, + operation_not_permitted = EPERM, + operation_not_supported = EOPNOTSUPP, + operation_would_block = EWOULDBLOCK, + owner_dead = EOWNERDEAD, + permission_denied = EACCES, + protocol_error = EPROTO, + protocol_not_supported = EPROTONOSUPPORT, + read_only_file_system = EROFS, + resource_deadlock_would_occur = EDEADLK, + resource_unavailable_try_again = EAGAIN, + result_out_of_range = ERANGE, + state_not_recoverable = ENOTRECOVERABLE, + stream_timeout = ETIME, + text_file_busy = ETXTBSY, + timed_out = ETIMEDOUT, + too_many_files_open_in_system = ENFILE, + too_many_files_open = EMFILE, + too_many_links = EMLINK, + too_many_symbolic_link_levels = ELOOP, + value_too_large = EOVERFLOW, + wrong_protocol_type = EPROTOTYPE + }; + + } // namespace errc + +# ifndef BOOST_SYSTEM_NO_DEPRECATED + namespace posix = errc; + namespace posix_error = errc; +# endif + + template<> struct is_error_condition_enum + { static const bool value = true; }; + + + // ----------------------------------------------------------------------// + + // Operating system specific interfaces --------------------------------// + + + // The interface is divided into general and system-specific portions to + // meet these requirements: + // + // * Code calling an operating system API can create an error_code with + // a single category (system_category), even for POSIX-like operating + // systems that return some POSIX errno values and some native errno + // values. This code should not have to pay the cost of distinguishing + // between categories, since it is not yet known if that is needed. + // + // * Users wishing to write system-specific code should be given enums for + // at least the common error cases. + // + // * System specific code should fail at compile time if moved to another + // operating system. + + // The system specific portions of the interface are located in headers + // with names reflecting the operating system. For example, + // + // + // + // + // + // These headers are effectively empty for compiles on operating systems + // where they are not applicable. + + // ----------------------------------------------------------------------// + + // class error_category ------------------------------------------------// + + class error_category : public noncopyable + { + public: + virtual ~error_category(){} + + virtual const char * name() const = 0; + virtual std::string message( int ev ) const = 0; + virtual error_condition default_error_condition( int ev ) const; + virtual bool equivalent( int code, + const error_condition & condition ) const; + virtual bool equivalent( const error_code & code, + int condition ) const; + + bool operator==(const error_category & rhs) const { return this == &rhs; } + bool operator!=(const error_category & rhs) const { return this != &rhs; } + bool operator<( const error_category & rhs ) const + { + return std::less()( this, &rhs ); + } + }; + + // predefined error categories -----------------------------------------// + + BOOST_SYSTEM_DECL const error_category & system_category(); + BOOST_SYSTEM_DECL const error_category & generic_category(); + + // deprecated synonyms --------------------------------------------------// + +# ifndef BOOST_SYSTEM_NO_DEPRECATED + inline const error_category & get_system_category() { return system_category(); } + inline const error_category & get_generic_category() { return generic_category(); } + inline const error_category & get_posix_category() { return generic_category(); } + static const error_category & posix_category = generic_category(); + static const error_category & errno_ecat = generic_category(); + static const error_category & native_ecat = system_category(); +# endif + + // class error_condition -----------------------------------------------// + + // error_conditions are portable, error_codes are system or library specific + + class error_condition + { + public: + + // constructors: + error_condition() : m_val(0), m_cat(&generic_category()) {} + error_condition( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {} + + template + error_condition(ErrorConditionEnum e, + typename boost::enable_if >::type* = 0) + { + *this = make_error_condition(e); + } + + // modifiers: + + void assign( int val, const error_category & cat ) + { + m_val = val; + m_cat = &cat; + } + + template + typename boost::enable_if, error_condition>::type & + operator=( ErrorConditionEnum val ) + { + *this = make_error_condition(val); + return *this; + } + + void clear() + { + m_val = 0; + m_cat = &generic_category(); + } + + // observers: + int value() const { return m_val; } + const error_category & category() const { return *m_cat; } + std::string message() const { return m_cat->message(value()); } + + typedef void (*unspecified_bool_type)(); + static void unspecified_bool_true() {} + + operator unspecified_bool_type() const // true if error + { + return m_val == 0 ? 0 : unspecified_bool_true; + } + + bool operator!() const // true if no error + { + return m_val == 0; + } + + // relationals: + // the more symmetrical non-member syntax allows enum + // conversions work for both rhs and lhs. + inline friend bool operator==( const error_condition & lhs, + const error_condition & rhs ) + { + return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val; + } + + inline friend bool operator<( const error_condition & lhs, + const error_condition & rhs ) + // the more symmetrical non-member syntax allows enum + // conversions work for both rhs and lhs. + { + return lhs.m_cat < rhs.m_cat + || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val); + } + + private: + int m_val; + const error_category * m_cat; + + }; + + // class error_code ----------------------------------------------------// + + // We want error_code to be a value type that can be copied without slicing + // and without requiring heap allocation, but we also want it to have + // polymorphic behavior based on the error category. This is achieved by + // abstract base class error_category supplying the polymorphic behavior, + // and error_code containing a pointer to an object of a type derived + // from error_category. + class error_code + { + public: + + // constructors: + error_code() : m_val(0), m_cat(&system_category()) {} + error_code( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {} + + template + error_code(ErrorCodeEnum e, + typename boost::enable_if >::type* = 0) + { + *this = make_error_code(e); + } + + // modifiers: + void assign( int val, const error_category & cat ) + { + m_val = val; + m_cat = &cat; + } + + template + typename boost::enable_if, error_code>::type & + operator=( ErrorCodeEnum val ) + { + *this = make_error_code(val); + return *this; + } + + void clear() + { + m_val = 0; + m_cat = &system_category(); + } + + // observers: + int value() const { return m_val; } + const error_category & category() const { return *m_cat; } + error_condition default_error_condition() const { return m_cat->default_error_condition(value()); } + std::string message() const { return m_cat->message(value()); } + + typedef void (*unspecified_bool_type)(); + static void unspecified_bool_true() {} + + operator unspecified_bool_type() const // true if error + { + return m_val == 0 ? 0 : unspecified_bool_true; + } + + bool operator!() const // true if no error + { + return m_val == 0; + } + + // relationals: + inline friend bool operator==( const error_code & lhs, + const error_code & rhs ) + // the more symmetrical non-member syntax allows enum + // conversions work for both rhs and lhs. + { + return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val; + } + + inline friend bool operator<( const error_code & lhs, + const error_code & rhs ) + // the more symmetrical non-member syntax allows enum + // conversions work for both rhs and lhs. + { + return lhs.m_cat < rhs.m_cat + || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val); + } + + private: + int m_val; + const error_category * m_cat; + + }; + + // predefined error_code object used as "throw on error" tag +# ifndef BOOST_SYSTEM_NO_DEPRECATED + BOOST_SYSTEM_DECL extern error_code throws; +# endif + + // Moving from a "throws" object to a "throws" function without breaking + // existing code is a bit of a problem. The workaround is to place the + // "throws" function in namespace boost rather than namespace boost::system. + + } // namespace system + + namespace detail { inline system::error_code * throws() { return 0; } } + // Misuse of the error_code object is turned into a noisy failure by + // poisoning the reference. This particular implementation doesn't + // produce warnings or errors from popular compilers, is very efficient + // (as determined by inspecting generated code), and does not suffer + // from order of initialization problems. In practice, it also seems + // cause user function error handling implementation errors to be detected + // very early in the development cycle. + + inline system::error_code & throws() + { return *detail::throws(); } + + namespace system + { + // non-member functions ------------------------------------------------// + + inline bool operator!=( const error_code & lhs, + const error_code & rhs ) + { + return !(lhs == rhs); + } + + inline bool operator!=( const error_condition & lhs, + const error_condition & rhs ) + { + return !(lhs == rhs); + } + + inline bool operator==( const error_code & code, + const error_condition & condition ) + { + return code.category().equivalent( code.value(), condition ) + || condition.category().equivalent( code, condition.value() ); + } + + inline bool operator!=( const error_code & lhs, + const error_condition & rhs ) + { + return !(lhs == rhs); + } + + inline bool operator==( const error_condition & condition, + const error_code & code ) + { + return condition.category().equivalent( code, condition.value() ) + || code.category().equivalent( code.value(), condition ); + } + + inline bool operator!=( const error_condition & lhs, + const error_code & rhs ) + { + return !(lhs == rhs); + } + + // TODO: both of these may move elsewhere, but the LWG hasn't spoken yet. + + template + inline std::basic_ostream& + operator<< (std::basic_ostream& os, error_code ec) + { + os << ec.category().name() << ':' << ec.value(); + return os; + } + + inline std::size_t hash_value( const error_code & ec ) + { + return static_cast(ec.value()) + + reinterpret_cast(&ec.category()); + } + + // make_* functions for errc::errc_t -----------------------------// + + namespace errc + { + // explicit conversion: + inline error_code make_error_code( errc_t e ) + { return error_code( e, generic_category() ); } + + // implicit conversion: + inline error_condition make_error_condition( errc_t e ) + { return error_condition( e, generic_category() ); } + } + + // error_category default implementation -------------------------------// + + inline error_condition error_category::default_error_condition( int ev ) const + { + return error_condition( ev, *this ); + } + + inline bool error_category::equivalent( int code, + const error_condition & condition ) const + { + return default_error_condition( code ) == condition; + } + + inline bool error_category::equivalent( const error_code & code, + int condition ) const + { + return *this == code.category() && code.value() == condition; + } + + } // namespace system +} // namespace boost + +#include // pops abi_prefix.hpp pragmas + +# ifdef BOOST_ERROR_CODE_HEADER_ONLY +# include +# endif + +#endif // BOOST_ERROR_CODE_HPP + + diff --git a/external/boost/system/system_error.hpp b/external/boost/system/system_error.hpp new file mode 100644 index 0000000..065d365 --- /dev/null +++ b/external/boost/system/system_error.hpp @@ -0,0 +1,80 @@ +// Boost system_error.hpp --------------------------------------------------// + +// Copyright Beman Dawes 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_SYSTEM_ERROR_HPP +#define BOOST_SYSTEM_ERROR_HPP + +#include +#include +#include +#include + +namespace boost +{ + namespace system + { + // class system_error ------------------------------------------------------------// + + class BOOST_SYMBOL_VISIBLE system_error : public std::runtime_error + // BOOST_SYMBOL_VISIBLE is needed by GCC to ensure system_error thrown from a shared + // library can be caught. See svn.boost.org/trac/boost/ticket/3697 + { + public: + system_error( error_code ec ) + : std::runtime_error(""), m_error_code(ec) {} + + system_error( error_code ec, const std::string & what_arg ) + : std::runtime_error(what_arg), m_error_code(ec) {} + + system_error( error_code ec, const char* what_arg ) + : std::runtime_error(what_arg), m_error_code(ec) {} + + system_error( int ev, const error_category & ecat ) + : std::runtime_error(""), m_error_code(ev,ecat) {} + + system_error( int ev, const error_category & ecat, + const std::string & what_arg ) + : std::runtime_error(what_arg), m_error_code(ev,ecat) {} + + system_error( int ev, const error_category & ecat, + const char * what_arg ) + : std::runtime_error(what_arg), m_error_code(ev,ecat) {} + + virtual ~system_error() throw() {} + + const error_code & code() const throw() { return m_error_code; } + const char * what() const throw(); + + private: + error_code m_error_code; + mutable std::string m_what; + }; + + // implementation ------------------------------------------------------// + + inline const char * system_error::what() const throw() + // see http://www.boost.org/more/error_handling.html for lazy build rationale + { + if ( m_what.empty() ) + { + try + { + m_what = this->std::runtime_error::what(); + if ( !m_what.empty() ) m_what += ": "; + m_what += m_error_code.message(); + } + catch (...) { return std::runtime_error::what(); } + } + return m_what.c_str(); + } + + } // namespace system +} // namespace boost + +#endif // BOOST_SYSTEM_ERROR_HPP + + diff --git a/external/boost/test/debug.hpp b/external/boost/test/debug.hpp new file mode 100644 index 0000000..cf3313d --- /dev/null +++ b/external/boost/test/debug.hpp @@ -0,0 +1,101 @@ +// (C) Copyright Gennadiy Rozental 2006-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : defines portable debug interfaces +// *************************************************************************** + +#ifndef BOOST_TEST_DEBUG_API_HPP_112006GER +#define BOOST_TEST_DEBUG_API_HPP_112006GER + +// Boost.Test +#include +#include +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace debug { + +// ************************************************************************** // +// ************** check if program is running under debugger ************** // +// ************************************************************************** // + +bool BOOST_TEST_DECL under_debugger(); + +// ************************************************************************** // +// ************** cause program to break execution ************** // +// ************** in debugger at call point ************** // +// ************************************************************************** // + +void BOOST_TEST_DECL debugger_break(); + +// ************************************************************************** // +// ************** gui debugger setup ************** // +// ************************************************************************** // + +struct dbg_startup_info { + long pid; + bool break_or_continue; + unit_test::const_string binary_path; + unit_test::const_string display; + unit_test::const_string init_done_lock; +}; + +typedef unit_test::callback1 dbg_starter; + +// ************************************************************************** // +// ************** debugger setup ************** // +// ************************************************************************** // + +#if BOOST_WORKAROUND( BOOST_MSVC, <1300) + +std::string BOOST_TEST_DECL set_debugger( unit_test::const_string dbg_id ); + +#else + +std::string BOOST_TEST_DECL set_debugger( unit_test::const_string dbg_id, dbg_starter s = dbg_starter() ); + +#endif + + +// ************************************************************************** // +// ************** attach debugger to the current process ************** // +// ************************************************************************** // + +bool BOOST_TEST_DECL attach_debugger( bool break_or_continue = true ); + +// ************************************************************************** // +// ************** switch on/off detect memory leaks feature ************** // +// ************************************************************************** // + +void BOOST_TEST_DECL detect_memory_leaks( bool on_off ); + +// ************************************************************************** // +// ************** cause program to break execution in ************** // +// ************** debugger at specific allocation point ************** // +// ************************************************************************** // + +void BOOST_TEST_DECL break_memory_alloc( long mem_alloc_order_num ); + +} // namespace debug + +} // namespace boost + +#include + +#endif diff --git a/external/boost/test/debug_config.hpp b/external/boost/test/debug_config.hpp new file mode 100644 index 0000000..54c21e9 --- /dev/null +++ b/external/boost/test/debug_config.hpp @@ -0,0 +1,24 @@ +// (C) Copyright Gennadiy Rozental 2006-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : user's config for Boost.Test debugging support +// *************************************************************************** + +#ifndef BOOST_TEST_DEBUG_CONFIG_HPP_112006GER +#define BOOST_TEST_DEBUG_CONFIG_HPP_112006GER + +// ';' separated list of supported debuggers +// #define BOOST_TEST_DBG_LIST gdb;dbx + +// maximum size of /proc/pid/stat file +// #define BOOST_TEST_STAT_LINE_MAX + +#endif diff --git a/external/boost/test/detail/config.hpp b/external/boost/test/detail/config.hpp new file mode 100644 index 0000000..5455792 --- /dev/null +++ b/external/boost/test/detail/config.hpp @@ -0,0 +1,104 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 63441 $ +// +// Description : as a central place for global configuration switches +// *************************************************************************** + +#ifndef BOOST_TEST_CONFIG_HPP_071894GER +#define BOOST_TEST_CONFIG_HPP_071894GER + +// Boost +#include // compilers workarounds +#include + +//____________________________________________________________________________// + +#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_NO_STD_LOCALE) && \ + !BOOST_WORKAROUND(BOOST_MSVC, < 1310) && \ + !defined(__MWERKS__) +# define BOOST_TEST_USE_STD_LOCALE 1 +#endif + +//____________________________________________________________________________// + +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x570) || \ + BOOST_WORKAROUND( __COMO__, <= 0x433 ) || \ + BOOST_WORKAROUND( __INTEL_COMPILER, <= 800 ) || \ + defined(__sgi) && _COMPILER_VERSION <= 730 || \ + BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) || \ + defined(__DECCXX) || \ + defined(__DMC__) +# define BOOST_TEST_NO_PROTECTED_USING +#endif + +//____________________________________________________________________________// + +#if defined(__GNUC__) || BOOST_WORKAROUND(BOOST_MSVC, == 1400) +#define BOOST_TEST_PROTECTED_VIRTUAL virtual +#else +#define BOOST_TEST_PROTECTED_VIRTUAL +#endif + +//____________________________________________________________________________// + +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \ + !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530)) +# define BOOST_TEST_SUPPORT_INTERACTION_TESTING 1 +#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 + +# ifdef BOOST_TEST_SOURCE +# define BOOST_TEST_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_TEST_DECL BOOST_SYMBOL_IMPORT +# endif // BOOST_TEST_SOURCE +#else +# 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 + +#endif // BOOST_TEST_CONFIG_HPP_071894GER diff --git a/external/boost/test/detail/enable_warnings.hpp b/external/boost/test/detail/enable_warnings.hpp new file mode 100644 index 0000000..2d67fb0 --- /dev/null +++ b/external/boost/test/detail/enable_warnings.hpp @@ -0,0 +1,30 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : enable previosly suppressed warnings +// *************************************************************************** + +#ifdef BOOST_MSVC +# pragma warning(default: 4511) // copy constructor can't not be generated +# pragma warning(default: 4512) // assignment operator can't not be generated +# pragma warning(default: 4100) // unreferenced formal parameter +# pragma warning(default: 4996) // 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' 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(default: 4275) // non dll-interface class ... used as base for dll-interface class ... +# pragma warning(default: 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data +# pragma warning(default: 4511) // 'class' : copy constructor could not be generated +# pragma warning(pop) +#endif diff --git a/external/boost/test/detail/fwd_decl.hpp b/external/boost/test/detail/fwd_decl.hpp new file mode 100644 index 0000000..8ffba82 --- /dev/null +++ b/external/boost/test/detail/fwd_decl.hpp @@ -0,0 +1,48 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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; + +class lazy_ostream; + +} // namespace unit_test + +} // namespace boost + +#endif // BOOST_TEST_FWD_DECL_HPP_011605GER + diff --git a/external/boost/test/detail/global_typedef.hpp b/external/boost/test/detail/global_typedef.hpp new file mode 100644 index 0000000..b2d8186 --- /dev/null +++ b/external/boost/test/detail/global_typedef.hpp @@ -0,0 +1,88 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : some trivial global typedefs +// *************************************************************************** + +#ifndef BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER +#define BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER + +#include +#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 + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +typedef unsigned long counter_t; + +//____________________________________________________________________________// + +enum report_level { INV_REPORT_LEVEL, CONFIRMATION_REPORT, SHORT_REPORT, DETAILED_REPORT, NO_REPORT }; + +//____________________________________________________________________________// + +enum output_format { INV_OF, 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; + +//____________________________________________________________________________// + +namespace ut_detail { + +inline test_unit_type +test_id_2_unit_type( test_unit_id id ) +{ + return (id & 0xFFFF0000) != 0 ? tut_case : tut_suite; +} + +//____________________________________________________________________________// + +// helper templates to prevent ODR violations +template +struct static_constant { + static T value; +}; + +template +T static_constant::value; + +//____________________________________________________________________________// + +} // namespace ut_detail + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER diff --git a/external/boost/test/detail/log_level.hpp b/external/boost/test/detail/log_level.hpp new file mode 100644 index 0000000..3fecd4f --- /dev/null +++ b/external/boost/test/detail/log_level.hpp @@ -0,0 +1,43 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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_units = 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 + +#endif // BOOST_TEST_LOG_LEVEL_HPP_011605GER diff --git a/external/boost/test/detail/suppress_warnings.hpp b/external/boost/test/detail/suppress_warnings.hpp new file mode 100644 index 0000000..2471226 --- /dev/null +++ b/external/boost/test/detail/suppress_warnings.hpp @@ -0,0 +1,31 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : suppress some warnings +// *************************************************************************** + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4511) // copy constructor can't not be generated +# pragma warning(disable: 4512) // assignment operator can't not be generated +# pragma warning(disable: 4100) // unreferenced formal parameter +# pragma warning(disable: 4996) // 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' 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 +# pragma warning(disable: 4275) // non dll-interface class ... used as base for dll-interface class ... +# pragma warning(disable: 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data +# pragma warning(disable: 4511) // 'class' : copy constructor could not be generated +#endif + diff --git a/external/boost/test/detail/unit_test_parameters.hpp b/external/boost/test/detail/unit_test_parameters.hpp new file mode 100644 index 0000000..391dfc3 --- /dev/null +++ b/external/boost/test/detail/unit_test_parameters.hpp @@ -0,0 +1,69 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include + +#include + +// STL +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** runtime_config ************** // +// ************************************************************************** // + +namespace runtime_config { + +BOOST_TEST_DECL void init( int& argc, char** argv ); + +BOOST_TEST_DECL unit_test::log_level log_level(); +BOOST_TEST_DECL bool no_result_code(); +BOOST_TEST_DECL unit_test::report_level report_level(); +BOOST_TEST_DECL const_string test_to_run(); +BOOST_TEST_DECL const_string break_exec_path(); +BOOST_TEST_DECL bool save_pattern(); +BOOST_TEST_DECL bool show_build_info(); +BOOST_TEST_DECL bool show_progress(); +BOOST_TEST_DECL bool catch_sys_errors(); +BOOST_TEST_DECL bool auto_start_dbg(); +BOOST_TEST_DECL bool use_alt_stack(); +BOOST_TEST_DECL bool detect_fp_exceptions(); +BOOST_TEST_DECL output_format report_format(); +BOOST_TEST_DECL output_format log_format(); +BOOST_TEST_DECL std::ostream* report_sink(); +BOOST_TEST_DECL std::ostream* log_sink(); +BOOST_TEST_DECL long detect_memory_leaks(); +BOOST_TEST_DECL int random_seed(); + +} // namespace runtime_config + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER diff --git a/external/boost/test/detail/workaround.hpp b/external/boost/test/detail/workaround.hpp new file mode 100644 index 0000000..8c28460 --- /dev/null +++ b/external/boost/test/detail/workaround.hpp @@ -0,0 +1,65 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : contains mics. workarounds +// *************************************************************************** + +#ifndef BOOST_TEST_WORKAROUND_HPP_021005GER +#define BOOST_TEST_WORKAROUND_HPP_021005GER + +// Boost +#include // compilers workarounds and std::ptrdiff_t + +// STL +#include // for std::distance + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace ut_detail { + +#ifdef BOOST_NO_STD_DISTANCE +template +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 inline void ignore_unused_variable_warning(const T&) {} + +} // namespace ut_detail + +} // namespace unit_test + +namespace unit_test_framework = unit_test; + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_WORKAROUND_HPP_021005GER diff --git a/external/boost/test/execution_monitor.hpp b/external/boost/test/execution_monitor.hpp new file mode 100644 index 0000000..e846152 --- /dev/null +++ b/external/boost/test/execution_monitor.hpp @@ -0,0 +1,263 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// (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$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include +#include +#include + +// Boost +#include +#include +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace detail { + +// ************************************************************************** // +// ************** detail::translate_exception_base ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL translate_exception_base { +public: + // Constructor + explicit translate_exception_base( boost::scoped_ptr& next ) + { + next.swap( m_next ); + } + + // Destructor + virtual ~translate_exception_base() {} + + virtual int operator()( unit_test::callback0 const& F ) = 0; + +protected: + // Data members + boost::scoped_ptr 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. + }; + + struct BOOST_TEST_DECL location { + explicit location( char const* file_name = 0, size_t line_num = 0, char const* func = 0 ); + + const_string m_file_name; + size_t m_line_num; + const_string m_function; + }; + + // Constructor + execution_exception( error_code ec_, const_string what_msg_, location const& location_ ); // max length 256 inc '\0' + + // Access methods + error_code code() const { return m_error_code; } + const_string what() const { return m_what; } + location const& where() const { return m_location; } + +private: + // Data members + error_code m_error_code; + const_string m_what; + location m_location; +}; // execution_exception + +// ************************************************************************** // +// ************** execution_monitor ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL execution_monitor { +public: + // Constructor + execution_monitor() + : p_catch_system_errors( true ) + , p_auto_start_dbg( false ) + , p_timeout( 0 ) + , p_use_alt_stack( true ) + , p_detect_fp_exceptions( false ) + {} + + // Public properties + + // The p_catch_system_errors parameter specifies whether the monitor should + // try to catch system errors/exceptions that would cause program to crash + // in regular case + unit_test::readwrite_property p_catch_system_errors; + // The p_auto_start_dbg parameter specifies whether the monitor should + // try to attach debugger in case of caught system error + unit_test::readwrite_property p_auto_start_dbg; + // The p_timeout parameter specifies the seconds that elapse before + // a timer_error occurs. May be ignored on some platforms. + unit_test::readwrite_property p_timeout; + // The p_use_alt_stack parameter specifies whether the monitor should + // use alternative stack for the signal catching + unit_test::readwrite_property p_use_alt_stack; + // The p_detect_fp_exceptions parameter specifies whether the monitor should + // try to detect hardware floating point exceptions + unit_test::readwrite_property p_detect_fp_exceptions; + + int execute( unit_test::callback0 const& F ); + // Returns: Value returned by function call F(). + // + // 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 + void register_exception_translator( ExceptionTranslator const& tr, boost::type* = 0 ); + +private: + // implementation helpers + int catch_signals( unit_test::callback0 const& F ); + + // Data members + boost::scoped_ptr m_custom_translators; + boost::scoped_array m_alt_stack; +}; // execution_monitor + +namespace detail { + +// ************************************************************************** // +// ************** detail::translate_exception ************** // +// ************************************************************************** // + +template +class translate_exception : public translate_exception_base +{ + typedef boost::scoped_ptr base_ptr; +public: + explicit translate_exception( ExceptionTranslator const& tr, base_ptr& next ) + : translate_exception_base( next ), m_translator( tr ) {} + + int operator()( unit_test::callback0 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 +void +execution_monitor::register_exception_translator( ExceptionTranslator const& tr, boost::type* ) +{ + m_custom_translators.reset( + new detail::translate_exception( tr,m_custom_translators ) ); +} + +// ************************************************************************** // +// ************** execution_aborted ************** // +// ************************************************************************** // + +struct execution_aborted {}; + +// ************************************************************************** // +// ************** system_error ************** // +// ************************************************************************** // + +class system_error { +public: + // Constructor + explicit system_error( char const* exp ); + + unit_test::readonly_property p_errno; + unit_test::readonly_property p_failed_exp; +}; + +#define BOOST_TEST_SYS_ASSERT( exp ) if( (exp) ) ; else throw ::boost::system_error( BOOST_STRINGIZE( exp ) ) + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif diff --git a/external/boost/test/floating_point_comparison.hpp b/external/boost/test/floating_point_comparison.hpp new file mode 100644 index 0000000..5446ada --- /dev/null +++ b/external/boost/test/floating_point_comparison.hpp @@ -0,0 +1,286 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 + +// Boost.Test +#include +#include +#include + +// Boost +#include // for std::numeric_limits +#include // for numeric::conversion_traits +#include + +#include + +//____________________________________________________________________________// + +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 +inline FPT +fpt_abs( FPT fpv ) +{ + return fpv < static_cast(0) ? -fpv : fpv; +} + +//____________________________________________________________________________// + +template +struct fpt_limits { + static FPT min_value() + { + return std::numeric_limits::is_specialized + ? (std::numeric_limits::min)() + : 0; + } + static FPT max_value() + { + return std::numeric_limits::is_specialized + ? (std::numeric_limits::max)() + : static_cast(1000000); // for the our purpuses it doesn't really matter what value is returned here + } +}; + +//____________________________________________________________________________// + +// both f1 and f2 are unsigned here +template +inline FPT +safe_fpt_division( FPT f1, FPT f2 ) +{ + // Avoid overflow. + if( (f2 < static_cast(1)) && (f1 > f2*fpt_limits::max_value()) ) + return fpt_limits::max_value(); + + // Avoid underflow. + if( (f1 == static_cast(0)) || + ((f2 > static_cast(1)) && (f1 < f2*fpt_limits::min_value())) ) + return static_cast(0); + + return f1/f2; +} + +//____________________________________________________________________________// + +} // namespace tt_detail + +// ************************************************************************** // +// ************** tolerance presentation types ************** // +// ************************************************************************** // + +template +struct percent_tolerance_t { + explicit percent_tolerance_t( FPT v ) : m_value( v ) {} + + FPT m_value; +}; + +//____________________________________________________________________________// + +template +Out& operator<<( Out& out, percent_tolerance_t t ) +{ + return out << t.m_value; +} + +//____________________________________________________________________________// + +template +inline percent_tolerance_t +percent_tolerance( FPT v ) +{ + return percent_tolerance_t( v ); +} + +//____________________________________________________________________________// + +template +struct fraction_tolerance_t { + explicit fraction_tolerance_t( FPT v ) : m_value( v ) {} + + FPT m_value; +}; + +//____________________________________________________________________________// + +template +Out& operator<<( Out& out, fraction_tolerance_t t ) +{ + return out << t.m_value; +} + +//____________________________________________________________________________// + +template +inline fraction_tolerance_t +fraction_tolerance( FPT v ) +{ + return fraction_tolerance_t( v ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** close_at_tolerance ************** // +// ************************************************************************** // + +template +class close_at_tolerance { +public: + // Public typedefs + typedef bool result_type; + + // Constructor + template + explicit close_at_tolerance( percent_tolerance_t tolerance, + floating_point_comparison_type fpc_type = FPC_STRONG ) + : p_fraction_tolerance( tt_detail::fpt_abs( static_cast(0.01)*tolerance.m_value ) ) + , p_strong_or_weak( fpc_type == FPC_STRONG ) + , m_report_modifier( 100. ) + {} + template + explicit close_at_tolerance( fraction_tolerance_t 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 ) + , m_report_modifier( 1. ) + {} + + predicate_result 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 ) ); + + predicate_result res( p_strong_or_weak + ? (d1 <= p_fraction_tolerance.get() && d2 <= p_fraction_tolerance.get()) + : (d1 <= p_fraction_tolerance.get() || d2 <= p_fraction_tolerance.get()) ); + + if( !res ) + res.message() << (( d1 <= p_fraction_tolerance.get() ? d2 : d1 ) * m_report_modifier); + + return res; + } + + // Public properties + readonly_property p_fraction_tolerance; + readonly_property p_strong_or_weak; +private: + // Data members + FPT m_report_modifier; +}; + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** check_is_close ************** // +// ************************************************************************** // + +struct BOOST_TEST_DECL check_is_close_t { + // Public typedefs + typedef bool result_type; + + template + predicate_result + operator()( FPT1 left, FPT2 right, percent_tolerance_t tolerance, + floating_point_comparison_type fpc_type = FPC_STRONG ) const + { + // deduce "better" type from types of arguments being compared + // if one type is floating and the second integral we use floating type and + // value of integral type is promoted to the floating. The same for float and double + // But we don't want to compare two values of integral types using this tool. + typedef typename numeric::conversion_traits::supertype FPT; + BOOST_STATIC_ASSERT( !is_integral::value ); + + close_at_tolerance pred( tolerance, fpc_type ); + + return pred( left, right ); + } + template + predicate_result + operator()( FPT1 left, FPT2 right, fraction_tolerance_t tolerance, + floating_point_comparison_type fpc_type = FPC_STRONG ) const + { + // same as in a comment above + typedef typename numeric::conversion_traits::supertype FPT; + BOOST_STATIC_ASSERT( !is_integral::value ); + + close_at_tolerance pred( tolerance, fpc_type ); + + return pred( left, right ); + } +}; + +namespace { +check_is_close_t const& check_is_close = unit_test::ut_detail::static_constant::value; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** check_is_small ************** // +// ************************************************************************** // + +struct BOOST_TEST_DECL check_is_small_t { + // Public typedefs + typedef bool result_type; + + template + bool + operator()( FPT fpv, FPT tolerance ) const + { + return tt_detail::fpt_abs( fpv ) < tt_detail::fpt_abs( tolerance ); + } +}; + +namespace { +check_is_small_t const& check_is_small = unit_test::ut_detail::static_constant::value; +} + +//____________________________________________________________________________// + +} // namespace test_tools + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_FLOATING_POINT_COMAPARISON_HPP_071894GER diff --git a/external/boost/test/framework.hpp b/external/boost/test/framework.hpp new file mode 100644 index 0000000..54d4b52 --- /dev/null +++ b/external/boost/test/framework.hpp @@ -0,0 +1,112 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : defines framework interface +// *************************************************************************** + +#ifndef BOOST_TEST_FRAMEWORK_HPP_020805GER +#define BOOST_TEST_FRAMEWORK_HPP_020805GER + +// Boost.Test +#include +#include +#include + +#include + +// STL +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** init_unit_test_func ************** // +// ************************************************************************** // + +#ifdef BOOST_TEST_ALTERNATIVE_INIT_API +typedef bool (*init_unit_test_func)(); +#else +typedef test_suite* (*init_unit_test_func)( int, char* [] ); +#endif + +// ************************************************************************** // +// ************** framework ************** // +// ************************************************************************** // + +namespace framework { + +// initialization +BOOST_TEST_DECL void init( init_unit_test_func init_func, int argc, char* argv[] ); +BOOST_TEST_DECL bool is_initialized(); + +// 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 deregister_test_unit( test_unit* tu ); +BOOST_TEST_DECL void clear(); + +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(); + +BOOST_TEST_DECL test_unit& get( test_unit_id, test_unit_type ); +template +UnitType& get( test_unit_id id ) +{ + return static_cast( get( id, static_cast(UnitType::type) ) ); +} + +// 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() ) ) {} +}; + +#define BOOST_TEST_SETUP_ASSERT( cond, msg ) if( cond ) {} else throw unit_test::framework::setup_error( msg ) + +struct nothing_to_test {}; // not really an error + +} // namespace framework + +} // unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_FRAMEWORK_HPP_020805GER + diff --git a/external/boost/test/impl/compiler_log_formatter.ipp b/external/boost/test/impl/compiler_log_formatter.ipp new file mode 100644 index 0000000..d49c2f8 --- /dev/null +++ b/external/boost/test/impl/compiler_log_formatter.ipp @@ -0,0 +1,222 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include +#include +#include +#include + +// Boost +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace output { + +// ************************************************************************** // +// ************** compiler_log_formatter ************** // +// ************************************************************************** // + +namespace { + +const_string +test_phase_identifier() +{ + return framework::is_initialized() + ? const_string( framework::current_test_case().p_name.get() ) + : BOOST_TEST_L( "Test setup" ); +} + +} // local namespace + +//____________________________________________________________________________// + +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& ostr ) +{ + ostr.flush(); +} + +//____________________________________________________________________________// + +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, execution_exception const& ex ) +{ + execution_exception::location const& loc = ex.where(); + print_prefix( output, loc.m_file_name, loc.m_line_num ); + + output << "fatal error in \"" << (loc.m_function.is_empty() ? test_phase_identifier() : loc.m_function ) << "\": "; + + output << ex.what(); + + 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 \"" << test_phase_identifier() << "\": "; + break; + case BOOST_UTL_ET_ERROR: + print_prefix( output, entry_data.m_file_name, entry_data.m_line_num ); + output << "error in \"" << test_phase_identifier() << "\": "; + break; + case BOOST_UTL_ET_FATAL_ERROR: + print_prefix( output, entry_data.m_file_name, entry_data.m_line_num ); + output << "fatal error in \"" << test_phase_identifier() << "\": "; + break; + } +} + +//____________________________________________________________________________// + +void +compiler_log_formatter::log_entry_value( std::ostream& output, const_string value ) +{ + output << value; +} + +//____________________________________________________________________________// + +void +compiler_log_formatter::log_entry_value( std::ostream& output, lazy_ostream const& 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 ) +{ +#ifdef __APPLE_CC__ + // Xcode-compatible logging format, idea by Richard Dingwall at + // . + output << file << ':' << line << ": "; +#else + output << file << '(' << line << "): "; +#endif +} + +//____________________________________________________________________________// + +} // namespace output + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER diff --git a/external/boost/test/impl/cpp_main.ipp b/external/boost/test/impl/cpp_main.ipp new file mode 100644 index 0000000..e5156e4 --- /dev/null +++ b/external/boost/test/impl/cpp_main.ipp @@ -0,0 +1,139 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// (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$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include +#include + +// Boost +#include // for exit codes +#include // for workarounds + +// STL +#include +#include // std::getenv +#include // std::strerror + +#include + +//____________________________________________________________________________// + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::getenv; using ::strerror; } +#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 = 0; + + try { + boost::unit_test::const_string p( std::getenv( "BOOST_TEST_CATCH_SYSTEM_ERRORS" ) ); + ::boost::execution_monitor ex_mon; + + ex_mon.p_catch_system_errors.value = p != "no"; + + result = ex_mon.execute( + ::boost::unit_test::callback0( cpp_main_caller( cpp_main, argc, argv ) ) ); + + 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; + } + catch( ::boost::system_error const& ex ) { + std::cout << "\n**** failed to initialize execution monitor." + << "\n**** expression at fault: " << ex.p_failed_exp + << "\n**** error(" << ex.p_errno << "): " << std::strerror( ex.p_errno ) << 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 + +#endif // BOOST_TEST_CPP_MAIN_IPP_012205GER diff --git a/external/boost/test/impl/debug.ipp b/external/boost/test/impl/debug.ipp new file mode 100644 index 0000000..d351271 --- /dev/null +++ b/external/boost/test/impl/debug.ipp @@ -0,0 +1,970 @@ +// (C) Copyright Gennadiy Rozental 2006-2008. +// 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$ +// +// Version : $Revision: 57992 $ +// +// Description : debug interfaces implementation +// *************************************************************************** + +#ifndef BOOST_TEST_DEBUG_API_IPP_112006GER +#define BOOST_TEST_DEBUG_API_IPP_112006GER + +// Boost.Test +#include +#include +#include + +#include +#include + +// Implementation on Windows +#if defined(_WIN32) && !defined(UNDER_CE) && !defined(BOOST_DISABLE_WIN32) // ******* WIN32 + +# define BOOST_WIN32_BASED_DEBUG + +// SYSTEM API +# include +# include +# include +# include + +# if !defined(NDEBUG) && defined(_MSC_VER) +# define BOOST_MS_CRT_BASED_DEBUG +# include +# endif + + +# if BOOST_WORKAROUND( BOOST_MSVC, <1300) +# define snprintf _snprintf +# endif + +# ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::memset; using ::sprintf; } +# endif + +#elif defined(unix) || defined(__unix) // ********************* UNIX + +# define BOOST_UNIX_BASED_DEBUG + +// Boost.Test +#include +#include + +// STL +#include // std::memcpy +#include +#include +#include // !! ?? cstdarg + +// SYSTEM API +# include +# include +# include + +# include +# include +# include +# include +# include +# include + +# if defined(sun) || defined(__sun) + +# define BOOST_SUN_BASED_DEBUG + +# ifndef BOOST_TEST_DBG_LIST +# define BOOST_TEST_DBG_LIST dbx;gdb +# endif + +# define BOOST_TEST_CNL_DBG dbx +# define BOOST_TEST_GUI_DBG dbx-ddd + +# include + +# elif defined(linux) || defined(__linux) + +# define BOOST_LINUX_BASED_DEBUG + +# include + +# ifndef BOOST_TEST_STAT_LINE_MAX +# define BOOST_TEST_STAT_LINE_MAX 500 +# endif + +# ifndef BOOST_TEST_DBG_LIST +# define BOOST_TEST_DBG_LIST gdb +# endif + +# define BOOST_TEST_CNL_DBG gdb +# define BOOST_TEST_GUI_DBG gdb-xterm + +# endif + +#endif + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace debug { + +using unit_test::const_string; + +// ************************************************************************** // +// ************** debug::info_t ************** // +// ************************************************************************** // + +namespace { + +#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32 + +template +inline void +dyn_symbol( T& res, char const* module_name, char const* symbol_name ) +{ + HMODULE m = ::GetModuleHandleA( module_name ); + + if( !m ) + m = ::LoadLibraryA( module_name ); + + res = reinterpret_cast( ::GetProcAddress( m, symbol_name ) ); +} + +//____________________________________________________________________________// + +static struct info_t { + typedef BOOL (WINAPI* IsDebuggerPresentT)(); + typedef LONG (WINAPI* RegQueryValueExT)( HKEY, char const* /*LPTSTR*/, LPDWORD, LPDWORD, LPBYTE, LPDWORD ); + typedef LONG (WINAPI* RegOpenKeyT)( HKEY, char const* /*LPCTSTR*/, PHKEY ); + typedef LONG (WINAPI* RegCloseKeyT)( HKEY ); + + info_t(); + + IsDebuggerPresentT m_is_debugger_present; + RegOpenKeyT m_reg_open_key; + RegQueryValueExT m_reg_query_value; + RegCloseKeyT m_reg_close_key; + +} s_info; + +//____________________________________________________________________________// + +info_t::info_t() +{ + dyn_symbol( m_is_debugger_present, "kernel32", "IsDebuggerPresent" ); + dyn_symbol( m_reg_open_key, "advapi32", "RegOpenKeyA" ); + dyn_symbol( m_reg_query_value, "advapi32", "RegQueryValueExA" ); + dyn_symbol( m_reg_close_key, "advapi32", "RegCloseKey" ); +} + +//____________________________________________________________________________// + +#elif defined(BOOST_UNIX_BASED_DEBUG) + +// ************************************************************************** // +// ************** fd_holder ************** // +// ************************************************************************** // + +struct fd_holder { + explicit fd_holder( int fd ) : m_fd( fd ) {} + ~fd_holder() + { + if( m_fd != -1 ) + ::close( m_fd ); + } + + operator int() { return m_fd; } + +private: + // Data members + int m_fd; +}; + + +// ************************************************************************** // +// ************** process_info ************** // +// ************************************************************************** // + +struct process_info { + // Constructor + explicit process_info( int pid ); + + // access methods + int parent_pid() const { return m_parent_pid; } + const_string binary_name() const { return m_binary_name; } + const_string binary_path() const { return m_binary_path; } + +private: + // Data members + int m_parent_pid; + const_string m_binary_name; + const_string m_binary_path; + +#if defined(BOOST_SUN_BASED_DEBUG) + struct psinfo m_psi; +#elif defined(BOOST_LINUX_BASED_DEBUG) + char m_stat_line[BOOST_TEST_STAT_LINE_MAX+1]; +#endif + char m_binary_path_buff[500+1]; // !! ?? +}; + +//____________________________________________________________________________// + +process_info::process_info( int pid ) +: m_parent_pid( 0 ) +{ +#if defined(BOOST_SUN_BASED_DEBUG) + char fname_buff[30]; + + ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/psinfo", pid ); + + fd_holder psinfo_fd( ::open( fname_buff, O_RDONLY ) ); + + if( psinfo_fd == -1 ) + return; + + if( ::read( psinfo_fd, &m_psi, sizeof(m_psi) ) == -1 ) + return; + + m_parent_pid = m_psi.pr_ppid; + + m_binary_name.assign( m_psi.pr_fname ); + + //-------------------------- // + + ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/as", pid ); + + fd_holder as_fd( ::open( fname_buff, O_RDONLY ) ); + uintptr_t binary_name_pos; + + // !! ?? could we avoid reading whole m_binary_path_buff? + if( as_fd == -1 || + ::lseek( as_fd, m_psi.pr_argv, SEEK_SET ) == -1 || + ::read ( as_fd, &binary_name_pos, sizeof(binary_name_pos) ) == -1 || + ::lseek( as_fd, binary_name_pos, SEEK_SET ) == -1 || + ::read ( as_fd, m_binary_path_buff, sizeof(m_binary_path_buff) ) == -1 ) + return; + + m_binary_path.assign( m_binary_path_buff ); + +#elif defined(BOOST_LINUX_BASED_DEBUG) + char fname_buff[30]; + + ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/stat", pid ); + + fd_holder psinfo_fd( ::open( fname_buff, O_RDONLY ) ); + + if( psinfo_fd == -1 ) + return; + + ssize_t num_read = ::read( psinfo_fd, m_stat_line, sizeof(m_stat_line)-1 ); + if( num_read == -1 ) + return; + + m_stat_line[num_read] = 0; + + char const* name_beg = m_stat_line; + while( *name_beg && *name_beg != '(' ) + ++name_beg; + + char const* name_end = name_beg+1; + while( *name_end && *name_end != ')' ) + ++name_end; + + std::sscanf( name_end+1, "%*s%d", &m_parent_pid ); + + m_binary_name.assign( name_beg+1, name_end ); + + ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/exe", pid ); + num_read = ::readlink( fname_buff, m_binary_path_buff, sizeof(m_binary_path_buff)-1 ); + + if( num_read == -1 ) + return; + + m_binary_path_buff[num_read] = 0; + m_binary_path.assign( m_binary_path_buff, num_read ); +#endif +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** prepare_window_title ************** // +// ************************************************************************** // + +static char* +prepare_window_title( dbg_startup_info const& dsi ) +{ + typedef unit_test::const_string str_t; + + static char title_str[50]; + + str_t path_sep( "\\/" ); + + str_t::iterator it = unit_test::find_last_of( dsi.binary_path.begin(), dsi.binary_path.end(), + path_sep.begin(), path_sep.end() ); + + if( it == dsi.binary_path.end() ) + it = dsi.binary_path.begin(); + else + ++it; + + ::snprintf( title_str, sizeof(title_str), "%*s %ld", (int)(dsi.binary_path.end()-it), it, dsi.pid ); + + return title_str; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** save_execlp ************** // +// ************************************************************************** // + +typedef unit_test::basic_cstring mbuffer; + +inline char* +copy_arg( mbuffer& dest, const_string arg ) +{ + if( dest.size() < arg.size()+1 ) + return 0; + + char* res = dest.begin(); + + std::memcpy( res, arg.begin(), arg.size()+1 ); + + dest.trim_left( arg.size()+1 ); + + return res; +} + +//____________________________________________________________________________// + +bool +safe_execlp( char const* file, ... ) +{ + static char* argv_buff[200]; + + va_list args; + char const* arg; + + // first calculate actual number of arguments + int num_args = 2; // file name and 0 at least + + va_start( args, file ); + while( !!(arg = va_arg( args, char const* )) ) + num_args++; + va_end( args ); + + // reserve space for the argument pointers array + char** argv_it = argv_buff; + mbuffer work_buff( reinterpret_cast(argv_buff), sizeof(argv_buff) ); + work_buff.trim_left( num_args * sizeof(char*) ); + + // copy all the argument values into local storage + if( !(*argv_it++ = copy_arg( work_buff, file )) ) + return false; + + printf( "!! %s\n", file ); + + va_start( args, file ); + while( !!(arg = va_arg( args, char const* )) ) { + printf( "!! %s\n", arg ); + if( !(*argv_it++ = copy_arg( work_buff, arg )) ) + return false; + } + va_end( args ); + + *argv_it = 0; + + return ::execvp( file, argv_buff ) != -1; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** start_debugger_in_emacs ************** // +// ************************************************************************** // + +static void +start_debugger_in_emacs( dbg_startup_info const& dsi, char const* emacs_name, char const* dbg_command ) +{ + char const* title = prepare_window_title( dsi ); + + if( !title ) + return; + + dsi.display.is_empty() + ? safe_execlp( emacs_name, "-title", title, "--eval", dbg_command, 0 ) + : safe_execlp( emacs_name, "-title", title, "-display", dsi.display.begin(), "--eval", dbg_command, 0 ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** gdb starters ************** // +// ************************************************************************** // + +static char const* +prepare_gdb_cmnd_file( dbg_startup_info const& dsi ) +{ + // prepare pid value + char pid_buff[16]; + ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid ); + unit_test::const_string pid_str( pid_buff ); + + static char cmd_file_name[] = "/tmp/btl_gdb_cmd_XXXXXX"; // !! ?? + + // prepare commands + fd_holder cmd_fd( ::mkstemp( cmd_file_name ) ); + + if( cmd_fd == -1 ) + return 0; + +#define WRITE_STR( str ) if( ::write( cmd_fd, str.begin(), str.size() ) == -1 ) return 0; +#define WRITE_CSTR( str ) if( ::write( cmd_fd, str, sizeof( str )-1 ) == -1 ) return 0; + + WRITE_CSTR( "file " ); + WRITE_STR( dsi.binary_path ); + WRITE_CSTR( "\nattach " ); + WRITE_STR( pid_str ); + WRITE_CSTR( "\nshell unlink " ); + WRITE_STR( dsi.init_done_lock ); + WRITE_CSTR( "\ncont" ); + if( dsi.break_or_continue ) + WRITE_CSTR( "\nup 4" ); + + WRITE_CSTR( "\necho \\n" ); // !! ?? + WRITE_CSTR( "\nlist -" ); + WRITE_CSTR( "\nlist" ); + WRITE_CSTR( "\nshell unlink " ); + WRITE_CSTR( cmd_file_name ); + + return cmd_file_name; +} + +//____________________________________________________________________________// + +static void +start_gdb_in_console( dbg_startup_info const& dsi ) +{ + char const* cmnd_file_name = prepare_gdb_cmnd_file( dsi ); + + if( !cmnd_file_name ) + return; + + safe_execlp( "gdb", "-q", "-x", cmnd_file_name, 0 ); +} + +//____________________________________________________________________________// + +static void +start_gdb_in_xterm( dbg_startup_info const& dsi ) +{ + char const* title = prepare_window_title( dsi ); + char const* cmnd_file_name = prepare_gdb_cmnd_file( dsi ); + + if( !title || !cmnd_file_name ) + return; + + safe_execlp( "xterm", "-T", title, "-display", dsi.display.begin(), + "-bg", "black", "-fg", "white", "-geometry", "88x30+10+10", "-fn", "9x15", "-e", + "gdb", "-q", "-x", cmnd_file_name, 0 ); +} + +//____________________________________________________________________________// + +static void +start_gdb_in_emacs( dbg_startup_info const& dsi ) +{ + char const* cmnd_file_name = prepare_gdb_cmnd_file( dsi ); + if( !cmnd_file_name ) + return; + + char dbg_cmd_buff[500]; // !! ?? + ::snprintf( dbg_cmd_buff, sizeof(dbg_cmd_buff), "(progn (gdb \"gdb -q -x %s\"))", cmnd_file_name ); + + start_debugger_in_emacs( dsi, "emacs", dbg_cmd_buff ); +} + +//____________________________________________________________________________// + +static void +start_gdb_in_xemacs( dbg_startup_info const& ) +{ + // !! ?? +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** dbx starters ************** // +// ************************************************************************** // + +static char const* +prepare_dbx_cmd_line( dbg_startup_info const& dsi, bool list_source = true ) +{ + static char cmd_line_buff[500]; // !! ?? + + ::snprintf( cmd_line_buff, sizeof(cmd_line_buff), "unlink %s;cont;%s%s", + dsi.init_done_lock.begin(), + dsi.break_or_continue ? "up 2;": "", + list_source ? "echo \" \";list -w3;" : "" ); + + return cmd_line_buff; +} + +//____________________________________________________________________________// + +static void +start_dbx_in_console( dbg_startup_info const& dsi ) +{ + char pid_buff[16]; + ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid ); + + safe_execlp( "dbx", "-q", "-c", prepare_dbx_cmd_line( dsi ), dsi.binary_path.begin(), pid_buff, 0 ); +} + +//____________________________________________________________________________// + +static void +start_dbx_in_xterm( dbg_startup_info const& dsi ) +{ + char const* title = prepare_window_title( dsi ); + if( !title ) + return; + + char pid_buff[16]; // !! ?? + ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid ); + + safe_execlp( "xterm", "-T", title, "-display", dsi.display.begin(), + "-bg", "black", "-fg", "white", "-geometry", "88x30+10+10", "-fn", "9x15", "-e", + "dbx", "-q", "-c", prepare_dbx_cmd_line( dsi ), dsi.binary_path.begin(), pid_buff, 0 ); +} + +//____________________________________________________________________________// + +static void +start_dbx_in_emacs( dbg_startup_info const& /*dsi*/ ) +{ +// char dbg_cmd_buff[500]; // !! ?? +// +// ::snprintf( dbg_cmd_buff, sizeof(dbg_cmd_buff), "(progn (dbx \"dbx -q -c cont %s %ld\"))", dsi.binary_path.begin(), dsi.pid ); + +// start_debugger_in_emacs( dsi, "emacs", dbg_cmd_buff ); +} + +//____________________________________________________________________________// + +static void +start_dbx_in_xemacs( dbg_startup_info const& ) +{ + // !! ?? +} + +//____________________________________________________________________________// + +static void +start_dbx_in_ddd( dbg_startup_info const& dsi ) +{ + char const* title = prepare_window_title( dsi ); + if( !title ) + return; + + char pid_buff[16]; // !! ?? + ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid ); + + safe_execlp( "ddd", "-display", dsi.display.begin(), + "--dbx", "-q", "-c", prepare_dbx_cmd_line( dsi, false ), dsi.binary_path.begin(), pid_buff, 0 ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** debug::info_t ************** // +// ************************************************************************** // + +static struct info_t { + // Constructor + info_t(); + + // Public properties + unit_test::readwrite_property p_dbg; + + // Data members + std::map m_dbg_starter_reg; +} s_info; + +//____________________________________________________________________________// + +info_t::info_t() +{ + p_dbg.value = ::getenv( "DISPLAY" ) + ? std::string( BOOST_STRINGIZE( BOOST_TEST_GUI_DBG ) ) + : std::string( BOOST_STRINGIZE( BOOST_TEST_CNL_DBG ) ); + + m_dbg_starter_reg[std::string("gdb")] = &start_gdb_in_console; + m_dbg_starter_reg[std::string("gdb-emacs")] = &start_gdb_in_emacs; + m_dbg_starter_reg[std::string("gdb-xterm")] = &start_gdb_in_xterm; + m_dbg_starter_reg[std::string("gdb-xemacs")] = &start_gdb_in_xemacs; + + m_dbg_starter_reg[std::string("dbx")] = &start_dbx_in_console; + m_dbg_starter_reg[std::string("dbx-emacs")] = &start_dbx_in_emacs; + m_dbg_starter_reg[std::string("dbx-xterm")] = &start_dbx_in_xterm; + m_dbg_starter_reg[std::string("dbx-xemacs")] = &start_dbx_in_xemacs; + m_dbg_starter_reg[std::string("dbx-ddd")] = &start_dbx_in_ddd; +} + +//____________________________________________________________________________// + +#endif + +} // local namespace + +// ************************************************************************** // +// ************** check if program is running under debugger ************** // +// ************************************************************************** // + +bool +under_debugger() +{ +#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32 + + return !!s_info.m_is_debugger_present && s_info.m_is_debugger_present(); + +#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX + + // !! ?? could/should we cache the result somehow? + const_string dbg_list = BOOST_TEST_STRINGIZE( BOOST_TEST_DBG_LIST ); + + pid_t pid = ::getpid(); + + while( pid != 0 ) { + process_info pi( pid ); + + // !! ?? should we use tokenizer here instead? + if( dbg_list.find( pi.binary_name() ) != const_string::npos ) + return true; + + pid = (pi.parent_pid() == pid ? 0 : pi.parent_pid()); + } + + return false; + +#else // ****************************************************** default + + return false; + +#endif +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** cause program to break execution ************** // +// ************** in debugger at call point ************** // +// ************************************************************************** // + +void +debugger_break() +{ + // !! ?? auto-start debugger? + +#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32 + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1300) || \ + BOOST_WORKAROUND(__GNUC__, >= 3) && !defined(__MINGW32__) || \ + defined(__INTEL_COMPILER) +# define BOOST_DEBUG_BREAK __debugbreak +#else +# define BOOST_DEBUG_BREAK DebugBreak +#endif + +#ifndef __MINGW32__ + if( !under_debugger() ) { + __try { + __try { + BOOST_DEBUG_BREAK(); + } + __except( UnhandledExceptionFilter(GetExceptionInformation()) ) + { + // User opted to ignore the breakpoint + return; + } + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + // If we got here, the user has pushed Debug. Debugger is already attached to our process and we + // continue to let the another BOOST_DEBUG_BREAK to be called. + } + } +#endif + + BOOST_DEBUG_BREAK(); + +#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX + + ::kill( ::getpid(), SIGTRAP ); + +#else // ****************************************************** default + +#endif +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** console debugger setup ************** // +// ************************************************************************** // + +#if defined(BOOST_UNIX_BASED_DEBUG) // ************************ UNIX + +std::string +set_debugger( unit_test::const_string dbg_id, dbg_starter s ) +{ + std::string old = s_info.p_dbg; + + assign_op( s_info.p_dbg.value, dbg_id, 0 ); + + if( !!s ) + s_info.m_dbg_starter_reg[s_info.p_dbg] = s; + + return old; +} + +#else // ***************************************************** default + +std::string +set_debugger( unit_test::const_string, dbg_starter ) +{ + return std::string(); +} + +#endif + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** attach debugger to the current process ************** // +// ************************************************************************** // + +bool +attach_debugger( bool break_or_continue ) +{ + if( under_debugger() ) + return false; + +#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32 + + const int MAX_CMD_LINE = 200; + + // *************************************************** // + // Debugger "ready" event + + SECURITY_ATTRIBUTES attr; + attr.nLength = sizeof(attr); + attr.lpSecurityDescriptor = NULL; + attr.bInheritHandle = true; + + // manual resettable, initially non signaled, unnamed event, + // that will signal me that debugger initialization is done + HANDLE dbg_init_done_ev = ::CreateEvent( + &attr, // pointer to security attributes + true, // flag for manual-reset event + false, // flag for initial state + NULL // pointer to event-object name + ); + + if( !dbg_init_done_ev ) + return false; + + // *************************************************** // + // Debugger command line format + + HKEY reg_key; + + if( !s_info.m_reg_open_key || (*s_info.m_reg_open_key)( + HKEY_LOCAL_MACHINE, // handle of open key + "Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug", // name of subkey to open + ®_key ) != ERROR_SUCCESS ) // address of handle of open key + return false; + + char format[MAX_CMD_LINE]; + DWORD format_size = MAX_CMD_LINE; + DWORD type = REG_SZ; + + if( !s_info.m_reg_query_value || (*s_info.m_reg_query_value)( + reg_key, // handle of open key + "Debugger", // name of subkey to query + 0, // reserved + &type, // value type + (LPBYTE)format, // buffer for returned string + &format_size ) != ERROR_SUCCESS ) // in: buffer size; out: actual size of returned string + return false; + + if( !s_info.m_reg_close_key || (*s_info.m_reg_close_key)( reg_key ) != ERROR_SUCCESS ) + return false; + + // *************************************************** // + // Debugger command line + + char cmd_line[MAX_CMD_LINE]; + std::sprintf( cmd_line, format, ::GetCurrentProcessId(), dbg_init_done_ev ); + + // *************************************************** // + // Debugger window parameters + + STARTUPINFOA startup_info; + std::memset( &startup_info, 0, sizeof(startup_info) ); + + startup_info.cb = sizeof(startup_info); + startup_info.dwFlags = STARTF_USESHOWWINDOW; + startup_info.wShowWindow = SW_SHOWNORMAL; + + // debugger process s_info + PROCESS_INFORMATION debugger_info; + + bool created = !!::CreateProcessA( + NULL, // pointer to name of executable module; NULL - use the one in command line + cmd_line, // pointer to command line string + NULL, // pointer to process security attributes; NULL - debugger's handle can't be inherited + NULL, // pointer to thread security attributes; NULL - debugger's handle can't be inherited + true, // debugger inherit opened handles + 0, // priority flags; 0 - normal priority + NULL, // pointer to new environment block; NULL - use this process environment + NULL, // pointer to current directory name; NULL - use this process correct directory + &startup_info, // pointer to STARTUPINFO that specifies main window appearance + &debugger_info // pointer to PROCESS_INFORMATION that will contain the new process identification + ); + + if( created ) + ::WaitForSingleObject( dbg_init_done_ev, INFINITE ); + + ::CloseHandle( dbg_init_done_ev ); + + if( !created ) + return false; + + if( break_or_continue ) + debugger_break(); + + return true; + +#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX + + char init_done_lock_fn[] = "/tmp/btl_dbg_init_done_XXXXXX"; + fd_holder init_done_lock_fd( ::mkstemp( init_done_lock_fn ) ); + + if( init_done_lock_fd == -1 ) + return false; + + pid_t child_pid = fork(); + + if( child_pid == -1 ) + return false; + + if( child_pid != 0 ) { // parent process - here we will start the debugger + dbg_startup_info dsi; + + process_info pi( child_pid ); + if( pi.binary_path().is_empty() ) + ::exit( -1 ); + + dsi.pid = child_pid; + dsi.break_or_continue = break_or_continue; + dsi.binary_path = pi.binary_path(); + dsi.display = ::getenv( "DISPLAY" ); + dsi.init_done_lock = init_done_lock_fn; + + dbg_starter starter = s_info.m_dbg_starter_reg[s_info.p_dbg]; + if( !!starter ) + starter( dsi ); + + ::perror( "Boost.Test execution monitor failed to start a debugger:" ); + + ::exit( -1 ); + } + + // child process - here we will continue our test module execution ; // !! ?? should it be vice versa + + while( ::access( init_done_lock_fn, F_OK ) == 0 ) { + struct timeval to = { 0, 100 }; + + ::select( 0, 0, 0, 0, &to ); + } + +// char dummy; +// while( ::read( init_done_lock_fd, &dummy, sizeof(char) ) == 0 ); + + if( break_or_continue ) + debugger_break(); + + return true; + +#else // ****************************************************** default + + return false; + +#endif +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** switch on/off detect memory leaks feature ************** // +// ************************************************************************** // + +void +detect_memory_leaks( bool on_off ) +{ + unit_test::ut_detail::ignore_unused_variable_warning( on_off ); + +#ifdef BOOST_MS_CRT_BASED_DEBUG + 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_BASED_DEBUG +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** cause program to break execution in ************** // +// ************** debugger at specific allocation point ************** // +// ************************************************************************** // + +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_BASED_DEBUG + _CrtSetBreakAlloc( mem_alloc_order_num ); +#endif // BOOST_MS_CRT_BASED_DEBUG +} + +} // namespace debug + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_DEBUG_API_IPP_112006GER + diff --git a/external/boost/test/impl/exception_safety.ipp b/external/boost/test/impl/exception_safety.ipp new file mode 100644 index 0000000..e2d529a --- /dev/null +++ b/external/boost/test/impl/exception_safety.ipp @@ -0,0 +1,537 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// 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$ +// +// Version : $Revision: 54633 $ +// +// Description : Facilities to perform exception safety tests +// *************************************************************************** + +#ifndef BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER +#define BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER + +// Boost.Test +#include + +#if BOOST_TEST_SUPPORT_INTERACTION_TESTING + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +// Boost +#include + +// STL +#include +#include +#include +#include +#include +#include + +//____________________________________________________________________________// + +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::max)(); } // we want this observer to run the last + +private: + void failure_point(); + void report_error(); + + typedef std::vector exec_path; + typedef std::map 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( static_cast(-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( *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 ) + debug::debugger_break(); + + 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 +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( it->m_alloc.size, 8 ); i++ ) { + unsigned char c = static_cast(it->m_alloc.ptr)[i]; + if( (std::isprint)( c ) ) + formatter << c; + else + formatter << '.'; + } + + formatter << "> "; + + for( i = 0; i < std::min( it->m_alloc.size, 8 ); i++ ) { + unsigned c = static_cast(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 << static_cast(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 + +#endif // non-ancient compiler + +#endif // BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER diff --git a/external/boost/test/impl/execution_monitor.ipp b/external/boost/test/impl/execution_monitor.ipp new file mode 100644 index 0000000..d9d5b6a --- /dev/null +++ b/external/boost/test/impl/execution_monitor.ipp @@ -0,0 +1,1367 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// (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$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include +#include +#include + +// Boost +#include // for exit codes +#include // for workarounds +#include // for get_error_info +#include // for current_exception_cast + +// STL +#include // for std::string +#include // for std::bad_alloc +#include // for std::bad_cast, std::bad_typeid +#include // for std::exception, std::bad_exception +#include // for std exception hierarchy +#include // for C string API +#include // for assert +#include // for NULL +#include // for vsnprintf +#include // for varargs + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::strerror; using ::strlen; using ::strncat; } +#endif + +// to use vsnprintf +#if defined(__SUNPRO_CC) || defined(__SunOS) +# include +# include +using std::va_list; +#endif + +// to use vsnprintf +#if defined(__QNXNTO__) +# include +#endif + +#if defined(_WIN32) && !defined(BOOST_DISABLE_WIN32) && \ + (!defined(__COMO__) && !defined(__MWERKS__) && !defined(__GNUC__) || \ + BOOST_WORKAROUND(__MWERKS__, >= 0x3000)) + +# define BOOST_SEH_BASED_SIGNAL_HANDLING + +# include + +# if defined(__MWERKS__) || (defined(_MSC_VER) && !defined(UNDER_CE)) +# include +# endif + +# if defined(__BORLANDC__) && __BORLANDC__ >= 0x560 || defined(__MWERKS__) +# include +# endif + +# if defined(__BORLANDC__) && __BORLANDC__ < 0x560 + typedef unsigned uintptr_t; +# endif + +# if BOOST_WORKAROUND(_MSC_VER, < 1300 ) || defined(UNDER_CE) +typedef void* uintptr_t; +# endif + +// for the FP control routines +#include + +#ifndef EM_INVALID +#define EM_INVALID _EM_INVALID +#endif + +#ifndef EM_DENORMAL +#define EM_DENORMAL _EM_DENORMAL +#endif + +#ifndef EM_ZERODIVIDE +#define EM_ZERODIVIDE _EM_ZERODIVIDE +#endif + +#ifndef EM_OVERFLOW +#define EM_OVERFLOW _EM_OVERFLOW +#endif + +#ifndef EM_UNDERFLOW +#define EM_UNDERFLOW _EM_UNDERFLOW +#endif + +#ifndef MCW_EM +#define MCW_EM _MCW_EM +#endif + +# if !defined(NDEBUG) && defined(_MSC_VER) && !defined(UNDER_CE) +# include +# define BOOST_TEST_CRT_HOOK_TYPE _CRT_REPORT_HOOK +# define BOOST_TEST_CRT_ASSERT _CRT_ASSERT +# define BOOST_TEST_CRT_ERROR _CRT_ERROR +# define BOOST_TEST_CRT_SET_HOOK(H) _CrtSetReportHook(H) +# else +# define BOOST_TEST_CRT_HOOK_TYPE void* +# define BOOST_TEST_CRT_ASSERT 2 +# define BOOST_TEST_CRT_ERROR 1 +# define BOOST_TEST_CRT_SET_HOOK(H) (void*)(H) +# endif + +# if !BOOST_WORKAROUND(_MSC_VER, >= 1400 ) || defined(UNDER_CE) + +typedef void* _invalid_parameter_handler; + +inline _invalid_parameter_handler +_set_invalid_parameter_handler( _invalid_parameter_handler arg ) +{ + return arg; +} + +# endif + +# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564)) || defined(UNDER_CE) + +namespace { void _set_se_translator( void* ) {} } + +# endif + +#elif defined(BOOST_HAS_SIGACTION) + +# define BOOST_SIGACTION_BASED_SIGNAL_HANDLING + +# include +# include +# include + +# if defined(__FreeBSD__) + +# ifndef SIGPOLL +# define SIGPOLL SIGIO +# endif + +# if (__FreeBSD_version < 70100) + +# define ILL_ILLADR 0 // ILL_RESAD_FAULT +# define ILL_PRVOPC ILL_PRIVIN_FAULT +# define ILL_ILLOPN 2 // ILL_RESOP_FAULT +# define ILL_COPROC ILL_FPOP_FAULT + +# define BOOST_TEST_LIMITED_SIGNAL_DETAILS +# define BOOST_TEST_IGNORE_SIGCHLD + +# endif +# endif + +# if !defined(__CYGWIN__) && !defined(__QNXNTO__) +# define BOOST_TEST_USE_ALT_STACK +# endif + +# if defined(SIGPOLL) && !defined(__CYGWIN__) && \ + !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && \ + !defined(__NetBSD__) && \ + !defined(__QNXNTO__) +# define BOOST_TEST_CATCH_SIGPOLL +# endif + +# ifdef BOOST_TEST_USE_ALT_STACK +# define BOOST_TEST_ALT_STACK_SIZE SIGSTKSZ +# endif + +#else + +# define BOOST_NO_SIGNAL_HANDLING + +#endif + +#ifndef UNDER_CE +#include +#endif + +#include + +//____________________________________________________________________________// + +namespace boost { + +// ************************************************************************** // +// ************** report_error ************** // +// ************************************************************************** // + +namespace detail { + +#ifdef __BORLANDC__ +# define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) std::vsnprintf( (a1), (a2), (a3), (a4) ) +#elif BOOST_WORKAROUND(_MSC_VER, <= 1310) || \ + BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3000)) || \ + defined(UNDER_CE) +# define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) _vsnprintf( (a1), (a2), (a3), (a4) ) +#else +# define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) vsnprintf( (a1), (a2), (a3), (a4) ) +#endif + +template +typename ErrorInfo::value_type +extract( boost::exception const* ex ) +{ + if( !ex ) + return 0; + + typename ErrorInfo::value_type const * val = boost::get_error_info( *ex ); + + return val ? *val : 0; +} + +//____________________________________________________________________________// + +static void +report_error( execution_exception::error_code ec, boost::exception const* be, char const* format, va_list* args ) +{ + static const int REPORT_ERROR_BUFFER_SIZE = 512; + static char buf[REPORT_ERROR_BUFFER_SIZE]; + + BOOST_TEST_VSNPRINTF( buf, sizeof(buf)-1, format, *args ); + buf[sizeof(buf)-1] = 0; + + va_end( *args ); + + throw execution_exception( ec, buf, execution_exception::location( extract( be ), + extract( be ), + extract( be ) ) ); +} + +//____________________________________________________________________________// + +static void +report_error( execution_exception::error_code ec, char const* format, ... ) +{ + va_list args; + va_start( args, format ); + + report_error( ec, 0, format, &args ); +} + +//____________________________________________________________________________// + +static void +report_error( execution_exception::error_code ec, boost::exception const* be, char const* format, ... ) +{ + va_list args; + va_start( args, format ); + + report_error( ec, be, format, &args ); +} + +//____________________________________________________________________________// + +template +inline int +do_invoke( Tr const& tr, Functor const& F ) +{ + return tr ? (*tr)( F ) : F(); +} + +//____________________________________________________________________________// + +} // namespace detail + +#if defined(BOOST_SIGACTION_BASED_SIGNAL_HANDLING) + +// ************************************************************************** // +// ************** Sigaction based signal handling ************** // +// ************************************************************************** // + +namespace detail { + +// ************************************************************************** // +// ************** boost::detail::system_signal_exception ************** // +// ************************************************************************** // + +class system_signal_exception { +public: + // Constructor + system_signal_exception() + : m_sig_info( 0 ) + , m_context( 0 ) + {} + + // Access methods + void operator()( siginfo_t* i, void* c ) + { + m_sig_info = i; + m_context = c; + } + void report() const; + +private: + // Data members + siginfo_t* m_sig_info; // system signal detailed info + void* m_context; // signal context +}; + +//____________________________________________________________________________// + +void +system_signal_exception::report() const +{ + if( !m_sig_info ) + return; // no error actually occur? + + switch( m_sig_info->si_code ) { + case SI_USER: + report_error( execution_exception::system_error, + "signal: generated by kill() (or family); uid=%d; pid=%d", + (int)m_sig_info->si_uid, (int)m_sig_info->si_pid ); + break; + case SI_QUEUE: + report_error( execution_exception::system_error, + "signal: sent by sigqueue()" ); + break; + case SI_TIMER: + report_error( execution_exception::system_error, + "signal: the expiration of a timer set by timer_settimer()" ); + break; + case SI_ASYNCIO: + report_error( execution_exception::system_error, + "signal: generated by the completion of an asynchronous I/O request" ); + break; + case SI_MESGQ: + report_error( execution_exception::system_error, + "signal: generated by the the arrival of a message on an empty message queue" ); + break; + default: + break; + } + + switch( m_sig_info->si_signo ) { + case SIGILL: + switch( m_sig_info->si_code ) { +#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS + case ILL_ILLOPC: + report_error( execution_exception::system_fatal_error, + "signal: illegal opcode; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case ILL_ILLTRP: + report_error( execution_exception::system_fatal_error, + "signal: illegal trap; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case ILL_PRVREG: + report_error( execution_exception::system_fatal_error, + "signal: privileged register; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case ILL_BADSTK: + report_error( execution_exception::system_fatal_error, + "signal: internal stack error; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; +#endif + case ILL_ILLOPN: + report_error( execution_exception::system_fatal_error, + "signal: illegal operand; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case ILL_ILLADR: + report_error( execution_exception::system_fatal_error, + "signal: illegal addressing mode; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case ILL_PRVOPC: + report_error( execution_exception::system_fatal_error, + "signal: privileged opcode; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case ILL_COPROC: + report_error( execution_exception::system_fatal_error, + "signal: co-processor error; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + default: + report_error( execution_exception::system_fatal_error, + "signal: SIGILL, si_code: %d (illegal instruction; address of failing instruction: 0x%08lx)", + m_sig_info->si_addr, m_sig_info->si_code ); + break; + } + break; + + case SIGFPE: + switch( m_sig_info->si_code ) { + case FPE_INTDIV: + report_error( execution_exception::system_error, + "signal: integer divide by zero; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_INTOVF: + report_error( execution_exception::system_error, + "signal: integer overflow; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_FLTDIV: + report_error( execution_exception::system_error, + "signal: floating point divide by zero; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_FLTOVF: + report_error( execution_exception::system_error, + "signal: floating point overflow; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_FLTUND: + report_error( execution_exception::system_error, + "signal: floating point underflow; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_FLTRES: + report_error( execution_exception::system_error, + "signal: floating point inexact result; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_FLTINV: + report_error( execution_exception::system_error, + "signal: invalid floating point operation; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + case FPE_FLTSUB: + report_error( execution_exception::system_error, + "signal: subscript out of range; address of failing instruction: 0x%08lx", + m_sig_info->si_addr ); + break; + default: + report_error( execution_exception::system_error, + "signal: SIGFPE, si_code: %d (errnoneous arithmetic operations; address of failing instruction: 0x%08lx)", + m_sig_info->si_addr, m_sig_info->si_code ); + break; + } + break; + + case SIGSEGV: + switch( m_sig_info->si_code ) { +#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS + case SEGV_MAPERR: + report_error( execution_exception::system_fatal_error, + "memory access violation at address: 0x%08lx: no mapping at fault address", + m_sig_info->si_addr ); + break; + case SEGV_ACCERR: + report_error( execution_exception::system_fatal_error, + "memory access violation at address: 0x%08lx: invalid permissions", + m_sig_info->si_addr ); + break; +#endif + default: + report_error( execution_exception::system_fatal_error, + "signal: SIGSEGV, si_code: %d (memory access violation at address: 0x%08lx)", + m_sig_info->si_addr, m_sig_info->si_code ); + break; + } + break; + + case SIGBUS: + switch( m_sig_info->si_code ) { +#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS + case BUS_ADRALN: + report_error( execution_exception::system_fatal_error, + "memory access violation at address: 0x%08lx: invalid address alignment", + m_sig_info->si_addr ); + break; + case BUS_ADRERR: + report_error( execution_exception::system_fatal_error, + "memory access violation at address: 0x%08lx: non-existent physical address", + m_sig_info->si_addr ); + break; + case BUS_OBJERR: + report_error( execution_exception::system_fatal_error, + "memory access violation at address: 0x%08lx: object specific hardware error", + m_sig_info->si_addr ); + break; +#endif + default: + report_error( execution_exception::system_fatal_error, + "signal: SIGSEGV, si_code: %d (memory access violation at address: 0x%08lx)", + m_sig_info->si_addr, m_sig_info->si_code ); + break; + } + break; + + case SIGCHLD: + switch( m_sig_info->si_code ) { +#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS + case CLD_EXITED: + report_error( execution_exception::system_error, + "child has exited; pid: %d; uid: %d; exit value: %d", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status ); + break; + case CLD_KILLED: + report_error( execution_exception::system_error, + "child was killed; pid: %d; uid: %d; exit value: %d", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status ); + break; + case CLD_DUMPED: + report_error( execution_exception::system_error, + "child terminated abnormally; pid: %d; uid: %d; exit value: %d", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status ); + break; + case CLD_TRAPPED: + report_error( execution_exception::system_error, + "traced child has trapped; pid: %d; uid: %d; exit value: %d", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status ); + break; + case CLD_STOPPED: + report_error( execution_exception::system_error, + "child has stopped; pid: %d; uid: %d; exit value: %d", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status ); + break; + case CLD_CONTINUED: + report_error( execution_exception::system_error, + "stopped child had continued; pid: %d; uid: %d; exit value: %d", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status ); + break; +#endif + default: + report_error( execution_exception::system_error, + "signal: SIGCHLD, si_code: %d (child process has terminated; pid: %d; uid: %d; exit value: %d)", + (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status, m_sig_info->si_code ); + break; + } + break; + +#if defined(BOOST_TEST_CATCH_SIGPOLL) + + case SIGPOLL: + switch( m_sig_info->si_code ) { +#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS + case POLL_IN: + report_error( execution_exception::system_error, + "data input available; band event %d", + (int)m_sig_info->si_band ); + break; + case POLL_OUT: + report_error( execution_exception::system_error, + "output buffers available; band event %d", + (int)m_sig_info->si_band ); + break; + case POLL_MSG: + report_error( execution_exception::system_error, + "input message available; band event %d", + (int)m_sig_info->si_band ); + break; + case POLL_ERR: + report_error( execution_exception::system_error, + "i/o error; band event %d", + (int)m_sig_info->si_band ); + break; + case POLL_PRI: + report_error( execution_exception::system_error, + "high priority input available; band event %d", + (int)m_sig_info->si_band ); + break; +#if defined(POLL_ERR) && defined(POLL_HUP) && (POLL_ERR - POLL_HUP) + case POLL_HUP: + report_error( execution_exception::system_error, + "device disconnected; band event %d", + (int)m_sig_info->si_band ); + break; +#endif +#endif + default: + report_error( execution_exception::system_error, + "signal: SIGPOLL, si_code: %d (asynchronous I/O event occured; band event %d)", + (int)m_sig_info->si_band, m_sig_info->si_code ); + break; + } + break; + +#endif + + case SIGABRT: + report_error( execution_exception::system_error, + "signal: SIGABRT (application abort requested)" ); + break; + + case SIGALRM: + report_error( execution_exception::timeout_error, + "signal: SIGALRM (timeout while executing function)" ); + break; + + default: + report_error( execution_exception::system_error, "unrecognized signal" ); + } +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** boost::detail::signal_action ************** // +// ************************************************************************** // + +// Forward declaration +extern "C" { +static void execution_monitor_jumping_signal_handler( int sig, siginfo_t* info, void* context ); +static void execution_monitor_attaching_signal_handler( int sig, siginfo_t* info, void* context ); +} + +class signal_action { + typedef struct sigaction* sigaction_ptr; +public: + //Constructor + signal_action(); + signal_action( int sig, bool install, bool attach_dbg, char* alt_stack ); + ~signal_action(); + +private: + // Data members + int m_sig; + bool m_installed; + struct sigaction m_new_action; + struct sigaction m_old_action; +}; + +//____________________________________________________________________________// + +signal_action::signal_action() +: m_installed( false ) +{} + +//____________________________________________________________________________// + +signal_action::signal_action( int sig, bool install, bool attach_dbg, char* alt_stack ) +: m_sig( sig ) +, m_installed( install ) +{ + if( !install ) + return; + + std::memset( &m_new_action, 0, sizeof(struct sigaction) ); + + BOOST_TEST_SYS_ASSERT( ::sigaction( m_sig , sigaction_ptr(), &m_new_action ) != -1 ); + + if( m_new_action.sa_sigaction || m_new_action.sa_handler ) { + m_installed = false; + return; + } + + m_new_action.sa_flags |= SA_SIGINFO; + m_new_action.sa_sigaction = attach_dbg ? &execution_monitor_attaching_signal_handler + : &execution_monitor_jumping_signal_handler; + BOOST_TEST_SYS_ASSERT( sigemptyset( &m_new_action.sa_mask ) != -1 ); + +#ifdef BOOST_TEST_USE_ALT_STACK + if( alt_stack ) + m_new_action.sa_flags |= SA_ONSTACK; +#endif + + BOOST_TEST_SYS_ASSERT( ::sigaction( m_sig, &m_new_action, &m_old_action ) != -1 ); +} + +//____________________________________________________________________________// + +signal_action::~signal_action() +{ + if( m_installed ) + ::sigaction( m_sig, &m_old_action , sigaction_ptr() ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** boost::detail::signal_handler ************** // +// ************************************************************************** // + +class signal_handler { +public: + // Constructor + explicit signal_handler( bool catch_system_errors, int timeout, bool attach_dbg, char* alt_stack ); + + // Destructor + ~signal_handler(); + + // access methods + static sigjmp_buf& jump_buffer() + { + assert( !!s_active_handler ); + + return s_active_handler->m_sigjmp_buf; + } + + static system_signal_exception& sys_sig() + { + assert( !!s_active_handler ); + + return s_active_handler->m_sys_sig; + } + +private: + // Data members + signal_handler* m_prev_handler; + int m_timeout; + + signal_action m_ILL_action; + signal_action m_FPE_action; + signal_action m_SEGV_action; + signal_action m_BUS_action; + signal_action m_CHLD_action; + signal_action m_POLL_action; + signal_action m_ABRT_action; + signal_action m_ALRM_action; + + sigjmp_buf m_sigjmp_buf; + system_signal_exception m_sys_sig; + + static signal_handler* s_active_handler; +}; + +// !! need to be placed in thread specific storage +typedef signal_handler* signal_handler_ptr; +signal_handler* signal_handler::s_active_handler = signal_handler_ptr(); + +//____________________________________________________________________________// + +signal_handler::signal_handler( bool catch_system_errors, int timeout, bool attach_dbg, char* alt_stack ) +: m_prev_handler( s_active_handler ) +, m_timeout( timeout ) +, m_ILL_action ( SIGILL , catch_system_errors, attach_dbg, alt_stack ) +, m_FPE_action ( SIGFPE , catch_system_errors, attach_dbg, alt_stack ) +, m_SEGV_action( SIGSEGV, catch_system_errors, attach_dbg, alt_stack ) +, m_BUS_action ( SIGBUS , catch_system_errors, attach_dbg, alt_stack ) +#ifndef BOOST_TEST_IGNORE_SIGCHLD +, m_CHLD_action( SIGCHLD, catch_system_errors, attach_dbg, alt_stack ) +#endif +#ifdef BOOST_TEST_CATCH_SIGPOLL +, m_POLL_action( SIGPOLL, catch_system_errors, attach_dbg, alt_stack ) +#endif +, m_ABRT_action( SIGABRT, catch_system_errors, attach_dbg, alt_stack ) +, m_ALRM_action( SIGALRM, timeout > 0 , attach_dbg, alt_stack ) +{ + s_active_handler = this; + + if( m_timeout > 0 ) { + ::alarm( 0 ); + ::alarm( timeout ); + } + +#ifdef BOOST_TEST_USE_ALT_STACK + if( alt_stack ) { + stack_t sigstk; + std::memset( &sigstk, 0, sizeof(stack_t) ); + + BOOST_TEST_SYS_ASSERT( ::sigaltstack( 0, &sigstk ) != -1 ); + + if( sigstk.ss_flags & SS_DISABLE ) { + sigstk.ss_sp = alt_stack; + sigstk.ss_size = BOOST_TEST_ALT_STACK_SIZE; + sigstk.ss_flags = 0; + BOOST_TEST_SYS_ASSERT( ::sigaltstack( &sigstk, 0 ) != -1 ); + } + } +#endif +} + +//____________________________________________________________________________// + +signal_handler::~signal_handler() +{ + assert( s_active_handler == this ); + + if( m_timeout > 0 ) + ::alarm( 0 ); + +#ifdef BOOST_TEST_USE_ALT_STACK +#ifdef __GNUC__ + // We shouldn't need to explicitly initialize all the members here, + // but gcc warns if we don't, so add initializers for each of the + // members specified in the POSIX std: + stack_t sigstk = { 0, 0, 0 }; +#else + stack_t sigstk = { }; +#endif + + sigstk.ss_size = MINSIGSTKSZ; + sigstk.ss_flags = SS_DISABLE; + BOOST_TEST_SYS_ASSERT( ::sigaltstack( &sigstk, 0 ) != -1 ); +#endif + + s_active_handler = m_prev_handler; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** execution_monitor_signal_handler ************** // +// ************************************************************************** // + +extern "C" { + +static bool ignore_sigchild( siginfo_t* info ) +{ + return info->si_signo == SIGCHLD +#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS + && info->si_code == CLD_EXITED +#endif +#ifdef BOOST_TEST_IGNORE_NON_ZERO_CHILD_CODE + ; +#else + && (int)info->si_status == 0; +#endif +} + +//____________________________________________________________________________// + +static void execution_monitor_jumping_signal_handler( int sig, siginfo_t* info, void* context ) +{ + if( ignore_sigchild( info ) ) + return; + + signal_handler::sys_sig()( info, context ); + + siglongjmp( signal_handler::jump_buffer(), sig ); +} + +//____________________________________________________________________________// + +static void execution_monitor_attaching_signal_handler( int sig, siginfo_t* info, void* context ) +{ + if( ignore_sigchild( info ) ) + return; + + if( !debug::attach_debugger( false ) ) + execution_monitor_jumping_signal_handler( sig, info, context ); + + // debugger attached; it will handle the signal + BOOST_TEST_SYS_ASSERT( ::signal( sig, SIG_DFL ) != SIG_ERR ); +} + +//____________________________________________________________________________// + +} + +} // namespace detail + +// ************************************************************************** // +// ************** execution_monitor::catch_signals ************** // +// ************************************************************************** // + +int +execution_monitor::catch_signals( unit_test::callback0 const& F ) +{ + using namespace detail; + +#if defined(__CYGWIN__) + p_catch_system_errors.value = false; +#endif + +#ifdef BOOST_TEST_USE_ALT_STACK + if( !!p_use_alt_stack && !m_alt_stack ) + m_alt_stack.reset( new char[BOOST_TEST_ALT_STACK_SIZE] ); +#else + p_use_alt_stack.value = false; +#endif + + signal_handler local_signal_handler( p_catch_system_errors, p_timeout, p_auto_start_dbg, + !p_use_alt_stack ? 0 : m_alt_stack.get() ); + + if( !sigsetjmp( signal_handler::jump_buffer(), 1 ) ) + return detail::do_invoke( m_custom_translators , F ); + else + throw local_signal_handler.sys_sig(); +} + +//____________________________________________________________________________// + +#elif defined(BOOST_SEH_BASED_SIGNAL_HANDLING) + +// ************************************************************************** // +// ************** Microsoft structured exception handling ************** // +// ************************************************************************** // + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564)) +namespace { void _set_se_translator( void* ) {} } +#endif + +namespace detail { + +// ************************************************************************** // +// ************** boost::detail::system_signal_exception ************** // +// ************************************************************************** // + +class system_signal_exception { +public: + // Constructor + explicit system_signal_exception( execution_monitor* em ) + : m_em( em ) + , m_se_id( 0 ) + , m_fault_address( 0 ) + , m_dir( false ) + {} + + void report() const; + int operator()( unsigned int id, _EXCEPTION_POINTERS* exps ); + +private: + // Data members + execution_monitor* m_em; + + unsigned int m_se_id; + void* m_fault_address; + bool m_dir; +}; + +static void +seh_catch_preventer( unsigned int /* id */, _EXCEPTION_POINTERS* /* exps */ ) +{ + throw; +} + +//____________________________________________________________________________// + +int +system_signal_exception::operator()( unsigned int id, _EXCEPTION_POINTERS* exps ) +{ + const unsigned int MSFT_CPP_EXCEPT = 0xE06d7363; // EMSC + + if( !m_em->p_catch_system_errors || (id == MSFT_CPP_EXCEPT) ) + return EXCEPTION_CONTINUE_SEARCH; + + if( !!m_em->p_auto_start_dbg && debug::attach_debugger( false ) ) { + m_em->p_catch_system_errors.value = false; + _set_se_translator( &seh_catch_preventer ); + + return EXCEPTION_CONTINUE_EXECUTION; + } + + m_se_id = id; + if( m_se_id == EXCEPTION_ACCESS_VIOLATION && exps->ExceptionRecord->NumberParameters == 2 ) { + m_fault_address = (void*)exps->ExceptionRecord->ExceptionInformation[1]; + m_dir = exps->ExceptionRecord->ExceptionInformation[0] == 0; + } + + return EXCEPTION_EXECUTE_HANDLER; +} + +//____________________________________________________________________________// + +void +system_signal_exception::report() const +{ + switch( m_se_id ) { + // cases classified as system_fatal_error + case EXCEPTION_ACCESS_VIOLATION: { + if( !m_fault_address ) + detail::report_error( execution_exception::system_fatal_error, "memory access violation" ); + else + detail::report_error( + execution_exception::system_fatal_error, + "memory access violation occurred at address 0x%08lx, while attempting to %s", + m_fault_address, + m_dir ? " read inaccessible data" + : " write to an inaccessible (or protected) address" + ); + 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, "tried to execute an instruction whose operation is not allowed in the current machine mode" ); + break; + + case EXCEPTION_IN_PAGE_ERROR: + detail::report_error( execution_exception::system_fatal_error, "access to a memory page that is not present" ); + break; + + case EXCEPTION_STACK_OVERFLOW: + detail::report_error( execution_exception::system_fatal_error, "stack overflow" ); + break; + + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + detail::report_error( execution_exception::system_fatal_error, "tried to continue execution after a non continuable exception occurred" ); + 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, + "stack overflowed or underflowed as the result of a floating-point operation" ); + break; + + case EXCEPTION_FLT_DENORMAL_OPERAND: + detail::report_error( execution_exception::system_error, + "operand of floating point operation is denormal" ); + break; + +# if 0 // !! ?? + case EXCEPTION_FLT_INEXACT_RESULT: + detail::report_error( execution_exception::system_error, + "result of a floating-point operation cannot be represented exactly" ); + break; +#endif + + case EXCEPTION_FLT_OVERFLOW: + detail::report_error( execution_exception::system_error, + "exponent of a floating-point operation is greater than the magnitude allowed by the corresponding type" ); + break; + + case EXCEPTION_FLT_UNDERFLOW: + detail::report_error( execution_exception::system_error, + "exponent of a floating-point operation is less than the magnitude allowed by the corresponding type" ); + break; + + case EXCEPTION_FLT_INVALID_OPERATION: + detail::report_error( execution_exception::system_error, "floating point error" ); + break; + + case EXCEPTION_BREAKPOINT: + detail::report_error( execution_exception::system_error, "breakpoint encountered" ); + break; + + default: + detail::report_error( execution_exception::system_error, "unrecognized exception. Id: 0x%08lx", m_se_id ); + break; + } +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** assert_reporting_function ************** // +// ************************************************************************** // + +int BOOST_TEST_CALL_DECL +assert_reporting_function( int reportType, char* userMessage, int* ) +{ + switch( reportType ) { + case BOOST_TEST_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 BOOST_TEST_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 + } +} // assert_reporting_function + +//____________________________________________________________________________// + +void BOOST_TEST_CALL_DECL +invalid_param_handler( wchar_t const* /* expr */, + wchar_t const* /* func */, + wchar_t const* /* file */, + unsigned int /* line */, + uintptr_t /* reserved */) +{ + detail::report_error( execution_exception::user_error, + "Invalid parameter detected by C runtime library" ); +} + +//____________________________________________________________________________// + +void BOOST_TEST_CALL_DECL +switch_fp_exceptions( bool on_off ) +{ + if( !on_off ) + _clearfp(); + + int cw = ::_controlfp( 0, 0 ); + + int exceptions_mask = EM_INVALID|EM_DENORMAL|EM_ZERODIVIDE|EM_OVERFLOW|EM_UNDERFLOW; + + if( on_off ) + cw &= ~exceptions_mask; // Set the exception masks on, turn exceptions off + else + cw |= exceptions_mask; // Set the exception masks off, turn exceptions on + + if( on_off ) + _clearfp(); + + // Set the control word + ::_controlfp( cw, MCW_EM ); +} + +//____________________________________________________________________________// + +} // namespace detail + +// ************************************************************************** // +// ************** execution_monitor::catch_signals ************** // +// ************************************************************************** // + +int +execution_monitor::catch_signals( unit_test::callback0 const& F ) +{ + _invalid_parameter_handler old_iph = _invalid_parameter_handler(); + BOOST_TEST_CRT_HOOK_TYPE old_crt_hook = 0; + + if( !p_catch_system_errors ) + _set_se_translator( &detail::seh_catch_preventer ); + else { + if( !!p_detect_fp_exceptions ) + detail::switch_fp_exceptions( true ); + + old_crt_hook = BOOST_TEST_CRT_SET_HOOK( &detail::assert_reporting_function ); + + old_iph = _set_invalid_parameter_handler( + reinterpret_cast<_invalid_parameter_handler>( &detail::invalid_param_handler ) ); + } + + detail::system_signal_exception SSE( this ); + + int ret_val = 0; + + __try { + __try { + ret_val = detail::do_invoke( m_custom_translators, F ); + } + __except( SSE( GetExceptionCode(), GetExceptionInformation() ) ) { + throw SSE; + } + } + __finally { + if( !!p_catch_system_errors ) { + if( !!p_detect_fp_exceptions ) + detail::switch_fp_exceptions( false ); + + BOOST_TEST_CRT_SET_HOOK( old_crt_hook ); + + _set_invalid_parameter_handler( old_iph ); + } + } + + return ret_val; +} + +//____________________________________________________________________________// + +#else // default signal handler + +namespace detail { + +class system_signal_exception { +public: + void report() const {} +}; + +} // namespace detail + +int +execution_monitor::catch_signals( unit_test::callback0 const& F ) +{ + return detail::do_invoke( m_custom_translators , F ); +} + +//____________________________________________________________________________// + +#endif // choose signal handler + +// ************************************************************************** // +// ************** execution_monitor::execute ************** // +// ************************************************************************** // + +int +execution_monitor::execute( unit_test::callback0 const& F ) +{ + if( debug::under_debugger() ) + p_catch_system_errors.value = false; + + try { + return catch_signals( F ); + } + + // 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: %s", ex ); } + catch( std::string const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + "std::string: %s", ex.c_str() ); } + + // std:: exceptions + + catch( std::bad_alloc const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::bad_alloc: %s", ex.what() ); } + +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0551) + catch( std::bad_cast const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::bad_cast" ); } + catch( std::bad_typeid const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::bad_typeid" ); } +#else + catch( std::bad_cast const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::bad_cast: %s", ex.what() ); } + catch( std::bad_typeid const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::bad_typeid: %s", ex.what() ); } +#endif + + catch( std::bad_exception const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::bad_exception: %s", ex.what() ); } + catch( std::domain_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::domain_error: %s", ex.what() ); } + catch( std::invalid_argument const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::invalid_argument: %s", ex.what() ); } + catch( std::length_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::length_error: %s", ex.what() ); } + catch( std::out_of_range const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::out_of_range: %s", ex.what() ); } + catch( std::range_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::range_error: %s", ex.what() ); } + catch( std::overflow_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::overflow_error: %s", ex.what() ); } + catch( std::underflow_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::underflow_error: %s", ex.what() ); } + catch( std::logic_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::logic_error: %s", ex.what() ); } + catch( std::runtime_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::runtime_error: %s", ex.what() ); } + catch( std::exception const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + current_exception_cast(), + "std::exception: %s", ex.what() ); } + + catch( boost::exception const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + &ex, + "unknown boost::exception" ); } + + // system errors + catch( system_error const& ex ) + { detail::report_error( execution_exception::cpp_exception_error, + "system_error produced by: %s: %s", ex.p_failed_exp.get(), std::strerror( ex.p_errno ) ); } + catch( detail::system_signal_exception const& ex ) + { ex.report(); } + + // not an error + catch( execution_aborted const& ) + { return 0; } + + // just forward + catch( execution_exception const& ) + { throw; } + + // unknown error + catch( ... ) + { detail::report_error( execution_exception::cpp_exception_error, "unknown type" ); } + + return 0; // never reached; supplied to quiet compiler warnings +} // execute + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** system_error ************** // +// ************************************************************************** // + +system_error::system_error( char const* exp ) +#ifdef UNDER_CE +: p_errno( GetLastError() ) +#else +: p_errno( errno ) +#endif +, p_failed_exp( exp ) +{} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** execution_exception ************** // +// ************************************************************************** // + +execution_exception::execution_exception( error_code ec_, const_string what_msg_, location const& location_ ) +: m_error_code( ec_ ) +, m_what( what_msg_.empty() ? BOOST_TEST_L( "uncaught exception, system error or abort requested" ) : what_msg_ ) +, m_location( location_ ) +{} + +//____________________________________________________________________________// + +execution_exception::location::location( char const* file_name, size_t line_num, char const* func ) +: m_file_name( file_name ? file_name : "unknown location" ) +, m_line_num( line_num ) +, m_function( func ) +{} + +//____________________________________________________________________________// + +} // namespace boost + +#include + +#endif // BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER + diff --git a/external/boost/test/impl/framework.ipp b/external/boost/test/impl/framework.ipp new file mode 100644 index 0000000..1fbcffc --- /dev/null +++ b/external/boost/test/impl/framework.ipp @@ -0,0 +1,503 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57991 $ +// +// Description : implements framework API - main driver for the test +// *************************************************************************** + +#ifndef BOOST_TEST_FRAMEWORK_IPP_021005GER +#define BOOST_TEST_FRAMEWORK_IPP_021005GER + +// Boost.Test +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +// Boost +#include + +// STL +#include +#include +#include +#include + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::time; using ::srand; } +#endif + +#include + +//____________________________________________________________________________// + +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; +}; + +//____________________________________________________________________________// + +struct test_init_caller { + explicit test_init_caller( init_unit_test_func init_func ) + : m_init_func( init_func ) + {} + int operator()() + { +#ifdef BOOST_TEST_ALTERNATIVE_INIT_API + if( !(*m_init_func)() ) + throw std::runtime_error( "test module initialization failed" ); +#else + test_suite* manual_test_units = (*m_init_func)( framework::master_test_suite().argc, framework::master_test_suite().argv ); + + if( manual_test_units ) + framework::master_test_suite().add( manual_test_units ); +#endif + return 0; + } + + // Data members + init_unit_test_func m_init_func; +}; + +} + +// ************************************************************************** // +// ************** 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_is_initialized( false ) + , m_test_in_progress( false ) + {} + + ~framework_impl() { clear(); } + + void clear() + { + while( !m_test_units.empty() ) { + test_unit_store::value_type const& tu = *m_test_units.begin(); + test_unit* tu_ptr = tu.second; + + // the delete will erase this element from map + if( ut_detail::test_id_2_unit_type( tu.second->p_id ) == tut_suite ) + delete (test_suite const*)tu_ptr; + else + delete (test_case const*)tu_ptr; + } + } + + 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( 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_store; + typedef std::set 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_is_initialized; + bool m_test_in_progress; + + observer_store m_observers; +}; + +//____________________________________________________________________________// + +namespace { + +#if defined(__CYGWIN__) +framework_impl& s_frk_impl() { static framework_impl* the_inst = 0; if(!the_inst) the_inst = new framework_impl; return *the_inst; } +#else +framework_impl& s_frk_impl() { static framework_impl the_inst; return the_inst; } +#endif + +} // local namespace + +//____________________________________________________________________________// + +namespace framework { + +void +init( init_unit_test_func init_func, int argc, char* argv[] ) +{ + runtime_config::init( argc, argv ); + + // set the log level and format + unit_test_log.set_threshold_level( runtime_config::log_level() ); + unit_test_log.set_format( runtime_config::log_format() ); + + // set the report level and 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 ) { + debug::detect_memory_leaks( true ); + debug::break_memory_alloc( runtime_config::detect_memory_leaks() ); + } + + // init master unit test suite + master_test_suite().argc = argc; + master_test_suite().argv = argv; + + try { + boost::execution_monitor em; + + ut_detail::test_init_caller tic( init_func ); + + em.execute( tic ); + } + catch( execution_exception const& ex ) { + throw setup_error( ex.what() ); + } + + s_frk_impl().m_is_initialized = true; +} + +//____________________________________________________________________________// + +bool +is_initialized() +{ + return s_frk_impl().m_is_initialized; +} + +//____________________________________________________________________________// + +void +register_test_unit( test_case* tc ) +{ + BOOST_TEST_SETUP_ASSERT( tc->p_id == INV_TEST_UNIT_ID, BOOST_TEST_L( "test case already registered" ) ); + + test_unit_id new_id = s_frk_impl().m_next_test_case_id; + + BOOST_TEST_SETUP_ASSERT( new_id != MAX_TEST_CASE_ID, 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 ) +{ + BOOST_TEST_SETUP_ASSERT( ts->p_id == INV_TEST_UNIT_ID, BOOST_TEST_L( "test suite already registered" ) ); + + test_unit_id new_id = s_frk_impl().m_next_test_suite_id; + + BOOST_TEST_SETUP_ASSERT( new_id != MAX_TEST_SUITE_ID, 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 +deregister_test_unit( test_unit* tu ) +{ + s_frk_impl().m_test_units.erase( tu->p_id ); +} + +//____________________________________________________________________________// + +void +clear() +{ + s_frk_impl().clear(); +} + +//____________________________________________________________________________// + +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( s_frk_impl().m_curr_test_case ); +} + +//____________________________________________________________________________// + +test_unit& +get( test_unit_id id, test_unit_type t ) +{ + test_unit* 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 ); + + BOOST_TEST_SETUP_ASSERT( tcc.p_count != 0 , runtime_config::test_to_run().is_empty() + ? BOOST_TEST_L( "test tree is empty" ) + : BOOST_TEST_L( "no test cases matching filter" ) ); + + 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.p_count ) ); + } + catch( execution_exception const& ex ) { + throw setup_error( ex.what() ); + } + } + } + + switch( runtime_config::random_seed() ) { + case 0: + break; + case 1: { + unsigned int seed = static_cast( 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 + +#endif // BOOST_TEST_FRAMEWORK_IPP_021005GER diff --git a/external/boost/test/impl/interaction_based.ipp b/external/boost/test/impl/interaction_based.ipp new file mode 100644 index 0000000..56bb867 --- /dev/null +++ b/external/boost/test/impl/interaction_based.ipp @@ -0,0 +1,90 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// 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$ +// +// Version : $Revision: 54633 $ +// +// Description : Facilities to perform interaction-based testing +// *************************************************************************** + +#ifndef BOOST_TEST_INTERACTION_BASED_IPP_112105GER +#define BOOST_TEST_INTERACTION_BASED_IPP_112105GER + +// Boost.Test +#include + +#if BOOST_TEST_SUPPORT_INTERACTION_TESTING + +// Boost.Test +#include +#include +#include +#include +#include // for setup_error + +#include + +// STL +#include +#include + +//____________________________________________________________________________// + +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 ) { + BOOST_TEST_SETUP_ASSERT( ptr == &dummy, BOOST_TEST_L( "Can't run two interation based test the same time" ) ); + + ptr = new_ptr; + } + else + ptr = &dummy; + } + + return ptr; +} + +} // namespace itest + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // not ancient compiler + +#endif // BOOST_TEST_INTERACTION_BASED_IPP_112105GER diff --git a/external/boost/test/impl/logged_expectations.ipp b/external/boost/test/impl/logged_expectations.ipp new file mode 100644 index 0000000..2df790c --- /dev/null +++ b/external/boost/test/impl/logged_expectations.ipp @@ -0,0 +1,246 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// 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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#if BOOST_TEST_SUPPORT_INTERACTION_TESTING + +#include + +#include +#include + +#include +#include + +#include + +// Boost +#include + +// STL +#include + +//____________________________________________________________________________// + +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(), + "Can'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( *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( *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 + +#endif // not ancient compiler + +#endif // BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER diff --git a/external/boost/test/impl/plain_report_formatter.ipp b/external/boost/test/impl/plain_report_formatter.ipp new file mode 100644 index 0000000..d901b8e --- /dev/null +++ b/external/boost/test/impl/plain_report_formatter.ipp @@ -0,0 +1,198 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : plain report formatter definition +// *************************************************************************** + +#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER +#define BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER + +// Boost.Test +#include +#include +#include +#include + +#include + +// STL +#include +#include +#include + +#include + +# ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::log10; } +# endif + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace output { + +namespace { + +typedef custom_manip quote; + +template +inline std::ostream& +operator<<( custom_printer 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 + +#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER diff --git a/external/boost/test/impl/progress_monitor.ipp b/external/boost/test/impl/progress_monitor.ipp new file mode 100644 index 0000000..d245aa6 --- /dev/null +++ b/external/boost/test/impl/progress_monitor.ipp @@ -0,0 +1,110 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : implements simple text based progress monitor +// *************************************************************************** + +#ifndef BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER +#define BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER + +// Boost.Test +#include +#include + +#include + +// Boost +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** progress_monitor ************** // +// ************************************************************************** // + +namespace { + +struct progress_monitor_impl { + // Constructor + progress_monitor_impl() + : m_stream( runtime_config::log_sink() ) + {} + + std::ostream* m_stream; + scoped_ptr 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.p_count; +} + +//____________________________________________________________________________// + +void +progress_monitor_t::set_stream( std::ostream& ostr ) +{ + s_pm_impl().m_stream = &ostr; +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER diff --git a/external/boost/test/impl/results_collector.ipp b/external/boost/test/impl/results_collector.ipp new file mode 100644 index 0000000..e85528b --- /dev/null +++ b/external/boost/test/impl/results_collector.ipp @@ -0,0 +1,294 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : implements Unit Test results collecting facility. +// *************************************************************************** + +#ifndef BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER +#define BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER + +// Boost.Test +#include +#include +#include +#include + +// Boost +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +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 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 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 " << tu.p_name << " has fewer failures than expected" ); + + bool check_any_assertions = tr.p_aborted || (tr.p_assertions_failed != 0) || (tr.p_assertions_passed != 0); + if( !check_any_assertions ) + BOOST_TEST_MESSAGE( "Test case " << tu.p_name << " did not check any assertions" ); + } +} + +//____________________________________________________________________________// + +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.p_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 + +#endif // BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER diff --git a/external/boost/test/impl/results_reporter.ipp b/external/boost/test/impl/results_reporter.ipp new file mode 100644 index 0000000..71a0f66 --- /dev/null +++ b/external/boost/test/impl/results_reporter.ipp @@ -0,0 +1,202 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : result reporting facilties +// *************************************************************************** + +#ifndef BOOST_TEST_RESULTS_REPORTER_IPP_020105GER +#define BOOST_TEST_RESULTS_REPORTER_IPP_020105GER + +// Boost.Test +#include +#include +#include +#include +#include +#include + +#include + +// Boost +#include +#include +typedef ::boost::io::ios_base_all_saver io_saver_type; + +// STL +#include + +#include + +//____________________________________________________________________________// + +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( runtime_config::report_sink() ) + , m_stream_state_saver( new io_saver_type( *m_output ) ) + , 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 saver_ptr; + + // Data members + std::ostream* m_output; + saver_ptr m_stream_state_saver; + report_level m_report_level; + scoped_ptr 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 ) ); +} + +//____________________________________________________________________________// + +std::ostream& +get_stream() +{ + return *s_rr_impl().m_output; +} + +//____________________________________________________________________________// + +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; + default: + 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( 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 + +#endif // BOOST_TEST_RESULTS_REPORTER_IPP_020105GER diff --git a/external/boost/test/impl/test_main.ipp b/external/boost/test/impl/test_main.ipp new file mode 100644 index 0000000..6c41cee --- /dev/null +++ b/external/boost/test/impl/test_main.ipp @@ -0,0 +1,68 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// (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$ +// +// Version : $$Revision: 49312 $ +// +// 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 +#include +#include + +// Boost +#include + +#include + +//____________________________________________________________________________// + +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 + +#endif // BOOST_TEST_TEST_MAIN_IPP_012205GER diff --git a/external/boost/test/impl/test_tools.ipp b/external/boost/test/impl/test_tools.ipp new file mode 100644 index 0000000..67fb25d --- /dev/null +++ b/external/boost/test/impl/test_tools.ipp @@ -0,0 +1,628 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include +#include +#include +#include // execution_aborted +#include + +// Boost +#include + +// STL +#include +#include +#include +#include +#include +#include +#include + +// !! should we use #include +#include + +#include + +//____________________________________________________________________________// + +# 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 { + +// ************************************************************************** // +// ************** print_log_value ************** // +// ************************************************************************** // + +void +print_log_value::operator()( std::ostream& ostr, char t ) +{ + if( (std::isprint)( static_cast(t) ) ) + ostr << '\'' << t << '\''; + else + ostr << std::hex +#if BOOST_TEST_USE_STD_LOCALE + << std::showbase +#else + << "0x" +#endif + << static_cast(t); +} + +//____________________________________________________________________________// + +void +print_log_value::operator()( std::ostream& ostr, unsigned char t ) +{ + ostr << std::hex + // showbase is only available for new style streams: +#if BOOST_TEST_USE_STD_LOCALE + << std::showbase +#else + << "0x" +#endif + << static_cast(t); +} + +//____________________________________________________________________________// + +void +print_log_value::operator()( std::ostream& ostr, char const* t ) +{ + ostr << ( t ? t : "null string" ); +} + +//____________________________________________________________________________// + +void +print_log_value::operator()( std::ostream& ostr, wchar_t const* t ) +{ + ostr << ( t ? t : L"null string" ); +} + +//____________________________________________________________________________// + +namespace tt_detail { + +// ************************************************************************** // +// ************** TOOL BOX Implementation ************** // +// ************************************************************************** // + +using ::boost::unit_test::lazy_ostream; + +bool +check_impl( predicate_result const& pr, lazy_ostream const& 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( !framework::is_initialized() ) + throw std::runtime_error( "can't use testing tools before framework is initialized" ); + + 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 true; + } + + switch( ct ) { + case CHECK_PRED: + unit_test_log << unit_test::log::begin( file_name, line_num ) + << ll << prefix << check_descr << 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 << "'" << suffix; + else + unit_test_log << check_descr; + + if( !pr.has_empty_message() ) + unit_test_log << ". " << pr.message(); + + unit_test_log << unit_test::log::end(); + break; + + case CHECK_EQUAL: + case CHECK_NE: + case CHECK_LT: + case CHECK_LE: + case CHECK_GT: + case CHECK_GE: { + static char const* check_str [] = { " == ", " != ", " < " , " <= ", " > " , " >= " }; + static char const* rever_str [] = { " != ", " == ", " >= ", " > " , " <= ", " < " }; + + va_list args; + + va_start( args, num_of_args ); + char const* arg1_descr = va_arg( args, char const* ); + lazy_ostream const* arg1_val = va_arg( args, lazy_ostream const* ); + char const* arg2_descr = va_arg( args, char const* ); + lazy_ostream const* arg2_val = va_arg( args, lazy_ostream const* ); + + unit_test_log << unit_test::log::begin( file_name, line_num ) + << ll << prefix << arg1_descr << check_str[ct-CHECK_EQUAL] << arg2_descr << suffix; + + if( tl != PASS ) + unit_test_log << " [" << *arg1_val << rever_str[ct-CHECK_EQUAL] << *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* ); + lazy_ostream const* arg1_val = va_arg( args, lazy_ostream const* ); + char const* arg2_descr = va_arg( args, char const* ); + lazy_ostream const* arg2_val = va_arg( args, lazy_ostream const* ); + /* toler_descr = */ va_arg( args, char const* ); + lazy_ostream const* toler_val = va_arg( args, lazy_ostream const* ); + + unit_test_log << unit_test::log::begin( file_name, line_num ) << ll; + + unit_test_log << "difference{" << pr.message() << (ct == CHECK_CLOSE ? "%" : "") + << "} 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 ); + + 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* ); + lazy_ostream const* arg1_val = va_arg( args, lazy_ostream const* ); + /* toler_descr = */ va_arg( args, char const* ); + lazy_ostream const* toler_val = va_arg( args, lazy_ostream 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; + + // 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, lazy_ostream 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, lazy_ostream 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 ); + return true; + + case WARN: + return false; + + case CHECK: + framework::assertion_result( false ); + return false; + + case REQUIRE: + framework::assertion_result( false ); + + framework::test_unit_aborted( framework::current_test_case() ); + + throw execution_aborted(); + } + + return true; +} + +//____________________________________________________________________________// + +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; +} + +//____________________________________________________________________________// + +} // 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(), + "Can't open pattern file " << pattern_file_name + << " for " << (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 can't be opened!"; + } + 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(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( 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( 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 ); +#else + m_pimpl->m_synced_string = str(); +#endif +} + +//____________________________________________________________________________// + +} // namespace test_tools + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_TEST_TOOLS_IPP_012205GER diff --git a/external/boost/test/impl/unit_test_log.ipp b/external/boost/test/impl/unit_test_log.ipp new file mode 100644 index 0000000..dbe4015 --- /dev/null +++ b/external/boost/test/impl/unit_test_log.ipp @@ -0,0 +1,444 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : implemets Unit Test Log +// *************************************************************************** + +#ifndef BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER +#define BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER + +// Boost.Test +#include +#include +#include +#include + +#include + +#include + +#include +#include + +// Boost +#include +#include +typedef ::boost::io::ios_base_all_saver io_saver_type; + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** entry_value_collector ************** // +// ************************************************************************** // + +namespace ut_detail { + +entry_value_collector const& +entry_value_collector::operator<<( lazy_ostream const& v ) const +{ + unit_test_log << v; + + return *this; +} + +//____________________________________________________________________________// + +entry_value_collector const& +entry_value_collector::operator<<( const_string v ) const +{ + unit_test_log << v; + + return *this; +} + +//____________________________________________________________________________// + +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( runtime_config::log_sink() ) + , m_stream_state_saver( new io_saver_type( *m_stream ) ) + , m_threshold_level( log_all_errors ) + , m_log_formatter( new output::compiler_log_formatter ) + { + } + + // log data + typedef scoped_ptr formatter_ptr; + typedef scoped_ptr 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 ) +{ + if( s_log_impl().m_threshold_level == log_nothing ) + return; + + 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() +{ + if( s_log_impl().m_threshold_level == log_nothing ) + return; + + s_log_impl().m_log_formatter->log_finish( s_log_impl().stream() ); + + s_log_impl().stream().flush(); +} + +//____________________________________________________________________________// + +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_units ) + 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_units ) + 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_units ) + 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 ); + } +} + +//____________________________________________________________________________// + +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; + + return ut_detail::entry_value_collector(); +} + +//____________________________________________________________________________// + +bool +unit_test_log_t::log_entry_start() +{ + if( s_log_impl().m_entry_in_progress ) + return 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_units: + case invalid_log_level: + return false; + } + + s_log_impl().m_entry_in_progress = true; + + return true; +} + +//____________________________________________________________________________// + +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() && log_entry_start() ) + s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value ); + + return *this; +} + +//____________________________________________________________________________// + +unit_test_log_t& +unit_test_log_t::operator<<( lazy_ostream const& value ) +{ + if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() ) + 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 ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** unit_test_log_formatter ************** // +// ************************************************************************** // + +void +unit_test_log_formatter::log_entry_value( std::ostream& ostr, lazy_ostream const& value ) +{ + log_entry_value( ostr, (wrap_stringstream().ref() << value).str() ); +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER diff --git a/external/boost/test/impl/unit_test_main.ipp b/external/boost/test/impl/unit_test_main.ipp new file mode 100644 index 0000000..9874c69 --- /dev/null +++ b/external/boost/test/impl/unit_test_main.ipp @@ -0,0 +1,246 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include +#include +#include + +#include + +#if !defined(__BORLANDC__) && !BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) && !BOOST_WORKAROUND( __SUNPRO_CC, < 0x5100 ) +#define BOOST_TEST_SUPPORT_RUN_BY_NAME +#include +#endif + +// Boost +#include +#include + +// STL +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** test_case_filter ************** // +// ************************************************************************** // + +class test_case_filter : public test_tree_visitor { +public: + struct single_filter { + single_filter( const_string in ) + { + if( in == "*" ) + m_kind = SFK_ALL; + else if( first_char( in ) == '*' && last_char( in ) == '*' ) { + m_kind = SFK_SUBSTR; + m_value = in.substr( 1, in.size()-1 ); + } + else if( first_char( in ) == '*' ) { + m_kind = SFK_TRAILING; + m_value = in.substr( 1 ); + } + else if( last_char( in ) == '*' ) { + m_kind = SFK_LEADING; + m_value = in.substr( 0, in.size()-1 ); + } + else { + m_kind = SFK_MATCH; + m_value = in; + } + }; + + bool pass( test_unit const& tu ) const + { + const_string name( tu.p_name ); + + switch( m_kind ) { + default: + case SFK_ALL: + return true; + + case SFK_LEADING: + return name.substr( 0, m_value.size() ) == m_value; + + case SFK_TRAILING: + return name.size() >= m_value.size() && name.substr( name.size() - m_value.size() ) == m_value; + + case SFK_SUBSTR: + return name.find( m_value ) != const_string::npos; + + case SFK_MATCH: + return m_value == tu.p_name.get(); + } + } + enum kind { SFK_ALL, SFK_LEADING, SFK_TRAILING, SFK_SUBSTR, SFK_MATCH }; + + kind m_kind; + const_string m_value; + }; + // Constructor +#ifndef BOOST_TEST_SUPPORT_RUN_BY_NAME + explicit test_case_filter( const_string ) : m_depth( 0 ) {} +#else + explicit test_case_filter( const_string tc_to_run ) + : m_depth( 0 ) + { + string_token_iterator tit( tc_to_run, (dropped_delimeters = "/", kept_delimeters = dt_none) ); + + while( tit != string_token_iterator() ) { + m_filters.push_back( + std::vector( string_token_iterator( *tit, (dropped_delimeters = ",", kept_delimeters = dt_none) ), + string_token_iterator() ) ); + + ++tit; + } + } +#endif + + void filter_unit( test_unit const& tu ) + { + if( (++m_depth - 1) > m_filters.size() ) { + tu.p_enabled.value = true; + return; + } + + if( m_depth == 1 ) + return; + + std::vector const& filters = m_filters[m_depth-2]; + + tu.p_enabled.value = + std::find_if( filters.begin(), filters.end(), bind( &single_filter::pass, _1, boost::ref(tu) ) ) != filters.end(); + } + + // test tree visitor interface + virtual void visit( test_case const& tc ) + { + if( m_depth < m_filters.size() ) { + tc.p_enabled.value = false; + return; + } + + filter_unit( tc ); + + --m_depth; + } + + virtual bool test_suite_start( test_suite const& ts ) + { + filter_unit( ts ); + + if( !ts.p_enabled ) + --m_depth; + + return ts.p_enabled; + } + + virtual void test_suite_finish( test_suite const& ) { --m_depth; } + +private: + // Data members + std::vector > m_filters; + unsigned m_depth; +}; + +// ************************************************************************** // +// ************** unit_test_main ************** // +// ************************************************************************** // + +int BOOST_TEST_DECL +unit_test_main( init_unit_test_func init_func, int argc, char* argv[] ) +{ + try { + framework::init( init_func, argc, argv ); + + if( !runtime_config::test_to_run().is_empty() ) { + test_case_filter filter( runtime_config::test_to_run() ); + + traverse_test_tree( framework::master_test_suite().p_id, filter ); + } + + 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::nothing_to_test const& ) { + return boost::exit_success; + } + catch( framework::internal_error const& ex ) { + results_reporter::get_stream() << "Boost.Test framework internal error: " << ex.what() << std::endl; + + return boost::exit_exception_failure; + } + catch( framework::setup_error const& ex ) { + results_reporter::get_stream() << "Test setup error: " << ex.what() << std::endl; + + return boost::exit_exception_failure; + } + catch( ... ) { + results_reporter::get_stream() << "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[] ) +{ + // prototype for user's unit test init function +#ifdef BOOST_TEST_ALTERNATIVE_INIT_API + extern bool init_unit_test(); + + boost::unit_test::init_unit_test_func init_func = &init_unit_test; +#else + extern ::boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] ); + + boost::unit_test::init_unit_test_func init_func = &init_unit_test_suite; +#endif + + return ::boost::unit_test::unit_test_main( init_func, argc, argv ); +} + +#endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER diff --git a/external/boost/test/impl/unit_test_monitor.ipp b/external/boost/test/impl/unit_test_monitor.ipp new file mode 100644 index 0000000..b162ad9 --- /dev/null +++ b/external/boost/test/impl/unit_test_monitor.ipp @@ -0,0 +1,101 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include +#include +#include + +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace { + +template +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 +zero_return_wrapper_t +zero_return_wrapper( F const& f ) +{ + return zero_return_wrapper_t( f ); +} + +} + +// ************************************************************************** // +// ************** unit_test_monitor ************** // +// ************************************************************************** // + +unit_test_monitor_t::error_level +unit_test_monitor_t::execute_and_translate( test_case const& tc ) +{ + try { + p_catch_system_errors.value = runtime_config::catch_sys_errors(); + p_timeout.value = tc.p_timeout.get(); + p_auto_start_dbg.value = runtime_config::auto_start_dbg(); + p_use_alt_stack.value = runtime_config::use_alt_stack(); + p_detect_fp_exceptions.value = runtime_config::detect_fp_exceptions(); + + execute( callback0( zero_return_wrapper( tc.test_func() ) ) ); + } + 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 + +#endif // BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER diff --git a/external/boost/test/impl/unit_test_parameters.ipp b/external/boost/test/impl/unit_test_parameters.ipp new file mode 100644 index 0000000..fd8e1ad --- /dev/null +++ b/external/boost/test/impl/unit_test_parameters.ipp @@ -0,0 +1,527 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 63640 $ +// +// 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 +#include +#include +#include +#include +#include +#include + +// Boost.Runtime.Param +#include +#include + +namespace rt = boost::runtime; +namespace cla = rt::cla; + + +#ifndef UNDER_CE +#include + +namespace env = rt::env; +#endif + + +// Boost +#include +#include +#include +#include + +// STL +#include +#include +#include +#include + +#include + +//____________________________________________________________________________// + +# ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::getenv; using ::strncmp; using ::strcmp; } +# endif + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** input operations for unit_test's enums ************** // +// ************************************************************************** // + +std::istream& +operator>>( std::istream& in, unit_test::log_level& ll ) +{ + static fixed_mapping > log_level_name( + "all" , log_successful_tests, + "success" , log_successful_tests, + "test_suite" , log_test_units, + "unit_scope" , log_test_units, + "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 + ); + + std::string val; + in >> val; + + ll = log_level_name[val]; + BOOST_TEST_SETUP_ASSERT( ll != unit_test::invalid_log_level, "invalid log level " + val ); + + return in; +} + +//____________________________________________________________________________// + +std::istream& +operator>>( std::istream& in, unit_test::report_level& rl ) +{ + fixed_mapping > report_level_name ( + "confirm", CONFIRMATION_REPORT, + "short", SHORT_REPORT, + "detailed", DETAILED_REPORT, + "no", NO_REPORT, + + INV_REPORT_LEVEL + ); + + std::string val; + in >> val; + + rl = report_level_name[val]; + BOOST_TEST_SETUP_ASSERT( rl != INV_REPORT_LEVEL, "invalid report level " + val ); + + return in; +} + +//____________________________________________________________________________// + +std::istream& +operator>>( std::istream& in, unit_test::output_format& of ) +{ + fixed_mapping > output_format_name ( + "HRF", unit_test::CLF, + "CLF", unit_test::CLF, + "XML", unit_test::XML, + + unit_test::INV_OF + ); + + std::string val; + in >> val; + + of = output_format_name[val]; + BOOST_TEST_SETUP_ASSERT( of != unit_test::INV_OF, "invalid output format " + val ); + + return in; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** runtime_config ************** // +// ************************************************************************** // + +namespace runtime_config { + +namespace { + +// framework parameters and corresponding command-line arguments +std::string AUTO_START_DBG = "auto_start_dbg"; +std::string BREAK_EXEC_PATH = "break_exec_path"; +std::string BUILD_INFO = "build_info"; +std::string CATCH_SYS_ERRORS = "catch_system_errors"; +std::string DETECT_FP_EXCEPT = "detect_fp_exceptions"; +std::string DETECT_MEM_LEAKS = "detect_memory_leaks"; +std::string LOG_FORMAT = "log_format"; +std::string LOG_LEVEL = "log_level"; +std::string LOG_SINK = "log_sink"; +std::string OUTPUT_FORMAT = "output_format"; +std::string RANDOM_SEED = "random"; +std::string REPORT_FORMAT = "report_format"; +std::string REPORT_LEVEL = "report_level"; +std::string REPORT_SINK = "report_sink"; +std::string RESULT_CODE = "result_code"; +std::string TESTS_TO_RUN = "run_test"; +std::string SAVE_TEST_PATTERN = "save_pattern"; +std::string SHOW_PROGRESS = "show_progress"; +std::string USE_ALT_STACK = "use_alt_stack"; + +fixed_mapping parameter_2_env_var( + AUTO_START_DBG , "BOOST_TEST_AUTO_START_DBG", + BREAK_EXEC_PATH , "BOOST_TEST_BREAK_EXEC_PATH", + BUILD_INFO , "BOOST_TEST_BUILD_INFO", + CATCH_SYS_ERRORS , "BOOST_TEST_CATCH_SYSTEM_ERRORS", + DETECT_FP_EXCEPT , "BOOST_TEST_DETECT_FP_EXCEPTIONS", + DETECT_MEM_LEAKS , "BOOST_TEST_DETECT_MEMORY_LEAK", + LOG_FORMAT , "BOOST_TEST_LOG_FORMAT", + LOG_LEVEL , "BOOST_TEST_LOG_LEVEL", + LOG_SINK , "BOOST_TEST_LOG_SINK", + OUTPUT_FORMAT , "BOOST_TEST_OUTPUT_FORMAT", + RANDOM_SEED , "BOOST_TEST_RANDOM", + REPORT_FORMAT , "BOOST_TEST_REPORT_FORMAT", + REPORT_LEVEL , "BOOST_TEST_REPORT_LEVEL", + REPORT_SINK , "BOOST_TEST_REPORT_SINK", + RESULT_CODE , "BOOST_TEST_RESULT_CODE", + TESTS_TO_RUN , "BOOST_TESTS_TO_RUN", + SAVE_TEST_PATTERN , "BOOST_TEST_SAVE_PATTERN", + SHOW_PROGRESS , "BOOST_TEST_SHOW_PROGRESS", + USE_ALT_STACK , "BOOST_TEST_USE_ALT_STACK", + + "" +); + +//____________________________________________________________________________// + +// storage for the CLAs +cla::parser s_cla_parser; +std::string s_empty; + +output_format s_report_format; +output_format s_log_format; + +//____________________________________________________________________________// + +template +T +retrieve_parameter( const_string parameter_name, cla::parser const& s_cla_parser, T const& default_value = T(), T const& optional_value = T() ) +{ + rt::const_argument_ptr arg = s_cla_parser[parameter_name]; + if( arg ) { + if( rtti::type_id() == rtti::type_id() || + !static_cast( arg->p_formal_parameter.get() ).p_optional_value ) + return s_cla_parser.get( parameter_name ); + + optional val = s_cla_parser.get >( parameter_name ); + if( val ) + return *val; + else + return optional_value; + } + + boost::optional v; + +#ifndef UNDER_CE + env::get( parameter_2_env_var[parameter_name], v ); +#endif + + if( v ) + return *v; + else + return default_value; +} + +//____________________________________________________________________________// + +} // local namespace + +void +init( int& argc, char** argv ) +{ + using namespace cla; + + try { + s_cla_parser - cla::ignore_mismatch + << cla::dual_name_parameter( AUTO_START_DBG + "|d" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Automatically starts debugger if system level error (signal) occurs") + << cla::named_parameter( BREAK_EXEC_PATH ) + - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional, + cla::description = "For the exception safety testing allows to break at specific execution path") + << cla::dual_name_parameter( BUILD_INFO + "|i" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Shows library build information" ) + << cla::dual_name_parameter( CATCH_SYS_ERRORS + "|s" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Allows to switch between catching and ignoring system errors (signals)") + << cla::named_parameter( DETECT_FP_EXCEPT ) + - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional, + cla::description = "Allows to switch between catching and ignoring floating point exceptions") + << cla::named_parameter( DETECT_MEM_LEAKS ) + - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional, + cla::description = "Allows to switch between catching and ignoring memory leaks") + << cla::dual_name_parameter( LOG_FORMAT + "|f" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies log format") + << cla::dual_name_parameter( LOG_LEVEL + "|l" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies log level") + << cla::dual_name_parameter( LOG_SINK + "|k" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies log sink:stdout(default),stderr or file name") + << cla::dual_name_parameter( OUTPUT_FORMAT + "|o" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies output format (both log and report)") + << cla::dual_name_parameter( RANDOM_SEED + "|a" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,cla::optional_value, + cla::description = "Allows to switch between sequential and random order of test units execution.\n" + "Optionally allows to specify concrete seed for random number generator") + << cla::dual_name_parameter( REPORT_FORMAT + "|m" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies report format") + << cla::dual_name_parameter(REPORT_LEVEL + "|r") + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies report level") + << cla::dual_name_parameter( REPORT_SINK + "|e" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Specifies report sink:stderr(default),stdout or file name") + << cla::dual_name_parameter( RESULT_CODE + "|c" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Allows to disable test modules's result code generation") + << cla::dual_name_parameter( TESTS_TO_RUN + "|t" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Allows to filter which test units to run") + << cla::named_parameter( SAVE_TEST_PATTERN ) + - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional, + cla::description = "Allows to switch between saving and matching against test pattern file") + << cla::dual_name_parameter( SHOW_PROGRESS + "|p" ) + - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional, + cla::description = "Turns on progress display") + << cla::named_parameter( USE_ALT_STACK ) + - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional, + cla::description = "Turns on/off usage of an alternative stack for signal handling") + + << cla::dual_name_parameter( "help|?" ) + - (cla::prefix = "--|-",cla::separator = "=",cla::guess_name,cla::optional, + cla::description = "this help message") + ; + + s_cla_parser.parse( argc, argv ); + + if( s_cla_parser["help"] ) { + s_cla_parser.help( std::cout ); + throw framework::nothing_to_test(); + } + + s_report_format = retrieve_parameter( REPORT_FORMAT, s_cla_parser, unit_test::CLF ); + s_log_format = retrieve_parameter( LOG_FORMAT, s_cla_parser, unit_test::CLF ); + + unit_test::output_format of = retrieve_parameter( OUTPUT_FORMAT, s_cla_parser, unit_test::INV_OF ); + + if( of != unit_test::INV_OF ) + s_report_format = s_log_format = of; + } + catch( rt::logic_error const& ex ) { + std::ostringstream err; + + err << "Fail to process runtime parameters: " << ex.msg() << std::endl; + s_cla_parser.usage( err ); + + throw framework::setup_error( err.str() ); + } +} + +//____________________________________________________________________________// + +unit_test::log_level +log_level() +{ + return retrieve_parameter( LOG_LEVEL, s_cla_parser, unit_test::log_all_errors ); +} + +//____________________________________________________________________________// + +bool +no_result_code() +{ + return !retrieve_parameter( RESULT_CODE, s_cla_parser, true ); +} + +//____________________________________________________________________________// + +unit_test::report_level +report_level() +{ + return retrieve_parameter( REPORT_LEVEL, s_cla_parser, unit_test::CONFIRMATION_REPORT ); +} + +//____________________________________________________________________________// + +const_string +test_to_run() +{ + static std::string s_test_to_run = retrieve_parameter( TESTS_TO_RUN, s_cla_parser, s_empty ); + + return s_test_to_run; +} + +//____________________________________________________________________________// + +const_string +break_exec_path() +{ + static std::string s_break_exec_path = retrieve_parameter( BREAK_EXEC_PATH, s_cla_parser, s_empty ); + + return s_break_exec_path; +} + +//____________________________________________________________________________// + +bool +save_pattern() +{ + return retrieve_parameter( SAVE_TEST_PATTERN, s_cla_parser, false ); +} + +//____________________________________________________________________________// + +bool +show_progress() +{ + return retrieve_parameter( SHOW_PROGRESS, s_cla_parser, false ); +} + +//____________________________________________________________________________// + +bool +show_build_info() +{ + return retrieve_parameter( BUILD_INFO, s_cla_parser, false ); +} + +//____________________________________________________________________________// + +bool +catch_sys_errors() +{ + return retrieve_parameter( CATCH_SYS_ERRORS, s_cla_parser, +#ifdef BOOST_TEST_DEFAULTS_TO_CORE_DUMP + false +#else + true +#endif + ); +} + +//____________________________________________________________________________// + +bool +auto_start_dbg() +{ + // !! set debugger as an option + return retrieve_parameter( AUTO_START_DBG, s_cla_parser, false ); +; +} + +//____________________________________________________________________________// + +bool +use_alt_stack() +{ + return retrieve_parameter( USE_ALT_STACK, s_cla_parser, true ); +} + +//____________________________________________________________________________// + +bool +detect_fp_exceptions() +{ + return retrieve_parameter( DETECT_FP_EXCEPT, s_cla_parser, false ); +} + +//____________________________________________________________________________// + +output_format +report_format() +{ + return s_report_format; +} + +//____________________________________________________________________________// + +output_format +log_format() +{ + return s_log_format; +} + +//____________________________________________________________________________// + +std::ostream* +report_sink() +{ + std::string sink_name = retrieve_parameter( REPORT_SINK, s_cla_parser, s_empty ); + + if( sink_name.empty() || sink_name == "stderr" ) + return &std::cerr; + + if( sink_name == "stdout" ) + return &std::cout; + + static std::ofstream log_file( sink_name.c_str() ); + return &log_file; +} + +//____________________________________________________________________________// + +std::ostream* +log_sink() +{ + std::string sink_name = retrieve_parameter( LOG_SINK, s_cla_parser, s_empty ); + + if( sink_name.empty() || sink_name == "stdout" ) + return &std::cout; + + if( sink_name == "stderr" ) + return &std::cerr; + + static std::ofstream report_file( sink_name.c_str() ); + return &report_file; +} + +//____________________________________________________________________________// + +long +detect_memory_leaks() +{ + return retrieve_parameter( DETECT_MEM_LEAKS, s_cla_parser, static_cast(1) ); +} + +//____________________________________________________________________________// + +int +random_seed() +{ + return retrieve_parameter( RANDOM_SEED, s_cla_parser, 0, 1 ); +} + +//____________________________________________________________________________// + +} // namespace runtime_config + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER diff --git a/external/boost/test/impl/unit_test_suite.ipp b/external/boost/test/impl/unit_test_suite.ipp new file mode 100644 index 0000000..859a0b5 --- /dev/null +++ b/external/boost/test/impl/unit_test_suite.ipp @@ -0,0 +1,346 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : privides core implementation for Unit Test Framework. +// Extensions can be provided in separate files +// *************************************************************************** + +#ifndef BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER +#define BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER + +// Boost.Test +#include +#include +#include +#include +#include +#include + +// Boost +#include + +// STL +#include +#include + +#include + +#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() ) ) +, p_enabled( true ) +{ +} + +//____________________________________________________________________________// + +test_unit::~test_unit() +{ + framework::deregister_test_unit( this ); +} + +//____________________________________________________________________________// + +void +test_unit::depends_on( test_unit* tu ) +{ + m_dependencies.push_back( tu->p_id ); +} + +//____________________________________________________________________________// + +bool +test_unit::check_dependencies() const +{ + BOOST_TEST_FOREACH( test_unit_id, tu_id, m_dependencies ) { + if( !unit_test::results_collector.results( tu_id ).passed() ) + return false; + } + + return true; +} + +//____________________________________________________________________________// + +void +test_unit::increase_exp_fail( unsigned num ) +{ + p_expected_failures.value += num; + + if( p_parent_id != 0 ) + framework::get( p_parent_id ).increase_exp_fail( num ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** test_case ************** // +// ************************************************************************** // + +test_case::test_case( const_string name, callback0<> const& test_func ) +: test_unit( name, static_cast(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, static_cast(type) ) +{ + framework::register_test_unit( this ); +} + +//____________________________________________________________________________// + +void +test_suite::add( test_unit* tu, counter_t expected_failures, unsigned timeout ) +{ + if( timeout != 0 ) + tu->p_timeout.value = timeout; + + m_members.push_back( tu->p_id ); + tu->p_parent_id.value = p_id; + + if( tu->p_expected_failures ) + increase_exp_fail( tu->p_expected_failures ); + + if( expected_failures ) + tu->increase_exp_fail( expected_failures ); +} + +//____________________________________________________________________________// + +void +test_suite::add( test_unit_generator const& gen, unsigned timeout ) +{ + test_unit* tu; + while((tu = gen.next(), tu)) + add( tu, 0, timeout ); +} + +//____________________________________________________________________________// + +void +test_suite::remove( test_unit_id id ) +{ + std::vector::iterator it = std::find( m_members.begin(), m_members.end(), id ); + + if( it != m_members.end() ) + m_members.erase( it ); +} + +//____________________________________________________________________________// + +test_unit_id +test_suite::get( const_string tu_name ) const +{ + BOOST_TEST_FOREACH( test_unit_id, id, m_members ) { + if( tu_name == framework::get( id, ut_detail::test_id_2_unit_type( id ) ).p_name.get() ) + return id; + } + + return INV_TEST_UNIT_ID; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** traverse_test_tree ************** // +// ************************************************************************** // + +void +traverse_test_tree( test_case const& tc, test_tree_visitor& V ) +{ + if( tc.p_enabled ) + V.visit( tc ); +} + +//____________________________________________________________________________// + +void +traverse_test_tree( test_suite const& suite, test_tree_visitor& V ) +{ + if( !suite.p_enabled || !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 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( ut_detail::test_id_2_unit_type( id ) == tut_case ) + traverse_test_tree( framework::get( id ), V ); + else + traverse_test_tree( framework::get( id ), V ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** test_case_counter ************** // +// ************************************************************************** // + +void +test_case_counter::visit( test_case const& tc ) +{ + if( tc.p_enabled ) + ++p_count.value; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** 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() ) ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** auto_test_unit_registrar ************** // +// ************************************************************************** // + +auto_test_unit_registrar::auto_test_unit_registrar( test_case* tc, counter_t exp_fail ) +{ + curr_ts_store().back()->add( tc, exp_fail ); +} + +//____________________________________________________________________________// + +auto_test_unit_registrar::auto_test_unit_registrar( const_string ts_name ) +{ + test_unit_id id = curr_ts_store().back()->get( ts_name ); + + test_suite* ts; + + if( id != INV_TEST_UNIT_ID ) { + ts = &framework::get( id ); // !! test for invalid tu type + BOOST_ASSERT( ts->p_parent_id == curr_ts_store().back()->p_id ); + } + else { + ts = new test_suite( ts_name ); + curr_ts_store().back()->add( ts ); + } + + curr_ts_store().push_back( ts ); +} + +//____________________________________________________________________________// + +auto_test_unit_registrar::auto_test_unit_registrar( test_unit_generator const& tc_gen ) +{ + curr_ts_store().back()->add( tc_gen ); +} + +//____________________________________________________________________________// + +auto_test_unit_registrar::auto_test_unit_registrar( int ) +{ + if( curr_ts_store().size() == 0 ) + return; // report error? + + curr_ts_store().pop_back(); +} + +//____________________________________________________________________________// + +std::list& +auto_test_unit_registrar::curr_ts_store() +{ + static std::list inst( 1, &framework::master_test_suite() ); + return inst; +} + +//____________________________________________________________________________// + +} // namespace ut_detail + +// ************************************************************************** // +// ************** global_fixture ************** // +// ************************************************************************** // + +global_fixture::global_fixture() +{ + framework::register_observer( *this ); +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER diff --git a/external/boost/test/impl/xml_log_formatter.ipp b/external/boost/test/impl/xml_log_formatter.ipp new file mode 100644 index 0000000..8322e0b --- /dev/null +++ b/external/boost/test/impl/xml_log_formatter.ipp @@ -0,0 +1,180 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : implements XML Log formatter +// *************************************************************************** + +#ifndef BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER +#define BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER + +// Boost.Test +#include +#include +#include +#include + +#include + +// Boost +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +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 << ""; +} + +//____________________________________________________________________________// + +void +xml_log_formatter::log_finish( std::ostream& ostr ) +{ + ostr << ""; +} + +//____________________________________________________________________________// + +void +xml_log_formatter::log_build_info( std::ostream& ostr ) +{ + ostr << ""; +} + +//____________________________________________________________________________// + +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 << "" << elapsed << ""; + + ostr << ""; +} + +//____________________________________________________________________________// + +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, execution_exception const& ex ) +{ + execution_exception::location const& loc = ex.where(); + + ostr << "" << cdata() << ex.what(); + + if( !checkpoint_data.m_file_name.is_empty() ) { + ostr << "" + << cdata() << checkpoint_data.m_message + << ""; + } + + ostr << ""; +} + +//____________________________________________________________________________// + +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 + << BOOST_TEST_L( " file" ) << attr_value() << entry_data.m_file_name + << BOOST_TEST_L( " line" ) << attr_value() << entry_data.m_line_num + << BOOST_TEST_L( ">" ); + + m_curr_tag.clear(); +} + +//____________________________________________________________________________// + +} // namespace output + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER diff --git a/external/boost/test/impl/xml_report_formatter.ipp b/external/boost/test/impl/xml_report_formatter.ipp new file mode 100644 index 0000000..0a51285 --- /dev/null +++ b/external/boost/test/impl/xml_report_formatter.ipp @@ -0,0 +1,115 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : XML report formatter +// *************************************************************************** + +#ifndef BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER +#define BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER + +// Boost.Test +#include +#include +#include + +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace output { + +void +xml_report_formatter::results_report_start( std::ostream& ostr ) +{ + ostr << ""; +} + +//____________________________________________________________________________// + +void +xml_report_formatter::results_report_finish( std::ostream& ostr ) +{ + ostr << ""; +} + + +//____________________________________________________________________________// + +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 << "'; +} + +//____________________________________________________________________________// + +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 + +#endif // BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER diff --git a/external/boost/test/included/prg_exec_monitor.hpp b/external/boost/test/included/prg_exec_monitor.hpp new file mode 100644 index 0000000..ed58d98 --- /dev/null +++ b/external/boost/test/included/prg_exec_monitor.hpp @@ -0,0 +1,25 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include +#include + +#define BOOST_TEST_INCLUDED +#include + +#endif // BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER diff --git a/external/boost/test/interaction_based.hpp b/external/boost/test/interaction_based.hpp new file mode 100644 index 0000000..7a85cce --- /dev/null +++ b/external/boost/test/interaction_based.hpp @@ -0,0 +1,262 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : Facilities to perform interaction-based testing +// *************************************************************************** + +#ifndef BOOST_TEST_INTERACTION_BASED_HPP_112105GER +#define BOOST_TEST_INTERACTION_BASED_HPP_112105GER + +// Boost.Test +#include +#include + +#include + +#include + +// Boost +#include + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** 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( 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 + void generic_data_flow( T const& t ) + { + wrap_stringstream ws; + + data_flow( (ws << t).str() ); + } + template + 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( 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 + +# ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::malloc; using ::free; } +# endif +# ifdef _CRTDBG_MAP_ALLOC +namespace std { using ::_malloc_dbg; using ::_free_dbg; } +# 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 + +#endif // BOOST_TEST_INTERACTION_BASED_HPP_112105GER diff --git a/external/boost/test/mock_object.hpp b/external/boost/test/mock_object.hpp new file mode 100644 index 0000000..e2a436a --- /dev/null +++ b/external/boost/test/mock_object.hpp @@ -0,0 +1,328 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : Facilities to perform exception safety_tests +// *************************************************************************** + +#ifndef BOOST_TEST_MOCK_OBJECT_HPP_112205GER +#define BOOST_TEST_MOCK_OBJECT_HPP_112205GER + +// Boost.Test +#include +#include + +// Boost +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace itest { + +// ************************************************************************** // +// ************** mock_object_base ************** // +// ************************************************************************** // + +class mock_object_base { +public: + mock_object_base() {} + + template + mock_object_base( T1 const& ) {} + + template + mock_object_base( T1 const&, T2 const& ) {} + + template + mock_object_base( T1 const&, T2 const&, T3 const& ) {} + + template + mock_object_base( T1 const&, T2 const&, T3 const&, T4 const& ) {} + + template + 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 \ +inline mock_object const& \ +operator op( mock_object const& mo, \ + mock_object const& ) \ +{ \ + MO_OP_IMPL( op, descr, mo ); \ +} \ + \ +template \ +inline mock_object const& \ +operator op( mock_object const& mo, T const& ) \ +{ \ + MO_OP_IMPL( op, descr, mo ); \ +} \ + \ +template \ +inline mock_object const& \ +operator op( T const&, mock_object const& mo ) \ +{ \ + MO_OP_IMPL( op, descr, mo ); \ +} \ +/**/ + +#define MO_BINARY_BOOL_OP( op, descr ) \ +template \ +inline bool \ +operator op( mock_object const&, \ + mock_object const& ) \ +{ \ + MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() ); \ +} \ + \ +template \ +inline bool \ +operator op( mock_object const&, T const& ) \ +{ \ + MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() ); \ +} \ + \ +template \ +inline bool \ +operator op( T const&, mock_object const& ) \ +{ \ + MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() ); \ +} \ +/**/ + +// ************************************************************************** // +// ************** mock_object ************** // +// ************************************************************************** // + +template +class mock_object; + +template +class mock_object : public Base { + // Private typeefs + typedef mock_object 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( reinterpret_cast(0) ); + return p; + } + + // Constructors + mock_object() + { + BOOST_ITEST_SCOPE( mock_object::mock_object ); + BOOST_ITEST_EPOINT( "Mock object default constructor" ); + } + + template + mock_object( T1 const& arg1 ) + : mock_object_base( arg1 ) + { + BOOST_ITEST_SCOPE( mock_object::mock_object ); + BOOST_ITEST_EPOINT( "Mock object constructor" ); + } + + template + 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 + 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 + 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 + 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 + 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 + self_type const& operator ()( T1 const& arg1 ) const + { + MO_OP_IMPL( (), "1-arity function-call", prototype() ); + } + template + self_type const& operator ()( T1 const&, T2 const& ) const + { + MO_OP_IMPL( (), "2-arity function-call", prototype() ); + } + template + self_type const& operator ()( T1 const&, T2 const&, T3 const& ) const + { + MO_OP_IMPL( (), "3-arity function-call", prototype() ); + } + template + self_type const& operator ()( T1 const&, T2 const&, T3 const&, T4 const& ) const + { + MO_OP_IMPL( (), "4-arity function-call", prototype() ); + } + template + 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 + 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 + +#endif // BOOST_TEST_MOCK_OBJECT_HPP_112205GER diff --git a/external/boost/test/output/compiler_log_formatter.hpp b/external/boost/test/output/compiler_log_formatter.hpp new file mode 100644 index 0000000..3abb2d5 --- /dev/null +++ b/external/boost/test/output/compiler_log_formatter.hpp @@ -0,0 +1,68 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include + +#include + +//____________________________________________________________________________// + +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&, execution_exception const& ex ); + + 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_value( std::ostream&, lazy_ostream const& 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 + +#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER diff --git a/external/boost/test/output/plain_report_formatter.hpp b/external/boost/test/output/plain_report_formatter.hpp new file mode 100644 index 0000000..49eb7dc --- /dev/null +++ b/external/boost/test/output/plain_report_formatter.hpp @@ -0,0 +1,62 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : plain report formatter implementation +// *************************************************************************** + +#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER +#define BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER + +// Boost.Test +#include +#include + +#include + +//____________________________________________________________________________// + +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 + +#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER diff --git a/external/boost/test/output/xml_log_formatter.hpp b/external/boost/test/output/xml_log_formatter.hpp new file mode 100644 index 0000000..93ee2fe --- /dev/null +++ b/external/boost/test/output/xml_log_formatter.hpp @@ -0,0 +1,72 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : contains XML Log formatter definition +// *************************************************************************** + +#ifndef BOOST_TEST_XML_LOG_FORMATTER_020105GER +#define BOOST_TEST_XML_LOG_FORMATTER_020105GER + +// Boost.Test +#include +#include + +// STL +#include // std::size_t + +#include + +//____________________________________________________________________________// + +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&, execution_exception const& ex ); + + void log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let ); + using unit_test_log_formatter::log_entry_value; // bring base class functions into overload set + 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 + +#endif // BOOST_TEST_XML_LOG_FORMATTER_020105GER diff --git a/external/boost/test/output/xml_report_formatter.hpp b/external/boost/test/output/xml_report_formatter.hpp new file mode 100644 index 0000000..6c413d9 --- /dev/null +++ b/external/boost/test/output/xml_report_formatter.hpp @@ -0,0 +1,58 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : XML report formatter implementation +// *************************************************************************** + +#ifndef BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER +#define BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER + +// Boost.Test +#include +#include + +#include + +//____________________________________________________________________________// + +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 + +#endif // BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER diff --git a/external/boost/test/output_test_stream.hpp b/external/boost/test/output_test_stream.hpp new file mode 100644 index 0000000..295c238 --- /dev/null +++ b/external/boost/test/output_test_stream.hpp @@ -0,0 +1,78 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include +#include + +// STL +#include // for std::size_t + +#include + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** 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 + +#endif // BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER diff --git a/external/boost/test/predicate_result.hpp b/external/boost/test/predicate_result.hpp new file mode 100644 index 0000000..16ae488 --- /dev/null +++ b/external/boost/test/predicate_result.hpp @@ -0,0 +1,88 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include +#include + +// Boost +#include +#include + +// STL +#include // for std::size_t + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace test_tools { + +// ************************************************************************** // +// ************** predicate_result ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL predicate_result { + typedef unit_test::const_string const_string; + struct dummy { void nonnull() {}; }; + typedef void (dummy::*safe_bool)(); + +public: + // Constructor + predicate_result( bool pv_ ) + : p_predicate_value( pv_ ) + {} + + template + predicate_result( BoolConvertable const& pv_ ) : p_predicate_value( !!pv_ ) {} + + // Access methods + bool operator!() const { return !p_predicate_value; } + void operator=( bool pv_ ) { p_predicate_value.value = pv_; } + operator safe_bool() const { return !!p_predicate_value ? &dummy::nonnull : 0; } + + // 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 m_message; +}; + +} // namespace test_tools + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_PREDICATE_RESULT_HPP_012705GER diff --git a/external/boost/test/prg_exec_monitor.hpp b/external/boost/test/prg_exec_monitor.hpp new file mode 100644 index 0000000..638bb2a --- /dev/null +++ b/external/boost/test/prg_exec_monitor.hpp @@ -0,0 +1,68 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** 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 + +#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 + +#endif // BOOST_PRG_EXEC_MONITOR_HPP_071894GER diff --git a/external/boost/test/progress_monitor.hpp b/external/boost/test/progress_monitor.hpp new file mode 100644 index 0000000..f4c99d5 --- /dev/null +++ b/external/boost/test/progress_monitor.hpp @@ -0,0 +1,70 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : defines simple text based progress monitor +// *************************************************************************** + +#ifndef BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER +#define BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER + +// Boost.Test +#include +#include + +// STL +#include // for std::ostream& + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** progress_monitor ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL progress_monitor_t : public test_observer, public singleton { +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 + +#endif // BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER + diff --git a/external/boost/test/results_collector.hpp b/external/boost/test/results_collector.hpp new file mode 100644 index 0000000..a56b4db --- /dev/null +++ b/external/boost/test/results_collector.hpp @@ -0,0 +1,112 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 + +#include +#include + +#include +#include + +#include + +//____________________________________________________________________________// + +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 { +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 + +#endif // BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER + diff --git a/external/boost/test/results_reporter.hpp b/external/boost/test/results_reporter.hpp new file mode 100644 index 0000000..16f622a --- /dev/null +++ b/external/boost/test/results_reporter.hpp @@ -0,0 +1,88 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include + +// STL +#include // for std::ostream& + +#include + +//____________________________________________________________________________// + +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* ); + +BOOST_TEST_DECL std::ostream& get_stream(); + +// ************************************************************************** // +// ************** 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 + +#endif // BOOST_TEST_RESULTS_REPORTER_HPP_021205GER + diff --git a/external/boost/test/test_observer.hpp b/external/boost/test/test_observer.hpp new file mode 100644 index 0000000..0c252a1 --- /dev/null +++ b/external/boost/test/test_observer.hpp @@ -0,0 +1,65 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : defines abstract interface for test observer +// *************************************************************************** + +#ifndef BOOST_TEST_TEST_OBSERVER_HPP_021005GER +#define BOOST_TEST_TEST_OBSERVER_HPP_021005GER + +// Boost.Test +#include +#include +#include + +#include + +//____________________________________________________________________________// + +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 + +#endif // BOOST_TEST_TEST_OBSERVER_HPP_021005GER + diff --git a/external/boost/test/test_tools.hpp b/external/boost/test/test_tools.hpp new file mode 100644 index 0000000..b2ee9e3 --- /dev/null +++ b/external/boost/test/test_tools.hpp @@ -0,0 +1,719 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include +#include + +#include +#include +#include + +#include +#include +#include + +// Boost +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include + +// STL +#include // for std::size_t +#include +#include // for std::boolalpha +#include // for CHAR_BIT + +#ifdef BOOST_MSVC +# pragma warning(disable: 4127) // conditional expression is constant +#endif + +#include + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** 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::unit_test::lazy_ostream::instance() << check_descr, \ + BOOST_TEST_L(__FILE__), \ + static_cast(__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 ) + +//____________________________________________________________________________// + +#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) ) + +//____________________________________________________________________________// + +#define BOOST_WARN_NE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ne_impl(), "", WARN, CHECK_NE, (L)(R) ) +#define BOOST_CHECK_NE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ne_impl(), "", CHECK, CHECK_NE, (L)(R) ) +#define BOOST_REQUIRE_NE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ne_impl(), "", REQUIRE, CHECK_NE, (L)(R) ) + +//____________________________________________________________________________// + +#define BOOST_WARN_LT( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::lt_impl(), "", WARN, CHECK_LT, (L)(R) ) +#define BOOST_CHECK_LT( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::lt_impl(), "", CHECK, CHECK_LT, (L)(R) ) +#define BOOST_REQUIRE_LT( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::lt_impl(), "", REQUIRE, CHECK_LT, (L)(R) ) + +//____________________________________________________________________________// + +#define BOOST_WARN_LE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::le_impl(), "", WARN, CHECK_LE, (L)(R) ) +#define BOOST_CHECK_LE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::le_impl(), "", CHECK, CHECK_LE, (L)(R) ) +#define BOOST_REQUIRE_LE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::le_impl(), "", REQUIRE, CHECK_LE, (L)(R) ) + +//____________________________________________________________________________// + +#define BOOST_WARN_GT( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::gt_impl(), "", WARN, CHECK_GT, (L)(R) ) +#define BOOST_CHECK_GT( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::gt_impl(), "", CHECK, CHECK_GT, (L)(R) ) +#define BOOST_REQUIRE_GT( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::gt_impl(), "", REQUIRE, CHECK_GT, (L)(R) ) + +//____________________________________________________________________________// + +#define BOOST_WARN_GE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ge_impl(), "", WARN, CHECK_GE, (L)(R) ) +#define BOOST_CHECK_GE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ge_impl(), "", CHECK, CHECK_GE, (L)(R) ) +#define BOOST_REQUIRE_GE( L, R ) \ + BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ge_impl(), "", REQUIRE, CHECK_GE, (L)(R) ) + +//____________________________________________________________________________// + +#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; } + +// ************************************************************************** // +// ************** print_log_value ************** // +// ************************************************************************** // + +template +struct print_log_value { + void operator()( std::ostream& ostr, T const& t ) + { + // avoid warning: 'boost::test_tools::::dummy_cond' defined but not used + if (::boost::test_tools::dummy_cond) {} + + typedef typename mpl::or_,is_function,is_abstract >::type cant_use_nl; + + set_precision( ostr, cant_use_nl() ); + + ostr << t; // by default print the value + } + + void set_precision( std::ostream& ostr, mpl::false_ ) + { + if( std::numeric_limits::is_specialized && std::numeric_limits::radix == 2 ) + ostr.precision( 2 + std::numeric_limits::digits * 301/1000 ); + } + + void set_precision( std::ostream&, mpl::true_ ) {} +}; + +//____________________________________________________________________________// + +#define BOOST_TEST_DONT_PRINT_LOG_VALUE( the_type ) \ +namespace boost { namespace test_tools { \ +template<> \ +struct print_log_value { \ + void operator()( std::ostream&, the_type const& ) {} \ +}; \ +}} \ +/**/ + +//____________________________________________________________________________// + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +template +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 { + void operator()( std::ostream& ostr, bool t ) + { + ostr << std::boolalpha << t; + } +}; + +//____________________________________________________________________________// + +template<> +struct BOOST_TEST_DECL print_log_value { + void operator()( std::ostream& ostr, char t ); +}; + +//____________________________________________________________________________// + +template<> +struct BOOST_TEST_DECL print_log_value { + void operator()( std::ostream& ostr, unsigned char t ); +}; + +//____________________________________________________________________________// + +template<> +struct BOOST_TEST_DECL print_log_value { + void operator()( std::ostream& ostr, char const* t ); +}; + +//____________________________________________________________________________// + +template<> +struct BOOST_TEST_DECL print_log_value { + void operator()( std::ostream& ostr, wchar_t const* t ); +}; + +//____________________________________________________________________________// + +namespace tt_detail { + +// ************************************************************************** // +// ************** tools classification ************** // +// ************************************************************************** // + +enum check_type { + CHECK_PRED, + CHECK_MSG, + CHECK_EQUAL, + CHECK_NE, + CHECK_LT, + CHECK_LE, + CHECK_GT, + CHECK_GE, + CHECK_CLOSE, + CHECK_CLOSE_FRACTION, + CHECK_SMALL, + CHECK_BITWISE_EQUAL, + CHECK_PRED_WITH_ARGS, + CHECK_EQUAL_COLL +}; + +enum tool_level { + WARN, CHECK, REQUIRE, PASS +}; + +// ************************************************************************** // +// ************** print_helper ************** // +// ************************************************************************** // +// Adds level of indirection to the output operation, allowing us to customize +// it for types that do not support operator << directly or for any other reason + +template +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 +struct print_helper_t< T[N] > { + explicit print_helper_t( T const * t ) : m_t( t ) {} + + T const * m_t; +}; +#endif + +//____________________________________________________________________________// + +template +inline print_helper_t print_helper( T const& t ) +{ + return print_helper_t( t ); +} + +//____________________________________________________________________________// + +template +inline std::ostream& +operator<<( std::ostream& ostr, print_helper_t const& ph ) +{ + print_log_value()( ostr, ph.m_t ); + + return ostr; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** TOOL BOX Implementation ************** // +// ************************************************************************** // + +BOOST_TEST_DECL +bool check_impl( predicate_result const& pr, ::boost::unit_test::lazy_ostream const& 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 ) \ + , &static_cast(unit_test::lazy_ostream::instance() \ + << ::boost::test_tools::tt_detail::print_helper( BOOST_JOIN( arg, m ) )) \ +/**/ + +#define IMPL_FRWD( z, n, dummy ) \ +template \ +inline bool \ +check_frwd( Pred P, unit_test::lazy_ostream const& 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, _ ) \ +) \ +{ \ + return \ + 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 +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 equal_impl( char* left, char const* right ) { return equal_impl( static_cast(left), static_cast(right) ); } +inline predicate_result equal_impl( char const* left, char* right ) { return equal_impl( static_cast(left), static_cast(right) ); } +inline predicate_result equal_impl( char* left, char* right ) { return equal_impl( static_cast(left), static_cast(right) ); } + +#if !defined( BOOST_NO_CWCHAR ) +predicate_result BOOST_TEST_DECL 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( static_cast(left), static_cast(right) ); } +inline predicate_result equal_impl( wchar_t const* left, wchar_t* right ) { return equal_impl( static_cast(left), static_cast(right) ); } +inline predicate_result equal_impl( wchar_t* left, wchar_t* right ) { return equal_impl( static_cast(left), static_cast(right) ); } +#endif + +//____________________________________________________________________________// + +struct equal_impl_frwd { + template + inline predicate_result + call_impl( Left const& left, Right const& right, mpl::false_ ) const + { + return equal_impl( left, right ); + } + + template + inline predicate_result + call_impl( Left const& left, Right const& right, mpl::true_ ) const + { + return (*this)( right, &left[0] ); + } + + template + inline predicate_result + operator()( Left const& left, Right const& right ) const + { + typedef typename is_array::type left_is_array; + return call_impl( left, right, left_is_array() ); + } +}; + +//____________________________________________________________________________// + +struct ne_impl { + template + predicate_result operator()( Left const& left, Right const& right ) + { + return !equal_impl_frwd()( left, right ); + } +}; + +//____________________________________________________________________________// + +struct lt_impl { + template + predicate_result operator()( Left const& left, Right const& right ) + { + return left < right; + } +}; + +//____________________________________________________________________________// + +struct le_impl { + template + predicate_result operator()( Left const& left, Right const& right ) + { + return left <= right; + } +}; + +//____________________________________________________________________________// + +struct gt_impl { + template + predicate_result operator()( Left const& left, Right const& right ) + { + return left > right; + } +}; + +//____________________________________________________________________________// + +struct ge_impl { + template + predicate_result operator()( Left const& left, Right const& right ) + { + return left >= right; + } +}; + +//____________________________________________________________________________// + +template +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 +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 leftOne( 1 ); + static Right const rightOne( 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 & ( leftOne << counter ) ) != ( right & ( rightOne << 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 + +#endif // BOOST_TEST_TEST_TOOLS_HPP_012705GER diff --git a/external/boost/test/unit_test.hpp b/external/boost/test/unit_test.hpp new file mode 100644 index 0000000..69d10e0 --- /dev/null +++ b/external/boost/test/unit_test.hpp @@ -0,0 +1,66 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** 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 + +#endif // auto-linking disabled + +// ************************************************************************** // +// ************** unit_test_main ************** // +// ************************************************************************** // + +namespace boost { namespace unit_test { + +int BOOST_TEST_DECL unit_test_main( init_unit_test_func init_func, int argc, char* argv[] ); + +}} + +#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 + +#endif // BOOST_TEST_UNIT_TEST_HPP_071894GER diff --git a/external/boost/test/unit_test_log.hpp b/external/boost/test/unit_test_log.hpp new file mode 100644 index 0000000..fe76eb6 --- /dev/null +++ b/external/boost/test/unit_test_log.hpp @@ -0,0 +1,177 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include +#include +#include + +#include +#include +#include + +// Boost +#include + +// STL +#include // for std::ostream& + +#include + +//____________________________________________________________________________// + +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 const& rhs ) : m_last( true ) { rhs.m_last = false; } + ~entry_value_collector(); + + // collection interface + entry_value_collector const& operator<<( lazy_ostream const& ) const; + entry_value_collector const& operator<<( const_string ) const; + +private: + // Data members + mutable bool m_last; +}; + +} // namespace ut_detail + +// ************************************************************************** // +// ************** unit_test_log ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL unit_test_log_t : public test_observer, public singleton { +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 + unit_test_log_t& operator<<( lazy_ostream const& ); // log entry value + + ut_detail::entry_value_collector operator()( log_level ); // initiate entry collection + +private: + bool log_entry_start(); + + 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::unit_test::lazy_ostream::instance() << M) \ +/**/ + +//____________________________________________________________________________// + +#define BOOST_TEST_PASSPOINT() \ + ::boost::unit_test::unit_test_log.set_checkpoint( \ + BOOST_TEST_L(__FILE__), \ + static_cast(__LINE__) ) \ +/**/ + +//____________________________________________________________________________// + +#define BOOST_TEST_CHECKPOINT( M ) \ + ::boost::unit_test::unit_test_log.set_checkpoint( \ + BOOST_TEST_L(__FILE__), \ + static_cast(__LINE__), \ + (::boost::wrap_stringstream().ref() << M).str() ) \ +/**/ + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER + diff --git a/external/boost/test/unit_test_log_formatter.hpp b/external/boost/test/unit_test_log_formatter.hpp new file mode 100644 index 0000000..ca4b1f2 --- /dev/null +++ b/external/boost/test/unit_test_log_formatter.hpp @@ -0,0 +1,123 @@ +// (C) Copyright Gennadiy Rozental 2003-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : +// *************************************************************************** + +#ifndef BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER +#define BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER + +// Boost.Test +#include +#include +#include + +#include + +// STL +#include +#include // for std::string + +#include + +//____________________________________________________________________________// + +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& os, log_checkpoint_data const& cd, execution_exception const& ex ) + { + // for backward compatibility + log_exception( os, cd, ex.what() ); + } + virtual void log_exception( std::ostream&, log_checkpoint_data const&, const_string /* explanation */ ) {} + + 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_value( std::ostream&, lazy_ostream const& value ); // there is a default impl + virtual void log_entry_finish( std::ostream& ) = 0; +}; + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER + diff --git a/external/boost/test/unit_test_monitor.hpp b/external/boost/test/unit_test_monitor.hpp new file mode 100644 index 0000000..0bd1494 --- /dev/null +++ b/external/boost/test/unit_test_monitor.hpp @@ -0,0 +1,69 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** unit_test_monitor ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL unit_test_monitor_t : public singleton, 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 + +#endif // BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER diff --git a/external/boost/test/unit_test_suite.hpp b/external/boost/test/unit_test_suite.hpp new file mode 100644 index 0000000..3147f28 --- /dev/null +++ b/external/boost/test/unit_test_suite.hpp @@ -0,0 +1,245 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** Non-auto (explicit) test case interface ************** // +// ************************************************************************** // + +#define BOOST_TEST_CASE( test_function ) \ +boost::unit_test::make_test_case( boost::unit_test::callback0<>(test_function), BOOST_TEST_STRINGIZE( test_function ) ) +#define BOOST_CLASS_TEST_CASE( test_function, tc_instance ) \ +boost::unit_test::make_test_case((test_function), BOOST_TEST_STRINGIZE( test_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_TU_REGISTRAR( suite_name )( 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_TU_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 ); \ + \ +static struct BOOST_JOIN( test_name, _exp_fail_num_spec ) \ +: boost::unit_test::ut_detail:: \ + auto_tc_exp_fail \ +{ \ + BOOST_JOIN( test_name, _exp_fail_num_spec )() \ + : boost::unit_test::ut_detail:: \ + auto_tc_exp_fail( n ) \ + {} \ +} BOOST_JOIN( test_name, _exp_fail_num_spec_inst ); \ + \ +/**/ + +// ************************************************************************** // +// ************** 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_TU_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 )>::instance()->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_FIXTURE_TEST_CASE_TEMPLATE ************** // +// ************************************************************************** // + +#define BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, F ) \ +template \ +struct test_name : public F \ +{ void test_method(); }; \ + \ +struct BOOST_AUTO_TC_INVOKER( test_name ) { \ + template \ + static void run( boost::type* = 0 ) \ + { \ + test_name t; \ + t.test_method(); \ + } \ +}; \ + \ +BOOST_AUTO_TU_REGISTRAR( test_name )( \ + boost::unit_test::ut_detail::template_test_case_gen< \ + BOOST_AUTO_TC_INVOKER( test_name ),TL >( \ + BOOST_STRINGIZE( test_name ) ) ); \ + \ +template \ +void test_name::test_method() \ +/**/ + +// ************************************************************************** // +// ************** BOOST_AUTO_TEST_CASE_TEMPLATE ************** // +// ************************************************************************** // + +#define BOOST_AUTO_TEST_CASE_TEMPLATE( test_name, type_name, TL ) \ +BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, BOOST_AUTO_TEST_CASE_FIXTURE ) + +// ************************************************************************** // +// ************** BOOST_TEST_CASE_TEMPLATE ************** // +// ************************************************************************** // + +#define BOOST_TEST_CASE_TEMPLATE( name, typelist ) \ + boost::unit_test::ut_detail::template_test_case_gen( \ + BOOST_TEST_STRINGIZE( name ) ) \ +/**/ + +// ************************************************************************** // +// ************** BOOST_TEST_CASE_TEMPLATE_FUNCTION ************** // +// ************************************************************************** // + +#define BOOST_TEST_CASE_TEMPLATE_FUNCTION( name, type_name ) \ +template \ +void BOOST_JOIN( name, _impl )( boost::type* ); \ + \ +struct name { \ + template \ + static void run( boost::type* frwrd = 0 ) \ + { \ + BOOST_JOIN( name, _impl )( frwrd ); \ + } \ +}; \ + \ +template \ +void BOOST_JOIN( name, _impl )( boost::type* ) \ +/**/ + +// ************************************************************************** // +// ************** BOOST_GLOBAL_FIXURE ************** // +// ************************************************************************** // + +#define BOOST_GLOBAL_FIXTURE( F ) \ +static boost::unit_test::ut_detail::global_fixture_impl 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 can 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_TU_REGISTRAR( test_name ) \ +static boost::unit_test::ut_detail::auto_test_unit_registrar BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ ) +#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 + +//____________________________________________________________________________// + +#endif // BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER + diff --git a/external/boost/test/unit_test_suite_impl.hpp b/external/boost/test/unit_test_suite_impl.hpp new file mode 100644 index 0000000..993e056 --- /dev/null +++ b/external/boost/test/unit_test_suite_impl.hpp @@ -0,0 +1,434 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include +#include +#include +#include +#include +#include + +// Boost +#include +#include +#include +#include +#include + +// STL +#include // for typeid +#include // for std::string +#include // for std::list +#include // for std::vector + +#include + +//____________________________________________________________________________// + +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 p_type; // type for this test unit + readonly_property 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 p_name; // name for this test unit + readwrite_property p_timeout; // timeout for the test unit execution + readwrite_property p_expected_failures; // number of expected failures in this test unit + mutable readwrite_property p_enabled; // enabled status for this unit + + void increase_exp_fail( unsigned num ); + +protected: + ~test_unit(); + +private: + // Data members + std::list 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 unit 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 ); + void remove( test_unit_id id ); + + // access methods + test_unit_id get( const_string tu_name ) const; + std::size_t size() const { return m_members.size(); } + +protected: + friend BOOST_TEST_DECL + void traverse_test_tree( test_suite const&, test_tree_visitor& ); + friend class framework_impl; + virtual ~test_suite() {} + + // Data members + std::vector 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 , 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( tu ), V ); + else + traverse_test_tree( static_cast( tu ), V ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** test_case_counter ************** // +// ************************************************************************** // + +class test_case_counter : public test_tree_visitor { +public: + // Constructor + test_case_counter() : p_count( 0 ) {} + + BOOST_READONLY_PROPERTY( counter_t, (test_case_counter)) p_count; +private: + // test tree visitor interface + virtual void visit( test_case const& ); + virtual bool test_suite_start( test_suite const& ts ) { return ts.p_enabled; } +}; + +// ************************************************************************** // +// ************** 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 +struct user_tc_method_invoker { + typedef void (UserTestCase::*TestMethod )(); + + user_tc_method_invoker( shared_ptr inst, TestMethod test_method ) + : m_inst( inst ), m_test_method( test_method ) {} + + void operator()() { ((*m_inst).*m_test_method)(); } + + shared_ptr m_inst; + TestMethod 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 +inline test_case* +make_test_case( void (UserTestCase::* test_method )(), + const_string tc_name, + boost::shared_ptr user_test_case ) +{ + return new test_case( ut_detail::normalize_test_case_name( tc_name ), + ut_detail::user_tc_method_invoker( user_test_case, test_method ) ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** auto_test_unit_registrar ************** // +// ************************************************************************** // + +namespace ut_detail { + +struct BOOST_TEST_DECL auto_test_unit_registrar +{ + // Constructors + auto_test_unit_registrar( test_case* tc, counter_t exp_fail ); + explicit auto_test_unit_registrar( const_string ts_name ); + explicit auto_test_unit_registrar( test_unit_generator const& tc_gen ); + explicit auto_test_unit_registrar( int ); + +private: + static std::list& curr_ts_store(); +}; + +//____________________________________________________________________________// + +template +struct auto_tc_exp_fail { + auto_tc_exp_fail() : m_value( 0 ) {} + + explicit auto_tc_exp_fail( unsigned v ) + : m_value( v ) + { + instance() = this; + } + + static auto_tc_exp_fail*& instance() + { + static auto_tc_exp_fail inst; + static auto_tc_exp_fail* inst_ptr = &inst; + + return inst_ptr; + } + + unsigned value() const { return m_value; } + +private: + // Data members + unsigned m_value; +}; + +//____________________________________________________________________________// + +} // namespace ut_detail + +// ************************************************************************** // +// ************** global_fixture ************** // +// ************************************************************************** // + +class BOOST_TEST_DECL global_fixture : public test_observer { +public: + // Constructor + global_fixture(); +}; + +//____________________________________________________________________________// + +namespace ut_detail { + +template +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; +}; + +// ************************************************************************** // +// ************** test_case_template_invoker ************** // +// ************************************************************************** // + +template +class test_case_template_invoker { +public: + void operator()() { TestCaseTemplate::run( (boost::type*)0 ); } +}; + +// ************************************************************************** // +// ************** generate_test_case_4_type ************** // +// ************************************************************************** // + +template +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 + void operator()( mpl::identity ) + { + std::string full_name; + assign_op( full_name, m_test_case_name, 0 ); + full_name += '<'; + full_name += typeid(TestType).name(); + if( boost::is_const::value ) + full_name += " const"; + full_name += '>'; + + m_holder.m_test_cases.push_back( + new test_case( full_name, test_case_template_invoker() ) ); + } + +private: + // Data members + const_string m_test_case_name; + Generator& m_holder; +}; + +// ************************************************************************** // +// ************** test_case_template ************** // +// ************************************************************************** // + +template +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, + TestCaseTemplate + > single_test_gen; + mpl::for_each >( single_test_gen( tc_name, *this ) ); + } + + virtual 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 m_test_cases; +}; + +//____________________________________________________________________________// + +} // namespace ut_detail + +} // unit_test + +} // namespace boost + +#include + +#endif // BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER + diff --git a/external/boost/test/utils/algorithm.hpp b/external/boost/test/utils/algorithm.hpp new file mode 100644 index 0000000..d5c6d12 --- /dev/null +++ b/external/boost/test/utils/algorithm.hpp @@ -0,0 +1,228 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : addition to STL algorithms +// *************************************************************************** + +#ifndef BOOST_ALGORITHM_HPP_062304GER +#define BOOST_ALGORITHM_HPP_062304GER + +#include +#include // std::find +#include // std::bind1st + +#include + +//____________________________________________________________________________// + +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 +inline std::pair +mismatch( InputIter1 first1, InputIter1 last1, + InputIter2 first2, InputIter2 last2 ) +{ + while( first1 != last1 && first2 != last2 && *first1 == *first2 ) { + ++first1; + ++first2; + } + + return std::pair(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 +inline std::pair +mismatch( InputIter1 first1, InputIter1 last1, + InputIter2 first2, InputIter2 last2, + Predicate pred ) +{ + while( first1 != last1 && first2 != last2 && pred( *first1, *first2 ) ) { + ++first1; + ++first2; + } + + return std::pair(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 +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 +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 +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 +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 +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 +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 + +#endif // BOOST_ALGORITHM_HPP_062304GER + + diff --git a/external/boost/test/utils/assign_op.hpp b/external/boost/test/utils/assign_op.hpp new file mode 100644 index 0000000..1ddcf7d --- /dev/null +++ b/external/boost/test/utils/assign_op.hpp @@ -0,0 +1,41 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +inline void +assign_op( T& t, S const& s, long ) +{ + t = s; +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +#endif // BOOST_TEST_ASSIGN_OP_033005GER + diff --git a/external/boost/test/utils/basic_cstring/basic_cstring.hpp b/external/boost/test/utils/basic_cstring/basic_cstring.hpp new file mode 100644 index 0000000..5589e61 --- /dev/null +++ b/external/boost/test/utils/basic_cstring/basic_cstring.hpp @@ -0,0 +1,731 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** basic_cstring ************** // +// ************************************************************************** // + +template +class basic_cstring { + typedef basic_cstring self_type; +public: + // Subtypes + typedef ut_detail::bcs_char_traits traits_type; + typedef typename ut_detail::bcs_char_traits::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 = static_cast(-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 + basic_cstring& assign( basic_cstring const& s ) { *this = basic_cstring( 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 +inline typename basic_cstring::pointer +basic_cstring::null_str() +{ + static CharT null = 0; + return &null; +} + +//____________________________________________________________________________// + +template +inline +basic_cstring::basic_cstring() +: m_begin( null_str() ) +, m_end( m_begin ) +{ +} + +//____________________________________________________________________________// + +template +inline +basic_cstring::basic_cstring( std_string const& s ) +: m_begin( s.c_str() ) +, m_end( m_begin + s.size() ) +{ +} + +//____________________________________________________________________________// + +template +inline +basic_cstring::basic_cstring( pointer s ) +: m_begin( s ? s : null_str() ) +, m_end ( m_begin + (s ? traits_type::length( s ) : 0 ) ) +{ +} + +//____________________________________________________________________________// + +template +inline +basic_cstring::basic_cstring( pointer s, size_type arg_size ) +: m_begin( s ), m_end( m_begin + arg_size ) +{ +} + +//____________________________________________________________________________// + +template +inline +basic_cstring::basic_cstring( pointer first, pointer last ) +: m_begin( first ) +, m_end( last ) +{ +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::value_type +basic_cstring::operator[]( size_type index ) const +{ + return m_begin[index]; +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::value_type +basic_cstring::at( size_type index ) const +{ + if( m_begin + index >= m_end ) + return static_cast(0); + + return m_begin[index]; +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::size_type +basic_cstring::size() const +{ + return m_end - m_begin; +} + +//____________________________________________________________________________// + +template +inline bool +basic_cstring::is_empty() const +{ + return m_end == m_begin; +} + +//____________________________________________________________________________// + +template +inline bool +basic_cstring::empty() const +{ + return is_empty(); +} + +//____________________________________________________________________________// + +template +inline void +basic_cstring::clear() +{ + m_begin = m_end; +} + +//____________________________________________________________________________// + +template +inline void +basic_cstring::resize( size_type new_len ) +{ + if( m_begin + new_len < m_end ) + m_end = m_begin + new_len; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::trim_left( size_type trim_size ) +{ + m_begin += trim_size; + if( m_end <= m_begin ) + clear(); + + return *this; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::trim_left( iterator it ) +{ + m_begin = it; + if( m_end <= m_begin ) + clear(); + + return *this; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::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 ) == reinterpret_cast(0) ) + break; + } + + return trim_left( it ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::trim_right( size_type trim_size ) +{ + m_end -= trim_size; + if( m_end <= m_begin ) + clear(); + + return *this; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::trim_right( iterator it ) +{ + m_end = it; + if( m_end <= m_begin ) + clear(); + + return *this; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::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 ) == reinterpret_cast(0) ) + break; + } + + return trim_right( it+1 ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::trim( basic_cstring exclusions ) +{ + trim_left( exclusions ); + trim_right( exclusions ); + + return *this; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::operator=( basic_cstring const& s ) +{ + m_begin = s.m_begin; + m_end = s.m_end; + + return *this; +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::operator=( std_string const& s ) +{ + return *this = self_type( s ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::operator=( pointer s ) +{ + return *this = self_type( s ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::assign( basic_cstring const& s, size_type pos, size_type len ) +{ + return *this = self_type( s.m_begin + pos, len ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::assign( std_string const& s ) +{ + return *this = self_type( s ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::assign( std_string const& s, size_type pos, size_type len ) +{ + return *this = self_type( s.c_str() + pos, len ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::assign( pointer s ) +{ + return *this = self_type( s ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::assign( pointer s, size_type len ) +{ + return *this = self_type( s, len ); +} + +//____________________________________________________________________________// + +template +inline basic_cstring& +basic_cstring::assign( pointer f, pointer l ) +{ + return *this = self_type( f, l ); +} + +//____________________________________________________________________________// + +template +inline void +basic_cstring::swap( basic_cstring& 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 +inline typename basic_cstring::iterator +basic_cstring::begin() +{ + return m_begin; +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::const_iterator +basic_cstring::begin() const +{ + return m_begin; +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::iterator +basic_cstring::end() +{ + return m_end; +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::const_iterator +basic_cstring::end() const +{ + return m_end; +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::size_type +basic_cstring::find( basic_cstring str ) const +{ + if( str.is_empty() || str.size() > size() ) + return static_cast(npos); + + const_iterator it = begin(); + const_iterator last = end() - str.size() + 1; + + while( it != last ) { + if( traits_type::compare( it, str.begin(), str.size() ) == 0 ) + break; + + ++it; + } + + return it == last ? static_cast(npos) : it - begin(); +} + +//____________________________________________________________________________// + +template +inline typename basic_cstring::size_type +basic_cstring::rfind( basic_cstring str ) const +{ + if( str.is_empty() || str.size() > size() ) + return static_cast(npos); + + const_iterator it = end() - str.size(); + const_iterator last = begin()-1; + + while( it != last ) { + if( traits_type::compare( it, str.begin(), str.size() ) == 0 ) + break; + + --it; + } + + return it == last ? static_cast(npos) : static_cast(it - begin()); +} + +//____________________________________________________________________________// + +template +inline basic_cstring +basic_cstring::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 +inline basic_cstring +basic_cstring::default_trim_ex() +{ + static CharT ws[3] = { CharT(' '), CharT('\t'), CharT('\n') }; // !! wide case + + return self_type( ws, 3 ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** comparison operators ************** // +// ************************************************************************** // + +template +inline bool +operator==( basic_cstring const& s1, basic_cstring const& s2 ) +{ + typedef typename basic_cstring::traits_type traits_type; + return s1.size() == s2.size() && + traits_type::compare( s1.begin(), s2.begin(), s1.size() ) == 0; +} + +//____________________________________________________________________________// + +template +inline bool +operator==( basic_cstring const& s1, CharT2* s2 ) +{ +#if !defined(__DMC__) + return s1 == basic_cstring( s2 ); +#else + return s1 == basic_cstring( s2 ); +#endif +} + +//____________________________________________________________________________// + +template +inline bool +operator==( basic_cstring const& s1, typename basic_cstring::std_string const& s2 ) +{ + return s1 == basic_cstring( s2 ); +} + +//____________________________________________________________________________// + +template +inline bool +operator==( CharT1* s2, basic_cstring const& s1 ) +{ + return s1 == s2; +} + +//____________________________________________________________________________// + +template +inline bool +operator==( typename basic_cstring::std_string const& s2, basic_cstring const& s1 ) +{ + return s1 == s2; +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( basic_cstring const& s1, CharT* s2 ) +{ + return !(s1 == s2); +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( CharT* s2, basic_cstring const& s1 ) +{ + return !(s1 == s2); +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( basic_cstring const& s1, basic_cstring const& s2 ) +{ + return !(s1 == s2); +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( basic_cstring const& s1, typename basic_cstring::std_string const& s2 ) +{ + return !(s1 == s2); +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( typename basic_cstring::std_string const& s2, basic_cstring const& s1 ) +{ + return !(s1 == s2); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** first_char ************** // +// ************************************************************************** // + +template +inline typename basic_cstring::value_type +first_char( basic_cstring source ) +{ + typedef typename basic_cstring::value_type string_value_type; + + return source.is_empty() ? static_cast(0) : *source.begin(); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** last_char ************** // +// ************************************************************************** // + +template +inline typename basic_cstring::value_type +last_char( basic_cstring source ) +{ + typedef typename basic_cstring::value_type string_value_type; + + return source.is_empty() ? static_cast(0) : *(source.end()-1); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** assign_op ************** // +// ************************************************************************** // + +template +inline void +assign_op( std::basic_string& target, basic_cstring src, int ) +{ + target.assign( src.begin(), src.size() ); +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_BASIC_CSTRING_HPP_071894GER diff --git a/external/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp b/external/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp new file mode 100644 index 0000000..e89456c --- /dev/null +++ b/external/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp @@ -0,0 +1,40 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 + +namespace boost { + +namespace unit_test { + +template class basic_cstring; +typedef basic_cstring 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 + +#endif // BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER + diff --git a/external/boost/test/utils/basic_cstring/bcs_char_traits.hpp b/external/boost/test/utils/basic_cstring/bcs_char_traits.hpp new file mode 100644 index 0000000..f932d47 --- /dev/null +++ b/external/boost/test/utils/basic_cstring/bcs_char_traits.hpp @@ -0,0 +1,150 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include +#include +#include + +// STL +#include // std::char_traits +#include // std::size_t + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace ut_detail { + +template struct bcs_base_char { typedef CharT type; }; + +template<> struct bcs_base_char { typedef char type; }; +template<> struct bcs_base_char { typedef char type; }; +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) +template<> struct bcs_base_char { typedef char type; }; +#endif + +template<> struct bcs_base_char { typedef wchar_t type; }; + +// ************************************************************************** // +// ************** bcs_char_traits ************** // +// ************************************************************************** // + +template +struct bcs_char_traits_impl +{ +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef CharT const const_char; +#else + typedef typename boost::add_const::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 +struct char_traits_with_find : std::string_char_traits { + 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_traits_with_find {}; +template<> struct bcs_char_traits_impl : char_traits_with_find {}; +#else +template<> struct bcs_char_traits_impl : std::char_traits {}; +template<> struct bcs_char_traits_impl : std::char_traits {}; +#endif + +template +class bcs_char_traits : public bcs_char_traits_impl { + typedef typename ut_detail::bcs_base_char::type the_base_char; +public: +#ifdef BOOST_CLASSIC_IOSTREAMS + typedef std::basic_string > std_string; +#else + typedef std::basic_string > std_string; +#endif +}; + +} // namespace ut_detail + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER diff --git a/external/boost/test/utils/basic_cstring/compare.hpp b/external/boost/test/utils/basic_cstring/compare.hpp new file mode 100644 index 0000000..8866c44 --- /dev/null +++ b/external/boost/test/utils/basic_cstring/compare.hpp @@ -0,0 +1,115 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 + +// STL +#include +#include + +#include + +//____________________________________________________________________________// + +# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) +namespace std { using ::toupper; } +# endif + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** case_ins_compare ************** // +// ************************************************************************** // + +namespace ut_detail { + +template +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 +inline bool +case_ins_eq( basic_cstring x, basic_cstring y ) +{ + return x.size() == y.size() && ut_detail::case_ins::compare( x.begin(), y.begin(), x.size() ) == 0; +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** case_ins_less ************** // +// ************************************************************************** // + +template +class case_ins_less : public std::binary_function,basic_cstring,bool> +{ +public: + bool operator()( basic_cstring x, basic_cstring y ) const + { + return x.size() != y.size() + ? x.size() < y.size() + : ut_detail::case_ins::compare( x.begin(), y.begin(), x.size() ) < 0; + } +}; + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** operator < ************** // +// ************************************************************************** // + +template +inline bool +operator <( boost::unit_test::basic_cstring const& x, + boost::unit_test::basic_cstring const& y ) +{ + typedef typename boost::unit_test::basic_cstring::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 + +#endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER diff --git a/external/boost/test/utils/basic_cstring/io.hpp b/external/boost/test/utils/basic_cstring/io.hpp new file mode 100644 index 0000000..04e4b4c --- /dev/null +++ b/external/boost/test/utils/basic_cstring/io.hpp @@ -0,0 +1,73 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 + +// STL +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +#ifdef BOOST_CLASSIC_IOSTREAMS + +template +inline std::ostream& +operator<<( std::ostream& os, basic_cstring const& str ) +{ + typedef typename ut_detail::bcs_base_char::type char_type; + char_type const* const beg = reinterpret_cast( str.begin() ); + char_type const* const end = reinterpret_cast( str.end() ); + os << std::basic_string( beg, end - beg ); + + return os; +} + +#else + +template +inline std::basic_ostream& +operator<<( std::basic_ostream& os, basic_cstring const& str ) +{ + CharT1 const* const beg = reinterpret_cast( str.begin() ); // !! + CharT1 const* const end = reinterpret_cast( str.end() ); + os << std::basic_string( beg, end - beg ); + + return os; +} + +#endif + +//____________________________________________________________________________// + + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER diff --git a/external/boost/test/utils/callback.hpp b/external/boost/test/utils/callback.hpp new file mode 100644 index 0000000..bd7d3e1 --- /dev/null +++ b/external/boost/test/utils/callback.hpp @@ -0,0 +1,310 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : +// *************************************************************************** + +#ifndef BOOST_TEST_CALLBACK_020505GER +#define BOOST_TEST_CALLBACK_020505GER + +// Boost +#include +#include +#include + +#include + +#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 +struct invoker { + template + R invoke( Functor& f ) { return f(); } + template + R invoke( Functor& f, T1 t1 ) { return f( t1 ); } + template + R invoke( Functor& f, T1 t1, T2 t2 ) { return f( t1, t2 ); } + template + R invoke( Functor& f, T1 t1, T2 t2, T3 t3 ) { return f( t1, t2, t3 ); } +}; + +//____________________________________________________________________________// + +template<> +struct invoker { + template + unused invoke( Functor& f ) { f(); return unused(); } + template + unused invoke( Functor& f, T1 t1 ) { f( t1 ); return unused(); } + template + unused invoke( Functor& f, T1 t1, T2 t2 ) { f( t1, t2 ); return unused(); } + template + 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 +struct callback0_impl { + virtual ~callback0_impl() {} + + virtual R invoke() = 0; +}; + +//____________________________________________________________________________// + +template +struct callback0_impl_t : callback0_impl { + // Constructor + explicit callback0_impl_t( Functor f ) : m_f( f ) {} + + virtual R invoke() { return invoker().invoke( m_f ); } + +private: + // Data members + Functor m_f; +}; + +//____________________________________________________________________________// + +} // namespace ut_detail + +template +class callback0 { +public: + // Constructors + callback0() {} +#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR + callback0( callback0 const& rhs ) : m_impl( rhs.m_impl ) {} +#endif + + template + callback0( Functor f ) + : m_impl( new ut_detail::callback0_impl_t( f ) ) {} + + void operator=( callback0 const& rhs ) { m_impl = rhs.m_impl; } + + template + void operator=( Functor f ) { m_impl.reset( new ut_detail::callback0_impl_t( f ) ); } + + R operator()() const { return m_impl->invoke(); } + + bool operator!() const { return !m_impl; } + +private: + // Data members + boost::shared_ptr > m_impl; +}; + +// ************************************************************************** // +// ************** unit_test::callback1 ************** // +// ************************************************************************** // + +namespace ut_detail { + +template +struct callback1_impl { + virtual ~callback1_impl() {} + + virtual R invoke( T1 t1 ) = 0; +}; + +//____________________________________________________________________________// + +template +struct callback1_impl_t : callback1_impl { + // Constructor + explicit callback1_impl_t( Functor f ) : m_f( f ) {} + + virtual R invoke( T1 t1 ) { return invoker().invoke( m_f, t1 ); } + +private: + // Data members + Functor m_f; +}; + +//____________________________________________________________________________// + +} // namespace ut_detail + +template +class callback1 { +public: + // Constructors + callback1() {} +#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR + callback1( callback1 const& rhs ) : m_impl( rhs.m_impl ) {} +#endif + + template + callback1( Functor f ) + : m_impl( new ut_detail::callback1_impl_t( f ) ) {} + + void operator=( callback1 const& rhs ) { m_impl = rhs.m_impl; } + + template + void operator=( Functor f ) { m_impl.reset( new ut_detail::callback1_impl_t( f ) ); } + + R operator()( T1 t1 ) const { return m_impl->invoke( t1 ); } + + bool operator!() const { return !m_impl; } + +private: + // Data members + boost::shared_ptr > m_impl; +}; + +// ************************************************************************** // +// ************** unit_test::callback2 ************** // +// ************************************************************************** // + +namespace ut_detail { + +template +struct callback2_impl { + virtual ~callback2_impl() {} + + virtual R invoke( T1 t1, T2 t2 ) = 0; +}; + +//____________________________________________________________________________// + +template +struct callback2_impl_t : callback2_impl { + // Constructor + explicit callback2_impl_t( Functor f ) : m_f( f ) {} + + virtual R invoke( T1 t1, T2 t2 ) { return invoker().template invoke( m_f, t1, t2 ); } + +private: + // Data members + Functor m_f; +}; + +//____________________________________________________________________________// + +} // namespace ut_detail + +template +class callback2 { +public: + // Constructors + callback2() {} +#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR + callback2( callback2 const& rhs ) : m_impl( rhs.m_impl ) {} +#endif + + template + callback2( Functor f ) : m_impl( new ut_detail::callback2_impl_t( f ) ) {} + + void operator=( callback2 const& rhs ) { m_impl = rhs.m_impl; } + + template + void operator=( Functor f ) { m_impl.reset( new ut_detail::callback2_impl_t( 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 > m_impl; +}; + +// ************************************************************************** // +// ************** unit_test::callback3 ************** // +// ************************************************************************** // + +namespace ut_detail { + +template +struct callback3_impl { + virtual ~callback3_impl() {} + + virtual R invoke( T1 t1, T2 t2, T3 t3 ) = 0; +}; + +//____________________________________________________________________________// + +template +struct callback3_impl_t : callback3_impl { + // Constructor + explicit callback3_impl_t( Functor f ) : m_f( f ) {} + + virtual R invoke( T1 t1, T2 t2, T3 t3 ) { return invoker().invoke( m_f, t1, t2, t3 ); } + +private: + // Data members + Functor m_f; +}; + +//____________________________________________________________________________// + +} // namespace ut_detail + +template +class callback3 { +public: + // Constructors + callback3() {} +#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR + callback3( callback3 const& rhs ) : m_impl( rhs.m_impl ) {} +#endif + + template + callback3( Functor f ) + : m_impl( new ut_detail::callback3_impl_t( f ) ) {} + + void operator=( callback3 const& rhs ) { m_impl = rhs.m_impl; } + + template + void operator=( Functor f ) { m_impl.reset( new ut_detail::callback3_impl_t( 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 > m_impl; +}; + +} // namespace unit_test + +} // namespace boost + +#undef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_CALLBACK_020505GER diff --git a/external/boost/test/utils/class_properties.hpp b/external/boost/test/utils/class_properties.hpp new file mode 100644 index 0000000..a7842b5 --- /dev/null +++ b/external/boost/test/utils/class_properties.hpp @@ -0,0 +1,221 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// 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 +#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) +#include +#endif +#include +#include +#include +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** class_property ************** // +// ************************************************************************** // + +template +class class_property { +protected: + typedef typename call_traits::const_reference read_access_t; + typedef typename call_traits::param_type write_param_t; + typedef typename add_pointer::type>::type address_res_t; +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 +inline std::ostream& +operator<<( std::ostream& os, class_property const& p ) + +#else + +template +inline std::basic_ostream& +operator<<( std::basic_ostream& os, class_property const& p ) + +#endif +{ + return os << p.get(); +} + +//____________________________________________________________________________// + +#define DEFINE_PROPERTY_FREE_BINARY_OPERATOR( op ) \ +template \ +inline bool \ +operator op( PropertyType const& lhs, class_property const& rhs ) \ +{ \ + return lhs op rhs.get(); \ +} \ +template \ +inline bool \ +operator op( class_property const& lhs, PropertyType const& rhs ) \ +{ \ + return lhs.get() op rhs; \ +} \ +template \ +inline bool \ +operator op( class_property const& lhs, \ + class_property 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 \ +inline bool \ +operator op( bool b, class_property const& p ) \ +{ \ + return b op p.get(); \ +} \ +template \ +inline bool \ +operator op( class_property const& p, bool b ) \ +{ \ + return b op p.get(); \ +} \ +/**/ + +DEFINE_PROPERTY_LOGICAL_OPERATOR( && ) +DEFINE_PROPERTY_LOGICAL_OPERATOR( || ) + +#endif + +// ************************************************************************** // +// ************** readonly_property ************** // +// ************************************************************************** // + +template +class readonly_property : public class_property { + typedef class_property 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 + +#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 { \ + typedef boost::unit_test::readonly_property 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 readwrite_property : public class_property { + typedef class_property base_prop; + typedef typename add_pointer::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 + +#undef BOOST_TEST_NO_PROTECTED_USING + +#endif // BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER diff --git a/external/boost/test/utils/custom_manip.hpp b/external/boost/test/utils/custom_manip.hpp new file mode 100644 index 0000000..8788ccb --- /dev/null +++ b/external/boost/test/utils/custom_manip.hpp @@ -0,0 +1,63 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : simple helpers for creating cusom output manipulators +// *************************************************************************** + +#ifndef BOOST_TEST_CUSTOM_MANIP_HPP_071894GER +#define BOOST_TEST_CUSTOM_MANIP_HPP_071894GER + +// STL +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** custom manipulators helpers ************** // +// ************************************************************************** // + +template +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 struct custom_manip {}; + +//____________________________________________________________________________// + +template +inline custom_printer > +operator<<( std::ostream& ostr, custom_manip const& ) { return custom_printer >( ostr ); } + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_CUSTOM_MANIP_HPP_071894GER diff --git a/external/boost/test/utils/fixed_mapping.hpp b/external/boost/test/utils/fixed_mapping.hpp new file mode 100644 index 0000000..b0ab3b8 --- /dev/null +++ b/external/boost/test/utils/fixed_mapping.hpp @@ -0,0 +1,124 @@ +// (C) Copyright Gennadiy Rozental 2001-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : fixed sized mapping with specified invalid value +// *************************************************************************** + +#ifndef BOOST_TEST_FIXED_MAPPING_HPP_071894GER +#define BOOST_TEST_FIXED_MAPPING_HPP_071894GER + +// Boost +#include +#include +#include +#include + +// STL +#include +#include +#include +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// configurable maximum fixed sized mapping size supported by this header. +// You can redefine it before inclusion of this file. +#ifndef MAX_MAP_SIZE +#define MAX_MAP_SIZE 20 +#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 > +class fixed_mapping +{ + typedef std::pair elem_type; + typedef std::vector map_type; + typedef typename std::vector::const_iterator iterator; + + typedef typename call_traits::param_type key_param_type; + typedef typename call_traits::param_type value_param_type; + typedef typename call_traits::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(), _1), bind(identity(), _2) ) + struct p1 : public std::binary_function + { + bool operator()( elem_type const& x, Key const& y ) const { return Compare()( x.first, y ); } + }; + + // bind( Compare(), bind(select1st(), _1), bind(select1st(), _2) ) + struct p2 : public std::binary_function + { + 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 + { + iterator it = boost::detail::lower_bound( m_map.begin(), m_map.end(), key, p1() ); + + 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 + +#undef MAX_MAP_SIZE +#undef CONSTR_DECL_MID +#undef CONSTR_BODY_MID +#undef CONSTR_DECL +#undef CONTRUCTORS + +#endif // BOOST_TEST_FIXED_MAPPING_HPP_071894GER + diff --git a/external/boost/test/utils/foreach.hpp b/external/boost/test/utils/foreach.hpp new file mode 100644 index 0000000..d12fa43 --- /dev/null +++ b/external/boost/test/utils/foreach.hpp @@ -0,0 +1,281 @@ +// (C) Copyright Eric Niebler 2004-2005 +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : this is an abridged version of an excelent BOOST_FOREACH facility +// presented by Eric Niebler. I am so fond of it so I can'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 +#include +#include +#include + +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +namespace for_each { + +// ************************************************************************** // +// ************** static_any ************** // +// ************************************************************************** // + +struct static_any_base +{ + operator bool() const { return false; } +}; + +//____________________________________________________________________________// + +template +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 +inline Iter& +static_any_cast( static_any_t a, Iter* = 0 ) +{ + return static_cast( static_cast const&>( a ).m_it ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** is_const ************** // +// ************************************************************************** // + +template +inline is_const +is_const_coll( C& ) +{ + return is_const(); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** begin ************** // +// ************************************************************************** // + +template +inline static_any +begin( C& t, mpl::false_ ) +{ + return static_any( t.begin() ); +} + +//____________________________________________________________________________// + +template +inline static_any +begin( C const& t, mpl::true_ ) +{ + return static_any( t.begin() ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** end ************** // +// ************************************************************************** // + +template +inline static_any +end( C& t, mpl::false_ ) +{ + return static_any( t.end() ); +} + +//____________________________________________________________________________// + +template +inline static_any +end( C const& t, mpl::true_ ) +{ + return static_any( t.end() ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** done ************** // +// ************************************************************************** // + +template +inline bool +done( static_any_t cur, static_any_t end, C&, mpl::false_ ) +{ + return static_any_cast( cur ) == + static_any_cast( end ); +} + +//____________________________________________________________________________// + +template +inline bool +done( static_any_t cur, static_any_t end, C const&, mpl::true_ ) +{ + return static_any_cast( cur ) == + static_any_cast( end ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** next ************** // +// ************************************************************************** // + +template +inline void +next( static_any_t cur, C&, mpl::false_ ) +{ + ++static_any_cast( cur ); +} + +//____________________________________________________________________________// + +template +inline void +next( static_any_t cur, C const&, mpl::true_ ) +{ + ++static_any_cast( cur ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** deref ************** // +// ************************************************************************** // + +template +inline RefType +deref( static_any_t cur, C&, ::boost::type, mpl::false_ ) +{ + return *static_any_cast( cur ); +} + +//____________________________________________________________________________// + +template +inline RefType +deref( static_any_t cur, C const&, ::boost::type, mpl::true_ ) +{ + return *static_any_cast( cur ); +} + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** BOOST_TEST_FOREACH ************** // +// ************************************************************************** // + +#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(), \ + 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 ) + +#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 ) \ +/**/ + +//____________________________________________________________________________// + +} // namespace for_each + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_FOREACH_HPP_021005GER diff --git a/external/boost/test/utils/iterator/input_iterator_facade.hpp b/external/boost/test/utils/iterator/input_iterator_facade.hpp new file mode 100644 index 0000000..ec29e21 --- /dev/null +++ b/external/boost/test/utils/iterator/input_iterator_facade.hpp @@ -0,0 +1,109 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : Input iterator facade +// *************************************************************************** + +#ifndef BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER +#define BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER + +// Boost +#include + +#include + +//____________________________________________________________________________// + +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 friend class input_iterator_facade; +#endif + + template + static bool get( Facade& f ) + { + return f.get(); + } + +private: + // objects of this class are useless + input_iterator_core_access(); //undefined +}; + +// ************************************************************************** // +// ************** input_iterator_facade ************** // +// ************************************************************************** // + +template +class input_iterator_facade : public iterator_facade +{ +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(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 + +#endif // BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER + diff --git a/external/boost/test/utils/iterator/token_iterator.hpp b/external/boost/test/utils/iterator/token_iterator.hpp new file mode 100644 index 0000000..c303ab7 --- /dev/null +++ b/external/boost/test/utils/iterator/token_iterator.hpp @@ -0,0 +1,418 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : token iterator for string and range tokenization +// *************************************************************************** + +#ifndef BOOST_TOKEN_ITERATOR_HPP_071894GER +#define BOOST_TOKEN_ITERATOR_HPP_071894GER + +// Boost +#include +#include + +#include +#include + +#include +#include +#include +#include + +// STL +#include +#include + +#include + +//____________________________________________________________________________// + +#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 +class default_char_compare { +public: + bool operator()( CharT c1, CharT c2 ) + { +#ifdef BOOST_CLASSIC_IOSTREAMS + return std::string_char_traits::eq( c1, c2 ); +#else + return std::char_traits::eq( c1, c2 ); +#endif + } +}; + +// ************************************************************************** // +// ************** delim_policy ************** // +// ************************************************************************** // + +template +class delim_policy { + typedef basic_cstring 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 + 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 +struct token_assigner { +#if BOOST_WORKAROUND( BOOST_DINKUMWARE_STDLIB, < 306 ) + template + static void assign( Iterator b, Iterator e, std::basic_string& t ) + { for( ; b != e; ++b ) t += *b; } + + template + static void assign( Iterator b, Iterator e, basic_cstring& t ) { t.assign( b, e ); } +#else + template + static void assign( Iterator b, Iterator e, Token& t ) { t.assign( b, e ); } +#endif + template + static void append_move( Iterator& b, Token& ) { ++b; } +}; + +//____________________________________________________________________________// + +template<> +struct token_assigner { + template + static void assign( Iterator b, Iterator e, Token& t ) {} + + template + static void append_move( Iterator& b, Token& t ) { t += *b; ++b; } +}; + +} // namespace ut_detail + +// ************************************************************************** // +// ************** modifiers ************** // +// ************************************************************************** // + +namespace { +nfp::keyword dropped_delimeters; +nfp::keyword kept_delimeters; +nfp::typed_keyword keep_empty_tokens; +nfp::typed_keyword max_tokens; +} + +// ************************************************************************** // +// ************** token_iterator_base ************** // +// ************************************************************************** // + +template, + typename ValueType = basic_cstring, + typename Reference = basic_cstring, + typename Traversal = forward_traversal_tag> +class token_iterator_base +: public input_iterator_facade { + typedef basic_cstring cstring; + typedef ut_detail::delim_policy delim_policy; + typedef input_iterator_facade 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( static_cast(-1) ) + , m_token_produced( false ) + { + } + + template + 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 + bool get( Iter& begin, Iter end ) + { + typedef ut_detail::token_assigner::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 > +class basic_string_token_iterator +: public token_iterator_base,CharT,CharCompare> { + typedef basic_cstring cstring; + typedef token_iterator_base,CharT,CharCompare> base; +public: + explicit basic_string_token_iterator() {} + explicit basic_string_token_iterator( cstring src ) + : m_src( src ) + { + this->init(); + } + + template + 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 string_token_iterator; +typedef basic_string_token_iterator wstring_token_iterator; + +// ************************************************************************** // +// ************** range_token_iterator ************** // +// ************************************************************************** // + +template::type>, + typename ValueType = std::basic_string::type>, + typename Reference = ValueType const&> +class range_token_iterator +: public token_iterator_base, + typename iterator_value::type,CharCompare,ValueType,Reference> { + typedef basic_cstring cstring; + typedef token_iterator_base, + typename iterator_value::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 + 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 +inline range_token_iterator +make_range_token_iterator( Iter begin, Iter end = Iter() ) +{ + return range_token_iterator( begin, end ); +} + +//____________________________________________________________________________// + +template +inline range_token_iterator +make_range_token_iterator( Iter begin, Iter end, Modifier const& m ) +{ + return range_token_iterator( begin, end, m ); +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TOKEN_ITERATOR_HPP_071894GER + diff --git a/external/boost/test/utils/lazy_ostream.hpp b/external/boost/test/utils/lazy_ostream.hpp new file mode 100644 index 0000000..d7d7d6c --- /dev/null +++ b/external/boost/test/utils/lazy_ostream.hpp @@ -0,0 +1,114 @@ +// (C) Copyright Gennadiy Rozental 2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : contains definition for all test tools in test toolbox +// *************************************************************************** + +#ifndef BOOST_TEST_LAZY_OSTREAM_HPP_070708GER +#define BOOST_TEST_LAZY_OSTREAM_HPP_070708GER + +// Boost.Test +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** lazy_ostream ************** // +// ************************************************************************** // + +namespace boost { + +namespace unit_test { + +class lazy_ostream { +public: + static lazy_ostream& instance() { static lazy_ostream inst; return inst; } + + friend std::ostream& operator<<( std::ostream& ostr, lazy_ostream const& o ) { return o( ostr ); } + + // access method + bool empty() const { return m_empty; } + + // actual printing interface; to be accessed only by this class and children + virtual std::ostream& operator()( std::ostream& ostr ) const { return ostr; } +protected: + explicit lazy_ostream( bool empty = true ) : m_empty( empty ) {} + + // protected destructor to make sure right one is called +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582)) +public: +#endif + BOOST_TEST_PROTECTED_VIRTUAL ~lazy_ostream() {} + +private: + // Data members + bool m_empty; +}; + +//____________________________________________________________________________// + +template +class lazy_ostream_impl : public lazy_ostream { +public: + lazy_ostream_impl( lazy_ostream const& prev, T value ) + : lazy_ostream( false ) + , m_prev( prev ) + , m_value( value ) + {} +private: + virtual std::ostream& operator()( std::ostream& ostr ) const + { + return m_prev(ostr) << m_value; + } + + // Data members + lazy_ostream const& m_prev; + T m_value; +}; + +//____________________________________________________________________________// + +template +inline lazy_ostream_impl +operator<<( lazy_ostream const& prev, T const& v ) +{ + return lazy_ostream_impl( prev, v ); +} + +//____________________________________________________________________________// + +#if BOOST_TEST_USE_STD_LOCALE + +template +inline lazy_ostream_impl +operator<<( lazy_ostream const& prev, R& (BOOST_TEST_CALL_DECL *man)(S&) ) +{ + return lazy_ostream_impl( prev, man ); +} + +//____________________________________________________________________________// + +#endif + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_LAZY_OSTREAM_HPP_070708GER diff --git a/external/boost/test/utils/named_params.hpp b/external/boost/test/utils/named_params.hpp new file mode 100644 index 0000000..f7f8e68 --- /dev/null +++ b/external/boost/test/utils/named_params.hpp @@ -0,0 +1,329 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : facilities for named function parameters support +// *************************************************************************** + +#ifndef BOOST_TEST_NAMED_PARAM_022505GER +#define BOOST_TEST_NAMED_PARAM_022505GER + +// Boost +#include +#include + +// Boost.Test +#include +#include + +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace nfp { // named function parameters + +// ************************************************************************** // +// ************** forward declarations ************** // +// ************************************************************************** // + +template struct named_parameter; +template struct keyword; + +namespace nfp_detail { + +template 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 +#if defined(__GNUC__) || defined(__HP_aCC) || defined(__EDG__) || defined(__SUNPRO_CC) + operator T() const +#else + operator T const&() const +#endif + { report_access_to_invalid_parameter(); static T* v = 0; return *v; } + + template + T any_cast() const + { report_access_to_invalid_parameter(); static typename remove_reference::type* v = 0; return *v; } + + template + nil operator()( Arg1 const& ) + { report_access_to_invalid_parameter(); return nil(); } + + template + nil operator()( Arg1 const&, Arg2 const& ) + { report_access_to_invalid_parameter(); return nil(); } + + template + nil operator()( Arg1 const&, Arg2 const&, Arg3 const& ) + { report_access_to_invalid_parameter(); return nil(); } + + // Visitation support + template + void apply_to( Visitor& V ) const {} + + static nil& inst() { static nil s_inst; return s_inst; } +private: + nil() {} +}; + +// ************************************************************************** // +// ************** named_parameter_base ************** // +// ************************************************************************** // + +template +struct named_parameter_base { + template + named_parameter_combine + operator,( NP const& np ) const { return named_parameter_combine( np, *static_cast(this) ); } +}; + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** named_parameter_combine ************** // +// ************************************************************************** // + +template +struct named_parameter_combine +: Rest +, named_parameter_base > { + typedef typename NP::ref_type res_type; + typedef named_parameter_combine self_type; + + // Constructor + named_parameter_combine( NP const& np, Rest const& r ) + : Rest( r ) + , m_param( np ) + {} + + // Access methods + res_type operator[]( keyword kw ) const { return m_param[kw]; } + res_type operator[]( keyword kw ) const { return m_param[kw]; } + using Rest::operator[]; + + bool has( keyword kw ) const { return m_param.has( kw ); } + using Rest::has; + + void erase( keyword kw ) const { m_param.erase( kw ); } + using Rest::erase; + +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) || \ + BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0610)) + template + named_parameter_combine operator,( NP const& np ) const + { return named_parameter_combine( np, *this ); } +#else + using named_parameter_base >::operator,; +#endif + + // Visitation support + template + 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 ************** // +// ************************************************************************** // + +template +struct named_parameter +: nfp_detail::named_parameter_base > +{ + typedef nfp_detail::nil nil_t; + typedef T data_type; + typedef ReferenceType ref_type; + typedef unique_id id; + + // Constructor + explicit named_parameter( ref_type v ) + : m_value( v ) + , m_erased( false ) + {} + named_parameter( named_parameter const& np ) + : m_value( np.m_value ) + , m_erased( np.m_erased ) + {} + + // Access methods + ref_type operator[]( keyword ) const { return m_erased ? nil_t::inst().template any_cast() : m_value; } + ref_type operator[]( keyword ) const { return m_erased ? nil_t::inst().template any_cast() : m_value; } + template + nil_t operator[]( keyword ) const { return nil_t::inst(); } + + bool has( keyword ) const { return !m_erased; } + template + bool has( keyword ) const { return false; } + + void erase( keyword ) const { m_erased = true; } + template + void erase( keyword ) const {} + + // Visitation support + template + void apply_to( Visitor& V ) const + { + V.set_parameter( rtti::type_id(), m_value ); + } + +private: + // Data members + ref_type m_value; + mutable bool m_erased; +}; + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** no_params ************** // +// ************************************************************************** // + +namespace nfp_detail { +typedef named_parameter no_params_type; +} // namespace nfp_detail + +namespace { +nfp_detail::no_params_type no_params( '\0' ); +} // local namespace + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** keyword ************** // +// ************************************************************************** // + +template +struct keyword { + typedef unique_id id; + + template + named_parameter + operator=( T const& t ) const { return named_parameter( t ); } + + template + named_parameter + operator=( T& t ) const { return named_parameter( t ); } + + named_parameter + operator=( char const* t ) const { return named_parameter( t ); } +}; + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** typed_keyword ************** // +// ************************************************************************** // + +template +struct typed_keyword : keyword { + named_parameter + operator=( T const& t ) const { return named_parameter( t ); } + + named_parameter + operator=( T& t ) const { return named_parameter( t ); } +}; + +//____________________________________________________________________________// + +template +struct typed_keyword +: keyword +, named_parameter { + typedef unique_id id; + + typed_keyword() : named_parameter( true ) {} + + named_parameter + operator!() const { return named_parameter( false ); } +}; + +//____________________________________________________________________________// + +// ************************************************************************** // +// ************** optionally_assign ************** // +// ************************************************************************** // + +template +inline void +optionally_assign( T&, nfp_detail::nil ) +{ + nfp_detail::report_access_to_invalid_parameter(); +} + +//____________________________________________________________________________// + +template +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, static_cast(0) ); +} + +//____________________________________________________________________________// + +template +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 + +#endif // BOOST_TEST_NAMED_PARAM_022505GER + diff --git a/external/boost/test/utils/rtti.hpp b/external/boost/test/utils/rtti.hpp new file mode 100644 index 0000000..655222d --- /dev/null +++ b/external/boost/test/utils/rtti.hpp @@ -0,0 +1,64 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : simple facilities for accessing type information at runtime +// *************************************************************************** + +#ifndef BOOST_TEST_RTTI_HPP_062604GER +#define BOOST_TEST_RTTI_HPP_062604GER + +#include + +namespace boost { + +namespace rtti { + +// ************************************************************************** // +// ************** rtti::type_id ************** // +// ************************************************************************** // + +typedef std::ptrdiff_t id_t; + +namespace rtti_detail { + +template +struct rttid_holder { + static id_t id() { return reinterpret_cast( &inst() ); } + +private: + struct rttid {}; + + static rttid const& inst() { static rttid s_inst; return s_inst; } +}; + +} // namespace rtti_detail + +//____________________________________________________________________________// + +template +inline id_t +type_id() +{ + return rtti_detail::rttid_holder::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() ) + +//____________________________________________________________________________// + +} // namespace rtti + +} // namespace boost + +#endif // BOOST_RT_RTTI_HPP_062604GER diff --git a/external/boost/test/utils/runtime/argument.hpp b/external/boost/test/utils/runtime/argument.hpp new file mode 100644 index 0000000..d22745c --- /dev/null +++ b/external/boost/test/utils/runtime/argument.hpp @@ -0,0 +1,112 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include +#include + +// Boost.Test +#include +#include + +// STL +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +// ************************************************************************** // +// ************** runtime::argument ************** // +// ************************************************************************** // + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable:4244) +#endif + +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 p_formal_parameter; + unit_test::readonly_property p_value_type; +}; + +// ************************************************************************** // +// ************** runtime::typed_argument ************** // +// ************************************************************************** // + +template +class typed_argument : public argument { +public: + // Constructor + explicit typed_argument( parameter const& p ) + : argument( p, rtti::type_id() ) + {} + typed_argument( parameter const& p, T const& t ) + : argument( p, rtti::type_id() ) + , p_value( t ) + {} + + unit_test::readwrite_property p_value; +}; + +// ************************************************************************** // +// ************** runtime::arg_value ************** // +// ************************************************************************** // + +template +inline T const& +arg_value( argument const& arg_ ) +{ + assert( arg_.p_value_type == rtti::type_id() ); // detect logic error + + return static_cast const&>( arg_ ).p_value.value; +} + +//____________________________________________________________________________// + +template +inline T& +arg_value( argument& arg_ ) +{ + assert( arg_.p_value_type == rtti::type_id() ); // detect logic error + + return static_cast&>( arg_ ).p_value.value; +} + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +//____________________________________________________________________________// + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_ARGUMENT_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/argument_factory.hpp b/external/boost/test/utils/runtime/cla/argument_factory.hpp new file mode 100644 index 0000000..1117066 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/argument_factory.hpp @@ -0,0 +1,218 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 57992 $ +// +// 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 + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +// Boost.Test +#include + +// Boost +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** default_value_interpreter ************** // +// ************************************************************************** // + +namespace rt_cla_detail { + +struct default_value_interpreter { + template + void operator()( argv_traverser& tr, boost::optional& value ) + { + if( interpret_argument_value( tr.token(), value, 0 ) ) + tr.next_token(); + } +}; + +} // namespace rt_cla_detail + +// ************************************************************************** // +// ************** typed_argument_factory ************** // +// ************************************************************************** // + +template +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 + 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( 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( 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( 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 m_value_handler; + unit_test::callback2&> m_value_generator; + unit_test::callback2&> m_value_interpreter; +}; + +//____________________________________________________________________________// + +template +inline argument_ptr +typed_argument_factory::produce_using( parameter& p, argv_traverser& tr ) +{ + boost::optional 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 actual_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( !actual_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 ) + actual_arg.reset( p.p_optional_value && (rtti::type_id() != rtti::type_id()) + ? static_cast(new typed_argument >( p, value )) + : static_cast(new typed_argument( p, *value )) ); + else { + typedef std::list > optional_list; + + if( !actual_arg ) + actual_arg.reset( p.p_optional_value + ? static_cast(new typed_argument( p )) + : static_cast(new typed_argument >( p )) ); + + if( p.p_optional_value ) { + optional_list& values = arg_value( *actual_arg ); + + values.push_back( value ); + } + else { + std::list& values = arg_value >( *actual_arg ); + + values.push_back( *value ); + } + } + + return actual_arg; +} + +//____________________________________________________________________________// + +template +inline argument_ptr +typed_argument_factory::produce_using( parameter& p, parser const& pa ) +{ + argument_ptr actual_arg; + + if( !m_value_generator ) + return actual_arg; + + boost::optional value; + m_value_generator( pa, value ); + + if( !value ) + return actual_arg; + + if( !!m_value_handler ) + m_value_handler( p, *value ); + + actual_arg.reset( new typed_argument( p, *value ) ); + + return actual_arg; +} + +//____________________________________________________________________________// + +template +inline void +typed_argument_factory::argument_usage_info( format_stream& fs ) +{ + rt_cla_detail::argument_value_usage( fs, 0, reinterpret_cast(0) ); +} + +//____________________________________________________________________________// + +} // namespace boost + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace cla + +#endif // BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/argv_traverser.hpp b/external/boost/test/utils/runtime/cla/argv_traverser.hpp new file mode 100644 index 0000000..c1fb95e --- /dev/null +++ b/external/boost/test/utils/runtime/cla/argv_traverser.hpp @@ -0,0 +1,98 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include + +// Boost +#include +#include + +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 p_ignore_mismatch; + unit_test::readwrite_property 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 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 + +#endif + +#endif // BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/argv_traverser.ipp b/external/boost/test/utils/runtime/cla/argv_traverser.ipp new file mode 100644 index 0000000..d7bd6c0 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/argv_traverser.ipp @@ -0,0 +1,209 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// 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 + +#include + +// STL +#include +#include + +#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 + +#endif // BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER diff --git a/external/boost/test/utils/runtime/cla/basic_parameter.hpp b/external/boost/test/utils/runtime/cla/basic_parameter.hpp new file mode 100644 index 0000000..e7e084c --- /dev/null +++ b/external/boost/test/utils/runtime/cla/basic_parameter.hpp @@ -0,0 +1,85 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include + +// Boost.Test +#include + +// Boost +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** runtime::cla::basic_parameter ************** // +// ************************************************************************** // + +template +class basic_parameter : private base_from_member, public typed_parameter { +public: + // Constructors + explicit basic_parameter( cstring n ) + : base_from_member() + , typed_parameter( base_from_member::member ) + { + this->accept_modifier( name = n ); + } + + // parameter properties modification + template + void accept_modifier( Modifier const& m ) + { + typed_parameter::accept_modifier( m ); + + base_from_member::member.accept_modifier( m ); + } +}; + +//____________________________________________________________________________// + +#define BOOST_RT_CLA_NAMED_PARAM_GENERATORS( param_type ) \ +template \ +inline shared_ptr > \ +param_type( cstring name = cstring() ) \ +{ \ + return shared_ptr >( new param_type ## _t( name ) ); \ +} \ + \ +inline shared_ptr > \ +param_type( cstring name = cstring() ) \ +{ \ + return shared_ptr >( new param_type ## _t( name ) ); \ +} \ +/**/ + +//____________________________________________________________________________// + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/char_parameter.hpp b/external/boost/test/utils/runtime/cla/char_parameter.hpp new file mode 100644 index 0000000..3e9b2d8 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/char_parameter.hpp @@ -0,0 +1,98 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include + +#include +#include + +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 + void accept_modifier( Modifier const& m ) + { + basic_naming_policy::accept_modifier( m ); + + BOOST_RT_PARAM_VALIDATE_LOGIC( p_name->size() <= 1, "Invalid parameter name " << p_name ); + } +}; + +// ************************************************************************** // +// ************** runtime::cla::char_parameter ************** // +// ************************************************************************** // + +template +class char_parameter_t : public basic_parameter { + typedef basic_parameter base; +public: + // Constructors + explicit char_parameter_t( char_type name ) : base( cstring( &name, 1 ) ) {} +}; + +//____________________________________________________________________________// + +template +inline shared_ptr > +char_parameter( char_type name ) +{ + return shared_ptr >( new char_parameter_t( name ) ); +} + +//____________________________________________________________________________// + +inline shared_ptr > +char_parameter( char_type name ) +{ + return shared_ptr >( new char_parameter_t( name ) ); +} + +//____________________________________________________________________________// + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#ifndef BOOST_RT_PARAM_OFFLINE + +# define BOOST_RT_PARAM_INLINE inline +# include + +#endif + +#endif // BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/char_parameter.ipp b/external/boost/test/utils/runtime/cla/char_parameter.ipp new file mode 100644 index 0000000..cc9e923 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/char_parameter.ipp @@ -0,0 +1,57 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include + +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() ) +{ + assign_op( p_prefix.value, 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 && + p_name == static_cast( id ).p_name; +} + +//____________________________________________________________________________// + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER diff --git a/external/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp b/external/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp new file mode 100644 index 0000000..1986b6d --- /dev/null +++ b/external/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp @@ -0,0 +1,82 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// 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$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include + +// Boost.Test +#include +#include + +#include + +// STL +// !! can we eliminate these includes? +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +namespace rt_cla_detail { + +// ************************************************************************** // +// ************** argument_value_usage ************** // +// ************************************************************************** // + +// generic case +template +inline void +argument_value_usage( format_stream& fs, long, T* = 0 ) +{ + fs << BOOST_RT_PARAM_CSTRING_LITERAL( "" ); +} + +//____________________________________________________________________________// + +// specialization for list of values +template +inline void +argument_value_usage( format_stream& fs, int, std::list* = 0 ) +{ + fs << BOOST_RT_PARAM_CSTRING_LITERAL( "(, ..., )" ); +} + +//____________________________________________________________________________// + +// 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 + +#endif // BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/dual_name_parameter.hpp b/external/boost/test/utils/runtime/cla/dual_name_parameter.hpp new file mode 100644 index 0000000..233f632 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/dual_name_parameter.hpp @@ -0,0 +1,96 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** dual_name_policy ************** // +// ************************************************************************** // + +class dual_name_policy : public dual_id_policy { +public: + dual_name_policy(); + + // Accept modifier + template + void accept_modifier( Modifier const& m ) + { + if( m.has( prefix ) ) { + set_prefix( m[prefix] ); + m.erase( prefix ); + } + + if( m.has( name ) ) { + set_name( m[name] ); + m.erase( name ); + } + + if( m.has( separator ) ) { + set_separator( m[separator] ); + m.erase( separator ); + } + + dual_id_policy::accept_modifier( m ); + } +private: + void set_prefix( cstring ); + void set_name( cstring ); + void set_separator( cstring ); +}; + +// ************************************************************************** // +// ************** runtime::cla::dual_name_parameter ************** // +// ************************************************************************** // + +template +class dual_name_parameter_t : public basic_parameter { + typedef basic_parameter 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 + +#endif + +#endif // BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/dual_name_parameter.ipp b/external/boost/test/utils/runtime/cla/dual_name_parameter.ipp new file mode 100644 index 0000000..f9356bd --- /dev/null +++ b/external/boost/test/utils/runtime/cla/dual_name_parameter.ipp @@ -0,0 +1,90 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include + +#include + +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 +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 + +#endif // BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER diff --git a/external/boost/test/utils/runtime/cla/fwd.hpp b/external/boost/test/utils/runtime/cla/fwd.hpp new file mode 100644 index 0000000..66d6efc --- /dev/null +++ b/external/boost/test/utils/runtime/cla/fwd.hpp @@ -0,0 +1,55 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : cla subsystem forward declarations +// *************************************************************************** + +#ifndef BOOST_RT_CLA_FWD_HPP_062604GER +#define BOOST_RT_CLA_FWD_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +// Boost +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +class parser; +class parameter; +typedef shared_ptr parameter_ptr; +class naming_policy; +typedef shared_ptr naming_policy_ptr; +class argv_traverser; + +namespace rt_cla_detail { + +template class const_generator; +template class ref_generator; + +template class assigner; + +class named_parameter_base; +class positional_parameter_base; + +} // namespace rt_cla_detail + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_FWD_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/id_policy.hpp b/external/boost/test/utils/runtime/cla/id_policy.hpp new file mode 100644 index 0000000..0784979 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/id_policy.hpp @@ -0,0 +1,145 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 57992 $ +// +// 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 + +#include +#include +#include + +#include + +// Boost.Test +#include +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** naming_policy_base ************** // +// ************************************************************************** // +// model: + +class basic_naming_policy : public identification_policy { +public: + // Public properties + unit_test::readwrite_property p_prefix; + unit_test::readwrite_property p_name; + unit_test::readwrite_property p_separator; + + // Policy interface + virtual bool responds_to( cstring name ) const { return p_name == name; } + virtual cstring id_2_report() const { return p_name.get(); } + virtual void usage_info( format_stream& fs ) const; + virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const; + + // Accept modifier + template + void accept_modifier( Modifier const& m ) + { + nfp::optionally_assign( p_prefix.value, m, prefix ); + nfp::optionally_assign( p_name.value, m, name ); + nfp::optionally_assign( p_separator.value, m, separator ); + } + +protected: + explicit basic_naming_policy( rtti::id_t 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, bool optional_value ) const; +}; + +// ************************************************************************** // +// ************** dual_id_policy ************** // +// ************************************************************************** // + +template +class dual_id_policy : public identification_policy { +public: + // Constructor + dual_id_policy() + : identification_policy( rtti::type_id() ) + , 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 id_p.conflict_with( m_primary ) || id_p.conflict_with( m_secondary ); + } + 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 ); + } + + // Accept modifier + template + void accept_modifier( Modifier const& m ) + { + m_primary.accept_modifier( m ); + m_secondary.accept_modifier( m ); + } + +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 + +#endif + +#endif // BOOST_RT_CLA_ID_POLICY_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/id_policy.ipp b/external/boost/test/utils/runtime/cla/id_policy.ipp new file mode 100644 index 0000000..0de8d85 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/id_policy.ipp @@ -0,0 +1,118 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include +#include + +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 << p_prefix << p_name << p_separator; + + if( p_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( p_prefix.get() ) ) + return false; + + tr.trim( p_prefix->size() ); + return true; +} + +//____________________________________________________________________________// + +BOOST_RT_PARAM_INLINE bool +basic_naming_policy::match_name( argv_traverser& tr ) const +{ + if( !tr.match_front( p_name.get() ) ) + return false; + + tr.trim( p_name->size() ); + return true; +} + +//____________________________________________________________________________// + +BOOST_RT_PARAM_INLINE bool +basic_naming_policy::match_separator( argv_traverser& tr, bool optional_value ) const +{ + if( p_separator->empty() ) { + if( !tr.token().is_empty() ) + return false; + + tr.trim( 1 ); + } + else { + if( !tr.match_front( p_separator.get() ) ) { + // if parameter has optional value separator is optional as well + if( optional_value && ( tr.eoi() || tr.match_front( ' ' ) ) ) { + return true; + } + return false; + } + + tr.trim( p_separator->size() ); + } + + return true; +} + +//____________________________________________________________________________// + +BOOST_RT_PARAM_INLINE bool +basic_naming_policy::matching( parameter const& p, argv_traverser& tr, bool ) const +{ + if( !match_prefix( tr ) ) + return false; + + if( !match_name( tr ) ) + return false; + + if( !match_separator( tr, p.p_optional_value ) ) + return false; + + return true; +} + +//____________________________________________________________________________// + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_ID_POLICY_IPP_062904GER diff --git a/external/boost/test/utils/runtime/cla/iface/argument_factory.hpp b/external/boost/test/utils/runtime/cla/iface/argument_factory.hpp new file mode 100644 index 0000000..6f54965 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/iface/argument_factory.hpp @@ -0,0 +1,51 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include + +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** argument_factory ************** // +// ************************************************************************** // +// another name can 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 +protected: + BOOST_TEST_PROTECTED_VIRTUAL ~argument_factory() {} +}; + +} // namespace boost + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace cla + +#endif // BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/iface/id_policy.hpp b/external/boost/test/utils/runtime/cla/iface/id_policy.hpp new file mode 100644 index 0000000..c69a094 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/iface/id_policy.hpp @@ -0,0 +1,73 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 57992 $ +// +// 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 + +#include + +// Boost.Test +#include +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** identification_policy ************** // +// ************************************************************************** // + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable:4244) +#endif + +class identification_policy { +public: + // Public properties + unit_test::readwrite_property 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 dyn_type ) + : p_type_id( dyn_type ) + {} + BOOST_TEST_PROTECTED_VIRTUAL ~identification_policy() {} +}; + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/modifier.hpp b/external/boost/test/utils/runtime/cla/modifier.hpp new file mode 100644 index 0000000..bc6a7eb --- /dev/null +++ b/external/boost/test/utils/runtime/cla/modifier.hpp @@ -0,0 +1,69 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// Description : parameter modifiers +// *************************************************************************** + +#ifndef BOOST_RT_CLA_MODIFIER_HPP_062604GER +#define BOOST_RT_CLA_MODIFIER_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +// Boost.Test +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** environment variable modifiers ************** // +// ************************************************************************** // + +namespace { + +nfp::typed_keyword optional_m; +nfp::named_parameter optional( true ); +nfp::typed_keyword required_m; +nfp::named_parameter required( true ); +nfp::typed_keyword multiplicable_m; +nfp::named_parameter multiplicable( true ); +nfp::typed_keyword guess_name_m; +nfp::named_parameter guess_name( true ); +nfp::typed_keyword ignore_mismatch_m; +nfp::named_parameter ignore_mismatch( true ); +nfp::typed_keyword optional_value_m; +nfp::named_parameter optional_value( true ); + +nfp::typed_keyword input_separator; +nfp::typed_keyword prefix; +nfp::typed_keyword name; +nfp::typed_keyword separator; +nfp::typed_keyword description; +nfp::typed_keyword default_refer_to; + +nfp::keyword default_value; +nfp::keyword handler; +nfp::keyword interpreter; +nfp::keyword assign_to; + +} // local namespace + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_MODIFIER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/named_parameter.hpp b/external/boost/test/utils/runtime/cla/named_parameter.hpp new file mode 100644 index 0000000..51ef1da --- /dev/null +++ b/external/boost/test/utils/runtime/cla/named_parameter.hpp @@ -0,0 +1,93 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// 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 + +#include +#include + +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 + 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 +class named_parameter_t : public basic_parameter { + typedef basic_parameter 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 + +#endif + +#endif // BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/named_parameter.ipp b/external/boost/test/utils/runtime/cla/named_parameter.ipp new file mode 100644 index 0000000..77f69aa --- /dev/null +++ b/external/boost/test/utils/runtime/cla/named_parameter.ipp @@ -0,0 +1,129 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include +#include + +// Boost.Test +#include + +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() ) +, m_guess_name( false ) +{ + assign_op( p_prefix.value, BOOST_RT_PARAM_CSTRING_LITERAL( "-" ), 0 ); +} + +//____________________________________________________________________________// + +BOOST_RT_PARAM_INLINE bool +string_name_policy::responds_to( cstring name ) const +{ + std::pair mm_pos; + + mm_pos = unit_test::mismatch( name.begin(), name.end(), p_name->begin(), p_name->end() ); + + return mm_pos.first == name.end() && (m_guess_name || (mm_pos.second == p_name->end()) ); +} + +//____________________________________________________________________________// + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable:4244) +#endif + +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( id ); + + if( p_name->empty() || snp.p_name->empty() ) + return false; + + if( p_prefix != snp.p_prefix ) + return false; + + std::pair mm_pos = + unit_test::mismatch( p_name->begin(), p_name->end(), snp.p_name->begin(), snp.p_name->end() ); + + return mm_pos.first != p_name->begin() && // there is common substring + ((m_guess_name && (mm_pos.second == snp.p_name->end()) ) || // that match other guy and I am guessing + (snp.m_guess_name && (mm_pos.first == p_name->end()) )); // or me and the other guy is + } + + if( id.p_type_id == rtti::type_id() ) { + char_name_policy const& cnp = static_cast( id ); + + return m_guess_name && + (p_prefix == cnp.p_prefix) && + unit_test::first_char( cstring( p_name ) ) == unit_test::first_char( cstring( cnp.p_name ) ); + } + + return false; +} + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +//____________________________________________________________________________// + +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 ); + + cstring in = tr.input(); + + std::pair mm_pos; + + mm_pos = unit_test::mismatch( in.begin(), in.end(), p_name->begin(), p_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 + +#endif // BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER diff --git a/external/boost/test/utils/runtime/cla/parameter.hpp b/external/boost/test/utils/runtime/cla/parameter.hpp new file mode 100644 index 0000000..58ec295 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/parameter.hpp @@ -0,0 +1,150 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// Description : defines model of formal parameter +// *************************************************************************** + +#ifndef BOOST_RT_CLA_PARAMETER_HPP_062604GER +#define BOOST_RT_CLA_PARAMETER_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +#include +#include +#include + +#include +#include +#include +#include + +// Boost.Test +#include + +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, bool optional_value = false ) + : p_optional( false ) + , p_multiplicable( false ) + , p_optional_value( optional_value ) + , m_id_policy( ID ) + , m_arg_factory( F ) + {} + + // Destructor + virtual ~parameter() {} + + unit_test::readwrite_property p_optional; + unit_test::readwrite_property p_multiplicable; + unit_test::readwrite_property p_optional_value; + unit_test::readwrite_property p_description; + + // parameter properties modification + template + 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 ) || + ((m_id_policy.p_type_id != p.m_id_policy.p_type_id) && 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 ); // !! can 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 +inline shared_ptr +operator-( shared_ptr p, Modifier const& m ) +{ + p->accept_modifier( m ); + + return p; +} + +//____________________________________________________________________________// + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/parser.hpp b/external/boost/test/utils/runtime/cla/parser.hpp new file mode 100644 index 0000000..5c3c341 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/parser.hpp @@ -0,0 +1,153 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include +#include + +#include +#include +#include + +// Boost +#include + +// STL +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** runtime::cla::parser ************** // +// ************************************************************************** // + +namespace cla_detail { + +template +class global_mod_parser { +public: + global_mod_parser( parser& p, Modifier const& m ) + : m_parser( p ) + , m_modifiers( m ) + {} + + template + global_mod_parser const& + operator<<( shared_ptr 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::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 + cla_detail::global_mod_parser + 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( *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 + T const& get( cstring string_id ) const + { + return arg_value( valid_argument( string_id ) ); + } + + template + void get( cstring string_id, boost::optional& res ) const + { + const_argument_ptr actual_arg = (*this)[string_id]; + + if( actual_arg ) + res = arg_value( *actual_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 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 + +#endif + +#endif // BOOST_RT_CLA_PARSER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/parser.ipp b/external/boost/test/utils/runtime/cla/parser.ipp new file mode 100644 index 0000000..995411a --- /dev/null +++ b/external/boost/test/utils/runtime/cla/parser.ipp @@ -0,0 +1,258 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 +#include +#include + +#include +#include +#include +#include +#include + +// Boost.Test +#include +#include + +// Boost +#include + +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 ), + 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 != static_cast(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; + } + } + + return found_param ? found_param->actual_argument() : argument_ptr(); +} + +//____________________________________________________________________________// + +BOOST_RT_PARAM_INLINE cstring +parser::get( cstring string_id ) const +{ + return get( 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( "" ), 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 + +#endif // BOOST_RT_CLA_PARSER_IPP_062904GER diff --git a/external/boost/test/utils/runtime/cla/typed_parameter.hpp b/external/boost/test/utils/runtime/cla/typed_parameter.hpp new file mode 100644 index 0000000..2d2e02e --- /dev/null +++ b/external/boost/test/utils/runtime/cla/typed_parameter.hpp @@ -0,0 +1,70 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 54633 $ +// +// 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 + +#include +#include + +#include +#include + +// Boost.Test +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +// ************************************************************************** // +// ************** runtime::cla::typed_parameter ************** // +// ************************************************************************** // + +template +class typed_parameter : public cla::parameter { +public: + explicit typed_parameter( identification_policy& ID ) + : cla::parameter( ID, m_arg_factory, rtti::type_id() == rtti::type_id() ) + {} + + // parameter properties modification + template + 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( "can't define a value generator for optional parameter " ) << id_2_report() ); + } + +private: + // Data members + typed_argument_factory m_arg_factory; +}; + +} // namespace cla + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/validation.hpp b/external/boost/test/utils/runtime/cla/validation.hpp new file mode 100644 index 0000000..6b2fea9 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/validation.hpp @@ -0,0 +1,55 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : input validation helpers definition +// *************************************************************************** + +#ifndef BOOST_RT_CLA_VALIDATION_HPP_062604GER +#define BOOST_RT_CLA_VALIDATION_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +#include + +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 + +#endif + +#endif // BOOST_RT_CLA_VALIDATION_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/validation.ipp b/external/boost/test/utils/runtime/cla/validation.ipp new file mode 100644 index 0000000..8cde449 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/validation.ipp @@ -0,0 +1,65 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : input validation helpers implementation +// *************************************************************************** + +#ifndef BOOST_RT_CLA_VALIDATION_IPP_070604GER +#define BOOST_RT_CLA_VALIDATION_IPP_070604GER + +// Boost.Runtime.Parameter +#include + +#include +#include +#include // BOOST_RT_PARAM_NAMESPACE::logic_error + +// Boost +#include + +// 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 + +#endif // BOOST_RT_CLA_VALIDATION_IPP_070604GER diff --git a/external/boost/test/utils/runtime/cla/value_generator.hpp b/external/boost/test/utils/runtime/cla/value_generator.hpp new file mode 100644 index 0000000..1851592 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/value_generator.hpp @@ -0,0 +1,81 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : specific value generators +// *************************************************************************** + +#ifndef BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER +#define BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +#include +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +namespace rt_cla_detail { + +// ************************************************************************** // +// ************** runtime::cla::const_generator ************** // +// ************************************************************************** // + +template +class const_generator { +public: + // Constructor + explicit const_generator( T const& t ) : m_const_value( t ) {} + + // generator interface + void operator()( parser const&, boost::optional& t ) const { t = m_const_value; } + +private: + // Data members + T m_const_value; +}; + +// ************************************************************************** // +// ************** runtime::cla::ref_generator ************** // +// ************************************************************************** // + +template +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 ) 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 + +#endif // BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER diff --git a/external/boost/test/utils/runtime/cla/value_handler.hpp b/external/boost/test/utils/runtime/cla/value_handler.hpp new file mode 100644 index 0000000..2bc74b2 --- /dev/null +++ b/external/boost/test/utils/runtime/cla/value_handler.hpp @@ -0,0 +1,57 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : specific value handlers +// *************************************************************************** + +#ifndef BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER +#define BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace cla { + +namespace rt_cla_detail { + +// ************************************************************************** // +// ************** runtime::cla::assigner ************** // +// ************************************************************************** // + +template +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 + +#endif // BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/config.hpp b/external/boost/test/utils/runtime/config.hpp new file mode 100644 index 0000000..3f3ede8 --- /dev/null +++ b/external/boost/test/utils/runtime/config.hpp @@ -0,0 +1,156 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : Runtime.Param library configuration +// *************************************************************************** + +#ifndef BOOST_RT_CONFIG_HPP_062604GER +#define BOOST_RT_CONFIG_HPP_062604GER + +// Boost +#include +#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 +#include +#include +#include // operator<<(boost::runtime::cstring) + +// STL +#include +#include + +//____________________________________________________________________________// + +#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 + +#ifdef __SUNPRO_CC +extern int putenv(char*); +#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 out_stream; +#endif + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4996) // putenv +#endif + +#ifndef UNDER_CE +#if defined(__COMO__) && 0 +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( fs.str().c_str() ) ); +} +#endif +#endif + +#ifdef BOOST_MSVC +#pragma warning(pop) +#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 ::boost::BOOST_RT_PARAM_NAMESPACE::putenv_impl +#define BOOST_RT_PARAM_EXCEPTION_INHERIT_STD + +//____________________________________________________________________________// + +# else + +typedef wchar_t char_type; +typedef std::basic_string dstring; +typedef unit_test::basic_cstring cstring; +typedef const unit_test::basic_cstring literal_cstring; +typedef wrap_wstringstream format_stream; +typedef std::wostream out_stream; + +#ifndef UNDER_CE +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( fs.str().c_str() ) ); +} +#endif + +#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 + +#endif // BOOST_RT_CONFIG_HPP_062604GER diff --git a/external/boost/test/utils/runtime/env/environment.hpp b/external/boost/test/utils/runtime/env/environment.hpp new file mode 100644 index 0000000..f5e88a2 --- /dev/null +++ b/external/boost/test/utils/runtime/env/environment.hpp @@ -0,0 +1,172 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : defines and implements inline model of program environment +// *************************************************************************** + +#ifndef BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER +#define BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER + +#ifdef UNDER_CE +#error Windows CE does not support environment variables. +#endif + +// Boost.Runtime.Parameter +#include +#include +#include +#include + +#include +#include +#include + +// Boost.Test +#include + +// Boost +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +// ************************************************************************** // +// ************** runtime::environment implementation ************** // +// ************************************************************************** // + +namespace environment { + +namespace rt_env_detail { + +template +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 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( new_vd ) ); + + arg_value( *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( new_vd ) ); + + nfp::optionally_assign( arg_value( *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 + inline variable + var( cstring var_name ) + { + rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name ); + + return environment::variable( !vd ? rt_env_detail::init_new_var( var_name, nfp::no_params ) : *vd ); + } + + //________________________________________________________________________// + + template + inline variable + var( cstring var_name, Modifiers const& m ) + { + rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name ); + + return environment::variable( !vd ? rt_env_detail::init_new_var( var_name, m ) : *vd ); + } + + //________________________________________________________________________// + + // direct variable value access + inline cstring + get( cstring var_name ) + { + return environment::var( var_name ).value(); + } + + //________________________________________________________________________// + + template + inline T const& + get( cstring var_name ) + { + return environment::var( var_name ).value(); + } + + //________________________________________________________________________// + + template + inline void + get( cstring var_name, boost::optional& res ) + { + variable const& v = environment::var( 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 + +#endif + +#endif // BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER diff --git a/external/boost/test/utils/runtime/env/environment.ipp b/external/boost/test/utils/runtime/env/environment.ipp new file mode 100644 index 0000000..0a4afe8 --- /dev/null +++ b/external/boost/test/utils/runtime/env/environment.ipp @@ -0,0 +1,125 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// Description : implements model of program environment +// *************************************************************************** + +#ifndef BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER +#define BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER + +// Boost.Runtime.Parameter +#include +#include + +#include + +// Boost.Test +#include +#include + +// STL +#include +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace environment { + +// ************************************************************************** // +// ************** runtime::environment ************** // +// ************************************************************************** // + +namespace rt_env_detail { + +typedef std::map registry; +typedef std::list 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); +} + +//____________________________________________________________________________// + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4996) // getenv +#endif + +BOOST_RT_PARAM_INLINE cstring +sys_read_var( cstring var_name ) +{ + using namespace std; + return BOOST_RT_PARAM_GETENV( var_name.begin() ); +} + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +//____________________________________________________________________________// + +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 + +#endif // BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER diff --git a/external/boost/test/utils/runtime/env/fwd.hpp b/external/boost/test/utils/runtime/env/fwd.hpp new file mode 100644 index 0000000..0808d0e --- /dev/null +++ b/external/boost/test/utils/runtime/env/fwd.hpp @@ -0,0 +1,54 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : environment subsystem forward declarations +// *************************************************************************** + +#ifndef BOOST_RT_ENV_FWD_HPP_062604GER +#define BOOST_RT_ENV_FWD_HPP_062604GER + +#ifdef UNDER_CE +#error Windows CE does not support environment variables. +#endif + +// Boost.Runtime.Parameter +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace environment { + +class variable_base; +variable_base var( cstring var_name ); + +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 ); + +} + +template class variable; + +} // namespace environment + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_ENV_FWD_HPP_062604GER diff --git a/external/boost/test/utils/runtime/env/modifier.hpp b/external/boost/test/utils/runtime/env/modifier.hpp new file mode 100644 index 0000000..4204d0b --- /dev/null +++ b/external/boost/test/utils/runtime/env/modifier.hpp @@ -0,0 +1,47 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Use, modification, and distribution are subject to the +// Boost Software License, Version 1.0. (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$ +// +// Version : $Revision: 49312 $ +// +// Description : defines variable modifiers +// *************************************************************************** + +#ifndef BOOST_RT_ENV_MODIFIER_HPP_062604GER +#define BOOST_RT_ENV_MODIFIER_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +// Boost.Test +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace environment { + +// ************************************************************************** // +// ************** environment variable modifiers ************** // +// ************************************************************************** // + +namespace { + +nfp::typed_keyword global_id; +nfp::keyword default_value; +nfp::keyword interpreter; + +} // local namespace +} // namespace environment + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_ENV_MODIFIER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/env/variable.hpp b/external/boost/test/utils/runtime/env/variable.hpp new file mode 100644 index 0000000..740745d --- /dev/null +++ b/external/boost/test/utils/runtime/env/variable.hpp @@ -0,0 +1,223 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 54633 $ +// +// Description : defines model of program environment variable +// *************************************************************************** + +#ifndef BOOST_RT_ENV_VARIABLE_HPP_062604GER +#define BOOST_RT_ENV_VARIABLE_HPP_062604GER + +#ifdef UNDER_CE +#error Windows CE does not support environment variables. +#endif + +// Boost.Runtime.Parameter +#include +#include +#include +#include + +#include + +// Boost +#include + +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 + T const& value() const + { + return arg_value( *m_data->m_value ); + } + + template + void value( boost::optional& res ) const + { + if( has_value() ) + res = arg_value( *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 +class variable : public variable_base { +public: + // Constructors + explicit variable( cstring var_name ); + + template + 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(); } + +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) || \ + BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0593)) + template + void value( boost::optional& res ) const { variable_base::value( res ); } +#else + using variable_base::value; +#endif + + // Value assignment + template + void operator=( V const& v ) + { + if( !has_value() ) + m_data->m_value.reset( new typed_argument( *m_data ) ); + + arg_value( *m_data->m_value ) = v; + + rt_env_detail::sys_write_var( m_data->m_var_name, format_stream().ref() << value() ); + } +}; // class variable + +//____________________________________________________________________________// + +template +inline std::basic_ostream& +operator<<( std::basic_ostream& os, variable const& v ) +{ + os << v.name() << '='; + + if( v.has_value() ) + os << v.value(); + + return os; +} + +//____________________________________________________________________________// + +template +inline bool +operator==( variable ev, V const& v ) +{ + return ev.has_value() && ev.value() == v; +} + +//____________________________________________________________________________// + +template +inline bool +operator==( V const& v, variable ev ) +{ + return ev.has_value() && ev.value() == v; +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( variable ev, V const& v ) +{ + return !ev.has_value() || ev.value() != v; +} + +//____________________________________________________________________________// + +template +inline bool +operator!=( V const& v, variable ev ) +{ + return !ev.has_value() || ev.value() != v; +} + +//____________________________________________________________________________// + +} // namespace environment + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +// ************************************************************************** // +// ************************************************************************** // +// Implementation + +#include + +// ************************************************************************** // +// ************** runtime::environment::variable ************** // +// ************************************************************************** // + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +namespace environment { + +template +variable::variable( cstring var_name ) +: variable_base( environment::var( var_name ) ) +{} + +//____________________________________________________________________________// + +template +template +variable::variable( cstring var_name, Modifiers const& m ) +: variable_base( environment::var( var_name, m ) ) +{} + +//____________________________________________________________________________// + +} // namespace environment + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_ENV_VARIABLE_HPP_062604GER diff --git a/external/boost/test/utils/runtime/fwd.hpp b/external/boost/test/utils/runtime/fwd.hpp new file mode 100644 index 0000000..8d298d7 --- /dev/null +++ b/external/boost/test/utils/runtime/fwd.hpp @@ -0,0 +1,41 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : global framework level forward declaration +// *************************************************************************** + +#ifndef BOOST_RT_FWD_HPP_062604GER +#define BOOST_RT_FWD_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +// Boost +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +class parameter; + +class argument; +typedef shared_ptr argument_ptr; +typedef shared_ptr const_argument_ptr; + +template class value_interpreter; +template class typed_argument; + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_FWD_HPP_062604GER diff --git a/external/boost/test/utils/runtime/interpret_argument_value.hpp b/external/boost/test/utils/runtime/interpret_argument_value.hpp new file mode 100644 index 0000000..cbf752d --- /dev/null +++ b/external/boost/test/utils/runtime/interpret_argument_value.hpp @@ -0,0 +1,163 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 +#include + +// Boost.Test +#include +#include + +// Boost +#include +#include + +// STL +// !! could we eliminate these includes? +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +// ************************************************************************** // +// ************** runtime::interpret_argument_value ************** // +// ************************************************************************** // +// returns true if source is used false otherwise + +// generic case +template +struct interpret_argument_value_impl { + static bool _( cstring source, boost::optional& res ) + { + BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl<" << typeid(T).name() << ">" ); + + res = lexical_cast( source ); + + BOOST_RT_PARAM_TRACE( "String " << source << " is interpreted as " << *res ); + return true; + } +}; + + +//____________________________________________________________________________// + +// dstring case +template<> +struct interpret_argument_value_impl { + static bool _( cstring source, boost::optional& res ) + { + BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl" ); + + res = dstring(); + assign_op( *res, source, 0 ); + + return true; + } +}; + +//____________________________________________________________________________// + +// cstring case +template<> +struct interpret_argument_value_impl { + static bool _( cstring source, boost::optional& res ) + { + BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl" ); + + res = source; + + return true; + } +}; + +//____________________________________________________________________________// + +// specialization for type bool +template<> +struct interpret_argument_value_impl { + static bool _( cstring source, boost::optional& res ) + { + BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl" ); + + 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 +inline bool +interpret_argument_value( cstring source, boost::optional& res, long ) +{ + return interpret_argument_value_impl::_( source, res ); +} + +//____________________________________________________________________________// + +// specialization for list of values +template +inline bool +interpret_argument_value( cstring source, boost::optional >& res, int ) +{ + BOOST_RT_PARAM_TRACE( "In interpret_argument_value>" ); + + res = std::list(); + + 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 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 + +#endif // BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER diff --git a/external/boost/test/utils/runtime/parameter.hpp b/external/boost/test/utils/runtime/parameter.hpp new file mode 100644 index 0000000..9baf561 --- /dev/null +++ b/external/boost/test/utils/runtime/parameter.hpp @@ -0,0 +1,38 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : abstract interface for the formal parameter +// *************************************************************************** + +#ifndef BOOST_RT_PARAMETER_HPP_062604GER +#define BOOST_RT_PARAMETER_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +namespace boost { + +namespace BOOST_RT_PARAM_NAMESPACE { + +// ************************************************************************** // +// ************** runtime::parameter ************** // +// ************************************************************************** // + +class parameter { +public: + virtual ~parameter() {} +}; + +} // namespace BOOST_RT_PARAM_NAMESPACE + +} // namespace boost + +#endif // BOOST_RT_PARAMETER_HPP_062604GER diff --git a/external/boost/test/utils/runtime/trace.hpp b/external/boost/test/utils/runtime/trace.hpp new file mode 100644 index 0000000..ba15eb6 --- /dev/null +++ b/external/boost/test/utils/runtime/trace.hpp @@ -0,0 +1,30 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : optional internal tracing +// *************************************************************************** + +#ifndef BOOST_RT_TRACE_HPP_062604GER +#define BOOST_RT_TRACE_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +#ifdef BOOST_RT_PARAM_DEBUG + +#include + +# define BOOST_RT_PARAM_TRACE( str ) std::cerr << str << std::endl +#else +# define BOOST_RT_PARAM_TRACE( str ) +#endif + +#endif // BOOST_RT_TRACE_HPP_062604GER diff --git a/external/boost/test/utils/runtime/validation.hpp b/external/boost/test/utils/runtime/validation.hpp new file mode 100644 index 0000000..ff8e469 --- /dev/null +++ b/external/boost/test/utils/runtime/validation.hpp @@ -0,0 +1,82 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : defines exceptions and validation tools +// *************************************************************************** + +#ifndef BOOST_RT_VALIDATION_HPP_062604GER +#define BOOST_RT_VALIDATION_HPP_062604GER + +// Boost.Runtime.Parameter +#include + +// Boost.Test +#include + +// Boost +#include + +// STL +#ifdef BOOST_RT_PARAM_EXCEPTION_INHERIT_STD +#include +#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_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 + +#endif // BOOST_RT_VALIDATION_HPP_062604GER diff --git a/external/boost/test/utils/trivial_singleton.hpp b/external/boost/test/utils/trivial_singleton.hpp new file mode 100644 index 0000000..1ce7797 --- /dev/null +++ b/external/boost/test/utils/trivial_singleton.hpp @@ -0,0 +1,74 @@ +// (C) Copyright Gennadiy Rozental 2005-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// Description : simple helpers for creating cusom output manipulators +// *************************************************************************** + +#ifndef BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER +#define BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER + +#include +#include + +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** singleton ************** // +// ************************************************************************** // + +template +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() {} \ +/**/ + +#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 + +#endif // BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER diff --git a/external/boost/test/utils/wrap_stringstream.hpp b/external/boost/test/utils/wrap_stringstream.hpp new file mode 100644 index 0000000..a3eaff1 --- /dev/null +++ b/external/boost/test/utils/wrap_stringstream.hpp @@ -0,0 +1,164 @@ +// (C) Copyright Gennadiy Rozental 2002-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 49312 $ +// +// 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 + +// STL +#ifdef BOOST_NO_STRINGSTREAM +#include // for std::ostrstream +#else +#include // for std::ostringstream +#endif // BOOST_NO_STRINGSTREAM + +#include + +//____________________________________________________________________________// + +namespace boost { + +// ************************************************************************** // +// ************** basic_wrap_stringstream ************** // +// ************************************************************************** // + +template +class basic_wrap_stringstream { +public: +#if defined(BOOST_CLASSIC_IOSTREAMS) + typedef std::ostringstream wrapped_stream; +#elif defined(BOOST_NO_STRINGSTREAM) + typedef std::basic_ostrstream wrapped_stream; +#else + typedef std::basic_ostringstream wrapped_stream; +#endif // BOOST_NO_STRINGSTREAM + // Access methods + basic_wrap_stringstream& ref(); + wrapped_stream& stream(); + std::basic_string const& str(); + +private: + // Data members + wrapped_stream m_stream; + std::basic_string m_str; +}; + +//____________________________________________________________________________// + +template +inline basic_wrap_stringstream& +operator<<( basic_wrap_stringstream& targ, T const& t ) +{ + targ.stream() << t; + return targ; +} + +//____________________________________________________________________________// + +template +inline typename basic_wrap_stringstream::wrapped_stream& +basic_wrap_stringstream::stream() +{ + return m_stream; +} + +//____________________________________________________________________________// + +template +inline basic_wrap_stringstream& +basic_wrap_stringstream::ref() +{ + return *this; +} + +//____________________________________________________________________________// + +template +inline std::basic_string const& +basic_wrap_stringstream::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 +inline basic_wrap_stringstream& +operator<<( basic_wrap_stringstream& targ, basic_wrap_stringstream& src ) +{ + targ << src.str(); + return targ; +} + +//____________________________________________________________________________// + +#if BOOST_TEST_USE_STD_LOCALE + +template +inline basic_wrap_stringstream& +operator<<( basic_wrap_stringstream& targ, std::ios_base& (BOOST_TEST_CALL_DECL *man)(std::ios_base&) ) +{ + targ.stream() << man; + return targ; +} + +//____________________________________________________________________________// + +template +inline basic_wrap_stringstream& +operator<<( basic_wrap_stringstream& targ, std::basic_ostream& (BOOST_TEST_CALL_DECL *man)(std::basic_ostream&) ) +{ + targ.stream() << man; + return targ; +} + +//____________________________________________________________________________// + +template +inline basic_wrap_stringstream& +operator<<( basic_wrap_stringstream& targ, std::basic_ios& (BOOST_TEST_CALL_DECL *man)(std::basic_ios&) ) +{ + targ.stream() << man; + return targ; +} + +//____________________________________________________________________________// + +#endif + +// ************************************************************************** // +// ************** wrap_stringstream ************** // +// ************************************************************************** // + +typedef basic_wrap_stringstream wrap_stringstream; +typedef basic_wrap_stringstream wrap_wstringstream; + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_WRAP_STRINGSTREAM_HPP_071894GER diff --git a/external/boost/test/utils/xml_printer.hpp b/external/boost/test/utils/xml_printer.hpp new file mode 100644 index 0000000..7fd851d --- /dev/null +++ b/external/boost/test/utils/xml_printer.hpp @@ -0,0 +1,118 @@ +// (C) Copyright Gennadiy Rozental 2004-2008. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/test for the library home page. +// +// File : $RCSfile$ +// +// Version : $Revision: 57992 $ +// +// 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 +#include +#include +#include +#include + +// Boost +#include + +// STL +#include + +#include + +//____________________________________________________________________________// + +namespace boost { + +namespace unit_test { + +// ************************************************************************** // +// ************** xml print helpers ************** // +// ************************************************************************** // + +inline void +print_escaped( std::ostream& where_to, const_string value ) +{ + static fixed_mapping 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 +inline void +print_escaped( std::ostream& where_to, T const& value ) +{ + where_to << value; +} + +//____________________________________________________________________________// + +typedef custom_manip attr_value; + +template +inline std::ostream& +operator<<( custom_printer const& p, T const& value ) +{ + *p << "=\""; + print_escaped( *p, value ); + *p << '"'; + + return *p; +} + +//____________________________________________________________________________// + +typedef custom_manip cdata; + +inline std::ostream& +operator<<( custom_printer const& p, const_string value ) +{ + return *p << BOOST_TEST_L( "" ); +} + +//____________________________________________________________________________// + +} // namespace unit_test + +} // namespace boost + +//____________________________________________________________________________// + +#include + +#endif // BOOST_TEST_XML_PRINTER_HPP_071894GER diff --git a/external/boost/thread/condition.hpp b/external/boost/thread/condition.hpp new file mode 100644 index 0000000..35b879f --- /dev/null +++ b/external/boost/thread/condition.hpp @@ -0,0 +1,16 @@ +#ifndef BOOST_THREAD_CONDITION_HPP +#define BOOST_THREAD_CONDITION_HPP +// (C) Copyright 2007 Anthony Williams +// +// Distributed under the 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 + +namespace boost +{ + typedef condition_variable_any condition; +} + +#endif diff --git a/external/boost/thread/condition_variable.hpp b/external/boost/thread/condition_variable.hpp new file mode 100644 index 0000000..8f8e9f2 --- /dev/null +++ b/external/boost/thread/condition_variable.hpp @@ -0,0 +1,21 @@ +#ifndef BOOST_THREAD_CONDITION_VARIABLE_HPP +#define BOOST_THREAD_CONDITION_VARIABLE_HPP + +// condition_variable.hpp +// +// (C) Copyright 2007 Anthony Williams +// +// Distributed under the 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 +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +#include +#else +#error "Boost threads unavailable on this platform" +#endif + +#endif diff --git a/external/boost/thread/detail/config.hpp b/external/boost/thread/detail/config.hpp new file mode 100644 index 0000000..b595506 --- /dev/null +++ b/external/boost/thread/detail/config.hpp @@ -0,0 +1,115 @@ +// 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 +#include + + +#if !defined BOOST_THREAD_VERSION +#define BOOST_THREAD_VERSION 1 +#else +#if BOOST_THREAD_VERSION!=1 && BOOST_THREAD_VERSION!=2 +#error "BOOST_THREAD_VERSION must be 1 or 2" +#endif +#endif + +#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 + +#include "platform.hpp" + +// provided for backwards compatibility, since this +// macro was used for several releases by mistake. +#if defined(BOOST_THREAD_DYN_DLL) +# define BOOST_THREAD_DYN_LINK +#endif + +// compatibility with the rest of Boost's auto-linking code: +#if defined(BOOST_THREAD_DYN_LINK) || 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_THREAD_PLATFORM_WIN32) +# 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 BOOST_SYMBOL_EXPORT +//# define BOOST_THREAD_DECL __declspec(dllexport) + +# elif defined(BOOST_THREAD_USE_DLL) //Use dll +# define BOOST_THREAD_DECL BOOST_SYMBOL_IMPORT +//# define BOOST_THREAD_DECL __declspec(dllimport) +# else +# define BOOST_THREAD_DECL +# endif +#elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# define BOOST_THREAD_DECL BOOST_SYMBOL_VISIBLE + +#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 +#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/external/boost/thread/detail/move.hpp b/external/boost/thread/detail/move.hpp new file mode 100644 index 0000000..665a0b5 --- /dev/null +++ b/external/boost/thread/detail/move.hpp @@ -0,0 +1,66 @@ +// Distributed under the 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 2007-8 Anthony Williams + +#ifndef BOOST_THREAD_MOVE_HPP +#define BOOST_THREAD_MOVE_HPP + +#include +#ifndef BOOST_NO_SFINAE +#include +#include +#include +#endif + +#include + +#include + +namespace boost +{ + + namespace detail + { + template + struct thread_move_t + { + T& t; + explicit thread_move_t(T& t_): + t(t_) + {} + + T& operator*() const + { + return t; + } + + T* operator->() const + { + return &t; + } + private: + void operator=(thread_move_t&); + }; + } + +#ifndef BOOST_NO_SFINAE + template + typename enable_if >, boost::detail::thread_move_t >::type move(T& t) + { + return boost::detail::thread_move_t(t); + } +#endif + + template + boost::detail::thread_move_t move(boost::detail::thread_move_t t) + { + return t; + } + + +} + +#include + +#endif diff --git a/external/boost/thread/detail/platform.hpp b/external/boost/thread/detail/platform.hpp new file mode 100644 index 0000000..58601b0 --- /dev/null +++ b/external/boost/thread/detail/platform.hpp @@ -0,0 +1,71 @@ +// Copyright 2006 Roland Schwarz. +// (C) Copyright 2007 Anthony Williams +// Distributed under the 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 work is a reimplementation along the design and ideas +// of William E. Kempf. + +#ifndef BOOST_THREAD_RS06040501_HPP +#define BOOST_THREAD_RS06040501_HPP + +// fetch compiler and platform configuration +#include + +// insist on threading support being available: +#include + +// choose platform +#if defined(linux) || defined(__linux) || defined(__linux__) +# define BOOST_THREAD_LINUX +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_THREAD_BSD +#elif defined(sun) || defined(__sun) +# define BOOST_THREAD_SOLARIS +#elif defined(__sgi) +# define BOOST_THREAD_IRIX +#elif defined(__hpux) +# define BOOST_THREAD_HPUX +#elif defined(__CYGWIN__) +# define BOOST_THREAD_CYGWIN +#elif (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(BOOST_DISABLE_WIN32) +# define BOOST_THREAD_WIN32 +#elif defined(__BEOS__) +# define BOOST_THREAD_BEOS +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +# define BOOST_THREAD_MACOS +#elif defined(__IBMCPP__) || defined(_AIX) +# define BOOST_THREAD_AIX +#elif defined(__amigaos__) +# define BOOST_THREAD_AMIGAOS +#elif defined(__QNXNTO__) +# define BOOST_THREAD_QNXNTO +#elif defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE) +# if defined(BOOST_HAS_PTHREADS) && !defined(BOOST_THREAD_POSIX) +# define BOOST_THREAD_POSIX +# endif +#endif + +// For every supported platform add a new entry into the dispatch table below. +// BOOST_THREAD_POSIX is tested first, so on platforms where posix and native +// threading is available, the user may choose, by defining BOOST_THREAD_POSIX +// in her source. If a platform is known to support pthreads and no native +// port of boost_thread is available just specify "pthread" in the +// dispatcher table. If there is no entry for a platform but pthreads is +// available on the platform, pthread is choosen as default. If nothing is +// available the preprocessor will fail with a diagnostic message. + +#if defined(BOOST_THREAD_POSIX) +# define BOOST_THREAD_PLATFORM_PTHREAD +#else +# if defined(BOOST_THREAD_WIN32) +# define BOOST_THREAD_PLATFORM_WIN32 +# elif defined(BOOST_HAS_PTHREADS) +# define BOOST_THREAD_PLATFORM_PTHREAD +# else +# error "Sorry, no boost threads are available for this platform." +# endif +#endif + +#endif // BOOST_THREAD_RS06040501_HPP diff --git a/external/boost/thread/detail/thread.hpp b/external/boost/thread/detail/thread.hpp new file mode 100644 index 0000000..7ac342b --- /dev/null +++ b/external/boost/thread/detail/thread.hpp @@ -0,0 +1,548 @@ +#ifndef BOOST_THREAD_THREAD_COMMON_HPP +#define BOOST_THREAD_THREAD_COMMON_HPP +// Distributed under the 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 2007-10 Anthony Williams + +#include +#ifndef BOOST_NO_IOSTREAM +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4251) +#endif + +namespace boost +{ + namespace detail + { + template + class thread_data: + public detail::thread_data_base + { + public: +#ifndef BOOST_NO_RVALUE_REFERENCES + thread_data(F&& f_): + f(static_cast(f_)) + {} + thread_data(F& f_): + f(f_) + {} +#else + thread_data(F f_): + f(f_) + {} + thread_data(detail::thread_move_t f_): + f(f_) + {} +#endif + void run() + { + f(); + } + private: + F f; + + void operator=(thread_data&); + thread_data(thread_data&); + }; + + template + class thread_data >: + public detail::thread_data_base + { + private: + F& f; + + void operator=(thread_data&); + thread_data(thread_data&); + public: + thread_data(boost::reference_wrapper f_): + f(f_) + {} + + void run() + { + f(); + } + }; + + template + class thread_data >: + public detail::thread_data_base + { + private: + F& f; + void operator=(thread_data&); + thread_data(thread_data&); + public: + thread_data(const boost::reference_wrapper f_): + f(f_) + {} + + void run() + { + f(); + } + }; + } + + class BOOST_THREAD_DECL thread + { + private: + thread(thread&); + thread& operator=(thread&); + + void release_handle(); + + detail::thread_data_ptr thread_info; + + void start_thread(); + + explicit thread(detail::thread_data_ptr data); + + detail::thread_data_ptr get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const; + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + static inline detail::thread_data_ptr make_thread_info(F&& f) + { + return detail::thread_data_ptr(detail::heap_new::type> >(static_cast(f))); + } + static inline detail::thread_data_ptr make_thread_info(void (*f)()) + { + return detail::thread_data_ptr(detail::heap_new >(static_cast(f))); + } +#else + template + static inline detail::thread_data_ptr make_thread_info(F f) + { + return detail::thread_data_ptr(detail::heap_new >(f)); + } + template + static inline detail::thread_data_ptr make_thread_info(boost::detail::thread_move_t f) + { + return detail::thread_data_ptr(detail::heap_new >(f)); + } + +#endif + struct dummy; + public: +#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) + thread(const volatile thread&); +#endif + thread(); + ~thread(); + +#ifndef BOOST_NO_RVALUE_REFERENCES +#ifdef BOOST_MSVC + template + explicit thread(F f,typename disable_if >, dummy* >::type=0): + thread_info(make_thread_info(static_cast(f))) + { + start_thread(); + } +#else + template + thread(F&& f): + thread_info(make_thread_info(static_cast(f))) + { + start_thread(); + } +#endif + + thread(thread&& other) + { + thread_info.swap(other.thread_info); + } + + thread& operator=(thread&& other) + { + thread_info=other.thread_info; + other.thread_info.reset(); + return *this; + } + + thread&& move() + { + return static_cast(*this); + } + +#else +#ifdef BOOST_NO_SFINAE + template + explicit thread(F f): + thread_info(make_thread_info(f)) + { + start_thread(); + } +#else + template + explicit thread(F f,typename disable_if >, dummy* >::type=0): + thread_info(make_thread_info(f)) + { + start_thread(); + } +#endif + + template + explicit thread(detail::thread_move_t f): + thread_info(make_thread_info(f)) + { + start_thread(); + } + + thread(detail::thread_move_t x) + { + thread_info=x->thread_info; + x->thread_info.reset(); + } + +#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) + thread& operator=(thread x) + { + swap(x); + return *this; + } +#else + thread& operator=(detail::thread_move_t x) + { + thread new_thread(x); + swap(new_thread); + return *this; + } +#endif + operator detail::thread_move_t() + { + return move(); + } + + detail::thread_move_t move() + { + detail::thread_move_t x(*this); + return x; + } + +#endif + + template + thread(F f,A1 a1): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1))) + { + start_thread(); + } + template + thread(F f,A1 a1,A2 a2): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3,A4 a4): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3,a4))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3,a4,a5))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3,a4,a5,a6))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3,a4,a5,a6,a7))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3,a4,a5,a6,a7,a8))) + { + start_thread(); + } + + template + thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9): + thread_info(make_thread_info(boost::bind(boost::type(),f,a1,a2,a3,a4,a5,a6,a7,a8,a9))) + { + start_thread(); + } + + void swap(thread& x) + { + thread_info.swap(x.thread_info); + } + + class BOOST_SYMBOL_VISIBLE id; + id get_id() const; + + + bool joinable() const; + void join(); + bool timed_join(const system_time& wait_until); + + template + inline bool timed_join(TimeDuration const& rel_time) + { + return timed_join(get_system_time()+rel_time); + } + void detach(); + + static unsigned hardware_concurrency(); + + typedef detail::thread_data_base::native_handle_type native_handle_type; + native_handle_type native_handle(); + + // backwards compatibility + bool operator==(const thread& other) const; + bool operator!=(const thread& other) const; + + static inline void yield() + { + this_thread::yield(); + } + + static inline void sleep(const system_time& xt) + { + this_thread::sleep(xt); + } + + // extensions + void interrupt(); + bool interruption_requested() const; + }; + + inline void swap(thread& lhs,thread& rhs) + { + return lhs.swap(rhs); + } + +#ifndef BOOST_NO_RVALUE_REFERENCES + inline thread&& move(thread& t) + { + return static_cast(t); + } + inline thread&& move(thread&& t) + { + return static_cast(t); + } +#else + inline detail::thread_move_t move(detail::thread_move_t t) + { + return t; + } +#endif + + namespace this_thread + { + thread::id BOOST_THREAD_DECL get_id(); + + void BOOST_THREAD_DECL interruption_point(); + bool BOOST_THREAD_DECL interruption_enabled(); + bool BOOST_THREAD_DECL interruption_requested(); + + inline BOOST_SYMBOL_VISIBLE void sleep(xtime const& abs_time) + { + sleep(system_time(abs_time)); + } + } + + class BOOST_SYMBOL_VISIBLE thread::id + { + private: + detail::thread_data_ptr thread_data; + + id(detail::thread_data_ptr thread_data_): + thread_data(thread_data_) + {} + friend class thread; + friend id BOOST_THREAD_DECL this_thread::get_id(); + public: + id(): + thread_data() + {} + + id(const id& other): + thread_data(other.thread_data) + {} + + bool operator==(const id& y) const + { + return thread_data==y.thread_data; + } + + bool operator!=(const id& y) const + { + return thread_data!=y.thread_data; + } + + bool operator<(const id& y) const + { + return thread_data(const id& y) const + { + return y.thread_data=(const id& y) const + { + return !(thread_data + friend BOOST_SYMBOL_VISIBLE + std::basic_ostream& + operator<<(std::basic_ostream& os, const id& x) + { + if(x.thread_data) + { + io::ios_flags_saver ifs( os ); + return os<< std::hex << x.thread_data; + } + else + { + return os<<"{Not-any-thread}"; + } + } +#else + template + BOOST_SYMBOL_VISIBLE + std::basic_ostream& + print(std::basic_ostream& os) const + { + if(thread_data) + { + return os< + BOOST_SYMBOL_VISIBLE + std::basic_ostream& + operator<<(std::basic_ostream& os, const thread::id& x) + { + return x.print(os); + } +#endif + + inline bool thread::operator==(const thread& other) const + { + return get_id()==other.get_id(); + } + + inline bool thread::operator!=(const thread& other) const + { + return get_id()!=other.get_id(); + } + + namespace detail + { + struct thread_exit_function_base + { + virtual ~thread_exit_function_base() + {} + virtual void operator()()=0; + }; + + template + struct thread_exit_function: + thread_exit_function_base + { + F f; + + thread_exit_function(F f_): + f(f_) + {} + + void operator()() + { + f(); + } + }; + + void BOOST_THREAD_DECL add_thread_exit_function(thread_exit_function_base*); + } + +#ifdef BOOST_NO_RVALUE_REFERENCES + template <> + struct has_move_emulation_enabled_aux + : BOOST_MOVE_BOOST_NS::integral_constant + {}; +#endif + + namespace this_thread + { + template + void at_thread_exit(F f) + { + detail::thread_exit_function_base* const thread_exit_func=detail::heap_new >(f); + detail::add_thread_exit_function(thread_exit_func); + } + } +} + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#include + +#endif diff --git a/external/boost/thread/detail/thread_group.hpp b/external/boost/thread/detail/thread_group.hpp new file mode 100644 index 0000000..f1ccdf8 --- /dev/null +++ b/external/boost/thread/detail/thread_group.hpp @@ -0,0 +1,108 @@ +#ifndef BOOST_THREAD_DETAIL_THREAD_GROUP_HPP +#define BOOST_THREAD_DETAIL_THREAD_GROUP_HPP +// Distributed under the 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 2007-9 Anthony Williams + +#include +#include +#include + +#include + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4251) +#endif + +namespace boost +{ + class thread_group + { + private: + thread_group(thread_group const&); + thread_group& operator=(thread_group const&); + public: + thread_group() {} + ~thread_group() + { + for(std::list::iterator it=threads.begin(),end=threads.end(); + it!=end; + ++it) + { + delete *it; + } + } + + template + thread* create_thread(F threadfunc) + { + boost::lock_guard guard(m); + std::auto_ptr new_thread(new thread(threadfunc)); + threads.push_back(new_thread.get()); + return new_thread.release(); + } + + void add_thread(thread* thrd) + { + if(thrd) + { + boost::lock_guard guard(m); + threads.push_back(thrd); + } + } + + void remove_thread(thread* thrd) + { + boost::lock_guard guard(m); + std::list::iterator const it=std::find(threads.begin(),threads.end(),thrd); + if(it!=threads.end()) + { + threads.erase(it); + } + } + + void join_all() + { + boost::shared_lock guard(m); + + for(std::list::iterator it=threads.begin(),end=threads.end(); + it!=end; + ++it) + { + (*it)->join(); + } + } + + void interrupt_all() + { + boost::shared_lock guard(m); + + for(std::list::iterator it=threads.begin(),end=threads.end(); + it!=end; + ++it) + { + (*it)->interrupt(); + } + } + + size_t size() const + { + boost::shared_lock guard(m); + return threads.size(); + } + + private: + std::list threads; + mutable shared_mutex m; + }; +} + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#include + +#endif diff --git a/external/boost/thread/detail/thread_heap_alloc.hpp b/external/boost/thread/detail/thread_heap_alloc.hpp new file mode 100644 index 0000000..2f9bfd5 --- /dev/null +++ b/external/boost/thread/detail/thread_heap_alloc.hpp @@ -0,0 +1,23 @@ +#ifndef BOOST_THREAD_THREAD_HEAP_ALLOC_HPP +#define BOOST_THREAD_THREAD_HEAP_ALLOC_HPP + +// thread_heap_alloc.hpp +// +// (C) Copyright 2008 Anthony Williams +// +// Distributed under the 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 + +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +#include +#else +#error "Boost threads unavailable on this platform" +#endif + + +#endif diff --git a/external/boost/thread/detail/thread_interruption.hpp b/external/boost/thread/detail/thread_interruption.hpp new file mode 100644 index 0000000..60c0e65 --- /dev/null +++ b/external/boost/thread/detail/thread_interruption.hpp @@ -0,0 +1,35 @@ +#ifndef BOOST_THREAD_DETAIL_THREAD_INTERRUPTION_HPP +#define BOOST_THREAD_DETAIL_THREAD_INTERRUPTION_HPP +// Distributed under the 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 2007-9 Anthony Williams + +namespace boost +{ + namespace this_thread + { + class BOOST_THREAD_DECL disable_interruption + { + disable_interruption(const disable_interruption&); + disable_interruption& operator=(const disable_interruption&); + + bool interruption_was_enabled; + friend class restore_interruption; + public: + disable_interruption(); + ~disable_interruption(); + }; + + class BOOST_THREAD_DECL restore_interruption + { + restore_interruption(const restore_interruption&); + restore_interruption& operator=(const restore_interruption&); + public: + explicit restore_interruption(disable_interruption& d); + ~restore_interruption(); + }; + } +} + +#endif diff --git a/external/boost/thread/detail/tss_hooks.hpp b/external/boost/thread/detail/tss_hooks.hpp new file mode 100644 index 0000000..b2ceece --- /dev/null +++ b/external/boost/thread/detail/tss_hooks.hpp @@ -0,0 +1,65 @@ +// (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 + +#include + +#if defined(BOOST_HAS_WINTHREADS) + +namespace boost +{ + BOOST_THREAD_DECL void __cdecl 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. + + BOOST_THREAD_DECL void __cdecl 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. + + BOOST_THREAD_DECL void __cdecl 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. + + BOOST_THREAD_DECL void __cdecl 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. + + void tss_cleanup_implemented(); + //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) + +#include + +#endif //!defined(BOOST_TLS_HOOKS_HPP) diff --git a/external/boost/thread/exceptions.hpp b/external/boost/thread/exceptions.hpp new file mode 100644 index 0000000..06ce04e --- /dev/null +++ b/external/boost/thread/exceptions.hpp @@ -0,0 +1,182 @@ +// Copyright (C) 2001-2003 +// William E. Kempf +// Copyright (C) 2007-9 Anthony Williams +// +// Distributed under the Boost Software 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 + +// 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 +#include + +#include + +namespace boost +{ + + class BOOST_SYMBOL_VISIBLE thread_interrupted + {}; + + class BOOST_SYMBOL_VISIBLE thread_exception: + public std::exception + { + protected: + thread_exception(): + m_sys_err(0) + {} + + thread_exception(int sys_err_code): + m_sys_err(sys_err_code) + {} + + + public: + ~thread_exception() throw() + {} + + + int native_error() const + { + return m_sys_err; + } + + + private: + int m_sys_err; + }; + + class BOOST_SYMBOL_VISIBLE condition_error: + public std::exception + { + public: + const char* what() const throw() + { + return "Condition error"; + } + }; + + + class BOOST_SYMBOL_VISIBLE lock_error: + public thread_exception + { + public: + lock_error() + {} + + lock_error(int sys_err_code): + thread_exception(sys_err_code) + {} + + ~lock_error() throw() + {} + + + virtual const char* what() const throw() + { + return "boost::lock_error"; + } + }; + + class BOOST_SYMBOL_VISIBLE thread_resource_error: + public thread_exception + { + public: + thread_resource_error() + {} + + thread_resource_error(int sys_err_code): + thread_exception(sys_err_code) + {} + + ~thread_resource_error() throw() + {} + + + virtual const char* what() const throw() + { + return "boost::thread_resource_error"; + } + + }; + + class BOOST_SYMBOL_VISIBLE unsupported_thread_option: + public thread_exception + { + public: + unsupported_thread_option() + {} + + unsupported_thread_option(int sys_err_code): + thread_exception(sys_err_code) + {} + + ~unsupported_thread_option() throw() + {} + + + virtual const char* what() const throw() + { + return "boost::unsupported_thread_option"; + } + + }; + + class BOOST_SYMBOL_VISIBLE invalid_thread_argument: + public thread_exception + { + public: + invalid_thread_argument() + {} + + invalid_thread_argument(int sys_err_code): + thread_exception(sys_err_code) + {} + + ~invalid_thread_argument() throw() + {} + + + virtual const char* what() const throw() + { + return "boost::invalid_thread_argument"; + } + + }; + + class BOOST_SYMBOL_VISIBLE thread_permission_error: + public thread_exception + { + public: + thread_permission_error() + {} + + thread_permission_error(int sys_err_code): + thread_exception(sys_err_code) + {} + + ~thread_permission_error() throw() + {} + + + virtual const char* what() const throw() + { + return "boost::thread_permission_error"; + } + + }; + +} // namespace boost + +#include + +#endif diff --git a/external/boost/thread/locks.hpp b/external/boost/thread/locks.hpp new file mode 100644 index 0000000..2601270 --- /dev/null +++ b/external/boost/thread/locks.hpp @@ -0,0 +1,1626 @@ +// Distributed under the 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 2007 Anthony Williams +#ifndef BOOST_THREAD_LOCKS_HPP +#define BOOST_THREAD_LOCKS_HPP +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + struct xtime; + +#if defined(BOOST_NO_SFINAE) || \ + BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) || \ + BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) +#define BOOST_THREAD_NO_AUTO_DETECT_MUTEX_TYPES +#endif + +#ifndef BOOST_THREAD_NO_AUTO_DETECT_MUTEX_TYPES + namespace detail + { +#define BOOST_DEFINE_HAS_MEMBER_CALLED(member_name) \ + template::value> \ + struct has_member_called_##member_name \ + { \ + BOOST_STATIC_CONSTANT(bool, value=false); \ + }; \ + \ + template \ + struct has_member_called_##member_name \ + { \ + typedef char true_type; \ + struct false_type \ + { \ + true_type dummy[2]; \ + }; \ + \ + struct fallback { int member_name; }; \ + struct derived: \ + T, fallback \ + { \ + derived(); \ + }; \ + \ + template struct tester; \ + \ + template \ + static false_type has_member(tester<&U::member_name>*); \ + template \ + static true_type has_member(...); \ + \ + BOOST_STATIC_CONSTANT( \ + bool, value=sizeof(has_member(0))==sizeof(true_type)); \ + } + + BOOST_DEFINE_HAS_MEMBER_CALLED(lock); + BOOST_DEFINE_HAS_MEMBER_CALLED(unlock); + BOOST_DEFINE_HAS_MEMBER_CALLED(try_lock); + + template::value > + struct has_member_lock + { + BOOST_STATIC_CONSTANT(bool, value=false); + }; + + template + struct has_member_lock + { + typedef char true_type; + struct false_type + { + true_type dummy[2]; + }; + + template + static true_type has_member(V (U::*)()); + template + static false_type has_member(U); + + BOOST_STATIC_CONSTANT( + bool,value=sizeof(has_member_lock::has_member(&T::lock))==sizeof(true_type)); + }; + + template::value > + struct has_member_unlock + { + BOOST_STATIC_CONSTANT(bool, value=false); + }; + + template + struct has_member_unlock + { + typedef char true_type; + struct false_type + { + true_type dummy[2]; + }; + + template + static true_type has_member(V (U::*)()); + template + static false_type has_member(U); + + BOOST_STATIC_CONSTANT( + bool,value=sizeof(has_member_unlock::has_member(&T::unlock))==sizeof(true_type)); + }; + + template::value > + struct has_member_try_lock + { + BOOST_STATIC_CONSTANT(bool, value=false); + }; + + template + struct has_member_try_lock + { + typedef char true_type; + struct false_type + { + true_type dummy[2]; + }; + + template + static true_type has_member(bool (U::*)()); + template + static false_type has_member(U); + + BOOST_STATIC_CONSTANT( + bool,value=sizeof(has_member_try_lock::has_member(&T::try_lock))==sizeof(true_type)); + }; + + } + + + template + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = detail::has_member_lock::value && + detail::has_member_unlock::value && + detail::has_member_try_lock::value); + + }; +#else + template + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +#endif + + struct defer_lock_t + {}; + struct try_to_lock_t + {}; + struct adopt_lock_t + {}; + + const defer_lock_t defer_lock={}; + const try_to_lock_t try_to_lock={}; + const adopt_lock_t adopt_lock={}; + + template + class shared_lock; + + template + class upgrade_lock; + + template + class unique_lock; + + namespace detail + { + template + class try_lock_wrapper; + } + +#ifdef BOOST_THREAD_NO_AUTO_DETECT_MUTEX_TYPES + template + struct is_mutex_type > + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + + template + struct is_mutex_type > + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + + template + struct is_mutex_type > + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + + template + struct is_mutex_type > + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + + class mutex; + class timed_mutex; + class recursive_mutex; + class recursive_timed_mutex; + class shared_mutex; + + template<> + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + template<> + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + template<> + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + template<> + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + template<> + struct is_mutex_type + { + BOOST_STATIC_CONSTANT(bool, value = true); + }; + +#endif + + template + class lock_guard + { + private: + Mutex& m; + + explicit lock_guard(lock_guard&); + lock_guard& operator=(lock_guard&); + public: + explicit lock_guard(Mutex& m_): + m(m_) + { + m.lock(); + } + lock_guard(Mutex& m_,adopt_lock_t): + m(m_) + {} + ~lock_guard() + { + m.unlock(); + } + }; + + + template + class unique_lock + { + private: + Mutex* m; + bool is_locked; + unique_lock(unique_lock&); + explicit unique_lock(upgrade_lock&); + unique_lock& operator=(unique_lock&); + unique_lock& operator=(upgrade_lock& other); + public: +#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) + unique_lock(const volatile unique_lock&); +#endif + unique_lock(): + m(0),is_locked(false) + {} + + explicit unique_lock(Mutex& m_): + m(&m_),is_locked(false) + { + lock(); + } + unique_lock(Mutex& m_,adopt_lock_t): + m(&m_),is_locked(true) + {} + unique_lock(Mutex& m_,defer_lock_t): + m(&m_),is_locked(false) + {} + unique_lock(Mutex& m_,try_to_lock_t): + m(&m_),is_locked(false) + { + try_lock(); + } + template + unique_lock(Mutex& m_,TimeDuration const& target_time): + m(&m_),is_locked(false) + { + timed_lock(target_time); + } + unique_lock(Mutex& m_,system_time const& target_time): + m(&m_),is_locked(false) + { + timed_lock(target_time); + } +#ifndef BOOST_NO_RVALUE_REFERENCES + unique_lock(unique_lock&& other): + m(other.m),is_locked(other.is_locked) + { + other.is_locked=false; + other.m=0; + } + explicit unique_lock(upgrade_lock&& other); + + unique_lock&& move() + { + return static_cast&&>(*this); + } + + + unique_lock& operator=(unique_lock&& other) + { + unique_lock temp(other.move()); + swap(temp); + return *this; + } + + unique_lock& operator=(upgrade_lock&& other) + { + unique_lock temp(other.move()); + swap(temp); + return *this; + } + void swap(unique_lock&& other) + { + std::swap(m,other.m); + std::swap(is_locked,other.is_locked); + } +#else + unique_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + other->is_locked=false; + other->m=0; + } + unique_lock(detail::thread_move_t > other); + + operator detail::thread_move_t >() + { + return move(); + } + + detail::thread_move_t > move() + { + return detail::thread_move_t >(*this); + } + +#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) + unique_lock& operator=(unique_lock other) + { + swap(other); + return *this; + } +#else + unique_lock& operator=(detail::thread_move_t > other) + { + unique_lock temp(other); + swap(temp); + return *this; + } +#endif + + unique_lock& operator=(detail::thread_move_t > other) + { + unique_lock temp(other); + swap(temp); + return *this; + } + void swap(detail::thread_move_t > other) + { + std::swap(m,other->m); + std::swap(is_locked,other->is_locked); + } +#endif + void swap(unique_lock& other) + { + std::swap(m,other.m); + std::swap(is_locked,other.is_locked); + } + + ~unique_lock() + { + if(owns_lock()) + { + m->unlock(); + } + } + void lock() + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + m->lock(); + is_locked=true; + } + bool try_lock() + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + is_locked=m->try_lock(); + return is_locked; + } + template + bool timed_lock(TimeDuration const& relative_time) + { + is_locked=m->timed_lock(relative_time); + return is_locked; + } + + bool timed_lock(::boost::system_time const& absolute_time) + { + is_locked=m->timed_lock(absolute_time); + return is_locked; + } + bool timed_lock(::boost::xtime const& absolute_time) + { + is_locked=m->timed_lock(absolute_time); + return is_locked; + } + void unlock() + { + if(!owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + m->unlock(); + is_locked=false; + } + + typedef void (unique_lock::*bool_type)(); + operator bool_type() const + { + return is_locked?&unique_lock::lock:0; + } + bool operator!() const + { + return !owns_lock(); + } + bool owns_lock() const + { + return is_locked; + } + + Mutex* mutex() const + { + return m; + } + + Mutex* release() + { + Mutex* const res=m; + m=0; + is_locked=false; + return res; + } + + friend class shared_lock; + friend class upgrade_lock; + }; + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + void swap(unique_lock&& lhs,unique_lock&& rhs) + { + lhs.swap(rhs); + } + + template + inline upgrade_lock&& move(upgrade_lock&& ul) + { + return static_cast&&>(ul); + } + + template + inline upgrade_lock&& move(upgrade_lock& ul) + { + return static_cast&&>(ul); + } +#endif + template + void swap(unique_lock& lhs,unique_lock& rhs) + { + lhs.swap(rhs); + } + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + inline unique_lock&& move(unique_lock&& ul) + { + return static_cast&&>(ul); + } + + template + inline unique_lock&& move(unique_lock& ul) + { + return static_cast&&>(ul); + } +#endif + +#ifdef BOOST_NO_RVALUE_REFERENCES + template + struct has_move_emulation_enabled_aux > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; +#endif + + template + class shared_lock + { + protected: + Mutex* m; + bool is_locked; + private: + explicit shared_lock(shared_lock&); + shared_lock& operator=(shared_lock&); + public: + shared_lock(): + m(0),is_locked(false) + {} + + explicit shared_lock(Mutex& m_): + m(&m_),is_locked(false) + { + lock(); + } + shared_lock(Mutex& m_,adopt_lock_t): + m(&m_),is_locked(true) + {} + shared_lock(Mutex& m_,defer_lock_t): + m(&m_),is_locked(false) + {} + shared_lock(Mutex& m_,try_to_lock_t): + m(&m_),is_locked(false) + { + try_lock(); + } + shared_lock(Mutex& m_,system_time const& target_time): + m(&m_),is_locked(false) + { + timed_lock(target_time); + } +#ifndef BOOST_NO_RVALUE_REFERENCES + +#else + shared_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + other->is_locked=false; + other->m=0; + } + + shared_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + if(is_locked) + { + m->unlock_and_lock_shared(); + } + other->is_locked=false; + other->m=0; + } + + shared_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + if(is_locked) + { + m->unlock_upgrade_and_lock_shared(); + } + other->is_locked=false; + other->m=0; + } + + operator detail::thread_move_t >() + { + return move(); + } + + detail::thread_move_t > move() + { + return detail::thread_move_t >(*this); + } + + + shared_lock& operator=(detail::thread_move_t > other) + { + shared_lock temp(other); + swap(temp); + return *this; + } + + shared_lock& operator=(detail::thread_move_t > other) + { + shared_lock temp(other); + swap(temp); + return *this; + } + + shared_lock& operator=(detail::thread_move_t > other) + { + shared_lock temp(other); + swap(temp); + return *this; + } +#endif + +#ifndef BOOST_NO_RVALUE_REFERENCES + void swap(shared_lock&& other) + { + std::swap(m,other.m); + std::swap(is_locked,other.is_locked); + } +#else + void swap(boost::detail::thread_move_t > other) + { + std::swap(m,other->m); + std::swap(is_locked,other->is_locked); + } +#endif + void swap(shared_lock& other) + { + std::swap(m,other.m); + std::swap(is_locked,other.is_locked); + } + + Mutex* mutex() const + { + return m; + } + + ~shared_lock() + { + if(owns_lock()) + { + m->unlock_shared(); + } + } + void lock() + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + m->lock_shared(); + is_locked=true; + } + bool try_lock() + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + is_locked=m->try_lock_shared(); + return is_locked; + } + bool timed_lock(boost::system_time const& target_time) + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + is_locked=m->timed_lock_shared(target_time); + return is_locked; + } + template + bool timed_lock(Duration const& target_time) + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + is_locked=m->timed_lock_shared(target_time); + return is_locked; + } + void unlock() + { + if(!owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + m->unlock_shared(); + is_locked=false; + } + + typedef void (shared_lock::*bool_type)(); + operator bool_type() const + { + return is_locked?&shared_lock::lock:0; + } + bool operator!() const + { + return !owns_lock(); + } + bool owns_lock() const + { + return is_locked; + } + + }; + +#ifdef BOOST_NO_RVALUE_REFERENCES + template + struct has_move_emulation_enabled_aux > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; +#endif + + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + void swap(shared_lock&& lhs,shared_lock&& rhs) + { + lhs.swap(rhs); + } + template + void swap(shared_lock& lhs,shared_lock& rhs) + { + lhs.swap(rhs); + } +#else + template + void swap(shared_lock& lhs,shared_lock& rhs) + { + lhs.swap(rhs); + } +#endif + + template + class upgrade_lock + { + protected: + Mutex* m; + bool is_locked; + private: + explicit upgrade_lock(upgrade_lock&); + upgrade_lock& operator=(upgrade_lock&); + public: + upgrade_lock(): + m(0),is_locked(false) + {} + + explicit upgrade_lock(Mutex& m_): + m(&m_),is_locked(false) + { + lock(); + } + upgrade_lock(Mutex& m_,adopt_lock_t): + m(&m_),is_locked(true) + {} + upgrade_lock(Mutex& m_,defer_lock_t): + m(&m_),is_locked(false) + {} + upgrade_lock(Mutex& m_,try_to_lock_t): + m(&m_),is_locked(false) + { + try_lock(); + } +#ifndef BOOST_NO_RVALUE_REFERENCES + upgrade_lock(upgrade_lock&& other): + m(other.m),is_locked(other.is_locked) + { + other.is_locked=false; + other.m=0; + } + + upgrade_lock(unique_lock&& other): + m(other.m),is_locked(other.is_locked) + { + if(is_locked) + { + m->unlock_and_lock_upgrade(); + } + other.is_locked=false; + other.m=0; + } + + upgrade_lock& operator=(upgrade_lock&& other) + { + upgrade_lock temp(static_cast&&>(other)); + swap(temp); + return *this; + } + + upgrade_lock& operator=(unique_lock&& other) + { + upgrade_lock temp(static_cast&&>(other)); + swap(temp); + return *this; + } +#else + upgrade_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + other->is_locked=false; + other->m=0; + } + + upgrade_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + if(is_locked) + { + m->unlock_and_lock_upgrade(); + } + other->is_locked=false; + other->m=0; + } + + operator detail::thread_move_t >() + { + return move(); + } + + detail::thread_move_t > move() + { + return detail::thread_move_t >(*this); + } + + + upgrade_lock& operator=(detail::thread_move_t > other) + { + upgrade_lock temp(other); + swap(temp); + return *this; + } + + upgrade_lock& operator=(detail::thread_move_t > other) + { + upgrade_lock temp(other); + swap(temp); + return *this; + } +#endif + + void swap(upgrade_lock& other) + { + std::swap(m,other.m); + std::swap(is_locked,other.is_locked); + } + + ~upgrade_lock() + { + if(owns_lock()) + { + m->unlock_upgrade(); + } + } + void lock() + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + m->lock_upgrade(); + is_locked=true; + } + bool try_lock() + { + if(owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + is_locked=m->try_lock_upgrade(); + return is_locked; + } + void unlock() + { + if(!owns_lock()) + { + boost::throw_exception(boost::lock_error()); + } + m->unlock_upgrade(); + is_locked=false; + } + + typedef void (upgrade_lock::*bool_type)(); + operator bool_type() const + { + return is_locked?&upgrade_lock::lock:0; + } + bool operator!() const + { + return !owns_lock(); + } + bool owns_lock() const + { + return is_locked; + } + friend class shared_lock; + friend class unique_lock; + }; + +#ifdef BOOST_NO_RVALUE_REFERENCES + template + struct has_move_emulation_enabled_aux > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; +#endif + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + unique_lock::unique_lock(upgrade_lock&& other): + m(other.m),is_locked(other.is_locked) + { + other.is_locked=false; + if(is_locked) + { + m->unlock_upgrade_and_lock(); + } + } +#else + template + unique_lock::unique_lock(detail::thread_move_t > other): + m(other->m),is_locked(other->is_locked) + { + other->is_locked=false; + if(is_locked) + { + m->unlock_upgrade_and_lock(); + } + } +#endif + template + class upgrade_to_unique_lock + { + private: + upgrade_lock* source; + unique_lock exclusive; + + explicit upgrade_to_unique_lock(upgrade_to_unique_lock&); + upgrade_to_unique_lock& operator=(upgrade_to_unique_lock&); + public: + explicit upgrade_to_unique_lock(upgrade_lock& m_): + source(&m_),exclusive(move(*source)) + {} + ~upgrade_to_unique_lock() + { + if(source) + { + *source=move(exclusive); + } + } + +#ifndef BOOST_NO_RVALUE_REFERENCES + upgrade_to_unique_lock(upgrade_to_unique_lock&& other): + source(other.source),exclusive(move(other.exclusive)) + { + other.source=0; + } + + upgrade_to_unique_lock& operator=(upgrade_to_unique_lock&& other) + { + upgrade_to_unique_lock temp(other); + swap(temp); + return *this; + } +#else + upgrade_to_unique_lock(detail::thread_move_t > other): + source(other->source),exclusive(move(other->exclusive)) + { + other->source=0; + } + + upgrade_to_unique_lock& operator=(detail::thread_move_t > other) + { + upgrade_to_unique_lock temp(other); + swap(temp); + return *this; + } +#endif + void swap(upgrade_to_unique_lock& other) + { + std::swap(source,other.source); + exclusive.swap(other.exclusive); + } + typedef void (upgrade_to_unique_lock::*bool_type)(upgrade_to_unique_lock&); + operator bool_type() const + { + return exclusive.owns_lock()?&upgrade_to_unique_lock::swap:0; + } + bool operator!() const + { + return !owns_lock(); + } + bool owns_lock() const + { + return exclusive.owns_lock(); + } + }; + +#ifdef BOOST_NO_RVALUE_REFERENCES + template + struct has_move_emulation_enabled_aux > + : BOOST_MOVE_BOOST_NS::integral_constant + {}; +#endif + + namespace detail + { + template + class try_lock_wrapper: + private unique_lock + { + typedef unique_lock base; + public: + try_lock_wrapper() + {} + + explicit try_lock_wrapper(Mutex& m): + base(m,try_to_lock) + {} + + try_lock_wrapper(Mutex& m_,adopt_lock_t): + base(m_,adopt_lock) + {} + try_lock_wrapper(Mutex& m_,defer_lock_t): + base(m_,defer_lock) + {} + try_lock_wrapper(Mutex& m_,try_to_lock_t): + base(m_,try_to_lock) + {} +#ifndef BOOST_NO_RVALUE_REFERENCES + try_lock_wrapper(try_lock_wrapper&& other): + base(other.move()) + {} + + try_lock_wrapper&& move() + { + return static_cast(*this); + } + + try_lock_wrapper& operator=(try_lock_wrapper&& other) + { + try_lock_wrapper temp(other.move()); + swap(temp); + return *this; + } + + void swap(try_lock_wrapper&& other) + { + base::swap(other); + } +#else + try_lock_wrapper(detail::thread_move_t > other): + base(detail::thread_move_t(*other)) + {} + + operator detail::thread_move_t >() + { + return move(); + } + + detail::thread_move_t > move() + { + return detail::thread_move_t >(*this); + } + + try_lock_wrapper& operator=(detail::thread_move_t > other) + { + try_lock_wrapper temp(other); + swap(temp); + return *this; + } + + void swap(detail::thread_move_t > other) + { + base::swap(*other); + } +#endif + void swap(try_lock_wrapper& other) + { + base::swap(other); + } + void lock() + { + base::lock(); + } + bool try_lock() + { + return base::try_lock(); + } + void unlock() + { + base::unlock(); + } + bool owns_lock() const + { + return base::owns_lock(); + } + Mutex* mutex() const + { + return base::mutex(); + } + Mutex* release() + { + return base::release(); + } + bool operator!() const + { + return !this->owns_lock(); + } + + typedef typename base::bool_type bool_type; + operator bool_type() const + { + return base::operator bool_type(); + } + }; + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + void swap(try_lock_wrapper&& lhs,try_lock_wrapper&& rhs) + { + lhs.swap(rhs); + } + template + void swap(try_lock_wrapper& lhs,try_lock_wrapper& rhs) + { + lhs.swap(rhs); + } +#else + template + void swap(try_lock_wrapper& lhs,try_lock_wrapper& rhs) + { + lhs.swap(rhs); + } +#endif + + template + unsigned try_lock_internal(MutexType1& m1,MutexType2& m2) + { + boost::unique_lock l1(m1,boost::try_to_lock); + if(!l1) + { + return 1; + } + if(!m2.try_lock()) + { + return 2; + } + l1.release(); + return 0; + } + + template + unsigned try_lock_internal(MutexType1& m1,MutexType2& m2,MutexType3& m3) + { + boost::unique_lock l1(m1,boost::try_to_lock); + if(!l1) + { + return 1; + } + if(unsigned const failed_lock=try_lock_internal(m2,m3)) + { + return failed_lock+1; + } + l1.release(); + return 0; + } + + + template + unsigned try_lock_internal(MutexType1& m1,MutexType2& m2,MutexType3& m3, + MutexType4& m4) + { + boost::unique_lock l1(m1,boost::try_to_lock); + if(!l1) + { + return 1; + } + if(unsigned const failed_lock=try_lock_internal(m2,m3,m4)) + { + return failed_lock+1; + } + l1.release(); + return 0; + } + + template + unsigned try_lock_internal(MutexType1& m1,MutexType2& m2,MutexType3& m3, + MutexType4& m4,MutexType5& m5) + { + boost::unique_lock l1(m1,boost::try_to_lock); + if(!l1) + { + return 1; + } + if(unsigned const failed_lock=try_lock_internal(m2,m3,m4,m5)) + { + return failed_lock+1; + } + l1.release(); + return 0; + } + + + template + unsigned lock_helper(MutexType1& m1,MutexType2& m2) + { + boost::unique_lock l1(m1); + if(!m2.try_lock()) + { + return 1; + } + l1.release(); + return 0; + } + + template + unsigned lock_helper(MutexType1& m1,MutexType2& m2,MutexType3& m3) + { + boost::unique_lock l1(m1); + if(unsigned const failed_lock=try_lock_internal(m2,m3)) + { + return failed_lock; + } + l1.release(); + return 0; + } + + template + unsigned lock_helper(MutexType1& m1,MutexType2& m2,MutexType3& m3, + MutexType4& m4) + { + boost::unique_lock l1(m1); + if(unsigned const failed_lock=try_lock_internal(m2,m3,m4)) + { + return failed_lock; + } + l1.release(); + return 0; + } + + template + unsigned lock_helper(MutexType1& m1,MutexType2& m2,MutexType3& m3, + MutexType4& m4,MutexType5& m5) + { + boost::unique_lock l1(m1); + if(unsigned const failed_lock=try_lock_internal(m2,m3,m4,m5)) + { + return failed_lock; + } + l1.release(); + return 0; + } + } + + namespace detail + { + template + struct is_mutex_type_wrapper + {}; + + template + void lock_impl(MutexType1& m1,MutexType2& m2,is_mutex_type_wrapper) + { + unsigned const lock_count=2; + unsigned lock_first=0; + for(;;) + { + switch(lock_first) + { + case 0: + lock_first=detail::lock_helper(m1,m2); + if(!lock_first) + return; + break; + case 1: + lock_first=detail::lock_helper(m2,m1); + if(!lock_first) + return; + lock_first=(lock_first+1)%lock_count; + break; + } + } + } + + template + void lock_impl(Iterator begin,Iterator end,is_mutex_type_wrapper); + } + + + template + void lock(MutexType1& m1,MutexType2& m2) + { + detail::lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + void lock(const MutexType1& m1,MutexType2& m2) + { + detail::lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + void lock(MutexType1& m1,const MutexType2& m2) + { + detail::lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + void lock(const MutexType1& m1,const MutexType2& m2) + { + detail::lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + void lock(MutexType1& m1,MutexType2& m2,MutexType3& m3) + { + unsigned const lock_count=3; + unsigned lock_first=0; + for(;;) + { + switch(lock_first) + { + case 0: + lock_first=detail::lock_helper(m1,m2,m3); + if(!lock_first) + return; + break; + case 1: + lock_first=detail::lock_helper(m2,m3,m1); + if(!lock_first) + return; + lock_first=(lock_first+1)%lock_count; + break; + case 2: + lock_first=detail::lock_helper(m3,m1,m2); + if(!lock_first) + return; + lock_first=(lock_first+2)%lock_count; + break; + } + } + } + + template + void lock(MutexType1& m1,MutexType2& m2,MutexType3& m3, + MutexType4& m4) + { + unsigned const lock_count=4; + unsigned lock_first=0; + for(;;) + { + switch(lock_first) + { + case 0: + lock_first=detail::lock_helper(m1,m2,m3,m4); + if(!lock_first) + return; + break; + case 1: + lock_first=detail::lock_helper(m2,m3,m4,m1); + if(!lock_first) + return; + lock_first=(lock_first+1)%lock_count; + break; + case 2: + lock_first=detail::lock_helper(m3,m4,m1,m2); + if(!lock_first) + return; + lock_first=(lock_first+2)%lock_count; + break; + case 3: + lock_first=detail::lock_helper(m4,m1,m2,m3); + if(!lock_first) + return; + lock_first=(lock_first+3)%lock_count; + break; + } + } + } + + template + void lock(MutexType1& m1,MutexType2& m2,MutexType3& m3, + MutexType4& m4,MutexType5& m5) + { + unsigned const lock_count=5; + unsigned lock_first=0; + for(;;) + { + switch(lock_first) + { + case 0: + lock_first=detail::lock_helper(m1,m2,m3,m4,m5); + if(!lock_first) + return; + break; + case 1: + lock_first=detail::lock_helper(m2,m3,m4,m5,m1); + if(!lock_first) + return; + lock_first=(lock_first+1)%lock_count; + break; + case 2: + lock_first=detail::lock_helper(m3,m4,m5,m1,m2); + if(!lock_first) + return; + lock_first=(lock_first+2)%lock_count; + break; + case 3: + lock_first=detail::lock_helper(m4,m5,m1,m2,m3); + if(!lock_first) + return; + lock_first=(lock_first+3)%lock_count; + break; + case 4: + lock_first=detail::lock_helper(m5,m1,m2,m3,m4); + if(!lock_first) + return; + lock_first=(lock_first+4)%lock_count; + break; + } + } + } + + namespace detail + { + template::value> + struct try_lock_impl_return + { + typedef int type; + }; + + template + struct try_lock_impl_return + { + typedef Iterator type; + }; + + template + int try_lock_impl(MutexType1& m1,MutexType2& m2,is_mutex_type_wrapper) + { + return ((int)detail::try_lock_internal(m1,m2))-1; + } + + template + Iterator try_lock_impl(Iterator begin,Iterator end,is_mutex_type_wrapper); + } + + template + typename detail::try_lock_impl_return::type try_lock(MutexType1& m1,MutexType2& m2) + { + return detail::try_lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + typename detail::try_lock_impl_return::type try_lock(const MutexType1& m1,MutexType2& m2) + { + return detail::try_lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + typename detail::try_lock_impl_return::type try_lock(MutexType1& m1,const MutexType2& m2) + { + return detail::try_lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + typename detail::try_lock_impl_return::type try_lock(const MutexType1& m1,const MutexType2& m2) + { + return detail::try_lock_impl(m1,m2,detail::is_mutex_type_wrapper::value>()); + } + + template + int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3) + { + return ((int)detail::try_lock_internal(m1,m2,m3))-1; + } + + template + int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,MutexType4& m4) + { + return ((int)detail::try_lock_internal(m1,m2,m3,m4))-1; + } + + template + int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,MutexType4& m4,MutexType5& m5) + { + return ((int)detail::try_lock_internal(m1,m2,m3,m4,m5))-1; + } + + + namespace detail + { + template + struct range_lock_guard + { + Iterator begin; + Iterator end; + + range_lock_guard(Iterator begin_,Iterator end_): + begin(begin_),end(end_) + { + boost::lock(begin,end); + } + + void release() + { + begin=end; + } + + ~range_lock_guard() + { + for(;begin!=end;++begin) + { + begin->unlock(); + } + } + }; + + template + Iterator try_lock_impl(Iterator begin,Iterator end,is_mutex_type_wrapper) + + { + if(begin==end) + { + return end; + } + typedef typename std::iterator_traits::value_type lock_type; + unique_lock guard(*begin,try_to_lock); + + if(!guard.owns_lock()) + { + return begin; + } + Iterator const failed=boost::try_lock(++begin,end); + if(failed==end) + { + guard.release(); + } + + return failed; + } + } + + + namespace detail + { + template + void lock_impl(Iterator begin,Iterator end,is_mutex_type_wrapper) + { + typedef typename std::iterator_traits::value_type lock_type; + + if(begin==end) + { + return; + } + bool start_with_begin=true; + Iterator second=begin; + ++second; + Iterator next=second; + + for(;;) + { + unique_lock begin_lock(*begin,defer_lock); + if(start_with_begin) + { + begin_lock.lock(); + Iterator const failed_lock=boost::try_lock(next,end); + if(failed_lock==end) + { + begin_lock.release(); + return; + } + start_with_begin=false; + next=failed_lock; + } + else + { + detail::range_lock_guard guard(next,end); + if(begin_lock.try_lock()) + { + Iterator const failed_lock=boost::try_lock(second,next); + if(failed_lock==next) + { + begin_lock.release(); + guard.release(); + return; + } + start_with_begin=false; + next=failed_lock; + } + else + { + start_with_begin=true; + next=second; + } + } + } + } + + } + +} + +#include + +#endif diff --git a/external/boost/thread/mutex.hpp b/external/boost/thread/mutex.hpp new file mode 100644 index 0000000..4669886 --- /dev/null +++ b/external/boost/thread/mutex.hpp @@ -0,0 +1,21 @@ +#ifndef BOOST_THREAD_MUTEX_HPP +#define BOOST_THREAD_MUTEX_HPP + +// mutex.hpp +// +// (C) Copyright 2007 Anthony Williams +// +// Distributed under the 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 +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +#include +#else +#error "Boost threads unavailable on this platform" +#endif + +#endif diff --git a/external/boost/thread/once.hpp b/external/boost/thread/once.hpp new file mode 100644 index 0000000..975304e --- /dev/null +++ b/external/boost/thread/once.hpp @@ -0,0 +1,33 @@ +#ifndef BOOST_THREAD_ONCE_HPP +#define BOOST_THREAD_ONCE_HPP + +// once.hpp +// +// (C) Copyright 2006-7 Anthony Williams +// +// Distributed under the 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 +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +#include +#else +#error "Boost threads unavailable on this platform" +#endif + +#include + +namespace boost +{ + inline void call_once(void (*func)(),once_flag& flag) + { + call_once(flag,func); + } +} + +#include + +#endif diff --git a/external/boost/thread/pthread/condition_variable.hpp b/external/boost/thread/pthread/condition_variable.hpp new file mode 100644 index 0000000..48ed8ff --- /dev/null +++ b/external/boost/thread/pthread/condition_variable.hpp @@ -0,0 +1,226 @@ +#ifndef BOOST_THREAD_CONDITION_VARIABLE_PTHREAD_HPP +#define BOOST_THREAD_CONDITION_VARIABLE_PTHREAD_HPP +// Distributed under the 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 2007-10 Anthony Williams + +#include +#include +#include +#include + +#include + +namespace boost +{ + namespace this_thread + { + void BOOST_THREAD_DECL interruption_point(); + } + + namespace thread_cv_detail + { + template + struct lock_on_exit + { + MutexType* m; + + lock_on_exit(): + m(0) + {} + + void activate(MutexType& m_) + { + m_.unlock(); + m=&m_; + } + ~lock_on_exit() + { + if(m) + { + m->lock(); + } + } + }; + } + + inline void condition_variable::wait(unique_lock& m) + { + int res=0; + { + thread_cv_detail::lock_on_exit > guard; + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); + guard.activate(m); + do { + res = pthread_cond_wait(&cond,&internal_mutex); + } while (res == EINTR); + } + this_thread::interruption_point(); + if(res) + { + boost::throw_exception(condition_error()); + } + } + + inline bool condition_variable::timed_wait(unique_lock& m,boost::system_time const& wait_until) + { + thread_cv_detail::lock_on_exit > guard; + int cond_res; + { + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); + guard.activate(m); + struct timespec const timeout=detail::get_timespec(wait_until); + cond_res=pthread_cond_timedwait(&cond,&internal_mutex,&timeout); + } + this_thread::interruption_point(); + if(cond_res==ETIMEDOUT) + { + return false; + } + if(cond_res) + { + boost::throw_exception(condition_error()); + } + return true; + } + + inline void condition_variable::notify_one() + { + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); + BOOST_VERIFY(!pthread_cond_signal(&cond)); + } + + inline void condition_variable::notify_all() + { + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); + BOOST_VERIFY(!pthread_cond_broadcast(&cond)); + } + + class condition_variable_any + { + pthread_mutex_t internal_mutex; + pthread_cond_t cond; + + condition_variable_any(condition_variable_any&); + condition_variable_any& operator=(condition_variable_any&); + + public: + condition_variable_any() + { + int const res=pthread_mutex_init(&internal_mutex,NULL); + if(res) + { + boost::throw_exception(thread_resource_error()); + } + int const res2=pthread_cond_init(&cond,NULL); + if(res2) + { + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); + boost::throw_exception(thread_resource_error()); + } + } + ~condition_variable_any() + { + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); + BOOST_VERIFY(!pthread_cond_destroy(&cond)); + } + + template + void wait(lock_type& m) + { + int res=0; + { + thread_cv_detail::lock_on_exit guard; + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); + guard.activate(m); + res=pthread_cond_wait(&cond,&internal_mutex); + } + this_thread::interruption_point(); + if(res) + { + boost::throw_exception(condition_error()); + } + } + + template + void wait(lock_type& m,predicate_type pred) + { + while(!pred()) wait(m); + } + + template + bool timed_wait(lock_type& m,boost::system_time const& wait_until) + { + struct timespec const timeout=detail::get_timespec(wait_until); + int res=0; + { + thread_cv_detail::lock_on_exit guard; + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); + guard.activate(m); + res=pthread_cond_timedwait(&cond,&internal_mutex,&timeout); + } + this_thread::interruption_point(); + if(res==ETIMEDOUT) + { + return false; + } + if(res) + { + boost::throw_exception(condition_error()); + } + return true; + } + template + bool timed_wait(lock_type& m,xtime const& wait_until) + { + return timed_wait(m,system_time(wait_until)); + } + + template + bool timed_wait(lock_type& m,duration_type const& wait_duration) + { + return timed_wait(m,get_system_time()+wait_duration); + } + + template + bool timed_wait(lock_type& m,boost::system_time const& wait_until,predicate_type pred) + { + while (!pred()) + { + if(!timed_wait(m, wait_until)) + return pred(); + } + return true; + } + + template + bool timed_wait(lock_type& m,xtime const& wait_until,predicate_type pred) + { + return timed_wait(m,system_time(wait_until),pred); + } + + template + bool timed_wait(lock_type& m,duration_type const& wait_duration,predicate_type pred) + { + return timed_wait(m,get_system_time()+wait_duration,pred); + } + + void notify_one() + { + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); + BOOST_VERIFY(!pthread_cond_signal(&cond)); + } + + void notify_all() + { + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); + BOOST_VERIFY(!pthread_cond_broadcast(&cond)); + } + }; + +} + +#include + +#endif diff --git a/external/boost/thread/pthread/condition_variable_fwd.hpp b/external/boost/thread/pthread/condition_variable_fwd.hpp new file mode 100644 index 0000000..f56bee4 --- /dev/null +++ b/external/boost/thread/pthread/condition_variable_fwd.hpp @@ -0,0 +1,111 @@ +#ifndef BOOST_THREAD_PTHREAD_CONDITION_VARIABLE_FWD_HPP +#define BOOST_THREAD_PTHREAD_CONDITION_VARIABLE_FWD_HPP +// Distributed under the 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 2007-8 Anthony Williams + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + class condition_variable + { + private: + pthread_mutex_t internal_mutex; + pthread_cond_t cond; + + condition_variable(condition_variable&); + condition_variable& operator=(condition_variable&); + + public: + condition_variable() + { + int const res=pthread_mutex_init(&internal_mutex,NULL); + if(res) + { + boost::throw_exception(thread_resource_error()); + } + int const res2=pthread_cond_init(&cond,NULL); + if(res2) + { + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); + boost::throw_exception(thread_resource_error()); + } + } + ~condition_variable() + { + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); + int ret; + do { + ret = pthread_cond_destroy(&cond); + } while (ret == EINTR); + BOOST_VERIFY(!ret); + } + + void wait(unique_lock& m); + + template + void wait(unique_lock& m,predicate_type pred) + { + while(!pred()) wait(m); + } + + inline bool timed_wait(unique_lock& m, + boost::system_time const& wait_until); + bool timed_wait(unique_lock& m,xtime const& wait_until) + { + return timed_wait(m,system_time(wait_until)); + } + + template + bool timed_wait(unique_lock& m,duration_type const& wait_duration) + { + return timed_wait(m,get_system_time()+wait_duration); + } + + template + bool timed_wait(unique_lock& m,boost::system_time const& wait_until,predicate_type pred) + { + while (!pred()) + { + if(!timed_wait(m, wait_until)) + return pred(); + } + return true; + } + + template + bool timed_wait(unique_lock& m,xtime const& wait_until,predicate_type pred) + { + return timed_wait(m,system_time(wait_until),pred); + } + + template + bool timed_wait(unique_lock& m,duration_type const& wait_duration,predicate_type pred) + { + return timed_wait(m,get_system_time()+wait_duration,pred); + } + + typedef pthread_cond_t* native_handle_type; + native_handle_type native_handle() + { + return &cond; + } + + void notify_one(); + void notify_all(); + }; +} + +#include + +#endif diff --git a/external/boost/thread/pthread/mutex.hpp b/external/boost/thread/pthread/mutex.hpp new file mode 100644 index 0000000..fc7c9cd --- /dev/null +++ b/external/boost/thread/pthread/mutex.hpp @@ -0,0 +1,239 @@ +#ifndef BOOST_THREAD_PTHREAD_MUTEX_HPP +#define BOOST_THREAD_PTHREAD_MUTEX_HPP +// (C) Copyright 2007-8 Anthony Williams +// Distributed under the 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _POSIX_TIMEOUTS +#if _POSIX_TIMEOUTS >= 0 && _POSIX_C_SOURCE>=200112L +#define BOOST_PTHREAD_HAS_TIMEDLOCK +#endif +#endif + +#include + +namespace boost +{ + class mutex + { + private: + mutex(mutex const&); + mutex& operator=(mutex const&); + pthread_mutex_t m; + public: + mutex() + { + int const res=pthread_mutex_init(&m,NULL); + if(res) + { + boost::throw_exception(thread_resource_error()); + } + } + ~mutex() + { + int ret; + do + { + ret = pthread_mutex_destroy(&m); + } while (ret == EINTR); + } + + void lock() + { + int res; + do + { + res = pthread_mutex_lock(&m); + } while (res == EINTR); + if(res) + { + boost::throw_exception(lock_error(res)); + } + } + + void unlock() + { + int ret; + do + { + ret = pthread_mutex_unlock(&m); + } while (ret == EINTR); + BOOST_VERIFY(!ret); + } + + bool try_lock() + { + int res; + do + { + res = pthread_mutex_trylock(&m); + } while (res == EINTR); + if(res && (res!=EBUSY)) + { + boost::throw_exception(lock_error(res)); + } + + return !res; + } + + typedef pthread_mutex_t* native_handle_type; + native_handle_type native_handle() + { + return &m; + } + + typedef unique_lock scoped_lock; + typedef detail::try_lock_wrapper scoped_try_lock; + }; + + typedef mutex try_mutex; + + class timed_mutex + { + private: + timed_mutex(timed_mutex const&); + timed_mutex& operator=(timed_mutex const&); + private: + pthread_mutex_t m; +#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK + pthread_cond_t cond; + bool is_locked; +#endif + public: + timed_mutex() + { + int const res=pthread_mutex_init(&m,NULL); + if(res) + { + boost::throw_exception(thread_resource_error()); + } +#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK + int const res2=pthread_cond_init(&cond,NULL); + if(res2) + { + BOOST_VERIFY(!pthread_mutex_destroy(&m)); + boost::throw_exception(thread_resource_error()); + } + is_locked=false; +#endif + } + ~timed_mutex() + { + BOOST_VERIFY(!pthread_mutex_destroy(&m)); +#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK + BOOST_VERIFY(!pthread_cond_destroy(&cond)); +#endif + } + + template + bool timed_lock(TimeDuration const & relative_time) + { + return timed_lock(get_system_time()+relative_time); + } + bool timed_lock(boost::xtime const & absolute_time) + { + return timed_lock(system_time(absolute_time)); + } + +#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK + void lock() + { + BOOST_VERIFY(!pthread_mutex_lock(&m)); + } + + void unlock() + { + BOOST_VERIFY(!pthread_mutex_unlock(&m)); + } + + bool try_lock() + { + int const res=pthread_mutex_trylock(&m); + BOOST_ASSERT(!res || res==EBUSY); + return !res; + } + bool timed_lock(system_time const & abs_time) + { + struct timespec const timeout=detail::get_timespec(abs_time); + int const res=pthread_mutex_timedlock(&m,&timeout); + BOOST_ASSERT(!res || res==ETIMEDOUT); + return !res; + } + + typedef pthread_mutex_t* native_handle_type; + native_handle_type native_handle() + { + return &m; + } + +#else + void lock() + { + boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); + while(is_locked) + { + BOOST_VERIFY(!pthread_cond_wait(&cond,&m)); + } + is_locked=true; + } + + void unlock() + { + boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); + is_locked=false; + BOOST_VERIFY(!pthread_cond_signal(&cond)); + } + + bool try_lock() + { + boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); + if(is_locked) + { + return false; + } + is_locked=true; + return true; + } + + bool timed_lock(system_time const & abs_time) + { + struct timespec const timeout=detail::get_timespec(abs_time); + boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); + while(is_locked) + { + int const cond_res=pthread_cond_timedwait(&cond,&m,&timeout); + if(cond_res==ETIMEDOUT) + { + return false; + } + BOOST_ASSERT(!cond_res); + } + is_locked=true; + return true; + } +#endif + + typedef unique_lock scoped_timed_lock; + typedef detail::try_lock_wrapper scoped_try_lock; + typedef scoped_timed_lock scoped_lock; + }; + +} + +#include + + +#endif diff --git a/external/boost/thread/pthread/once.hpp b/external/boost/thread/pthread/once.hpp new file mode 100644 index 0000000..81e744e --- /dev/null +++ b/external/boost/thread/pthread/once.hpp @@ -0,0 +1,94 @@ +#ifndef BOOST_THREAD_PTHREAD_ONCE_HPP +#define BOOST_THREAD_PTHREAD_ONCE_HPP + +// once.hpp +// +// (C) Copyright 2007-8 Anthony Williams +// +// Distributed under the 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 +#include + +#include +#include +#include +#include + +#include + +namespace boost +{ + + struct once_flag + { + boost::uintmax_t epoch; + }; + + namespace detail + { + BOOST_THREAD_DECL boost::uintmax_t& get_once_per_thread_epoch(); + BOOST_THREAD_DECL extern boost::uintmax_t once_global_epoch; + BOOST_THREAD_DECL extern pthread_mutex_t once_epoch_mutex; + BOOST_THREAD_DECL extern pthread_cond_t once_epoch_cv; + } + +#define BOOST_ONCE_INITIAL_FLAG_VALUE 0 +#define BOOST_ONCE_INIT {BOOST_ONCE_INITIAL_FLAG_VALUE} + + + // Based on Mike Burrows fast_pthread_once algorithm as described in + // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html + template + void call_once(once_flag& flag,Function f) + { + static boost::uintmax_t const uninitialized_flag=BOOST_ONCE_INITIAL_FLAG_VALUE; + static boost::uintmax_t const being_initialized=uninitialized_flag+1; + boost::uintmax_t const epoch=flag.epoch; + boost::uintmax_t& this_thread_epoch=detail::get_once_per_thread_epoch(); + + if(epoch + +#endif diff --git a/external/boost/thread/pthread/pthread_mutex_scoped_lock.hpp b/external/boost/thread/pthread/pthread_mutex_scoped_lock.hpp new file mode 100644 index 0000000..cdbf8c6 --- /dev/null +++ b/external/boost/thread/pthread/pthread_mutex_scoped_lock.hpp @@ -0,0 +1,64 @@ +#ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP +#define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP +// (C) Copyright 2007-8 Anthony Williams +// +// Distributed under the 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 +#include + +#include + +namespace boost +{ + namespace pthread + { + class pthread_mutex_scoped_lock + { + pthread_mutex_t* m; + bool locked; + public: + explicit pthread_mutex_scoped_lock(pthread_mutex_t* m_): + m(m_),locked(true) + { + BOOST_VERIFY(!pthread_mutex_lock(m)); + } + void unlock() + { + BOOST_VERIFY(!pthread_mutex_unlock(m)); + locked=false; + } + + ~pthread_mutex_scoped_lock() + { + if(locked) + { + unlock(); + } + } + + }; + + class pthread_mutex_scoped_unlock + { + pthread_mutex_t* m; + public: + explicit pthread_mutex_scoped_unlock(pthread_mutex_t* m_): + m(m_) + { + BOOST_VERIFY(!pthread_mutex_unlock(m)); + } + ~pthread_mutex_scoped_unlock() + { + BOOST_VERIFY(!pthread_mutex_lock(m)); + } + + }; + } +} + +#include + +#endif diff --git a/external/boost/thread/pthread/shared_mutex.hpp b/external/boost/thread/pthread/shared_mutex.hpp new file mode 100644 index 0000000..56e209a --- /dev/null +++ b/external/boost/thread/pthread/shared_mutex.hpp @@ -0,0 +1,303 @@ +#ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP +#define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP + +// (C) Copyright 2006-8 Anthony Williams +// +// Distributed under the 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 +#include +#include +#include +#include + +#include + +namespace boost +{ + class shared_mutex + { + private: + struct state_data + { + unsigned shared_count; + bool exclusive; + bool upgrade; + bool exclusive_waiting_blocked; + }; + + + + state_data state; + boost::mutex state_change; + boost::condition_variable shared_cond; + boost::condition_variable exclusive_cond; + boost::condition_variable upgrade_cond; + + void release_waiters() + { + exclusive_cond.notify_one(); + shared_cond.notify_all(); + } + + + public: + shared_mutex() + { + state_data state_={0,0,0,0}; + state=state_; + } + + ~shared_mutex() + { + } + + void lock_shared() + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + + while(state.exclusive || state.exclusive_waiting_blocked) + { + shared_cond.wait(lk); + } + ++state.shared_count; + } + + bool try_lock_shared() + { + boost::mutex::scoped_lock lk(state_change); + + if(state.exclusive || state.exclusive_waiting_blocked) + { + return false; + } + else + { + ++state.shared_count; + return true; + } + } + + bool timed_lock_shared(system_time const& timeout) + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + + while(state.exclusive || state.exclusive_waiting_blocked) + { + if(!shared_cond.timed_wait(lk,timeout)) + { + return false; + } + } + ++state.shared_count; + return true; + } + + template + bool timed_lock_shared(TimeDuration const & relative_time) + { + return timed_lock_shared(get_system_time()+relative_time); + } + + void unlock_shared() + { + boost::mutex::scoped_lock lk(state_change); + bool const last_reader=!--state.shared_count; + + if(last_reader) + { + if(state.upgrade) + { + state.upgrade=false; + state.exclusive=true; + upgrade_cond.notify_one(); + } + else + { + state.exclusive_waiting_blocked=false; + } + release_waiters(); + } + } + + void lock() + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + + while(state.shared_count || state.exclusive) + { + state.exclusive_waiting_blocked=true; + exclusive_cond.wait(lk); + } + state.exclusive=true; + } + + bool timed_lock(system_time const& timeout) + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + + while(state.shared_count || state.exclusive) + { + state.exclusive_waiting_blocked=true; + if(!exclusive_cond.timed_wait(lk,timeout)) + { + if(state.shared_count || state.exclusive) + { + state.exclusive_waiting_blocked=false; + release_waiters(); + return false; + } + break; + } + } + state.exclusive=true; + return true; + } + + template + bool timed_lock(TimeDuration const & relative_time) + { + return timed_lock(get_system_time()+relative_time); + } + + bool try_lock() + { + boost::mutex::scoped_lock lk(state_change); + + if(state.shared_count || state.exclusive) + { + return false; + } + else + { + state.exclusive=true; + return true; + } + + } + + void unlock() + { + boost::mutex::scoped_lock lk(state_change); + state.exclusive=false; + state.exclusive_waiting_blocked=false; + release_waiters(); + } + + void lock_upgrade() + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) + { + shared_cond.wait(lk); + } + ++state.shared_count; + state.upgrade=true; + } + + bool timed_lock_upgrade(system_time const& timeout) + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) + { + if(!shared_cond.timed_wait(lk,timeout)) + { + if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) + { + return false; + } + break; + } + } + ++state.shared_count; + state.upgrade=true; + return true; + } + + template + bool timed_lock_upgrade(TimeDuration const & relative_time) + { + return timed_lock_upgrade(get_system_time()+relative_time); + } + + bool try_lock_upgrade() + { + boost::mutex::scoped_lock lk(state_change); + if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) + { + return false; + } + else + { + ++state.shared_count; + state.upgrade=true; + return true; + } + } + + void unlock_upgrade() + { + boost::mutex::scoped_lock lk(state_change); + state.upgrade=false; + bool const last_reader=!--state.shared_count; + + if(last_reader) + { + state.exclusive_waiting_blocked=false; + release_waiters(); + } + } + + void unlock_upgrade_and_lock() + { + boost::this_thread::disable_interruption do_not_disturb; + boost::mutex::scoped_lock lk(state_change); + --state.shared_count; + while(state.shared_count) + { + upgrade_cond.wait(lk); + } + state.upgrade=false; + state.exclusive=true; + } + + void unlock_and_lock_upgrade() + { + boost::mutex::scoped_lock lk(state_change); + state.exclusive=false; + state.upgrade=true; + ++state.shared_count; + state.exclusive_waiting_blocked=false; + release_waiters(); + } + + void unlock_and_lock_shared() + { + boost::mutex::scoped_lock lk(state_change); + state.exclusive=false; + ++state.shared_count; + state.exclusive_waiting_blocked=false; + release_waiters(); + } + + void unlock_upgrade_and_lock_shared() + { + boost::mutex::scoped_lock lk(state_change); + state.upgrade=false; + state.exclusive_waiting_blocked=false; + release_waiters(); + } + }; +} + +#include + +#endif diff --git a/external/boost/thread/pthread/thread_data.hpp b/external/boost/thread/pthread/thread_data.hpp new file mode 100644 index 0000000..3de9b41 --- /dev/null +++ b/external/boost/thread/pthread/thread_data.hpp @@ -0,0 +1,157 @@ +#ifndef BOOST_THREAD_PTHREAD_THREAD_DATA_HPP +#define BOOST_THREAD_PTHREAD_THREAD_DATA_HPP +// Distributed under the 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 2007 Anthony Williams + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + class thread; + + namespace detail + { + struct tss_cleanup_function; + struct thread_exit_callback_node; + struct tss_data_node + { + boost::shared_ptr func; + void* value; + + tss_data_node(boost::shared_ptr func_, + void* value_): + func(func_),value(value_) + {} + }; + + struct thread_data_base; + typedef boost::shared_ptr thread_data_ptr; + + struct BOOST_THREAD_DECL thread_data_base: + enable_shared_from_this + { + thread_data_ptr self; + pthread_t thread_handle; + boost::mutex data_mutex; + boost::condition_variable done_condition; + boost::mutex sleep_mutex; + boost::condition_variable sleep_condition; + bool done; + bool join_started; + bool joined; + boost::detail::thread_exit_callback_node* thread_exit_callbacks; + std::map tss_data; + bool interrupt_enabled; + bool interrupt_requested; + pthread_mutex_t* cond_mutex; + pthread_cond_t* current_cond; + + thread_data_base(): + done(false),join_started(false),joined(false), + thread_exit_callbacks(0), + interrupt_enabled(true), + interrupt_requested(false), + current_cond(0) + {} + virtual ~thread_data_base(); + + typedef pthread_t native_handle_type; + + virtual void run()=0; + }; + + BOOST_THREAD_DECL thread_data_base* get_current_thread_data(); + + class interruption_checker + { + thread_data_base* const thread_info; + pthread_mutex_t* m; + bool set; + + void check_for_interruption() + { + if(thread_info->interrupt_requested) + { + thread_info->interrupt_requested=false; + throw thread_interrupted(); + } + } + + void operator=(interruption_checker&); + public: + explicit interruption_checker(pthread_mutex_t* cond_mutex,pthread_cond_t* cond): + thread_info(detail::get_current_thread_data()),m(cond_mutex), + set(thread_info && thread_info->interrupt_enabled) + { + if(set) + { + lock_guard guard(thread_info->data_mutex); + check_for_interruption(); + thread_info->cond_mutex=cond_mutex; + thread_info->current_cond=cond; + BOOST_VERIFY(!pthread_mutex_lock(m)); + } + else + { + BOOST_VERIFY(!pthread_mutex_lock(m)); + } + } + ~interruption_checker() + { + if(set) + { + BOOST_VERIFY(!pthread_mutex_unlock(m)); + lock_guard guard(thread_info->data_mutex); + thread_info->cond_mutex=NULL; + thread_info->current_cond=NULL; + } + else + { + BOOST_VERIFY(!pthread_mutex_unlock(m)); + } + } + }; + } + + namespace this_thread + { + void BOOST_THREAD_DECL yield(); + +#ifdef __DECXXX + /// Workaround of DECCXX issue of incorrect template substitution + template + inline void sleep(TimeDuration const& rel_time) + { + this_thread::sleep(get_system_time()+rel_time); + } + + template<> + void BOOST_THREAD_DECL sleep(system_time const& abs_time); +#else + void BOOST_THREAD_DECL sleep(system_time const& abs_time); + + template + inline BOOST_SYMBOL_VISIBLE void sleep(TimeDuration const& rel_time) + { + this_thread::sleep(get_system_time()+rel_time); + } +#endif + } +} + +#include + +#endif diff --git a/external/boost/thread/pthread/thread_heap_alloc.hpp b/external/boost/thread/pthread/thread_heap_alloc.hpp new file mode 100644 index 0000000..737c298 --- /dev/null +++ b/external/boost/thread/pthread/thread_heap_alloc.hpp @@ -0,0 +1,242 @@ +// Distributed under the 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 2008 Anthony Williams +#ifndef THREAD_HEAP_ALLOC_PTHREAD_HPP +#define THREAD_HEAP_ALLOC_PTHREAD_HPP + +#include + +namespace boost +{ + namespace detail + { + template + inline T* heap_new() + { + return new T(); + } + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + inline T* heap_new(A1&& a1) + { + return new T(static_cast(a1)); + } + template + inline T* heap_new(A1&& a1,A2&& a2) + { + return new T(static_cast(a1),static_cast(a2)); + } + template + inline T* heap_new(A1&& a1,A2&& a2,A3&& a3) + { + return new T(static_cast(a1),static_cast(a2), + static_cast(a3)); + } + template + inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4) + { + return new T(static_cast(a1),static_cast(a2), + static_cast(a3),static_cast(a4)); + } +#else + template + inline T* heap_new_impl(A1 a1) + { + return new T(a1); + } + template + inline T* heap_new_impl(A1 a1,A2 a2) + { + return new T(a1,a2); + } + template + inline T* heap_new_impl(A1 a1,A2 a2,A3 a3) + { + return new T(a1,a2,a3); + } + template + inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4) + { + return new T(a1,a2,a3,a4); + } + + template + inline T* heap_new(A1 const& a1) + { + return heap_new_impl(a1); + } + template + inline T* heap_new(A1& a1) + { + return heap_new_impl(a1); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2) + { + return heap_new_impl(a1,a2); + } + template + inline T* heap_new(A1& a1,A2 const& a2) + { + return heap_new_impl(a1,a2); + } + template + inline T* heap_new(A1 const& a1,A2& a2) + { + return heap_new_impl(a1,a2); + } + template + inline T* heap_new(A1& a1,A2& a2) + { + return heap_new_impl(a1,a2); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + +#endif + template + inline void heap_delete(T* data) + { + delete data; + } + + template + struct do_heap_delete + { + void operator()(T* data) const + { + detail::heap_delete(data); + } + }; + } +} + +#include + +#endif diff --git a/external/boost/thread/pthread/timespec.hpp b/external/boost/thread/pthread/timespec.hpp new file mode 100644 index 0000000..d7465c1 --- /dev/null +++ b/external/boost/thread/pthread/timespec.hpp @@ -0,0 +1,36 @@ +#ifndef BOOST_THREAD_PTHREAD_TIMESPEC_HPP +#define BOOST_THREAD_PTHREAD_TIMESPEC_HPP +// (C) Copyright 2007-8 Anthony Williams +// +// Distributed under the 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 +#include +#include +#ifndef _WIN32 +#include +#endif + +#include + +namespace boost +{ + namespace detail + { + inline struct timespec get_timespec(boost::system_time const& abs_time) + { + struct timespec timeout={0,0}; + boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0); + + timeout.tv_sec=time_since_epoch.total_seconds(); + timeout.tv_nsec=(long)(time_since_epoch.fractional_seconds()*(1000000000l/time_since_epoch.ticks_per_second())); + return timeout; + } + } +} + +#include + +#endif diff --git a/external/boost/thread/shared_mutex.hpp b/external/boost/thread/shared_mutex.hpp new file mode 100644 index 0000000..51eda0d --- /dev/null +++ b/external/boost/thread/shared_mutex.hpp @@ -0,0 +1,21 @@ +#ifndef BOOST_THREAD_SHARED_MUTEX_HPP +#define BOOST_THREAD_SHARED_MUTEX_HPP + +// shared_mutex.hpp +// +// (C) Copyright 2007 Anthony Williams +// +// Distributed under the 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 +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +#include +#else +#error "Boost threads unavailable on this platform" +#endif + +#endif diff --git a/external/boost/thread/thread.hpp b/external/boost/thread/thread.hpp new file mode 100644 index 0000000..fdfdadc --- /dev/null +++ b/external/boost/thread/thread.hpp @@ -0,0 +1,27 @@ +#ifndef BOOST_THREAD_THREAD_HPP +#define BOOST_THREAD_THREAD_HPP + +// thread.hpp +// +// (C) Copyright 2007-8 Anthony Williams +// +// Distributed under the 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 + +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +#include +#else +#error "Boost threads unavailable on this platform" +#endif + +#include +#include +#include + + +#endif diff --git a/external/boost/thread/thread_time.hpp b/external/boost/thread/thread_time.hpp new file mode 100644 index 0000000..ffdcf85 --- /dev/null +++ b/external/boost/thread/thread_time.hpp @@ -0,0 +1,55 @@ +#ifndef BOOST_THREAD_TIME_HPP +#define BOOST_THREAD_TIME_HPP +// (C) Copyright 2007 Anthony Williams +// +// Distributed under the 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 +#include +#include + +#include + +namespace boost +{ + typedef boost::posix_time::ptime system_time; + + inline system_time get_system_time() + { +#if defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK) + return boost::date_time::microsec_clock::universal_time(); +#else // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK) + return boost::date_time::second_clock::universal_time(); +#endif // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK) + } + + namespace detail + { + inline system_time get_system_time_sentinel() + { + return system_time(boost::posix_time::pos_infin); + } + + inline unsigned long get_milliseconds_until(system_time const& target_time) + { + if(target_time.is_pos_infinity()) + { + return ~(unsigned long)0; + } + system_time const now=get_system_time(); + if(target_time<=now) + { + return 0; + } + return static_cast((target_time-now).total_milliseconds()+1); + } + + } + +} + +#include + +#endif diff --git a/external/boost/thread/tss.hpp b/external/boost/thread/tss.hpp new file mode 100644 index 0000000..c920024 --- /dev/null +++ b/external/boost/thread/tss.hpp @@ -0,0 +1,113 @@ +#ifndef BOOST_THREAD_TSS_HPP +#define BOOST_THREAD_TSS_HPP +// Distributed under the 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 2007-8 Anthony Williams + +#include +#include +#include + +#include + +namespace boost +{ + namespace detail + { + struct tss_cleanup_function + { + virtual ~tss_cleanup_function() + {} + + virtual void operator()(void* data)=0; + }; + + BOOST_THREAD_DECL void set_tss_data(void const* key,boost::shared_ptr func,void* tss_data,bool cleanup_existing); + BOOST_THREAD_DECL void* get_tss_data(void const* key); + } + + template + class thread_specific_ptr + { + private: + thread_specific_ptr(thread_specific_ptr&); + thread_specific_ptr& operator=(thread_specific_ptr&); + + struct delete_data: + detail::tss_cleanup_function + { + void operator()(void* data) + { + delete static_cast(data); + } + }; + + struct run_custom_cleanup_function: + detail::tss_cleanup_function + { + void (*cleanup_function)(T*); + + explicit run_custom_cleanup_function(void (*cleanup_function_)(T*)): + cleanup_function(cleanup_function_) + {} + + void operator()(void* data) + { + cleanup_function(static_cast(data)); + } + }; + + + boost::shared_ptr cleanup; + + public: + typedef T element_type; + + thread_specific_ptr(): + cleanup(detail::heap_new(),detail::do_heap_delete()) + {} + explicit thread_specific_ptr(void (*func_)(T*)) + { + if(func_) + { + cleanup.reset(detail::heap_new(func_),detail::do_heap_delete()); + } + } + ~thread_specific_ptr() + { + detail::set_tss_data(this,boost::shared_ptr(),0,true); + } + + T* get() const + { + return static_cast(detail::get_tss_data(this)); + } + T* operator->() const + { + return get(); + } + T& operator*() const + { + return *get(); + } + T* release() + { + T* const temp=get(); + detail::set_tss_data(this,boost::shared_ptr(),0,false); + return temp; + } + void reset(T* new_value=0) + { + T* const current_value=get(); + if(current_value!=new_value) + { + detail::set_tss_data(this,cleanup,new_value,true); + } + } + }; +} + +#include + +#endif diff --git a/external/boost/thread/win32/basic_timed_mutex.hpp b/external/boost/thread/win32/basic_timed_mutex.hpp new file mode 100644 index 0000000..a88c2a0 --- /dev/null +++ b/external/boost/thread/win32/basic_timed_mutex.hpp @@ -0,0 +1,209 @@ +#ifndef BOOST_BASIC_TIMED_MUTEX_WIN32_HPP +#define BOOST_BASIC_TIMED_MUTEX_WIN32_HPP + +// basic_timed_mutex_win32.hpp +// +// (C) Copyright 2006-8 Anthony Williams +// +// Distributed under the 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 +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + namespace detail + { + struct basic_timed_mutex + { + BOOST_STATIC_CONSTANT(unsigned char,lock_flag_bit=31); + BOOST_STATIC_CONSTANT(unsigned char,event_set_flag_bit=30); + BOOST_STATIC_CONSTANT(long,lock_flag_value=1< + bool timed_lock(Duration const& timeout) + { + return timed_lock(get_system_time()+timeout); + } + + bool timed_lock(boost::xtime const& timeout) + { + return timed_lock(system_time(timeout)); + } + + void unlock() + { + long const offset=lock_flag_value; + long const old_count=BOOST_INTERLOCKED_EXCHANGE_ADD(&active_count,lock_flag_value); + if(!(old_count&event_set_flag_value) && (old_count>offset)) + { + if(!win32::interlocked_bit_test_and_set(&active_count,event_set_flag_bit)) + { + win32::SetEvent(get_event()); + } + } + } + + private: + void* get_event() + { + void* current_event=::boost::detail::interlocked_read_acquire(&event); + + if(!current_event) + { + void* const new_event=win32::create_anonymous_event(win32::auto_reset_event,win32::event_initially_reset); +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4311) +#pragma warning(disable:4312) +#endif + void* const old_event=BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(&event,new_event,0); +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + if(old_event!=0) + { + win32::CloseHandle(new_event); + return old_event; + } + else + { + return new_event; + } + } + return current_event; + } + + }; + + } +} + +#define BOOST_BASIC_TIMED_MUTEX_INITIALIZER {0} + +#include + +#endif diff --git a/external/boost/thread/win32/condition_variable.hpp b/external/boost/thread/win32/condition_variable.hpp new file mode 100644 index 0000000..056bda8 --- /dev/null +++ b/external/boost/thread/win32/condition_variable.hpp @@ -0,0 +1,418 @@ +#ifndef BOOST_THREAD_CONDITION_VARIABLE_WIN32_HPP +#define BOOST_THREAD_CONDITION_VARIABLE_WIN32_HPP +// Distributed under the 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 2007-8 Anthony Williams + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + namespace detail + { + class basic_cv_list_entry; + void intrusive_ptr_add_ref(basic_cv_list_entry * p); + void intrusive_ptr_release(basic_cv_list_entry * p); + + class basic_cv_list_entry + { + private: + detail::win32::handle_manager semaphore; + detail::win32::handle_manager wake_sem; + long waiters; + bool notified; + long references; + + basic_cv_list_entry(basic_cv_list_entry&); + void operator=(basic_cv_list_entry&); + + public: + explicit basic_cv_list_entry(detail::win32::handle_manager const& wake_sem_): + semaphore(detail::win32::create_anonymous_semaphore(0,LONG_MAX)), + wake_sem(wake_sem_.duplicate()), + waiters(1),notified(false),references(0) + {} + + static bool no_waiters(boost::intrusive_ptr const& entry) + { + return !detail::interlocked_read_acquire(&entry->waiters); + } + + void add_waiter() + { + BOOST_INTERLOCKED_INCREMENT(&waiters); + } + + void remove_waiter() + { + BOOST_INTERLOCKED_DECREMENT(&waiters); + } + + void release(unsigned count_to_release) + { + notified=true; + detail::win32::ReleaseSemaphore(semaphore,count_to_release,0); + } + + void release_waiters() + { + release(detail::interlocked_read_acquire(&waiters)); + } + + bool is_notified() const + { + return notified; + } + + bool wait(timeout wait_until) + { + return this_thread::interruptible_wait(semaphore,wait_until); + } + + bool woken() + { + unsigned long const woken_result=detail::win32::WaitForSingleObject(wake_sem,0); + BOOST_ASSERT((woken_result==detail::win32::timeout) || (woken_result==0)); + return woken_result==0; + } + + friend void intrusive_ptr_add_ref(basic_cv_list_entry * p); + friend void intrusive_ptr_release(basic_cv_list_entry * p); + }; + + inline void intrusive_ptr_add_ref(basic_cv_list_entry * p) + { + BOOST_INTERLOCKED_INCREMENT(&p->references); + } + + inline void intrusive_ptr_release(basic_cv_list_entry * p) + { + if(!BOOST_INTERLOCKED_DECREMENT(&p->references)) + { + delete p; + } + } + + class basic_condition_variable + { + boost::mutex internal_mutex; + long total_count; + unsigned active_generation_count; + + typedef basic_cv_list_entry list_entry; + + typedef boost::intrusive_ptr entry_ptr; + typedef std::vector generation_list; + + generation_list generations; + detail::win32::handle_manager wake_sem; + + void wake_waiters(long count_to_wake) + { + detail::interlocked_write_release(&total_count,total_count-count_to_wake); + detail::win32::ReleaseSemaphore(wake_sem,count_to_wake,0); + } + + template + struct relocker + { + lock_type& lock; + bool unlocked; + + relocker(lock_type& lock_): + lock(lock_),unlocked(false) + {} + void unlock() + { + lock.unlock(); + unlocked=true; + } + ~relocker() + { + if(unlocked) + { + lock.lock(); + } + + } + private: + relocker(relocker&); + void operator=(relocker&); + }; + + + entry_ptr get_wait_entry() + { + boost::lock_guard internal_lock(internal_mutex); + + if(!wake_sem) + { + wake_sem=detail::win32::create_anonymous_semaphore(0,LONG_MAX); + BOOST_ASSERT(wake_sem); + } + + detail::interlocked_write_release(&total_count,total_count+1); + if(generations.empty() || generations.back()->is_notified()) + { + entry_ptr new_entry(new list_entry(wake_sem)); + generations.push_back(new_entry); + return new_entry; + } + else + { + generations.back()->add_waiter(); + return generations.back(); + } + } + + struct entry_manager + { + entry_ptr const entry; + + entry_manager(entry_ptr const& entry_): + entry(entry_) + {} + + ~entry_manager() + { + entry->remove_waiter(); + } + + list_entry* operator->() + { + return entry.get(); + } + + private: + void operator=(entry_manager&); + entry_manager(entry_manager&); + }; + + + protected: + template + bool do_wait(lock_type& lock,timeout wait_until) + { + relocker locker(lock); + + entry_manager entry(get_wait_entry()); + + locker.unlock(); + + bool woken=false; + while(!woken) + { + if(!entry->wait(wait_until)) + { + return false; + } + + woken=entry->woken(); + } + return woken; + } + + template + bool do_wait(lock_type& m,timeout const& wait_until,predicate_type pred) + { + while (!pred()) + { + if(!do_wait(m, wait_until)) + return pred(); + } + return true; + } + + basic_condition_variable(const basic_condition_variable& other); + basic_condition_variable& operator=(const basic_condition_variable& other); + + public: + basic_condition_variable(): + total_count(0),active_generation_count(0),wake_sem(0) + {} + + ~basic_condition_variable() + {} + + void notify_one() + { + if(detail::interlocked_read_acquire(&total_count)) + { + boost::lock_guard internal_lock(internal_mutex); + if(!total_count) + { + return; + } + wake_waiters(1); + + for(generation_list::iterator it=generations.begin(), + end=generations.end(); + it!=end;++it) + { + (*it)->release(1); + } + generations.erase(std::remove_if(generations.begin(),generations.end(),&basic_cv_list_entry::no_waiters),generations.end()); + } + } + + void notify_all() + { + if(detail::interlocked_read_acquire(&total_count)) + { + boost::lock_guard internal_lock(internal_mutex); + if(!total_count) + { + return; + } + wake_waiters(total_count); + for(generation_list::iterator it=generations.begin(), + end=generations.end(); + it!=end;++it) + { + (*it)->release_waiters(); + } + generations.clear(); + wake_sem=detail::win32::handle(0); + } + } + + }; + } + + class condition_variable: + private detail::basic_condition_variable + { + private: + condition_variable(condition_variable&); + void operator=(condition_variable&); + public: + condition_variable() + {} + + using detail::basic_condition_variable::notify_one; + using detail::basic_condition_variable::notify_all; + + void wait(unique_lock& m) + { + do_wait(m,detail::timeout::sentinel()); + } + + template + void wait(unique_lock& m,predicate_type pred) + { + while(!pred()) wait(m); + } + + + bool timed_wait(unique_lock& m,boost::system_time const& wait_until) + { + return do_wait(m,wait_until); + } + + bool timed_wait(unique_lock& m,boost::xtime const& wait_until) + { + return do_wait(m,system_time(wait_until)); + } + template + bool timed_wait(unique_lock& m,duration_type const& wait_duration) + { + return do_wait(m,wait_duration.total_milliseconds()); + } + + template + bool timed_wait(unique_lock& m,boost::system_time const& wait_until,predicate_type pred) + { + return do_wait(m,wait_until,pred); + } + template + bool timed_wait(unique_lock& m,boost::xtime const& wait_until,predicate_type pred) + { + return do_wait(m,system_time(wait_until),pred); + } + template + bool timed_wait(unique_lock& m,duration_type const& wait_duration,predicate_type pred) + { + return do_wait(m,wait_duration.total_milliseconds(),pred); + } + }; + + class condition_variable_any: + private detail::basic_condition_variable + { + private: + condition_variable_any(condition_variable_any&); + void operator=(condition_variable_any&); + public: + condition_variable_any() + {} + + using detail::basic_condition_variable::notify_one; + using detail::basic_condition_variable::notify_all; + + template + void wait(lock_type& m) + { + do_wait(m,detail::timeout::sentinel()); + } + + template + void wait(lock_type& m,predicate_type pred) + { + while(!pred()) wait(m); + } + + template + bool timed_wait(lock_type& m,boost::system_time const& wait_until) + { + return do_wait(m,wait_until); + } + + template + bool timed_wait(lock_type& m,boost::xtime const& wait_until) + { + return do_wait(m,system_time(wait_until)); + } + + template + bool timed_wait(lock_type& m,duration_type const& wait_duration) + { + return do_wait(m,wait_duration.total_milliseconds()); + } + + template + bool timed_wait(lock_type& m,boost::system_time const& wait_until,predicate_type pred) + { + return do_wait(m,wait_until,pred); + } + + template + bool timed_wait(lock_type& m,boost::xtime const& wait_until,predicate_type pred) + { + return do_wait(m,system_time(wait_until),pred); + } + + template + bool timed_wait(lock_type& m,duration_type const& wait_duration,predicate_type pred) + { + return do_wait(m,wait_duration.total_milliseconds(),pred); + } + }; + +} + +#include + +#endif diff --git a/external/boost/thread/win32/interlocked_read.hpp b/external/boost/thread/win32/interlocked_read.hpp new file mode 100644 index 0000000..133fb6f --- /dev/null +++ b/external/boost/thread/win32/interlocked_read.hpp @@ -0,0 +1,80 @@ +#ifndef BOOST_THREAD_DETAIL_INTERLOCKED_READ_WIN32_HPP +#define BOOST_THREAD_DETAIL_INTERLOCKED_READ_WIN32_HPP + +// interlocked_read_win32.hpp +// +// (C) Copyright 2005-8 Anthony Williams +// +// Distributed under the 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 + +#include + +#ifdef BOOST_MSVC + +extern "C" void _ReadWriteBarrier(void); +#pragma intrinsic(_ReadWriteBarrier) + +namespace boost +{ + namespace detail + { + inline long interlocked_read_acquire(long volatile* x) + { + long const res=*x; + _ReadWriteBarrier(); + return res; + } + inline void* interlocked_read_acquire(void* volatile* x) + { + void* const res=*x; + _ReadWriteBarrier(); + return res; + } + + inline void interlocked_write_release(long volatile* x,long value) + { + _ReadWriteBarrier(); + *x=value; + } + inline void interlocked_write_release(void* volatile* x,void* value) + { + _ReadWriteBarrier(); + *x=value; + } + } +} + +#else + +namespace boost +{ + namespace detail + { + inline long interlocked_read_acquire(long volatile* x) + { + return BOOST_INTERLOCKED_COMPARE_EXCHANGE(x,0,0); + } + inline void* interlocked_read_acquire(void* volatile* x) + { + return BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(x,0,0); + } + inline void interlocked_write_release(long volatile* x,long value) + { + BOOST_INTERLOCKED_EXCHANGE(x,value); + } + inline void interlocked_write_release(void* volatile* x,void* value) + { + BOOST_INTERLOCKED_EXCHANGE_POINTER(x,value); + } + } +} + +#endif + +#include + +#endif diff --git a/external/boost/thread/win32/mutex.hpp b/external/boost/thread/win32/mutex.hpp new file mode 100644 index 0000000..92b2669 --- /dev/null +++ b/external/boost/thread/win32/mutex.hpp @@ -0,0 +1,69 @@ +#ifndef BOOST_THREAD_WIN32_MUTEX_HPP +#define BOOST_THREAD_WIN32_MUTEX_HPP +// (C) Copyright 2005-7 Anthony Williams +// Distributed under the 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 +#include +#include +#include + +#include + +namespace boost +{ + namespace detail + { + typedef ::boost::detail::basic_timed_mutex underlying_mutex; + } + + class mutex: + public ::boost::detail::underlying_mutex + { + private: + mutex(mutex const&); + mutex& operator=(mutex const&); + public: + mutex() + { + initialize(); + } + ~mutex() + { + destroy(); + } + + typedef unique_lock scoped_lock; + typedef detail::try_lock_wrapper scoped_try_lock; + }; + + typedef mutex try_mutex; + + class timed_mutex: + public ::boost::detail::basic_timed_mutex + { + private: + timed_mutex(timed_mutex const&); + timed_mutex& operator=(timed_mutex const&); + public: + timed_mutex() + { + initialize(); + } + + ~timed_mutex() + { + destroy(); + } + + typedef unique_lock scoped_timed_lock; + typedef detail::try_lock_wrapper scoped_try_lock; + typedef scoped_timed_lock scoped_lock; + }; +} + +#include + +#endif diff --git a/external/boost/thread/win32/once.hpp b/external/boost/thread/win32/once.hpp new file mode 100644 index 0000000..e1b1843 --- /dev/null +++ b/external/boost/thread/win32/once.hpp @@ -0,0 +1,205 @@ +#ifndef BOOST_THREAD_WIN32_ONCE_HPP +#define BOOST_THREAD_WIN32_ONCE_HPP + +// once.hpp +// +// (C) Copyright 2005-7 Anthony Williams +// (C) Copyright 2005 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) + +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std +{ + using ::memcpy; + using ::ptrdiff_t; +} +#endif + +namespace boost +{ + struct once_flag + { + long status; + long count; + }; + +#define BOOST_ONCE_INIT {0,0} + + namespace detail + { +#ifdef BOOST_NO_ANSI_APIS + typedef wchar_t once_char_type; +#else + typedef char once_char_type; +#endif + unsigned const once_mutex_name_fixed_length=54; + unsigned const once_mutex_name_length=once_mutex_name_fixed_length+ + sizeof(void*)*2+sizeof(unsigned long)*2+1; + + template + void int_to_string(I p, once_char_type* buf) + { + for(unsigned i=0; i < sizeof(I)*2; ++i,++buf) + { +#ifdef BOOST_NO_ANSI_APIS + once_char_type const a=L'A'; +#else + once_char_type const a='A'; +#endif + *buf = a + static_cast((p >> (i*4)) & 0x0f); + } + *buf = 0; + } + + inline void name_once_mutex(once_char_type* mutex_name,void* flag_address) + { +#ifdef BOOST_NO_ANSI_APIS + static const once_char_type fixed_mutex_name[]=L"Local\\{C15730E2-145C-4c5e-B005-3BC753F42475}-once-flag"; +#else + static const once_char_type fixed_mutex_name[]="Local\\{C15730E2-145C-4c5e-B005-3BC753F42475}-once-flag"; +#endif + BOOST_STATIC_ASSERT(sizeof(fixed_mutex_name) == + (sizeof(once_char_type)*(once_mutex_name_fixed_length+1))); + + std::memcpy(mutex_name,fixed_mutex_name,sizeof(fixed_mutex_name)); + detail::int_to_string(reinterpret_cast(flag_address), + mutex_name + once_mutex_name_fixed_length); + detail::int_to_string(win32::GetCurrentProcessId(), + mutex_name + once_mutex_name_fixed_length + sizeof(void*)*2); + } + + inline void* open_once_event(once_char_type* mutex_name,void* flag_address) + { + if(!*mutex_name) + { + name_once_mutex(mutex_name,flag_address); + } + +#ifdef BOOST_NO_ANSI_APIS + return ::boost::detail::win32::OpenEventW( +#else + return ::boost::detail::win32::OpenEventA( +#endif + ::boost::detail::win32::synchronize | + ::boost::detail::win32::event_modify_state, + false, + mutex_name); + } + + inline void* create_once_event(once_char_type* mutex_name,void* flag_address) + { + if(!*mutex_name) + { + name_once_mutex(mutex_name,flag_address); + } +#ifdef BOOST_NO_ANSI_APIS + return ::boost::detail::win32::CreateEventW( +#else + return ::boost::detail::win32::CreateEventA( +#endif + 0,::boost::detail::win32::manual_reset_event, + ::boost::detail::win32::event_initially_reset, + mutex_name); + } + } + + + template + void call_once(once_flag& flag,Function f) + { + // Try for a quick win: if the procedure has already been called + // just skip through: + long const function_complete_flag_value=0xc15730e2; + long const running_value=0x7f0725e3; + long status; + bool counted=false; + detail::win32::handle_manager event_handle; + detail::once_char_type mutex_name[detail::once_mutex_name_length]; + mutex_name[0]=0; + + while((status=::boost::detail::interlocked_read_acquire(&flag.status)) + !=function_complete_flag_value) + { + status=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&flag.status,running_value,0); + if(!status) + { + try + { + if(!event_handle) + { + event_handle=detail::open_once_event(mutex_name,&flag); + } + if(event_handle) + { + ::boost::detail::win32::ResetEvent(event_handle); + } + f(); + if(!counted) + { + BOOST_INTERLOCKED_INCREMENT(&flag.count); + counted=true; + } + BOOST_INTERLOCKED_EXCHANGE(&flag.status,function_complete_flag_value); + if(!event_handle && + (::boost::detail::interlocked_read_acquire(&flag.count)>1)) + { + event_handle=detail::create_once_event(mutex_name,&flag); + } + if(event_handle) + { + ::boost::detail::win32::SetEvent(event_handle); + } + break; + } + catch(...) + { + BOOST_INTERLOCKED_EXCHANGE(&flag.status,0); + if(!event_handle) + { + event_handle=detail::open_once_event(mutex_name,&flag); + } + if(event_handle) + { + ::boost::detail::win32::SetEvent(event_handle); + } + throw; + } + } + + if(!counted) + { + BOOST_INTERLOCKED_INCREMENT(&flag.count); + counted=true; + status=::boost::detail::interlocked_read_acquire(&flag.status); + if(status==function_complete_flag_value) + { + break; + } + if(!event_handle) + { + event_handle=detail::create_once_event(mutex_name,&flag); + continue; + } + } + BOOST_VERIFY(!::boost::detail::win32::WaitForSingleObject( + event_handle,::boost::detail::win32::infinite)); + } + } +} + +#include + +#endif diff --git a/external/boost/thread/win32/shared_mutex.hpp b/external/boost/thread/win32/shared_mutex.hpp new file mode 100644 index 0000000..aee4039 --- /dev/null +++ b/external/boost/thread/win32/shared_mutex.hpp @@ -0,0 +1,619 @@ +#ifndef BOOST_THREAD_WIN32_SHARED_MUTEX_HPP +#define BOOST_THREAD_WIN32_SHARED_MUTEX_HPP + +// (C) Copyright 2006-8 Anthony Williams +// +// Distributed under the 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 +#include +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + class shared_mutex + { + private: + shared_mutex(shared_mutex const&); + shared_mutex& operator=(shared_mutex const&); + private: + struct state_data + { + unsigned shared_count:11, + shared_waiting:11, + exclusive:1, + upgrade:1, + exclusive_waiting:7, + exclusive_waiting_blocked:1; + + friend bool operator==(state_data const& lhs,state_data const& rhs) + { + return *reinterpret_cast(&lhs)==*reinterpret_cast(&rhs); + } + }; + + + template + T interlocked_compare_exchange(T* target,T new_value,T comparand) + { + BOOST_STATIC_ASSERT(sizeof(T)==sizeof(long)); + long const res=BOOST_INTERLOCKED_COMPARE_EXCHANGE(reinterpret_cast(target), + *reinterpret_cast(&new_value), + *reinterpret_cast(&comparand)); + return *reinterpret_cast(&res); + } + + enum + { + unlock_sem = 0, + exclusive_sem = 1 + }; + + state_data state; + detail::win32::handle semaphores[2]; + detail::win32::handle upgrade_sem; + + void release_waiters(state_data old_state) + { + if(old_state.exclusive_waiting) + { + BOOST_VERIFY(detail::win32::ReleaseSemaphore(semaphores[exclusive_sem],1,0)!=0); + } + + if(old_state.shared_waiting || old_state.exclusive_waiting) + { + BOOST_VERIFY(detail::win32::ReleaseSemaphore(semaphores[unlock_sem],old_state.shared_waiting + (old_state.exclusive_waiting?1:0),0)!=0); + } + } + + + public: + shared_mutex() + { + semaphores[unlock_sem]=detail::win32::create_anonymous_semaphore(0,LONG_MAX); + semaphores[exclusive_sem]=detail::win32::create_anonymous_semaphore_nothrow(0,LONG_MAX); + if (!semaphores[exclusive_sem]) + { + detail::win32::release_semaphore(semaphores[unlock_sem],LONG_MAX); + boost::throw_exception(thread_resource_error()); + } + upgrade_sem=detail::win32::create_anonymous_semaphore_nothrow(0,LONG_MAX); + if (!upgrade_sem) + { + detail::win32::release_semaphore(semaphores[unlock_sem],LONG_MAX); + detail::win32::release_semaphore(semaphores[exclusive_sem],LONG_MAX); + boost::throw_exception(thread_resource_error()); + } + state_data state_={0}; + state=state_; + } + + ~shared_mutex() + { + detail::win32::CloseHandle(upgrade_sem); + detail::win32::CloseHandle(semaphores[unlock_sem]); + detail::win32::CloseHandle(semaphores[exclusive_sem]); + } + + bool try_lock_shared() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + if(!new_state.exclusive && !new_state.exclusive_waiting_blocked) + { + ++new_state.shared_count; + if(!new_state.shared_count) + { + return false; + } + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + return !(old_state.exclusive| old_state.exclusive_waiting_blocked); + } + + void lock_shared() + { + BOOST_VERIFY(timed_lock_shared(::boost::detail::get_system_time_sentinel())); + } + + template + bool timed_lock_shared(TimeDuration const & relative_time) + { + return timed_lock_shared(get_system_time()+relative_time); + } + + bool timed_lock_shared(boost::system_time const& wait_until) + { + for(;;) + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + if(new_state.exclusive || new_state.exclusive_waiting_blocked) + { + ++new_state.shared_waiting; + if(!new_state.shared_waiting) + { + boost::throw_exception(boost::lock_error()); + } + } + else + { + ++new_state.shared_count; + if(!new_state.shared_count) + { + boost::throw_exception(boost::lock_error()); + } + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + + if(!(old_state.exclusive| old_state.exclusive_waiting_blocked)) + { + return true; + } + + unsigned long const res=detail::win32::WaitForSingleObject(semaphores[unlock_sem],::boost::detail::get_milliseconds_until(wait_until)); + if(res==detail::win32::timeout) + { + for(;;) + { + state_data new_state=old_state; + if(new_state.exclusive || new_state.exclusive_waiting_blocked) + { + if(new_state.shared_waiting) + { + --new_state.shared_waiting; + } + } + else + { + ++new_state.shared_count; + if(!new_state.shared_count) + { + return false; + } + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + + if(!(old_state.exclusive| old_state.exclusive_waiting_blocked)) + { + return true; + } + return false; + } + + BOOST_ASSERT(res==0); + } + } + + void unlock_shared() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + bool const last_reader=!--new_state.shared_count; + + if(last_reader) + { + if(new_state.upgrade) + { + new_state.upgrade=false; + new_state.exclusive=true; + } + else + { + if(new_state.exclusive_waiting) + { + --new_state.exclusive_waiting; + new_state.exclusive_waiting_blocked=false; + } + new_state.shared_waiting=0; + } + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + if(last_reader) + { + if(old_state.upgrade) + { + BOOST_VERIFY(detail::win32::ReleaseSemaphore(upgrade_sem,1,0)!=0); + } + else + { + release_waiters(old_state); + } + } + break; + } + old_state=current_state; + } + } + + void lock() + { + BOOST_VERIFY(timed_lock(::boost::detail::get_system_time_sentinel())); + } + + template + bool timed_lock(TimeDuration const & relative_time) + { + return timed_lock(get_system_time()+relative_time); + } + + bool try_lock() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + if(new_state.shared_count || new_state.exclusive) + { + return false; + } + else + { + new_state.exclusive=true; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + return true; + } + + + bool timed_lock(boost::system_time const& wait_until) + { + for(;;) + { + state_data old_state=state; + + for(;;) + { + state_data new_state=old_state; + if(new_state.shared_count || new_state.exclusive) + { + ++new_state.exclusive_waiting; + if(!new_state.exclusive_waiting) + { + boost::throw_exception(boost::lock_error()); + } + + new_state.exclusive_waiting_blocked=true; + } + else + { + new_state.exclusive=true; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + + if(!old_state.shared_count && !old_state.exclusive) + { + return true; + } + #ifndef UNDER_CE + const bool wait_all = true; + #else + const bool wait_all = false; + #endif + unsigned long const wait_res=detail::win32::WaitForMultipleObjects(2,semaphores,wait_all,::boost::detail::get_milliseconds_until(wait_until)); + if(wait_res==detail::win32::timeout) + { + for(;;) + { + state_data new_state=old_state; + if(new_state.shared_count || new_state.exclusive) + { + if(new_state.exclusive_waiting) + { + if(!--new_state.exclusive_waiting) + { + new_state.exclusive_waiting_blocked=false; + } + } + } + else + { + new_state.exclusive=true; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + if(!old_state.shared_count && !old_state.exclusive) + { + return true; + } + return false; + } + BOOST_ASSERT(wait_res<2); + } + } + + void unlock() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + new_state.exclusive=false; + if(new_state.exclusive_waiting) + { + --new_state.exclusive_waiting; + new_state.exclusive_waiting_blocked=false; + } + new_state.shared_waiting=0; + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + release_waiters(old_state); + } + + void lock_upgrade() + { + for(;;) + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + if(new_state.exclusive || new_state.exclusive_waiting_blocked || new_state.upgrade) + { + ++new_state.shared_waiting; + if(!new_state.shared_waiting) + { + boost::throw_exception(boost::lock_error()); + } + } + else + { + ++new_state.shared_count; + if(!new_state.shared_count) + { + boost::throw_exception(boost::lock_error()); + } + new_state.upgrade=true; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + + if(!(old_state.exclusive|| old_state.exclusive_waiting_blocked|| old_state.upgrade)) + { + return; + } + + BOOST_VERIFY(!detail::win32::WaitForSingleObject(semaphores[unlock_sem],detail::win32::infinite)); + } + } + + bool try_lock_upgrade() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + if(new_state.exclusive || new_state.exclusive_waiting_blocked || new_state.upgrade) + { + return false; + } + else + { + ++new_state.shared_count; + if(!new_state.shared_count) + { + return false; + } + new_state.upgrade=true; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + return true; + } + + void unlock_upgrade() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + new_state.upgrade=false; + bool const last_reader=!--new_state.shared_count; + + if(last_reader) + { + if(new_state.exclusive_waiting) + { + --new_state.exclusive_waiting; + new_state.exclusive_waiting_blocked=false; + } + new_state.shared_waiting=0; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + if(last_reader) + { + release_waiters(old_state); + } + break; + } + old_state=current_state; + } + } + + void unlock_upgrade_and_lock() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + bool const last_reader=!--new_state.shared_count; + + if(last_reader) + { + new_state.upgrade=false; + new_state.exclusive=true; + } + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + if(!last_reader) + { + BOOST_VERIFY(!detail::win32::WaitForSingleObject(upgrade_sem,detail::win32::infinite)); + } + break; + } + old_state=current_state; + } + } + + void unlock_and_lock_upgrade() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + new_state.exclusive=false; + new_state.upgrade=true; + ++new_state.shared_count; + if(new_state.exclusive_waiting) + { + --new_state.exclusive_waiting; + new_state.exclusive_waiting_blocked=false; + } + new_state.shared_waiting=0; + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + release_waiters(old_state); + } + + void unlock_and_lock_shared() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + new_state.exclusive=false; + ++new_state.shared_count; + if(new_state.exclusive_waiting) + { + --new_state.exclusive_waiting; + new_state.exclusive_waiting_blocked=false; + } + new_state.shared_waiting=0; + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + release_waiters(old_state); + } + + void unlock_upgrade_and_lock_shared() + { + state_data old_state=state; + for(;;) + { + state_data new_state=old_state; + new_state.upgrade=false; + if(new_state.exclusive_waiting) + { + --new_state.exclusive_waiting; + new_state.exclusive_waiting_blocked=false; + } + new_state.shared_waiting=0; + + state_data const current_state=interlocked_compare_exchange(&state,new_state,old_state); + if(current_state==old_state) + { + break; + } + old_state=current_state; + } + release_waiters(old_state); + } + + }; +} + +#include + +#endif diff --git a/external/boost/thread/win32/thread_data.hpp b/external/boost/thread/win32/thread_data.hpp new file mode 100644 index 0000000..d5303d8 --- /dev/null +++ b/external/boost/thread/win32/thread_data.hpp @@ -0,0 +1,183 @@ +#ifndef BOOST_THREAD_PTHREAD_THREAD_DATA_HPP +#define BOOST_THREAD_PTHREAD_THREAD_DATA_HPP +// Distributed under the 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 2008 Anthony Williams + +#include +#include +#include +#include +#include + +#include + +namespace boost +{ + namespace detail + { + struct thread_exit_callback_node; + struct tss_data_node; + + struct thread_data_base; + void intrusive_ptr_add_ref(thread_data_base * p); + void intrusive_ptr_release(thread_data_base * p); + + struct BOOST_SYMBOL_VISIBLE thread_data_base + { + long count; + detail::win32::handle_manager thread_handle; + detail::win32::handle_manager interruption_handle; + boost::detail::thread_exit_callback_node* thread_exit_callbacks; + boost::detail::tss_data_node* tss_data; + bool interruption_enabled; + unsigned id; + + thread_data_base(): + count(0),thread_handle(detail::win32::invalid_handle_value), + interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset)), + thread_exit_callbacks(0),tss_data(0), + interruption_enabled(true), + id(0) + {} + virtual ~thread_data_base() + {} + + friend void intrusive_ptr_add_ref(thread_data_base * p) + { + BOOST_INTERLOCKED_INCREMENT(&p->count); + } + + friend void intrusive_ptr_release(thread_data_base * p) + { + if(!BOOST_INTERLOCKED_DECREMENT(&p->count)) + { + detail::heap_delete(p); + } + } + + void interrupt() + { + BOOST_VERIFY(detail::win32::SetEvent(interruption_handle)!=0); + } + + typedef detail::win32::handle native_handle_type; + + virtual void run()=0; + }; + + typedef boost::intrusive_ptr thread_data_ptr; + + struct BOOST_SYMBOL_VISIBLE timeout + { + unsigned long start; + uintmax_t milliseconds; + bool relative; + boost::system_time abs_time; + + static unsigned long const max_non_infinite_wait=0xfffffffe; + + timeout(uintmax_t milliseconds_): + start(win32::GetTickCount()), + milliseconds(milliseconds_), + relative(true), + abs_time(boost::get_system_time()) + {} + + timeout(boost::system_time const& abs_time_): + start(win32::GetTickCount()), + milliseconds(0), + relative(false), + abs_time(abs_time_) + {} + + struct BOOST_SYMBOL_VISIBLE remaining_time + { + bool more; + unsigned long milliseconds; + + remaining_time(uintmax_t remaining): + more(remaining>max_non_infinite_wait), + milliseconds(more?max_non_infinite_wait:(unsigned long)remaining) + {} + }; + + remaining_time remaining_milliseconds() const + { + if(is_sentinel()) + { + return remaining_time(win32::infinite); + } + else if(relative) + { + unsigned long const now=win32::GetTickCount(); + unsigned long const elapsed=now-start; + return remaining_time((elapsed + inline BOOST_SYMBOL_VISIBLE void sleep(TimeDuration const& rel_time) + { + interruptible_wait(detail::pin_to_zero(rel_time.total_milliseconds())); + } + inline BOOST_SYMBOL_VISIBLE void sleep(system_time const& abs_time) + { + interruptible_wait(abs_time); + } + } + +} + +#include + +#endif diff --git a/external/boost/thread/win32/thread_heap_alloc.hpp b/external/boost/thread/win32/thread_heap_alloc.hpp new file mode 100644 index 0000000..b7d329f --- /dev/null +++ b/external/boost/thread/win32/thread_heap_alloc.hpp @@ -0,0 +1,398 @@ +// Distributed under the 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 2007 Anthony Williams +#ifndef THREAD_HEAP_ALLOC_HPP +#define THREAD_HEAP_ALLOC_HPP +#include +#include +#include +#include +#include + +#if defined( BOOST_USE_WINDOWS_H ) +# include + +namespace boost +{ + namespace detail + { + namespace win32 + { + using ::GetProcessHeap; + using ::HeapAlloc; + using ::HeapFree; + } + } +} + +#else + +# ifdef HeapAlloc +# undef HeapAlloc +# endif + +namespace boost +{ + namespace detail + { + namespace win32 + { + extern "C" + { + __declspec(dllimport) handle __stdcall GetProcessHeap(); + __declspec(dllimport) void* __stdcall HeapAlloc(handle,unsigned long,ulong_ptr); + __declspec(dllimport) int __stdcall HeapFree(handle,unsigned long,void*); + } + } + } +} + +#endif + +#include + +namespace boost +{ + namespace detail + { + inline void* allocate_raw_heap_memory(unsigned size) + { + void* const heap_memory=detail::win32::HeapAlloc(detail::win32::GetProcessHeap(),0,size); + if(!heap_memory) + { + boost::throw_exception(std::bad_alloc()); + } + return heap_memory; + } + + inline void free_raw_heap_memory(void* heap_memory) + { + BOOST_VERIFY(detail::win32::HeapFree(detail::win32::GetProcessHeap(),0,heap_memory)!=0); + } + + template + inline T* heap_new() + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + +#ifndef BOOST_NO_RVALUE_REFERENCES + template + inline T* heap_new(A1&& a1) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(static_cast(a1)); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + template + inline T* heap_new(A1&& a1,A2&& a2) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(static_cast(a1),static_cast(a2)); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + template + inline T* heap_new(A1&& a1,A2&& a2,A3&& a3) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(static_cast(a1),static_cast(a2), + static_cast(a3)); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + template + inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(static_cast(a1),static_cast(a2), + static_cast(a3),static_cast(a4)); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } +#else + template + inline T* heap_new_impl(A1 a1) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(a1); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + + template + inline T* heap_new_impl(A1 a1,A2 a2) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(a1,a2); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + + template + inline T* heap_new_impl(A1 a1,A2 a2,A3 a3) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(a1,a2,a3); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + + template + inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4) + { + void* const heap_memory=allocate_raw_heap_memory(sizeof(T)); + try + { + T* const data=new (heap_memory) T(a1,a2,a3,a4); + return data; + } + catch(...) + { + free_raw_heap_memory(heap_memory); + throw; + } + } + + + template + inline T* heap_new(A1 const& a1) + { + return heap_new_impl(a1); + } + template + inline T* heap_new(A1& a1) + { + return heap_new_impl(a1); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2) + { + return heap_new_impl(a1,a2); + } + template + inline T* heap_new(A1& a1,A2 const& a2) + { + return heap_new_impl(a1,a2); + } + template + inline T* heap_new(A1 const& a1,A2& a2) + { + return heap_new_impl(a1,a2); + } + template + inline T* heap_new(A1& a1,A2& a2) + { + return heap_new_impl(a1,a2); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2& a2,A3 const& a3) + { + return heap_new_impl(a1,a2,a3); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + template + inline T* heap_new(A1& a1,A2& a2,A3& a3) + { + return heap_new_impl(a1,a2,a3); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + + template + inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + template + inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4) + { + return heap_new_impl(a1,a2,a3,a4); + } + +#endif + template + inline void heap_delete(T* data) + { + data->~T(); + free_raw_heap_memory(data); + } + + template + struct do_heap_delete + { + void operator()(T* data) const + { + detail::heap_delete(data); + } + }; + } +} + +#include + + +#endif diff --git a/external/boost/thread/win32/thread_primitives.hpp b/external/boost/thread/win32/thread_primitives.hpp new file mode 100644 index 0000000..0166f37 --- /dev/null +++ b/external/boost/thread/win32/thread_primitives.hpp @@ -0,0 +1,416 @@ +#ifndef BOOST_WIN32_THREAD_PRIMITIVES_HPP +#define BOOST_WIN32_THREAD_PRIMITIVES_HPP + +// win32_thread_primitives.hpp +// +// (C) Copyright 2005-7 Anthony Williams +// (C) Copyright 2007 David Deakins +// +// Distributed under the 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 +#include +#include +#include +#include +#include + +#if defined( BOOST_USE_WINDOWS_H ) +# include + +namespace boost +{ + namespace detail + { + namespace win32 + { + typedef ULONG_PTR ulong_ptr; + typedef HANDLE handle; + unsigned const infinite=INFINITE; + unsigned const timeout=WAIT_TIMEOUT; + handle const invalid_handle_value=INVALID_HANDLE_VALUE; + unsigned const event_modify_state=EVENT_MODIFY_STATE; + unsigned const synchronize=SYNCHRONIZE; + +# ifdef BOOST_NO_ANSI_APIS + using ::CreateMutexW; + using ::CreateEventW; + using ::OpenEventW; + using ::CreateSemaphoreW; +# else + using ::CreateMutexA; + using ::CreateEventA; + using ::OpenEventA; + using ::CreateSemaphoreA; +# endif + using ::CloseHandle; + using ::ReleaseMutex; + using ::ReleaseSemaphore; + using ::SetEvent; + using ::ResetEvent; + using ::WaitForMultipleObjects; + using ::WaitForSingleObject; + using ::GetCurrentProcessId; + using ::GetCurrentThreadId; + using ::GetCurrentThread; + using ::GetCurrentProcess; + using ::DuplicateHandle; + using ::SleepEx; + using ::Sleep; + using ::QueueUserAPC; + using ::GetTickCount; + } + } +} +#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) + +# ifdef UNDER_CE +# ifndef WINAPI +# ifndef _WIN32_WCE_EMULATION +# define WINAPI __cdecl // Note this doesn't match the desktop definition +# else +# define WINAPI __stdcall +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif +typedef int BOOL; +typedef unsigned long DWORD; +typedef void* HANDLE; + +# include +# ifdef __cplusplus +} +# endif +# endif + +namespace boost +{ + namespace detail + { + namespace win32 + { + +# ifdef _WIN64 + typedef unsigned __int64 ulong_ptr; +# else + typedef unsigned long ulong_ptr; +# endif + typedef void* handle; + unsigned const infinite=~0U; + unsigned const timeout=258U; + handle const invalid_handle_value=(handle)(-1); + unsigned const event_modify_state=2; + unsigned const synchronize=0x100000u; + + extern "C" + { + struct _SECURITY_ATTRIBUTES; +# ifdef BOOST_NO_ANSI_APIS + __declspec(dllimport) void* __stdcall CreateMutexW(_SECURITY_ATTRIBUTES*,int,wchar_t const*); + __declspec(dllimport) void* __stdcall CreateSemaphoreW(_SECURITY_ATTRIBUTES*,long,long,wchar_t const*); + __declspec(dllimport) void* __stdcall CreateEventW(_SECURITY_ATTRIBUTES*,int,int,wchar_t const*); + __declspec(dllimport) void* __stdcall OpenEventW(unsigned long,int,wchar_t const*); +# else + __declspec(dllimport) void* __stdcall CreateMutexA(_SECURITY_ATTRIBUTES*,int,char const*); + __declspec(dllimport) void* __stdcall CreateSemaphoreA(_SECURITY_ATTRIBUTES*,long,long,char const*); + __declspec(dllimport) void* __stdcall CreateEventA(_SECURITY_ATTRIBUTES*,int,int,char const*); + __declspec(dllimport) void* __stdcall OpenEventA(unsigned long,int,char const*); +# endif + __declspec(dllimport) int __stdcall CloseHandle(void*); + __declspec(dllimport) int __stdcall ReleaseMutex(void*); + __declspec(dllimport) unsigned long __stdcall WaitForSingleObject(void*,unsigned long); + __declspec(dllimport) unsigned long __stdcall WaitForMultipleObjects(unsigned long nCount,void* const * lpHandles,int bWaitAll,unsigned long dwMilliseconds); + __declspec(dllimport) int __stdcall ReleaseSemaphore(void*,long,long*); + __declspec(dllimport) int __stdcall DuplicateHandle(void*,void*,void*,void**,unsigned long,int,unsigned long); + __declspec(dllimport) unsigned long __stdcall SleepEx(unsigned long,int); + __declspec(dllimport) void __stdcall Sleep(unsigned long); + typedef void (__stdcall *queue_user_apc_callback_function)(ulong_ptr); + __declspec(dllimport) unsigned long __stdcall QueueUserAPC(queue_user_apc_callback_function,void*,ulong_ptr); + + __declspec(dllimport) unsigned long __stdcall GetTickCount(); + +# ifndef UNDER_CE + __declspec(dllimport) unsigned long __stdcall GetCurrentProcessId(); + __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); + __declspec(dllimport) void* __stdcall GetCurrentThread(); + __declspec(dllimport) void* __stdcall GetCurrentProcess(); + __declspec(dllimport) int __stdcall SetEvent(void*); + __declspec(dllimport) int __stdcall ResetEvent(void*); +# else + using ::GetCurrentProcessId; + using ::GetCurrentThreadId; + using ::GetCurrentThread; + using ::GetCurrentProcess; + using ::SetEvent; + using ::ResetEvent; +# endif + } + } + } +} +#else +# error "Win32 functions not available" +#endif + +#include + +namespace boost +{ + namespace detail + { + namespace win32 + { + enum event_type + { + auto_reset_event=false, + manual_reset_event=true + }; + + enum initial_event_state + { + event_initially_reset=false, + event_initially_set=true + }; + + inline handle create_anonymous_event(event_type type,initial_event_state state) + { +#if !defined(BOOST_NO_ANSI_APIS) + handle const res=win32::CreateEventA(0,type,state,0); +#else + handle const res=win32::CreateEventW(0,type,state,0); +#endif + if(!res) + { + boost::throw_exception(thread_resource_error()); + } + return res; + } + + inline handle create_anonymous_semaphore(long initial_count,long max_count) + { +#if !defined(BOOST_NO_ANSI_APIS) + handle const res=CreateSemaphoreA(0,initial_count,max_count,0); +#else + handle const res=CreateSemaphoreW(0,initial_count,max_count,0); +#endif + if(!res) + { + boost::throw_exception(thread_resource_error()); + } + return res; + } + inline handle create_anonymous_semaphore_nothrow(long initial_count,long max_count) + { +#if !defined(BOOST_NO_ANSI_APIS) + handle const res=CreateSemaphoreA(0,initial_count,max_count,0); +#else + handle const res=CreateSemaphoreW(0,initial_count,max_count,0); +#endif + return res; + } + + inline handle duplicate_handle(handle source) + { + handle const current_process=GetCurrentProcess(); + long const same_access_flag=2; + handle new_handle=0; + bool const success=DuplicateHandle(current_process,source,current_process,&new_handle,0,false,same_access_flag)!=0; + if(!success) + { + boost::throw_exception(thread_resource_error()); + } + return new_handle; + } + + inline void release_semaphore(handle semaphore,long count) + { + BOOST_VERIFY(ReleaseSemaphore(semaphore,count,0)!=0); + } + + class handle_manager + { + private: + handle handle_to_manage; + handle_manager(handle_manager&); + handle_manager& operator=(handle_manager&); + + void cleanup() + { + if(handle_to_manage && handle_to_manage!=invalid_handle_value) + { + BOOST_VERIFY(CloseHandle(handle_to_manage)); + } + } + + public: + explicit handle_manager(handle handle_to_manage_): + handle_to_manage(handle_to_manage_) + {} + handle_manager(): + handle_to_manage(0) + {} + + handle_manager& operator=(handle new_handle) + { + cleanup(); + handle_to_manage=new_handle; + return *this; + } + + operator handle() const + { + return handle_to_manage; + } + + handle duplicate() const + { + return duplicate_handle(handle_to_manage); + } + + void swap(handle_manager& other) + { + std::swap(handle_to_manage,other.handle_to_manage); + } + + handle release() + { + handle const res=handle_to_manage; + handle_to_manage=0; + return res; + } + + bool operator!() const + { + return !handle_to_manage; + } + + ~handle_manager() + { + cleanup(); + } + }; + + } + } +} + +#if defined(BOOST_MSVC) && (_MSC_VER>=1400) && !defined(UNDER_CE) + +namespace boost +{ + namespace detail + { + namespace win32 + { +#if _MSC_VER==1400 + extern "C" unsigned char _interlockedbittestandset(long *a,long b); + extern "C" unsigned char _interlockedbittestandreset(long *a,long b); +#else + extern "C" unsigned char _interlockedbittestandset(volatile long *a,long b); + extern "C" unsigned char _interlockedbittestandreset(volatile long *a,long b); +#endif + +#pragma intrinsic(_interlockedbittestandset) +#pragma intrinsic(_interlockedbittestandreset) + + inline bool interlocked_bit_test_and_set(long* x,long bit) + { + return _interlockedbittestandset(x,bit)!=0; + } + + inline bool interlocked_bit_test_and_reset(long* x,long bit) + { + return _interlockedbittestandreset(x,bit)!=0; + } + + } + } +} +#define BOOST_THREAD_BTS_DEFINED +#elif (defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)) && defined(_M_IX86) +namespace boost +{ + namespace detail + { + namespace win32 + { + inline bool interlocked_bit_test_and_set(long* x,long bit) + { + __asm { + mov eax,bit; + mov edx,x; + lock bts [edx],eax; + setc al; + }; + } + + inline bool interlocked_bit_test_and_reset(long* x,long bit) + { + __asm { + mov eax,bit; + mov edx,x; + lock btr [edx],eax; + setc al; + }; + } + + } + } +} +#define BOOST_THREAD_BTS_DEFINED +#endif + +#ifndef BOOST_THREAD_BTS_DEFINED + +namespace boost +{ + namespace detail + { + namespace win32 + { + inline bool interlocked_bit_test_and_set(long* x,long bit) + { + long const value=1< + +#endif diff --git a/external/boost/thread/xtime.hpp b/external/boost/thread/xtime.hpp new file mode 100644 index 0000000..f908298 --- /dev/null +++ b/external/boost/thread/xtime.hpp @@ -0,0 +1,92 @@ +// Copyright (C) 2001-2003 +// William E. Kempf +// Copyright (C) 2007-8 Anthony Williams +// +// Distributed under the Boost Software 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 + +#include +#include +#include + +#include + +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; + + operator system_time() const + { + return boost::posix_time::from_time_t(0)+ + boost::posix_time::seconds(static_cast(sec))+ +#ifdef BOOST_DATE_TIME_HAS_NANOSECONDS + boost::posix_time::nanoseconds(nsec); +#else + boost::posix_time::microseconds((nsec+500)/1000); +#endif + } + +}; + +inline xtime get_xtime(boost::system_time const& abs_time) +{ + xtime res; + boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0); + + res.sec=static_cast(time_since_epoch.total_seconds()); + res.nsec=static_cast(time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second())); + return res; +} + +inline int xtime_get(struct xtime* xtp, int clock_type) +{ + if (clock_type == TIME_UTC_) + { + *xtp=get_xtime(get_system_time()); + return clock_type; + } + return 0; +} + + +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 + +#include + +#endif //BOOST_XTIME_WEK070601_HPP diff --git a/external/boost/throw_exception.hpp b/external/boost/throw_exception.hpp new file mode 100644 index 0000000..a73acb6 --- /dev/null +++ b/external/boost/throw_exception.hpp @@ -0,0 +1,91 @@ +#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. +// Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, 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) +// +// http://www.boost.org/libs/utility/throw_exception.html +// + +#include +#include +#include +#include + +#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) ) +# define BOOST_EXCEPTION_DISABLE +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 ) +# define BOOST_EXCEPTION_DISABLE +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) +# include +# include +# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_CURRENT_FUNCTION,__FILE__,__LINE__) +#else +# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x) +#endif + +namespace boost +{ +#ifdef BOOST_NO_EXCEPTIONS + +void throw_exception( std::exception const & e ); // user defined + +#else + +inline void throw_exception_assert_compatibility( std::exception const & ) { } + +template BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e ) +{ + //All boost exceptions are required to derive from std::exception, + //to ensure compatibility with BOOST_NO_EXCEPTIONS. + throw_exception_assert_compatibility(e); + +#ifndef BOOST_EXCEPTION_DISABLE + throw enable_current_exception(enable_error_info(e)); +#else + throw e; +#endif +} + +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) + namespace + exception_detail + { + template + BOOST_ATTRIBUTE_NORETURN + void + throw_exception_( E const & x, char const * current_function, char const * file, int line ) + { + boost::throw_exception( + set_info( + set_info( + set_info( + boost::enable_error_info(x), + throw_function(current_function)), + throw_file(file)), + throw_line(line))); + } + } +#endif +} // namespace boost + +#endif // #ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED diff --git a/external/boost/timer.hpp b/external/boost/timer.hpp new file mode 100644 index 0000000..1e3571e --- /dev/null +++ b/external/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 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 +#include +#include + +# 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::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/external/boost/token_functions.hpp b/external/boost/token_functions.hpp new file mode 100644 index 0000000..4d1a1df --- /dev/null +++ b/external/boost/token_functions.hpp @@ -0,0 +1,665 @@ +// 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 Joaquin M Lopez Munoz +// 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 +#include +#include +#include +#include // for find_if +#include +#include +#include +#include +#if !defined(BOOST_NO_CWCTYPE) +#include +#endif + +// +// 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 iswpunct +# undef iswpunct +#endif +#ifdef isspace +# undef isspace +#endif +#ifdef iswspace +# undef iswspace +#endif +// +// fix namespace problems: +// +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::ispunct; + using ::isspace; +#if !defined(BOOST_NO_CWCTYPE) + using ::iswpunct; + using ::iswspace; +#endif +} +#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 + template ::traits_type > + class escaped_list_separator { + + private: + typedef std::basic_string 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 + 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 + 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 { + //=========================================================================== + // Tokenizer was broken for wide character separators, at least on Windows, since + // CRT functions isspace etc only expect values in [0, 0xFF]. Debug build asserts + // if higher values are passed in. The traits extension class should take care of this. + // Assuming that the conditional will always get optimized out in the function + // implementations, argument types are not a problem since both forms of character classifiers + // expect an int. + +#if !defined(BOOST_NO_CWCTYPE) + template + struct traits_extension_details : public traits { + typedef typename traits::char_type char_type; + static bool isspace(char_type c) + { + return std::iswspace(c) != 0; + } + static bool ispunct(char_type c) + { + return std::iswpunct(c) != 0; + } + }; + + template + struct traits_extension_details : public traits { + typedef typename traits::char_type char_type; + static bool isspace(char_type c) + { + return std::isspace(c) != 0; + } + static bool ispunct(char_type c) + { + return std::ispunct(c) != 0; + } + }; +#endif + + + // In case there is no cwctype header, we implement the checks manually. + // We make use of the fact that the tested categories should fit in ASCII. + template + struct traits_extension : public traits { + typedef typename traits::char_type char_type; + static bool isspace(char_type c) + { +#if !defined(BOOST_NO_CWCTYPE) + return traits_extension_details::isspace(c); +#else + return static_cast< unsigned >(c) <= 255 && std::isspace(c) != 0; +#endif + } + + static bool ispunct(char_type c) + { +#if !defined(BOOST_NO_CWCTYPE) + return traits_extension_details::ispunct(c); +#else + return static_cast< unsigned >(c) <= 255 && std::ispunct(c) != 0; +#endif + } + }; + + // 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 + struct assign_or_plus_equal { + template + 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 + static void plus_equal(Token &, const Value &) { } + + // If we are doing an assign, there is no need for the + // the clear. + // + template + static void clear(Token &) { } + }; + + template <> + struct assign_or_plus_equal { + template + static void assign(Iterator b, Iterator e, Token &t) { } + template + static void plus_equal(Token &t, const Value &v) { + t += v; + } + template + static void clear(Token &t) { + t = Token(); + } + }; + + + template + struct pointer_iterator_category{ + typedef std::random_access_iterator_tag type; + }; + + + template + struct class_iterator_category{ + typedef typename Iterator::iterator_category type; + }; + + + + // This portably gets the iterator_tag without partial template specialization + template + struct get_iterator_category{ + typedef typename mpl::if_, + pointer_iterator_category, + class_iterator_category + >::type cat; + + typedef typename cat::type iterator_category; + }; + + + } // namespace tokenizer_detail + + + //=========================================================================== + // 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 offsets_; + unsigned int current_offset_; + bool wrap_offsets_; + bool return_partial_last_; + + public: + template + 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 + bool operator()(InputIterator& next, InputIterator end, Token& tok) + { + typedef tokenizer_detail::assign_or_plus_equal< + BOOST_DEDUCED_TYPENAME 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. + template ::traits_type > + class char_separator + { + typedef tokenizer_detail::traits_extension Traits; + typedef std::basic_string 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 + bool operator()(InputIterator& next, InputIterator end, Token& tok) + { + typedef tokenizer_detail::assign_or_plus_equal< + BOOST_DEDUCED_TYPENAME 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 Traits::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 Traits::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. + template ::traits_type > + class char_delimiters_separator { + private: + + typedef tokenizer_detail::traits_extension Traits; + typedef std::basic_string 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 = Traits::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 = Traits::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 + 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/external/boost/token_iterator.hpp b/external/boost/token_iterator.hpp new file mode 100644 index 0000000..19b1db2 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +namespace boost +{ + template + class token_iterator + : public iterator_facade< + token_iterator + , Type + , typename detail::minimum_category< + forward_traversal_tag + , typename iterator_traversal::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 + 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 + token_iterator( + token_iterator const& t + , typename enable_if_convertible::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, + class Iterator = std::string::const_iterator, + class Type = std::string + > + class token_iterator_generator { + + private: + public: + typedef token_iterator type; + }; + + + // Type has to be first because it needs to be explicitly specified + // because there is no way the function can deduce it. + template + typename token_iterator_generator::type + make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc& fun){ + typedef typename + token_iterator_generator::type ret_type; + return ret_type(fun,begin,end); + } + +} // namespace boost + +#endif diff --git a/external/boost/tokenizer.hpp b/external/boost/tokenizer.hpp new file mode 100644 index 0000000..081e5ba --- /dev/null +++ b/external/boost/tokenizer.hpp @@ -0,0 +1,98 @@ +// Boost tokenizer.hpp -----------------------------------------------------// + +// (c) 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 + +namespace boost { + + + //=========================================================================== + // A container-view of a tokenized "sequence" + template < + typename TokenizerFunc = char_delimiters_separator, + typename Iterator = std::string::const_iterator, + typename Type = std::string + > + class tokenizer { + private: + typedef token_iterator_generator 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 + tokenizer(const Container& c) + : first_(c.begin()), last_(c.end()), f_() { } + + template + 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 + void assign(const Container& c){ + assign(c.begin(),c.end()); + } + + + template + 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/external/boost/type.hpp b/external/boost/type.hpp new file mode 100644 index 0000000..ab81c91 --- /dev/null +++ b/external/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 + struct type {}; + +} + +#endif // BOOST_TYPE_DWA20010120_HPP diff --git a/external/boost/type_traits/add_const.hpp b/external/boost/type_traits/add_const.hpp new file mode 100644 index 0000000..29f0bd9 --- /dev/null +++ b/external/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 + +// should be the last #include +#include + +namespace boost { + +// * convert a type T to const type - add_const +// 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 + +#endif // BOOST_TT_ADD_CONST_HPP_INCLUDED diff --git a/external/boost/type_traits/add_cv.hpp b/external/boost/type_traits/add_cv.hpp new file mode 100644 index 0000000..bfde76a --- /dev/null +++ b/external/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 + +// should be the last #include +#include + +namespace boost { + +// * convert a type T to a const volatile type - add_cv +// 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 + +#endif // BOOST_TT_ADD_CV_HPP_INCLUDED diff --git a/external/boost/type_traits/add_pointer.hpp b/external/boost/type_traits/add_pointer.hpp new file mode 100644 index 0000000..3e0e481 --- /dev/null +++ b/external/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 + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#if defined(__BORLANDC__) && (__BORLANDC__ < 0x5A0) +// +// 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 +struct add_pointer_impl +{ + typedef T* type; +}; +template +struct add_pointer_impl +{ + typedef T* type; +}; +template +struct add_pointer_impl +{ + typedef T* type; +}; +template +struct add_pointer_impl +{ + typedef T* type; +}; +template +struct add_pointer_impl +{ + typedef T* type; +}; + +#else + +template +struct add_pointer_impl +{ + typedef typename remove_reference::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::type) + +} // namespace boost + +#include + +#endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/add_reference.hpp b/external/boost/type_traits/add_reference.hpp new file mode 100644 index 0000000..eb4f9b1 --- /dev/null +++ b/external/boost/type_traits/add_reference.hpp @@ -0,0 +1,107 @@ + +// (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 +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && defined(BOOST_MSVC6_MEMBER_TEMPLATES) + +template +struct reference_adder +{ + template struct result_ + { + typedef T& type; + }; +}; + +template <> +struct reference_adder +{ + template struct result_ + { + typedef T type; + }; +}; + +template +struct add_reference_impl +{ + typedef typename reference_adder< + ::boost::is_reference::value + >::template result_ result; + + typedef typename result::type type; +}; + +#else +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// + +template +struct add_reference_rvalue_layer +{ + typedef T& type; +}; + +#ifndef BOOST_NO_RVALUE_REFERENCES +template +struct add_reference_rvalue_layer +{ + typedef T&& type; +}; +#endif + +template +struct add_reference_impl +{ + typedef typename add_reference_rvalue_layer::type 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::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 + +#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED diff --git a/external/boost/type_traits/add_rvalue_reference.hpp b/external/boost/type_traits/add_rvalue_reference.hpp new file mode 100644 index 0000000..f0e9925 --- /dev/null +++ b/external/boost/type_traits/add_rvalue_reference.hpp @@ -0,0 +1,66 @@ +// add_rvalue_reference.hpp ---------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +#ifndef BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP +#define BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP + +#include + +//----------------------------------------------------------------------------// + +#include +#include + +// should be the last #include +#include + +//----------------------------------------------------------------------------// +// // +// C++03 implementation of // +// 20.7.6.2 Reference modifications [meta.trans.ref] // +// Written by Vicente J. Botet Escriba // +// // +// If T names an object or function type then the member typedef type +// shall name T&&; otherwise, type shall name T. [ Note: This rule reflects +// the semantics of reference collapsing. For example, when a type T names +// a type T1&, the type add_rvalue_reference::type is not an rvalue +// reference. -end note ] +//----------------------------------------------------------------------------// + +namespace boost { + +namespace type_traits_detail { + + template + struct add_rvalue_reference_helper + { typedef T type; }; + +#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + template + struct add_rvalue_reference_helper + { + typedef T&& type; + }; +#endif + + template + struct add_rvalue_reference_imp + { + typedef typename boost::type_traits_detail::add_rvalue_reference_helper + ::value && !is_reference::value) >::type type; + }; + +} + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_rvalue_reference,T,typename boost::type_traits_detail::add_rvalue_reference_imp::type) + +} // namespace boost + +#include + +#endif // BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP + diff --git a/external/boost/type_traits/add_volatile.hpp b/external/boost/type_traits/add_volatile.hpp new file mode 100644 index 0000000..491f1c2 --- /dev/null +++ b/external/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 + +// should be the last #include +#include + +namespace boost { + +// * convert a type T to volatile type - add_volatile +// 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 + +#endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED diff --git a/external/boost/type_traits/alignment_of.hpp b/external/boost/type_traits/alignment_of.hpp new file mode 100644 index 0000000..e1735dc --- /dev/null +++ b/external/boost/type_traits/alignment_of.hpp @@ -0,0 +1,128 @@ + +// (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 +#include + +#include +// should be the last #include +#include + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4121 4512) // alignment is sensitive to packing +#endif +#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600) +#pragma option push -Vx- -Ve- +#endif + +namespace boost { + +template struct alignment_of; + +// get the alignment of some arbitrary type: +namespace detail { + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) +#endif +template +struct alignment_of_hack +{ + char c; + T t; + alignment_of_hack(); +}; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +struct alignment_logic +{ + BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S); +}; + + +template< typename T > +struct alignment_of_impl +{ +#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400) + // + // With MSVC both the native __alignof operator + // and our own logic gets things wrong from time to time :-( + // Using a combination of the two seems to make the most of a bad job: + // + BOOST_STATIC_CONSTANT(std::size_t, value = + (::boost::detail::alignment_logic< + sizeof(::boost::detail::alignment_of_hack) - sizeof(T), + __alignof(T) + >::value)); +#elif !defined(BOOST_ALIGNMENT_OF) + BOOST_STATIC_CONSTANT(std::size_t, value = + (::boost::detail::alignment_logic< + sizeof(::boost::detail::alignment_of_hack) - sizeof(T), + sizeof(T) + >::value)); +#else + // + // We put this here, rather than in the definition of + // alignment_of below, because MSVC's __alignof doesn't + // always work in that context for some unexplained reason. + // (See type_with_alignment tests for test cases). + // + BOOST_STATIC_CONSTANT(std::size_t, value = BOOST_ALIGNMENT_OF(T)); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl::value) + +// references have to be treated specially, assume +// that a reference is just a special pointer: +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct alignment_of + : public alignment_of +{ +}; +#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 + : public alignment_of{}; +#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 + +#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED + diff --git a/external/boost/type_traits/arithmetic_traits.hpp b/external/boost/type_traits/arithmetic_traits.hpp new file mode 100644 index 0000000..e4670e6 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +#endif // BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED diff --git a/external/boost/type_traits/broken_compiler_spec.hpp b/external/boost/type_traits/broken_compiler_spec.hpp new file mode 100644 index 0000000..fb51769 --- /dev/null +++ b/external/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 +#include + +// 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 \ +{ \ + 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 + +#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/external/boost/type_traits/composite_traits.hpp b/external/boost/type_traits/composite_traits.hpp new file mode 100644 index 0000000..985a4c5 --- /dev/null +++ b/external/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 +#include +#include +#include +#include +#include +#include + +#endif // BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED + + + + + diff --git a/external/boost/type_traits/config.hpp b/external/boost/type_traits/config.hpp new file mode 100644 index 0000000..94f1376 --- /dev/null +++ b/external/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 +#endif + +#include + +// +// 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__, < 0x5A0) \ + || defined(__ghs) \ + || BOOST_WORKAROUND(__HP_aCC, < 60700) \ + || 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/external/boost/type_traits/conversion_traits.hpp b/external/boost/type_traits/conversion_traits.hpp new file mode 100644 index 0000000..c8e5139 --- /dev/null +++ b/external/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 Jarvi (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 + +#endif // BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED diff --git a/external/boost/type_traits/cv_traits.hpp b/external/boost/type_traits/cv_traits.hpp new file mode 100644 index 0000000..5bd6c4f --- /dev/null +++ b/external/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 +#include +#include +#include +#include +#include +#include +#include + +#endif // BOOST_TT_CV_TRAITS_HPP_INCLUDED diff --git a/external/boost/type_traits/decay.hpp b/external/boost/type_traits/decay.hpp new file mode 100644 index 0000000..c23a9b0 --- /dev/null +++ b/external/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 +#include +#include +#include +#include +#include +#include +#include + +namespace boost +{ + + template< class T > + struct decay + { + private: + typedef BOOST_DEDUCED_TYPENAME remove_reference::type Ty; + public: + typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< + is_array, + mpl::identity::type*>, + BOOST_DEDUCED_TYPENAME mpl::eval_if< + is_function, + add_pointer, + mpl::identity + > + >::type type; + }; + +} // namespace boost + + +#endif // BOOST_TT_DECAY_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/bool_trait_def.hpp b/external/boost/type_traits/detail/bool_trait_def.hpp new file mode 100644 index 0000000..0935c60 --- /dev/null +++ b/external/boost/type_traits/detail/bool_trait_def.hpp @@ -0,0 +1,196 @@ + +// 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$ +// $Date: 2011-10-09 18:28:33 -0400 (Sun, 09 Oct 2011) $ +// $Revision: 74865 $ + +#include +#include +#include +#include +#include + +// +// 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 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 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) : public ::boost::integral_constant +#endif + + +#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \ +template< typename T > struct trait \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ +public:\ + 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) \ +{ \ +public:\ + 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_DEF3(trait,T1,T2,T3,C) \ +template< typename T1, typename T2, typename T3 > struct trait \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ +public:\ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ + BOOST_MPL_AUX_LAMBDA_SUPPORT(3,trait,(T1,T2,T3)) \ +}; \ +\ +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(3,trait) \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \ +template<> struct trait< sp > \ + BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ +public:\ + 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) \ +{ \ +public:\ + 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 > \ +{ \ +public:\ + BOOST_STATIC_CONSTANT(bool, value = (C)); \ +}; \ +/**/ + +#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \ +template<> struct trait##_impl< sp1,sp2 > \ +{ \ +public:\ + 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) \ +{ \ +public:\ + 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) \ +{ \ +public:\ + 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) \ +{ \ +public:\ + 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) \ +{ \ +public:\ + 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 > \ +{ \ +public:\ + 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/external/boost/type_traits/detail/bool_trait_undef.hpp b/external/boost/type_traits/detail/bool_trait_undef.hpp new file mode 100644 index 0000000..6daba04 --- /dev/null +++ b/external/boost/type_traits/detail/bool_trait_undef.hpp @@ -0,0 +1,28 @@ + +// 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$ +// $Date: 2011-10-09 18:28:33 -0400 (Sun, 09 Oct 2011) $ +// $Revision: 74865 $ + +#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_DEF3 +#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/external/boost/type_traits/detail/cv_traits_impl.hpp b/external/boost/type_traits/detail/cv_traits_impl.hpp new file mode 100644 index 0000000..ed20c9d --- /dev/null +++ b/external/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 +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +// implementation helper: + + +#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)) +namespace boost { +namespace detail { +#else +#include +namespace boost { +namespace type_traits { +namespace gcc8503 { +#endif + +template struct cv_traits_imp {}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + 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 +struct cv_traits_imp : public ::boost::type_traits::gcc8503::cv_traits_imp { }; + +// Functions are never cv-qualified +template struct cv_traits_imp +{ + 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/external/boost/type_traits/detail/false_result.hpp b/external/boost/type_traits/detail/false_result.hpp new file mode 100644 index 0000000..e65e8bc --- /dev/null +++ b/external/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 + +namespace boost { +namespace type_traits { + +// Utility class which always "returns" false +struct false_result +{ + template struct result_ + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +}} // namespace boost::type_traits + +#endif // BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/ice_and.hpp b/external/boost/type_traits/detail/ice_and.hpp new file mode 100644 index 0000000..8b461b9 --- /dev/null +++ b/external/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 + +namespace boost { +namespace type_traits { + +template +struct ice_and; + +template +struct ice_and +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template <> +struct ice_and +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/ice_eq.hpp b/external/boost/type_traits/detail/ice_eq.hpp new file mode 100644 index 0000000..ea42a60 --- /dev/null +++ b/external/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 + +namespace boost { +namespace type_traits { + +template +struct ice_eq +{ + BOOST_STATIC_CONSTANT(bool, value = (b1 == b2)); +}; + +template +struct ice_ne +{ + BOOST_STATIC_CONSTANT(bool, value = (b1 != b2)); +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +template bool const ice_eq::value; +template bool const ice_ne::value; +#endif + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/ice_not.hpp b/external/boost/type_traits/detail/ice_not.hpp new file mode 100644 index 0000000..ee1dca0 --- /dev/null +++ b/external/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 + +namespace boost { +namespace type_traits { + +template +struct ice_not +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template <> +struct ice_not +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/ice_or.hpp b/external/boost/type_traits/detail/ice_or.hpp new file mode 100644 index 0000000..f88d9f6 --- /dev/null +++ b/external/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 + +namespace boost { +namespace type_traits { + +template +struct ice_or; + +template +struct ice_or +{ + BOOST_STATIC_CONSTANT(bool, value = true); +}; + +template <> +struct ice_or +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +} // namespace type_traits +} // namespace boost + +#endif // BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/is_function_ptr_helper.hpp b/external/boost/type_traits/detail/is_function_ptr_helper.hpp new file mode 100644 index 0000000..605d0bc --- /dev/null +++ b/external/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 + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#endif + +namespace boost { +namespace type_traits { + +template +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 +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { 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 +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_function_ptr_helper { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#endif +#undef BOOST_PP_COUNTER +#endif // BOOST_PP_IS_ITERATING diff --git a/external/boost/type_traits/detail/is_function_ptr_tester.hpp b/external/boost/type_traits/detail/is_function_ptr_tester.hpp new file mode 100644 index 0000000..c1a3c6a --- /dev/null +++ b/external/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 +#include + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#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 +yes_type is_function_ptr_tester(R (*)()); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)()); +template +yes_type is_function_ptr_tester(R (__stdcall*)( ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)()); +template +yes_type is_function_ptr_tester(R (__fastcall*)( ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)()); +template +yes_type is_function_ptr_tester(R (__cdecl*)( ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); +#endif +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +template +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +template +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 +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +template +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); +#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)); +template +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)); +#endif +template +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 +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 +yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +template +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 +yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +template +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 +yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)); +template +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#endif +@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +template +yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#ifndef _MANAGED +template +yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +template +yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); +@#endif +template +yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); +template +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/external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp b/external/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp new file mode 100644 index 0000000..4f75f14 --- /dev/null +++ b/external/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 + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#endif + +namespace boost { +namespace type_traits { + +template +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 +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif +#endif +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +#endif + +#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { 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 +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#endif + +@#if !defined(BOOST_TT_NO_CV_FUNC_TEST) +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; + +template +struct is_mem_fun_pointer_impl { BOOST_STATIC_CONSTANT(bool, value = true); }; +@#endif +@#endif + +#undef BOOST_PP_COUNTER +#endif // BOOST_PP_IS_ITERATING + diff --git a/external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp b/external/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp new file mode 100644 index 0000000..e6532d3 --- /dev/null +++ b/external/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 +#include + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include +# include +# include +#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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)()); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile); + +#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile); +#endif +#ifdef BOOST_TT_TEST_MS_FUNC_SIGS +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); + +#ifndef _MANAGED +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile); +#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile); +#endif +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)); + +template +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)); + +template +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +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 +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile); +@#endif + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const); + +template +yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile); + +template +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/external/boost/type_traits/detail/size_t_trait_def.hpp b/external/boost/type_traits/detail/size_t_trait_def.hpp new file mode 100644 index 0000000..23deeaf --- /dev/null +++ b/external/boost/type_traits/detail/size_t_trait_def.hpp @@ -0,0 +1,60 @@ + +// 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$ +// $Date: 2011-04-25 08:26:48 -0400 (Mon, 25 Apr 2011) $ +// $Revision: 71481 $ + +#include +#include +#include +#include + +#include + +#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300 +# define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::integral_constant +# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/ +#else +# define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::mpl::size_t +# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \ + typedef ::boost::mpl::size_t 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) \ +{ \ +public:\ + 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 \ + : BOOST_TT_AUX_SIZE_T_BASE(C) \ +{ \ +public:\ + 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 \ + : BOOST_TT_AUX_SIZE_T_BASE(C) \ +{ \ +}; \ +/**/ diff --git a/external/boost/type_traits/detail/size_t_trait_undef.hpp b/external/boost/type_traits/detail/size_t_trait_undef.hpp new file mode 100644 index 0000000..06a176d --- /dev/null +++ b/external/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$ +// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#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/external/boost/type_traits/detail/template_arity_spec.hpp b/external/boost/type_traits/detail/template_arity_spec.hpp new file mode 100644 index 0000000..fe9b422 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +#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_ \ +{ \ +}; \ +}} \ +/**/ +#else +# define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/ +#endif diff --git a/external/boost/type_traits/detail/type_trait_def.hpp b/external/boost/type_traits/detail/type_trait_def.hpp new file mode 100644 index 0000000..3903f7f --- /dev/null +++ b/external/boost/type_traits/detail/type_trait_def.hpp @@ -0,0 +1,67 @@ + +// 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$ +// $Date: 2011-04-25 08:26:48 -0400 (Mon, 25 Apr 2011) $ +// $Revision: 71481 $ + +#include +#include + +#define BOOST_TT_AUX_TYPE_TRAIT_DEF1(trait,T,result) \ +template< typename T > struct trait \ +{ \ +public:\ + 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 \ +{ \ +public:\ + 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 \ +{ \ +public:\ + typedef result type; \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,result) \ +template< param > struct trait \ +{ \ +public:\ + typedef result type; \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,spec,result) \ +template< param1, param2 > struct trait \ +{ \ +public:\ + typedef result; \ +}; \ +/**/ + +#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(param,trait,spec,result) \ +template< param > struct trait##_impl \ +{ \ +public:\ + typedef result type; \ +}; \ +/**/ diff --git a/external/boost/type_traits/detail/type_trait_undef.hpp b/external/boost/type_traits/detail/type_trait_undef.hpp new file mode 100644 index 0000000..9403b9b --- /dev/null +++ b/external/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$ +// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $ +// $Revision: 24874 $ + +#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/external/boost/type_traits/detail/wrap.hpp b/external/boost/type_traits/detail/wrap.hpp new file mode 100644 index 0000000..d0a75d0 --- /dev/null +++ b/external/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 struct wrap {}; + +}} // namespace boost::type_traits + +#endif // BOOST_TT_DETAIL_WRAP_HPP_INCLUDED diff --git a/external/boost/type_traits/detail/yes_no_type.hpp b/external/boost/type_traits/detail/yes_no_type.hpp new file mode 100644 index 0000000..f583730 --- /dev/null +++ b/external/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/external/boost/type_traits/has_nothrow_constructor.hpp b/external/boost/type_traits/has_nothrow_constructor.hpp new file mode 100644 index 0000000..3bc4f80 --- /dev/null +++ b/external/boost/type_traits/has_nothrow_constructor.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_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED +#define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail{ + +template +struct has_nothrow_constructor_imp{ +#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR + BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_CONSTRUCTOR(T)); +#else + BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_constructor::value); +#endif +}; + +} + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_constructor,T,::boost::detail::has_nothrow_constructor_imp::value) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_default_constructor,T,::boost::detail::has_nothrow_constructor_imp::value) + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void volatile,false) +#endif + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void volatile,false) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED diff --git a/external/boost/type_traits/has_nothrow_copy.hpp b/external/boost/type_traits/has_nothrow_copy.hpp new file mode 100644 index 0000000..9c3c903 --- /dev/null +++ b/external/boost/type_traits/has_nothrow_copy.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_HAS_NOTHROW_COPY_HPP_INCLUDED +#define BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail{ + +template +struct has_nothrow_copy_imp{ +#ifdef BOOST_HAS_NOTHROW_COPY + BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_COPY(T)); +#else + BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_copy::value); +#endif +}; + +} + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy,T,::boost::detail::has_nothrow_copy_imp::value) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy_constructor,T,::boost::detail::has_nothrow_copy_imp::value) + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void volatile,false) +#endif + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void volatile,false) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED diff --git a/external/boost/type_traits/has_trivial_constructor.hpp b/external/boost/type_traits/has_trivial_constructor.hpp new file mode 100644 index 0000000..30dbdd8 --- /dev/null +++ b/external/boost/type_traits/has_trivial_constructor.hpp @@ -0,0 +1,51 @@ + +// (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 +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct has_trivial_ctor_impl +{ +#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_pod::value, + BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) + >::value)); +#else + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_pod::value, + false + >::value)); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_constructor,T,::boost::detail::has_trivial_ctor_impl::value) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_default_constructor,T,::boost::detail::has_trivial_ctor_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED diff --git a/external/boost/type_traits/has_trivial_copy.hpp b/external/boost/type_traits/has_trivial_copy.hpp new file mode 100644 index 0000000..ba4d884 --- /dev/null +++ b/external/boost/type_traits/has_trivial_copy.hpp @@ -0,0 +1,64 @@ + +// (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 +#include +#include +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct has_trivial_copy_impl +{ +#ifdef BOOST_HAS_TRIVIAL_COPY + BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_COPY(T)); +#else + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::is_pod::value, + ::boost::type_traits::ice_not< ::boost::is_volatile::value >::value + >::value)); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy,T,::boost::detail::has_trivial_copy_impl::value) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy_constructor,T,::boost::detail::has_trivial_copy_impl::value) + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void volatile,false) +#endif + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void volatile,false) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED diff --git a/external/boost/type_traits/has_trivial_destructor.hpp b/external/boost/type_traits/has_trivial_destructor.hpp new file mode 100644 index 0000000..79d7522 --- /dev/null +++ b/external/boost/type_traits/has_trivial_destructor.hpp @@ -0,0 +1,49 @@ + +// (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 +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct has_trivial_dtor_impl +{ +#ifdef BOOST_HAS_TRIVIAL_DESTRUCTOR + BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_DESTRUCTOR(T)); +#else + BOOST_STATIC_CONSTANT(bool, value = ::boost::is_pod::value); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_destructor,T,::boost::detail::has_trivial_dtor_impl::value) + +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void const volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void volatile,false) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED diff --git a/external/boost/type_traits/ice.hpp b/external/boost/type_traits/ice.hpp new file mode 100644 index 0000000..134bc4b --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +#endif // BOOST_TT_ICE_HPP_INCLUDED diff --git a/external/boost/type_traits/integral_constant.hpp b/external/boost/type_traits/integral_constant.hpp new file mode 100644 index 0000000..4ed1bb0 --- /dev/null +++ b/external/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 +#include +#include + +namespace boost{ + +#if defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || defined(__BORLANDC__) +template +#else +template +#endif +struct integral_constant : public mpl::integral_c +{ + typedef integral_constant type; +}; + +template<> struct integral_constant : 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 type; +}; +template<> struct integral_constant : 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 type; +}; + +typedef integral_constant true_type; +typedef integral_constant false_type; + +} + +#endif diff --git a/external/boost/type_traits/intrinsics.hpp b/external/boost/type_traits/intrinsics.hpp new file mode 100644 index 0000000..d47b33e --- /dev/null +++ b/external/boost/type_traits/intrinsics.hpp @@ -0,0 +1,288 @@ +// (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 +#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 class type (and not a 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 +// +// The following can also be defined: when detected our implementation is greatly simplified. +// +// BOOST_IS_ABSTRACT(T) true if T is an abstract type +// BOOST_IS_BASE_OF(T,U) true if T is a base class of U +// BOOST_IS_CLASS(T) true if T is a class type (and not a union) +// BOOST_IS_CONVERTIBLE(T,U) true if T is convertible to U +// BOOST_IS_ENUM(T) true is T is an enum +// BOOST_IS_POLYMORPHIC(T) true if T is a polymorphic type +// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T. + +#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 +# 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 +# else +# include +# endif +# define BOOST_IS_POD(T) ::boost::is_same< typename ::__type_traits::is_POD_type, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ::boost::is_same< typename ::__type_traits::has_trivial_default_constructor, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_COPY(T) ::boost::is_same< typename ::__type_traits::has_trivial_copy_constructor, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_ASSIGN(T) ::boost::is_same< typename ::__type_traits::has_trivial_assignment_operator, ::__true_type>::value +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) ::boost::is_same< typename ::__type_traits::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 +# define BOOST_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union::value +# define BOOST_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD::value +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor::value +# define BOOST_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor::value +# define BOOST_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment::value +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor::value +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215) +# include + +# 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)|| ( ::boost::is_pod::value && !::boost::is_volatile::value)) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) || ( ::boost::is_pod::value && ! ::boost::is_const::value && !::boost::is_volatile::value)) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || ::boost::is_pod::value) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) || ::boost::has_trivial_constructor::value) +# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) || ::boost::has_trivial_copy::value) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) || ::boost::has_trivial_assign::value) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same::value) +# define BOOST_IS_CLASS(T) __is_class(T) +# define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || is_same::value) && !__is_abstract(U)) +# define BOOST_IS_ENUM(T) __is_enum(T) +// This one doesn't quite always do the right thing: +// # define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +// This one fails if the default alignment has been changed with /Zp: +// # define BOOST_ALIGNMENT_OF(T) __alignof(T) + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(__DMC__) && (__DMC__ >= 0x848) +// For Digital Mars C++, www.digitalmars.com +# define BOOST_IS_UNION(T) (__typeinfo(T) & 0x400) +# define BOOST_IS_POD(T) (__typeinfo(T) & 0x800) +# define BOOST_IS_EMPTY(T) (__typeinfo(T) & 0x1000) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__typeinfo(T) & 0x10) +# define BOOST_HAS_TRIVIAL_COPY(T) (__typeinfo(T) & 0x20) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__typeinfo(T) & 0x40) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__typeinfo(T) & 0x8) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__typeinfo(T) & 0x80) +# define BOOST_HAS_NOTHROW_COPY(T) (__typeinfo(T) & 0x100) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__typeinfo(T) & 0x200) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) (__typeinfo(T) & 0x4) +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(BOOST_CLANG) && defined(__has_feature) +# include +# include +# include + +# if __has_feature(is_union) +# define BOOST_IS_UNION(T) __is_union(T) +# endif +# if __has_feature(is_pod) && defined(_LIBCPP_VERSION) +# define BOOST_IS_POD(T) __is_pod(T) +# endif +# if __has_feature(is_empty) && defined(_LIBCPP_VERSION) +# define BOOST_IS_EMPTY(T) __is_empty(T) +# endif +# if __has_feature(has_trivial_constructor) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T) +# endif +# if __has_feature(has_trivial_copy) +# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference::value && !is_volatile::value) +# endif +# if __has_feature(has_trivial_assign) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile::value) +# endif +# if __has_feature(has_trivial_destructor) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) +# endif +# if __has_feature(has_nothrow_constructor) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T) +# endif +# if __has_feature(has_nothrow_copy) +# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile::value && !is_reference::value) +# endif +# if __has_feature(has_nothrow_assign) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile::value) +# endif +# if __has_feature(has_virtual_destructor) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) +# endif +# if __has_feature(is_abstract) +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# endif +# if __has_feature(is_base_of) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same::value) +# endif +# if __has_feature(is_class) +# define BOOST_IS_CLASS(T) __is_class(T) +# endif +# if __has_feature(is_convertible_to) +# include +# define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible_to(T,U) && !::boost::is_abstract::value) +# endif +# if __has_feature(is_enum) +# define BOOST_IS_ENUM(T) __is_enum(T) +# endif +# if __has_feature(is_polymorphic) +# define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +# endif +# define BOOST_ALIGNMENT_OF(T) __alignof(T) + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) +# include +# include +# include + +#ifdef BOOST_INTEL +# define BOOST_INTEL_TT_OPTS || is_pod::value +#else +# define BOOST_INTEL_TT_OPTS +#endif + +# define BOOST_IS_UNION(T) __is_union(T) +# define BOOST_IS_POD(T) __is_pod(T) +# define BOOST_IS_EMPTY(T) __is_empty(T) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile::value) +# define BOOST_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_INTEL_TT_OPTS) && !is_reference::value && ! ::boost::is_volatile::value) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile::value && ! ::boost::is_const::value) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_INTEL_TT_OPTS) +# define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile::value && !is_reference::value) +# define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile::value && !is_const::value) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same::value) +# define BOOST_IS_CLASS(T) __is_class(T) +# define BOOST_IS_ENUM(T) __is_enum(T) +# define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +# if (!defined(unix) && !defined(__unix__)) || defined(__LP64__) + // GCC sometimes lies about alignment requirements + // of type double on 32-bit unix platforms, use the + // old implementation instead in that case: +# define BOOST_ALIGNMENT_OF(T) __alignof__(T) +# endif + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#if defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600) +# include +# include +# include + +# define BOOST_IS_UNION(T) __is_union(T) +# define BOOST_IS_POD(T) __is_pod(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) && !is_reference::value && !is_volatile::value) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile::value) +# 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) && !is_volatile::value && !is_reference::value) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile::value) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same::value) +# define BOOST_IS_CLASS(T) __is_class(T) +# define BOOST_IS_ENUM(T) __is_enum(T) +# define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +# define BOOST_ALIGNMENT_OF(T) __alignof__(T) + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +# if defined(__CODEGEARC__) +# include +# include +# include +# include + +# define BOOST_IS_UNION(T) __is_union(T) +# define BOOST_IS_POD(T) __is_pod(T) +# define BOOST_IS_EMPTY(T) __is_empty(T) +# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T)) +# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_volatile::value && !is_reference::value) +# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile::value) +# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T)) +# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T)) +# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile::value && !is_reference::value) +# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile::value) +# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T) + +# define BOOST_IS_ABSTRACT(T) __is_abstract(T) +# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_void::value && !is_void::value) +# define BOOST_IS_CLASS(T) __is_class(T) +# define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible(T,U) || is_void::value) +# define BOOST_IS_ENUM(T) __is_enum(T) +# define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T) +# define BOOST_ALIGNMENT_OF(T) alignof(T) + +# define BOOST_HAS_TYPE_TRAITS_INTRINSICS +#endif + +#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED + + + + + + diff --git a/external/boost/type_traits/is_abstract.hpp b/external/boost/type_traits/is_abstract.hpp new file mode 100644 index 0000000..09fdf33 --- /dev/null +++ b/external/boost/type_traits/is_abstract.hpp @@ -0,0 +1,153 @@ +#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 +#ifndef BOOST_IS_ABSTRACT +#include +#include +#include +#include +#ifdef BOOST_NO_IS_ABSTRACT +#include +#endif +#endif +// should be the last #include +#include + + +namespace boost { +namespace detail{ + +#ifdef BOOST_IS_ABSTRACT +template +struct is_abstract_imp +{ + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_ABSTRACT(T)); +}; +#elif !defined(BOOST_NO_IS_ABSTRACT) +template +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 + static type_traits::no_type check_sig(U (*)[1]); + template + 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(std::size_t, s1 = sizeof(is_abstract_imp2::template check_sig(0))); +#else +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(check_sig(0))); +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif +#endif + + BOOST_STATIC_CONSTANT(bool, value = + (s1 == sizeof(type_traits::yes_type))); +}; + +template +struct is_abstract_select +{ + template + struct rebind + { + typedef is_abstract_imp2 type; + }; +}; +template <> +struct is_abstract_select +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_abstract_imp +{ + typedef is_abstract_select< ::boost::is_class::value> selector; + typedef typename selector::template rebind 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::value) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_polymorphic_imp::value) +#endif + +} // namespace boost + +#include + +#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP diff --git a/external/boost/type_traits/is_arithmetic.hpp b/external/boost/type_traits/is_arithmetic.hpp new file mode 100644 index 0000000..a1d8c46 --- /dev/null +++ b/external/boost/type_traits/is_arithmetic.hpp @@ -0,0 +1,51 @@ + +// (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 + +#if !defined( __CODEGEARC__ ) +#include +#include +#include +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#if !defined(__CODEGEARC__) +namespace detail { + +template< typename T > +struct is_arithmetic_impl +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_integral::value, + ::boost::is_float::value + >::value)); +}; + +} // namespace detail +#endif + +//* is a type T an arithmetic type described in the standard (3.9.1p8) +#if defined(__CODEGEARC__) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,__is_arithmetic(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,::boost::detail::is_arithmetic_impl::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED diff --git a/external/boost/type_traits/is_array.hpp b/external/boost/type_traits/is_array.hpp new file mode 100644 index 0000000..e9e820a --- /dev/null +++ b/external/boost/type_traits/is_array.hpp @@ -0,0 +1,91 @@ + +// (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 + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +#endif + +#include + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,__is_array(T)) +#elif !defined(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) )(wrap); +char BOOST_TT_DECL is_array_tester1(...); + +template< typename T> no_type is_array_tester2(T(*)(wrap)); +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() + ) + )) == 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::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED diff --git a/external/boost/type_traits/is_base_and_derived.hpp b/external/boost/type_traits/is_base_and_derived.hpp new file mode 100644 index 0000000..d6a9991 --- /dev/null +++ b/external/boost/type_traits/is_base_and_derived.hpp @@ -0,0 +1,254 @@ + +// (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 +#ifndef BOOST_IS_BASE_OF +#include +#include +#include +#include +#include +#include +#endif +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#ifndef BOOST_IS_BASE_OF +#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::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 +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 + 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 +struct is_base_and_derived_impl2 +{ +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + // + // May silently do the wrong thing with incomplete types + // unless we trap them here: + // + BOOST_STATIC_ASSERT(sizeof(B) != 0); + BOOST_STATIC_ASSERT(sizeof(D) != 0); + + 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::check_sig(Host(), 0)) == sizeof(type_traits::yes_type)); +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif +}; + +#else + +// +// broken version: +// +template +struct is_base_and_derived_impl2 +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::is_convertible::value)); +}; + +#define BOOST_BROKEN_IS_BASE_AND_DERIVED + +#endif + +template +struct is_base_and_derived_impl3 +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template +struct is_base_and_derived_select +{ + template + struct rebind + { + typedef is_base_and_derived_impl3 type; + }; +}; + +template <> +struct is_base_and_derived_select +{ + template + struct rebind + { + typedef is_base_and_derived_impl2 type; + }; +}; + +template +struct is_base_and_derived_impl +{ + typedef typename remove_cv::type ncvB; + typedef typename remove_cv::type ncvD; + + typedef is_base_and_derived_select< + ::boost::is_class::value, + ::boost::is_class::value, + ::boost::is_same::value> selector; + typedef typename selector::template rebind binder; + typedef typename binder::type bound_type; + + BOOST_STATIC_CONSTANT(bool, value = bound_type::value); +}; +#else +template +struct is_base_and_derived_impl +{ + typedef typename remove_cv::type ncvB; + typedef typename remove_cv::type ncvD; + + BOOST_STATIC_CONSTANT(bool, value = (BOOST_IS_BASE_OF(B,D) && ! ::boost::is_same::value)); +}; +#endif +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF2( + is_base_and_derived + , Base + , Derived + , (::boost::detail::is_base_and_derived_impl::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 + +#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610)) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename Base,is_base_and_derived,Base,Base,false) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED diff --git a/external/boost/type_traits/is_base_of.hpp b/external/boost/type_traits/is_base_of.hpp new file mode 100644 index 0000000..0cc7a32 --- /dev/null +++ b/external/boost/type_traits/is_base_of.hpp @@ -0,0 +1,51 @@ + +// (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 +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + + namespace detail{ + template + struct is_base_of_imp + { + typedef typename remove_cv::type ncvB; + typedef typename remove_cv::type ncvD; + BOOST_STATIC_CONSTANT(bool, value = (::boost::type_traits::ice_or< + (::boost::detail::is_base_and_derived_impl::value), + (::boost::type_traits::ice_and< ::boost::is_same::value, ::boost::is_class::value>::value)>::value)); + }; + } + +BOOST_TT_AUX_BOOL_TRAIT_DEF2( + is_base_of + , Base + , Derived + , (::boost::detail::is_base_of_imp::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 + +#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED diff --git a/external/boost/type_traits/is_class.hpp b/external/boost/type_traits/is_class.hpp new file mode 100644 index 0000000..1a2cd20 --- /dev/null +++ b/external/boost/type_traits/is_class.hpp @@ -0,0 +1,140 @@ +// (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 +#include +#ifndef BOOST_IS_CLASS +# include +# include +# include + +#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION +# include +#else +# include +# include +# include +# include +# include +#endif + +#endif // BOOST_IS_CLASS + +#ifdef __EDG_VERSION__ +# include +#endif + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +#ifndef BOOST_IS_CLASS +#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 ::boost::type_traits::yes_type is_class_tester(void(U::*)(void)); +template ::boost::type_traits::no_type is_class_tester(...); + +template +struct is_class_impl +{ + + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + sizeof(is_class_tester(0)) == sizeof(::boost::type_traits::yes_type), + ::boost::type_traits::ice_not< ::boost::is_union::value >::value + >::value) + ); +}; + +#else + +template +struct is_class_impl +{ + template static ::boost::type_traits::yes_type is_class_tester(void(U::*)(void)); + template static ::boost::type_traits::no_type is_class_tester(...); + + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + sizeof(is_class_tester(0)) == sizeof(::boost::type_traits::yes_type), + ::boost::type_traits::ice_not< ::boost::is_union::value >::value + >::value) + ); +}; + +#endif + +#else + +template +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::value >::value, + ::boost::type_traits::ice_not< ::boost::is_scalar::value >::value, + ::boost::type_traits::ice_not< ::boost::is_array::value >::value, + ::boost::type_traits::ice_not< ::boost::is_reference::value>::value, + ::boost::type_traits::ice_not< ::boost::is_void::value >::value, + ::boost::type_traits::ice_not< ::boost::is_function::value >::value + >::value)); +# else + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_not< ::boost::is_union::value >::value, + ::boost::type_traits::ice_not< ::boost::is_scalar::value >::value, + ::boost::type_traits::ice_not< ::boost::is_array::value >::value, + ::boost::type_traits::ice_not< ::boost::is_reference::value>::value, + ::boost::type_traits::ice_not< ::boost::is_void::value >::value + >::value)); +# endif +}; + +# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION +# else // BOOST_IS_CLASS +template +struct is_class_impl +{ + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_CLASS(T)); +}; +# endif // BOOST_IS_CLASS + +} // namespace detail + +# ifdef __EDG_VERSION__ +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_class,T, boost::detail::is_class_impl::type>::value) +# else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_class,T,::boost::detail::is_class_impl::value) +# endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED diff --git a/external/boost/type_traits/is_const.hpp b/external/boost/type_traits/is_const.hpp new file mode 100644 index 0000000..f24b71a --- /dev/null +++ b/external/boost/type_traits/is_const.hpp @@ -0,0 +1,165 @@ + +// (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: +// 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 +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# ifdef __GNUC__ +# include +# endif +# if BOOST_WORKAROUND(BOOST_MSVC, < 1400) +# include +# endif +#else +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,__is_const(T)) + +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +namespace detail{ +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +template +struct is_const_rvalue_filter +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) + BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::type*>::is_const); +#else + BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::is_const); +#endif +}; +#ifndef BOOST_NO_RVALUE_REFERENCES +template +struct is_const_rvalue_filter +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; +#endif +} + +//* is a type T declared const - is_const +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_rvalue_filter::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T&,false) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// 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::value)) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T volatile const,!(::boost::is_reference::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 +struct is_const_helper + : public ::boost::type_traits::false_result +{ +}; + +template <> +struct is_const_helper +{ + template struct result_ + { + static T* t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_const_tester(t)) + )); + }; +}; + +template <> +struct is_const_helper +{ + template struct result_ + { + static T t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_const_tester(&t)) + )); + }; +}; + +template +struct is_const_impl + : public is_const_helper< + is_reference::value + , is_array::value + >::template result_ +{ +}; + +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 +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_CONST_HPP_INCLUDED + diff --git a/external/boost/type_traits/is_convertible.hpp b/external/boost/type_traits/is_convertible.hpp new file mode 100644 index 0000000..0d42c46 --- /dev/null +++ b/external/boost/type_traits/is_convertible.hpp @@ -0,0 +1,431 @@ + +// Copyright 2000 John Maddock (john@johnmaddock.co.uk) +// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu) +// Copyright 1999, 2000 Jaakko Jarvi (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 +#ifndef BOOST_IS_CONVERTIBLE +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_NO_IS_ABSTRACT +#include +#endif +#include + +#if defined(__MWERKS__) +#include +#include +#endif + +#endif // BOOST_IS_CONVERTIBLE + +// should be always the last #include directive +#include + +namespace boost { + +#ifndef BOOST_IS_CONVERTIBLE + +// 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 typename add_rvalue_reference::type _m_from; + enum { value = sizeof( _m_check(_m_from) ) == sizeof(yes_type) }; + }; +}; + +template<> +struct does_conversion_exist +{ + template< typename To > struct result_ + { + enum { value = ::boost::is_void::value }; + }; +}; + +template +struct is_convertible_basic_impl + : public does_conversion_exist::template result_ +{ +}; + +#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560) +// +// special version for Borland compilers +// this version breaks when used for some +// UDT conversions: +// +template +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 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 typename add_rvalue_reference::type _m_from; + static bool const value = sizeof( checker::_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 any_conversion(const volatile T&); + template any_conversion(T&); +}; + +template struct checker +{ + static boost::type_traits::no_type _m_check(any_conversion ...); + static boost::type_traits::yes_type _m_check(T, int); +}; + +template +struct is_convertible_basic_impl +{ + static typename add_rvalue_reference::type _m_from; + static bool const value = sizeof( boost::detail::checker::_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 any_conversion(const volatile T&); + // we need this constructor to catch references to functions + // (which can not be cv-qualified): + template any_conversion(T&); +}; + +template +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 typename add_rvalue_reference::type _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 any_conversion(const volatile T&); + // we need this constructor to catch references to functions + // (which can not be cv-qualified): + template any_conversion(T&); +}; + +template +struct is_convertible_basic_impl +{ + // Using '...' doesn't always work on Digital Mars. This version seems to. + template + 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 typename add_rvalue_reference::type _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 +struct is_convertible_basic_impl_aux; + +struct any_conversion +{ + template any_conversion(const volatile T&); +}; + +template +struct is_convertible_basic_impl_aux +{ + 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 typename add_rvalue_reference::type _m_from; + + BOOST_STATIC_CONSTANT(bool, value = + sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type) + ); +}; + +template +struct is_convertible_basic_impl_aux +{ + static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...); + static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To); + static typename add_rvalue_reference::type _m_from; + BOOST_STATIC_CONSTANT(bool, value = + sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type) + ); +}; + +template +struct is_convertible_basic_impl: + is_convertible_basic_impl_aux< + From,To, + ::boost::is_function::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 +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 typename add_rvalue_reference::type _m_from; +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(disable:6334) +#endif +#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 +struct is_convertible_impl +{ + typedef typename add_reference::type ref_type; + enum { value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_or< + ::boost::detail::is_convertible_basic_impl::value, + ::boost::is_void::value + >::value, + ::boost::type_traits::ice_not< + ::boost::is_array::value + >::value + >::value) }; +}; +#elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551 +template +struct is_convertible_impl +{ + typedef typename add_reference::type ref_type; + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::type_traits::ice_or< + ::boost::detail::is_convertible_basic_impl::value, + ::boost::is_void::value + >::value, + ::boost::type_traits::ice_not< + ::boost::is_array::value + >::value + >::value) + ); +}; +#endif + +template +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef is_convertible_impl type; + }; +}; + +template <> +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef true_type type; + }; +}; + +template <> +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template <> +struct is_convertible_impl_select +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_convertible_impl_dispatch_base +{ +#if !BOOST_WORKAROUND(__HP_aCC, < 60700) + typedef is_convertible_impl_select< + ::boost::is_arithmetic::value, + ::boost::is_arithmetic::value, +#ifndef BOOST_NO_IS_ABSTRACT + ::boost::is_abstract::value +#else + false +#endif + > selector; +#else + typedef is_convertible_impl_select selector; +#endif + typedef typename selector::template rebind isc_binder; + typedef typename isc_binder::type type; +}; + +template +struct is_convertible_impl_dispatch + : public is_convertible_impl_dispatch_base::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,false) +#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,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const volatile,false) +#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::value)) + +#else + +BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,BOOST_IS_CONVERTIBLE(From,To)) + +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED diff --git a/external/boost/type_traits/is_enum.hpp b/external/boost/type_traits/is_enum.hpp new file mode 100644 index 0000000..e35548c --- /dev/null +++ b/external/boost/type_traits/is_enum.hpp @@ -0,0 +1,189 @@ + +// (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 +#ifndef BOOST_IS_ENUM +#include +#include +#include +#include +#include +#ifdef __GNUC__ +#include +#endif +#include +#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) +# include +# include +#endif +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_IS_ENUM +#if !(defined(__BORLANDC__) && (__BORLANDC__ <= 0x551)) + +namespace detail { + +#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) + +template +struct is_class_or_union +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_class::value + , ::boost::is_union::value + >::value)); +}; + +#else + +template +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 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 + 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)); +# 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 +struct is_enum_helper +{ + template struct type + { + BOOST_STATIC_CONSTANT(bool, value = false); + }; +}; + +template <> +struct is_enum_helper +{ + template struct type + : public ::boost::is_convertible::type,::boost::detail::int_convertible> + { + }; +}; + +template struct is_enum_impl +{ + //typedef ::boost::add_reference 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::value + , ::boost::is_reference::value + , ::boost::is_function::value + , is_class_or_union::value + , is_array::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::value + , ::boost::is_reference::value + , ::boost::is_function::value + , is_array::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::value + , ::boost::is_reference::value + , is_class_or_union::value + , is_array::value + >::value)); + +#endif + +#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) + typedef ::boost::detail::is_enum_helper< + ::boost::detail::is_enum_impl::selector + > se_t; +#else + typedef ::boost::detail::is_enum_helper se_t; +#endif + + typedef typename se_t::template type 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::value) + +#else // __BORLANDC__ +// +// buggy is_convertible prevents working +// implementation of is_enum: +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,false) + +#endif + +#else // BOOST_IS_ENUM + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,BOOST_IS_ENUM(T)) + +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_ENUM_HPP_INCLUDED diff --git a/external/boost/type_traits/is_float.hpp b/external/boost/type_traits/is_float.hpp new file mode 100644 index 0000000..25d16f1 --- /dev/null +++ b/external/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 + +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 + +#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED diff --git a/external/boost/type_traits/is_floating_point.hpp b/external/boost/type_traits/is_floating_point.hpp new file mode 100644 index 0000000..2224453 --- /dev/null +++ b/external/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 + +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 + +#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED diff --git a/external/boost/type_traits/is_function.hpp b/external/boost/type_traits/is_function.hpp new file mode 100644 index 0000000..2cb1bb9 --- /dev/null +++ b/external/boost/type_traits/is_function.hpp @@ -0,0 +1,106 @@ + +// 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 +#include +#include + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS) +# include +#else +# include +# include +#endif + +// should be the last #include +#include + +// is a type a function? +// Please note that this implementation is unnecessarily complex: +// we could just use !is_convertible::value, +// except that some compilers erroneously allow conversions from +// function pointers to void*. + +namespace boost { + +#if !defined( __CODEGEARC__ ) + +namespace detail { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS) +template +struct is_function_chooser + : public ::boost::type_traits::false_result +{ +}; + +template <> +struct is_function_chooser +{ + template< typename T > struct result_ + : public ::boost::type_traits::is_function_ptr_helper + { + }; +}; + +template +struct is_function_impl + : public is_function_chooser< ::boost::is_reference::value > + ::BOOST_NESTED_TEMPLATE result_ +{ +}; + +#else + +template +struct is_function_impl +{ +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + static T* t; + BOOST_STATIC_CONSTANT( + bool, value = sizeof(::boost::type_traits::is_function_ptr_tester(t)) + == sizeof(::boost::type_traits::yes_type) + ); +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif +}; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +template +struct is_function_impl : public false_type +{}; +#endif + +#endif + +} // namespace detail + +#endif // !defined( __CODEGEARC__ ) + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,__is_function(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,::boost::detail::is_function_impl::value) +#ifndef BOOST_NO_RVALUE_REFERENCES +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_function,T&&,false) +#endif +#endif +} // namespace boost + +#include + +#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED diff --git a/external/boost/type_traits/is_fundamental.hpp b/external/boost/type_traits/is_fundamental.hpp new file mode 100644 index 0000000..138e296 --- /dev/null +++ b/external/boost/type_traits/is_fundamental.hpp @@ -0,0 +1,45 @@ + +// (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 +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct is_fundamental_impl + : public ::boost::type_traits::ice_or< + ::boost::is_arithmetic::value + , ::boost::is_void::value + > +{ +}; + +} // namespace detail + +//* is a type T a fundamental type described in the standard (3.9.1) +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_fundamental,T,__is_fundamental(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_fundamental,T,::boost::detail::is_fundamental_impl::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED diff --git a/external/boost/type_traits/is_integral.hpp b/external/boost/type_traits/is_integral.hpp new file mode 100644 index 0000000..99420a9 --- /dev/null +++ b/external/boost/type_traits/is_integral.hpp @@ -0,0 +1,78 @@ + +// (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 + +// should be the last #include +#include + +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 +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,__is_integral(T)) +#else +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 + +// Same set of integral types as in boost/type_traits/integral_promotion.hpp. +// Please, keep in sync. -- Alexander Nasonov +#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 + +#endif // non-CodeGear implementation + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED diff --git a/external/boost/type_traits/is_lvalue_reference.hpp b/external/boost/type_traits/is_lvalue_reference.hpp new file mode 100644 index 0000000..a6af859 --- /dev/null +++ b/external/boost/type_traits/is_lvalue_reference.hpp @@ -0,0 +1,118 @@ + +// (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_lvalue_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: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED +#define BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED + +#include + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,__is_reference(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T&,true) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// 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_lvalue_reference,T& const,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_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_lvalue_reference,T const ,::boost::is_lvalue_reference::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T volatile ,::boost::is_lvalue_reference::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T const volatile ,::boost::is_lvalue_reference::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_lvalue_reference,T[N],false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,const T[N],false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,volatile T[N],false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_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 T&(* is_lvalue_reference_helper1(wrap) )(wrap); +char is_lvalue_reference_helper1(...); + +template no_type is_lvalue_reference_helper2(T&(*)(wrap)); +yes_type is_lvalue_reference_helper2(...); + +template +struct is_lvalue_reference_impl +{ + BOOST_STATIC_CONSTANT( + bool, value = sizeof( + ::boost::detail::is_lvalue_reference_helper2( + ::boost::detail::is_lvalue_reference_helper1(::boost::type_traits::wrap()))) == 1 + ); +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void const volatile,false) +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,::boost::detail::is_lvalue_reference_impl::value) + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED + diff --git a/external/boost/type_traits/is_member_function_pointer.hpp b/external/boost/type_traits/is_member_function_pointer.hpp new file mode 100644 index 0000000..38babf4 --- /dev/null +++ b/external/boost/type_traits/is_member_function_pointer.hpp @@ -0,0 +1,136 @@ + +// (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 +#include + +#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 +# include +#else +# include +# include +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,__is_member_function_pointer( T )) +#elif !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::type>::value + ) + +#else + +namespace detail { + +#ifndef __BORLANDC__ + +template +struct is_mem_fun_pointer_select + : public ::boost::type_traits::false_result +{ +}; + +template <> +struct is_mem_fun_pointer_select +{ + template struct result_ + { +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(push) +#pragma warning(disable:6334) +#endif + static T* make_t; + typedef result_ self_type; + + BOOST_STATIC_CONSTANT( + bool, value = ( + 1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t)) + )); +#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000) +#pragma warning(pop) +#endif + }; +}; + +template +struct is_member_function_pointer_impl + : public is_mem_fun_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct is_member_function_pointer_impl : public false_type{}; +#endif + +#else // Borland C++ + +template +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 +struct is_member_function_pointer_impl +{ + 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::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/is_member_pointer.hpp b/external/boost/type_traits/is_member_pointer.hpp new file mode 100644 index 0000000..a4a6d25 --- /dev/null +++ b/external/boost/type_traits/is_member_pointer.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: +// 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 +#include + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) +# include +#else +# include +# include +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,__is_member_pointer(T)) +#elif 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::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true) + +#if !BOOST_WORKAROUND(__MWERKS__,<=0x3003) && !BOOST_WORKAROUND(__IBMCPP__, <=600) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const volatile,true) +#endif + +#else // no partial template specialization + +namespace detail { + +template +::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 +struct is_member_pointer_select + : public ::boost::type_traits::false_result +{ +}; + +template <> +struct is_member_pointer_select +{ + template 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 +struct is_member_pointer_impl + : public is_member_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +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::value) + +#endif // __BORLANDC__ + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/is_pod.hpp b/external/boost/type_traits/is_pod.hpp new file mode 100644 index 0000000..4691e66 --- /dev/null +++ b/external/boost/type_traits/is_pod.hpp @@ -0,0 +1,143 @@ + +// (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 +#include +#include +#include +#include + +#include + +// should be the last #include +#include + +#ifndef BOOST_IS_POD +#define BOOST_INTERNAL_IS_POD(T) false +#else +#define BOOST_INTERNAL_IS_POD(T) BOOST_IS_POD(T) +#endif + +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 struct is_pod_impl +{ + BOOST_STATIC_CONSTANT( + bool, value = + (::boost::type_traits::ice_or< + ::boost::is_scalar::value, + ::boost::is_void::value, + BOOST_INTERNAL_IS_POD(T) + >::value)); +}; + +#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +template +struct is_pod_impl + : public is_pod_impl +{ +}; +#endif + +#else + +template +struct is_pod_helper +{ + template struct result_ + { + BOOST_STATIC_CONSTANT( + bool, value = + (::boost::type_traits::ice_or< + ::boost::is_scalar::value, + ::boost::is_void::value, + BOOST_INTERNAL_IS_POD(T) + >::value)); + }; +}; + +template +struct bool_to_yes_no_type +{ + typedef ::boost::type_traits::no_type type; +}; + +template <> +struct bool_to_yes_no_type +{ + typedef ::boost::type_traits::yes_type type; +}; + +template +struct is_pod_array_helper +{ + enum { is_pod = ::boost::is_POD::value }; // MSVC workaround + typedef typename bool_to_yes_no_type::type type; + type instance() const; +}; + +template +is_pod_array_helper is_POD_array(T*); + +template <> +struct is_pod_helper +{ + template struct result_ + { + static T& help(); + BOOST_STATIC_CONSTANT(bool, value = + sizeof(is_POD_array(help()).instance()) == sizeof(::boost::type_traits::yes_type) + ); + }; +}; + + +template struct is_pod_impl +{ + BOOST_STATIC_CONSTANT( + bool, value = ( + ::boost::detail::is_pod_helper< + ::boost::is_array::value + >::template result_::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::value) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pod,T,::boost::detail::is_pod_impl::value) + +} // namespace boost + +#include + +#undef BOOST_INTERNAL_IS_POD + +#endif // BOOST_TT_IS_POD_HPP_INCLUDED diff --git a/external/boost/type_traits/is_pointer.hpp b/external/boost/type_traits/is_pointer.hpp new file mode 100644 index 0000000..4e29bb3 --- /dev/null +++ b/external/boost/type_traits/is_pointer.hpp @@ -0,0 +1,162 @@ + +// (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: +// 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 +#include +#include +#include +#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,__is_pointer(T)) +#elif !defined(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 \ +{ \ + BOOST_STATIC_CONSTANT(bool, value = result); \ +}; \ +/**/ + +TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true) + +# undef TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC + +template< typename T > +struct is_pointer_impl +{ +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::detail::is_pointer_helper::value + , ::boost::type_traits::ice_not< + ::boost::is_member_pointer::value + >::value + >::value) + ); +#else + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::detail::is_pointer_helper::type>::value + , ::boost::type_traits::ice_not< + ::boost::is_member_pointer::value + >::value + >::value) + ); +#endif +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl::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 +struct is_pointer_select + : public ::boost::type_traits::false_result +{ +}; + +template <> +struct is_pointer_select +{ + template 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 +struct is_pointer_impl + : public is_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +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::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/is_polymorphic.hpp b/external/boost/type_traits/is_polymorphic.hpp new file mode 100644 index 0000000..8fcc69e --- /dev/null +++ b/external/boost/type_traits/is_polymorphic.hpp @@ -0,0 +1,114 @@ +// (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 +#ifndef BOOST_IS_POLYMORPHIC +#include +#include +#endif +// should be the last #include +#include +#include + +namespace boost{ + +#ifndef BOOST_IS_POLYMORPHIC + +namespace detail{ + +template +struct is_polymorphic_imp1 +{ +# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always. + typedef char d1, (&d2)[2]; +# else + typedef typename remove_cv::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 +struct is_polymorphic_imp2 +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +template +struct is_polymorphic_selector +{ + template + struct rebind + { + typedef is_polymorphic_imp2 type; + }; +}; + +template <> +struct is_polymorphic_selector +{ + template + struct rebind + { + typedef is_polymorphic_imp1 type; + }; +}; + +template +struct is_polymorphic_imp +{ + typedef is_polymorphic_selector< ::boost::is_class::value> selector; + typedef typename selector::template rebind 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::value) + +#else // BOOST_IS_POLYMORPHIC + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,BOOST_IS_POLYMORPHIC(T)) + +#endif + +} // namespace boost + +#include + +#endif diff --git a/external/boost/type_traits/is_reference.hpp b/external/boost/type_traits/is_reference.hpp new file mode 100644 index 0000000..49b5f9f --- /dev/null +++ b/external/boost/type_traits/is_reference.hpp @@ -0,0 +1,45 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000, 2010. +// (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. + +#ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED +#define BOOST_TT_IS_REFERENCE_HPP_INCLUDED + +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct is_reference_impl +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_lvalue_reference::value, ::boost::is_rvalue_reference::value + >::value)); +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,::boost::detail::is_reference_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED + diff --git a/external/boost/type_traits/is_rvalue_reference.hpp b/external/boost/type_traits/is_rvalue_reference.hpp new file mode 100644 index 0000000..cac2ee0 --- /dev/null +++ b/external/boost/type_traits/is_rvalue_reference.hpp @@ -0,0 +1,29 @@ + +// (C) John Maddock 2010. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (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_RVALUE_REFERENCE_HPP_INCLUDED +#define BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_rvalue_reference,T,false) +#ifndef BOOST_NO_RVALUE_REFERENCES +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_rvalue_reference,T&&,true) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED + diff --git a/external/boost/type_traits/is_same.hpp b/external/boost/type_traits/is_same.hpp new file mode 100644 index 0000000..c6afbd7 --- /dev/null +++ b/external/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: +// 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 +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#include +#include +#endif +// should be the last #include +#include + +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 struct part_2 { enum { value = false }; }; + template<> struct part_2 { enum { value = true }; }; +}; + +template< typename T1, typename T2 > +struct is_same_impl +{ + enum { value = boost::detail::is_same_part_1::template part_2::value }; +}; + +#else // generic "no-partial-specialization" version + +template +::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 +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(boost::detail::is_same_tester(&t,&u))), + (::boost::is_reference::value == ::boost::is_reference::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::value)) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_SAME_HPP_INCLUDED + diff --git a/external/boost/type_traits/is_scalar.hpp b/external/boost/type_traits/is_scalar.hpp new file mode 100644 index 0000000..4af3def --- /dev/null +++ b/external/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 +#include +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct is_scalar_impl +{ + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_or< + ::boost::is_arithmetic::value, + ::boost::is_enum::value, + ::boost::is_pointer::value, + ::boost::is_member_pointer::value + >::value)); +}; + +// these specializations are only really needed for compilers +// without partial specialization support: +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +template <> struct is_scalar_impl{ BOOST_STATIC_CONSTANT(bool, value = false ); }; +#endif + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_scalar,T,::boost::detail::is_scalar_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED diff --git a/external/boost/type_traits/is_signed.hpp b/external/boost/type_traits/is_signed.hpp new file mode 100644 index 0000000..ba7d6e9 --- /dev/null +++ b/external/boost/type_traits/is_signed.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). +// +// 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 +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +#if !defined( __CODEGEARC__ ) + +namespace detail{ + +#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) && !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) + +template +struct is_signed_values +{ + // + // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's + // rather than "real" static constants simply doesn't work or give + // the correct answer. + // + typedef typename remove_cv::type no_cv_t; + static const no_cv_t minus_one = (static_cast(-1)); + static const no_cv_t zero = (static_cast(0)); +}; + +template +struct is_signed_helper +{ + typedef typename remove_cv::type no_cv_t; + BOOST_STATIC_CONSTANT(bool, value = (!(::boost::detail::is_signed_values::minus_one > boost::detail::is_signed_values::zero))); +}; + +template +struct is_signed_select_helper +{ + template + struct rebind + { + typedef is_signed_helper type; + }; +}; + +template <> +struct is_signed_select_helper +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_signed_imp +{ + typedef is_signed_select_helper< + ::boost::type_traits::ice_or< + ::boost::is_integral::value, + ::boost::is_enum::value>::value + > selector; + typedef typename selector::template rebind binder; + typedef typename binder::type type; +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + BOOST_STATIC_CONSTANT(bool, value = is_signed_imp::type::value); +#else + BOOST_STATIC_CONSTANT(bool, value = type::value); +#endif +}; + +#else + +template struct is_signed_imp : public false_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#ifdef BOOST_HAS_LONG_LONG +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#endif +#if defined(CHAR_MIN) && (CHAR_MIN != 0) +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#endif +#if defined(WCHAR_MIN) && (WCHAR_MIN != 0) +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +template <> struct is_signed_imp : public true_type{}; +#endif + +#endif + +} + +#endif // !defined( __CODEGEARC__ ) + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,__is_signed(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,::boost::detail::is_signed_imp::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/is_union.hpp b/external/boost/type_traits/is_union.hpp new file mode 100644 index 0000000..610f162 --- /dev/null +++ b/external/boost/type_traits/is_union.hpp @@ -0,0 +1,57 @@ + +// (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 +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { +#ifndef __GNUC__ +template struct is_union_impl +{ + typedef typename remove_cv::type cvt; +#ifdef BOOST_IS_UNION + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(cvt)); +#else + BOOST_STATIC_CONSTANT(bool, value = false); +#endif +}; +#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 struct is_union_impl +{ +#ifdef BOOST_IS_UNION + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(T)); +#else + BOOST_STATIC_CONSTANT(bool, value = false); +#endif +}; +#endif +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_union,T,::boost::detail::is_union_impl::value) + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_UNION_HPP_INCLUDED diff --git a/external/boost/type_traits/is_unsigned.hpp b/external/boost/type_traits/is_unsigned.hpp new file mode 100644 index 0000000..0602838 --- /dev/null +++ b/external/boost/type_traits/is_unsigned.hpp @@ -0,0 +1,135 @@ + +// (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 +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +#if !defined( __CODEGEARC__ ) + +namespace detail{ + +#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) && !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) + +template +struct is_unsigned_values +{ + // + // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's + // rather than "real" static constants simply doesn't work or give + // the correct answer. + // + typedef typename remove_cv::type no_cv_t; + static const no_cv_t minus_one = (static_cast(-1)); + static const no_cv_t zero = (static_cast(0)); +}; + +template +struct is_ununsigned_helper +{ + BOOST_STATIC_CONSTANT(bool, value = (::boost::detail::is_unsigned_values::minus_one > ::boost::detail::is_unsigned_values::zero)); +}; + +template +struct is_ununsigned_select_helper +{ + template + struct rebind + { + typedef is_ununsigned_helper type; + }; +}; + +template <> +struct is_ununsigned_select_helper +{ + template + struct rebind + { + typedef false_type type; + }; +}; + +template +struct is_unsigned_imp +{ + typedef is_ununsigned_select_helper< + ::boost::type_traits::ice_or< + ::boost::is_integral::value, + ::boost::is_enum::value>::value + > selector; + typedef typename selector::template rebind binder; + typedef typename binder::type type; + BOOST_STATIC_CONSTANT(bool, value = type::value); +}; + +#else + +template struct is_unsigned_imp : public false_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#ifdef BOOST_HAS_LONG_LONG +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#endif +#if defined(CHAR_MIN) && (CHAR_MIN == 0) +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#endif +#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +template <> struct is_unsigned_imp : public true_type{}; +#endif + +#endif + +} + +#endif // !defined( __CODEGEARC__ ) + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,__is_unsigned(T)) +#else +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,::boost::detail::is_unsigned_imp::value) +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/is_void.hpp b/external/boost/type_traits/is_void.hpp new file mode 100644 index 0000000..6f6fbff --- /dev/null +++ b/external/boost/type_traits/is_void.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_IS_VOID_HPP_INCLUDED +#define BOOST_TT_IS_VOID_HPP_INCLUDED + +#include + +// should be the last #include +#include + +namespace boost { + +//* is a type T void - is_void +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,__is_void(T)) +#else +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 + +#endif // non-CodeGear implementation + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_VOID_HPP_INCLUDED diff --git a/external/boost/type_traits/is_volatile.hpp b/external/boost/type_traits/is_volatile.hpp new file mode 100644 index 0000000..863747d --- /dev/null +++ b/external/boost/type_traits/is_volatile.hpp @@ -0,0 +1,152 @@ + +// (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: +// 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 +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# if BOOST_WORKAROUND(BOOST_MSVC, < 1400) +# include +# endif +#else +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace boost { + +namespace detail{ +template +struct is_volatile_rval_filter +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) + BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::type*>::is_volatile); +#else + BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::is_volatile); +#endif +}; +#ifndef BOOST_NO_RVALUE_REFERENCES +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +template +struct is_volatile_rval_filter +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; +#endif +} + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,__is_volatile(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +//* is a type T declared volatile - is_volatile +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_rval_filter::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T&,false) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// 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 +struct is_volatile_helper + : public ::boost::type_traits::false_result +{ +}; + +template <> +struct is_volatile_helper +{ + template struct result_ + { + static T* t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_volatile_tester(t)) + )); + }; +}; + +template <> +struct is_volatile_helper +{ + template struct result_ + { + static T t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_volatile_tester(&t)) + )); + }; +}; + +template +struct is_volatile_impl + : public is_volatile_helper< + is_reference::value + , is_array::value + >::template result_ +{ +}; + +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 +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED diff --git a/external/boost/type_traits/make_unsigned.hpp b/external/boost/type_traits/make_unsigned.hpp new file mode 100644 index 0000000..54f9f66 --- /dev/null +++ b/external/boost/type_traits/make_unsigned.hpp @@ -0,0 +1,137 @@ + +// (C) Copyright John Maddock 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). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED +#define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// should be the last #include +#include + +namespace boost { + +namespace detail { + +template +struct make_unsigned_imp +{ + BOOST_STATIC_ASSERT( + (::boost::type_traits::ice_or< ::boost::is_integral::value, ::boost::is_enum::value>::value)); +#if !BOOST_WORKAROUND(BOOST_MSVC, <=1300) + BOOST_STATIC_ASSERT( + (::boost::type_traits::ice_not< ::boost::is_same< + typename remove_cv::type, bool>::value>::value)); +#endif + + typedef typename remove_cv::type t_no_cv; + typedef typename mpl::if_c< + (::boost::type_traits::ice_and< + ::boost::is_unsigned::value, + ::boost::is_integral::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value >::value), + T, + typename mpl::if_c< + (::boost::type_traits::ice_and< + ::boost::is_integral::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same::value>::value> + ::value), + typename mpl::if_< + is_same, + unsigned char, + typename mpl::if_< + is_same, + unsigned short, + typename mpl::if_< + is_same, + unsigned int, + typename mpl::if_< + is_same, + unsigned long, +#if defined(BOOST_HAS_LONG_LONG) + boost::ulong_long_type +#elif defined(BOOST_HAS_MS_INT64) + unsigned __int64 +#else + unsigned long +#endif + >::type + >::type + >::type + >::type, + // Not a regular integer type: + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned char), + unsigned char, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned short), + unsigned short, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned int), + unsigned int, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned long), + unsigned long, +#if defined(BOOST_HAS_LONG_LONG) + boost::ulong_long_type +#elif defined(BOOST_HAS_MS_INT64) + unsigned __int64 +#else + unsigned long +#endif + >::type + >::type + >::type + >::type + >::type + >::type base_integer_type; + + // Add back any const qualifier: + typedef typename mpl::if_< + is_const, + typename add_const::type, + base_integer_type + >::type const_base_integer_type; + + // Add back any volatile qualifier: + typedef typename mpl::if_< + is_volatile, + typename add_volatile::type, + const_base_integer_type + >::type type; +}; + + +} // namespace detail + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(make_unsigned,T,typename boost::detail::make_unsigned_imp::type) + +} // namespace boost + +#include + +#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED + diff --git a/external/boost/type_traits/msvc/remove_bounds.hpp b/external/boost/type_traits/msvc/remove_bounds.hpp new file mode 100644 index 0000000..4b23b35 --- /dev/null +++ b/external/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 +#include + +namespace boost { + namespace detail { + template + struct remove_bounds_impl_typeof { + template + struct inner { + typedef T type; + }; + }; + template<> + struct remove_bounds_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U[]); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + }; + } //namespace detail + + template + struct remove_bounds { + typedef typename boost::detail::remove_bounds_impl_typeof< + boost::is_array::value + >::template inner >::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/external/boost/type_traits/msvc/remove_const.hpp b/external/boost/type_traits/msvc/remove_const.hpp new file mode 100644 index 0000000..d370754 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +namespace boost { + namespace detail { + template + struct remove_const_impl_typeof { + template + struct inner { + typedef T type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Const + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //CV + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Const Pointer + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //CV Pointer + struct remove_const_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Const Array + struct remove_const_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + template<> //CV Array + struct remove_const_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + } //namespace detail + + template + struct remove_const { + typedef boost::detail::remove_const_impl_typeof< + boost::is_pointer::value, + boost::is_array::value, + boost::is_const::value, + boost::is_volatile::value + > remove_const_type; + typedef typename + remove_const_type::template inner< + typename remove_const_type::template transform_type::type, + remove_const + >::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/external/boost/type_traits/msvc/remove_cv.hpp b/external/boost/type_traits/msvc/remove_cv.hpp new file mode 100644 index 0000000..9fbf8b8 --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +namespace boost { + namespace detail { + template + struct remove_cv_impl_typeof { + template + struct inner { + typedef T type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Volatile + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Const + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //CV + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Volatile Pointer + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Const Pointer + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //CV Pointer + struct remove_cv_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Volatile Array + struct remove_cv_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Const Array + struct remove_cv_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + template<> //CV Array + struct remove_cv_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + } //namespace detail + + template + struct remove_cv { + typedef boost::detail::remove_cv_impl_typeof< + boost::is_pointer::value, + boost::is_array::value, + boost::is_const::value, + boost::is_volatile::value + > remove_cv_type; + typedef typename + remove_cv_type::template inner< + typename remove_cv_type::template transform_type::type, + remove_cv + >::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/external/boost/type_traits/msvc/remove_pointer.hpp b/external/boost/type_traits/msvc/remove_pointer.hpp new file mode 100644 index 0000000..ec847f9 --- /dev/null +++ b/external/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 +#include + +namespace boost { + namespace detail { + template + struct remove_pointer_impl_typeof { + template + struct inner { + typedef T type; + }; + }; + template<> + struct remove_pointer_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U*); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + }; + } //namespace detail + + template + struct remove_pointer { + typedef typename boost::detail::remove_pointer_impl_typeof< + boost::is_pointer::value + >::template inner >::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/external/boost/type_traits/msvc/remove_reference.hpp b/external/boost/type_traits/msvc/remove_reference.hpp new file mode 100644 index 0000000..f8a77d4 --- /dev/null +++ b/external/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 +#include + +namespace boost { + namespace detail { + template + struct remove_reference_impl_typeof { + template + struct inner { + typedef T type; + }; + }; + template<> + struct remove_reference_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + }; + } //namespace detail + + template + struct remove_reference { + typedef typename boost::detail::remove_reference_impl_typeof< + boost::is_reference::value + >::template inner >::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/external/boost/type_traits/msvc/remove_volatile.hpp b/external/boost/type_traits/msvc/remove_volatile.hpp new file mode 100644 index 0000000..6f9259c --- /dev/null +++ b/external/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 +#include +#include +#include +#include + +namespace boost { + namespace detail { + template + struct remove_volatile_impl_typeof { + template + struct inner { + typedef T type; + }; + template + struct transform_type { + typedef T type; + }; + }; + template<> //Volatile + struct remove_volatile_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //CV + struct remove_volatile_impl_typeof { + template + struct inner { + template + static msvc_register_type test(U const volatile&(*)()); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T& type; + }; + }; + template<> //Volatile Pointer + struct remove_volatile_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //CV Pointer + struct remove_volatile_impl_typeof { + template + struct inner { + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type[]; + }; + }; + template<> //Volatile Array + struct remove_volatile_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + template<> //CV Array + struct remove_volatile_impl_typeof { + template + struct inner { + BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0]))); + + template + static msvc_register_type test(void(*)(U const volatile[])); + static msvc_register_type test(...); + BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) )); + typedef typename msvc_extract_type::id2type::type type; + }; + template + struct transform_type { + typedef T type; + }; + }; + + } //namespace detail + + template + struct remove_volatile { + typedef boost::detail::remove_volatile_impl_typeof< + boost::is_pointer::value, + boost::is_array::value, + boost::is_const::value, + boost::is_volatile::value + > remove_volatile_type; + typedef typename + remove_volatile_type::template inner< + typename remove_volatile_type::template transform_type::type, + remove_volatile + >::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/external/boost/type_traits/msvc/typeof.hpp b/external/boost/type_traits/msvc/typeof.hpp new file mode 100644 index 0000000..b95785d --- /dev/null +++ b/external/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 +#include + +namespace boost { namespace detail { +# if BOOST_WORKAROUND(BOOST_MSVC,==1300) + template + struct msvc_extract_type + { + template + struct id2type_impl; + + typedef id2type_impl id2type; + }; + + template + struct msvc_register_type : public msvc_extract_type + { + template<> + struct id2type_impl //VC7.0 specific bugfeature + { + typedef T type; + }; + }; +# else + template + struct msvc_extract_type + { + struct id2type; + }; + + template + struct msvc_register_type : public msvc_extract_type + { + typedef msvc_extract_type 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/external/boost/type_traits/remove_bounds.hpp b/external/boost/type_traits/remove_bounds.hpp new file mode 100644 index 0000000..ce12978 --- /dev/null +++ b/external/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 +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +#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__, BOOST_TESTED_AT(0x610)) && !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 + +#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED diff --git a/external/boost/type_traits/remove_const.hpp b/external/boost/type_traits/remove_const.hpp new file mode 100644 index 0000000..f4d1739 --- /dev/null +++ b/external/boost/type_traits/remove_const.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. + + +#ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED +#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED + +#include +#include +#include +#include +#include + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail { + +template +struct remove_const_helper +{ + typedef T type; +}; + +template +struct remove_const_helper +{ + typedef T volatile type; +}; + + +template +struct remove_const_impl +{ + typedef typename remove_const_helper< + typename cv_traits_imp::unqualified_type + , ::boost::is_volatile::value + >::type type; +}; + +#ifndef BOOST_NO_RVALUE_REFERENCES +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +template +struct remove_const_impl +{ + typedef T&& type; +}; +#endif + +} // namespace detail + +// * convert a type T to non-const type - remove_const + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl::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::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED diff --git a/external/boost/type_traits/remove_cv.hpp b/external/boost/type_traits/remove_cv.hpp new file mode 100644 index 0000000..ee6d8f9 --- /dev/null +++ b/external/boost/type_traits/remove_cv.hpp @@ -0,0 +1,84 @@ + +// (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 +#include +#include +#include + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail{ + +template +struct rvalue_ref_filter_rem_cv +{ + typedef typename boost::detail::cv_traits_imp::unqualified_type type; +}; + +#ifndef BOOST_NO_RVALUE_REFERENCES +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +template +struct rvalue_ref_filter_rem_cv +{ + typedef T&& type; +}; +#endif + +} + + +// convert a type T to a non-cv-qualified type - remove_cv +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::rvalue_ref_filter_rem_cv::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 +struct remove_cv_impl +{ + typedef typename remove_volatile_impl< + typename remove_const_impl::type + >::type type; +}; +} + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::remove_cv_impl::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED diff --git a/external/boost/type_traits/remove_pointer.hpp b/external/boost/type_traits/remove_pointer.hpp new file mode 100644 index 0000000..01253db --- /dev/null +++ b/external/boost/type_traits/remove_pointer.hpp @@ -0,0 +1,92 @@ + +// (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 +#include +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#elif defined(BOOST_MSVC) +#include +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifdef BOOST_MSVC + +namespace detail{ + + // + // We need all this crazy indirection because a type such as: + // + // T (*const)(U) + // + // Does not bind to a or partial specialization with VC10 and earlier + // + template + struct remove_pointer_imp + { + typedef T type; + }; + + template + struct remove_pointer_imp + { + typedef T type; + }; + + template + struct remove_pointer_imp3 + { + typedef typename remove_pointer_imp::type>::type type; + }; + + template + struct remove_pointer_imp3 + { + typedef T type; + }; + + template + struct remove_pointer_imp2 + { + typedef typename remove_pointer_imp3::value>::type type; + }; +} + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_imp2::type) + +#elif !defined(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::type) + +#endif + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED diff --git a/external/boost/type_traits/remove_reference.hpp b/external/boost/type_traits/remove_reference.hpp new file mode 100644 index 0000000..f453086 --- /dev/null +++ b/external/boost/type_traits/remove_reference.hpp @@ -0,0 +1,70 @@ + +// (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 +#include +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail{ +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +template +struct remove_rvalue_ref +{ + typedef T type; +}; +#ifndef BOOST_NO_RVALUE_REFERENCES +template +struct remove_rvalue_ref +{ + typedef T type; +}; +#endif + +} // namespace detail + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_rvalue_ref::type) +BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// 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::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED diff --git a/external/boost/type_traits/remove_volatile.hpp b/external/boost/type_traits/remove_volatile.hpp new file mode 100644 index 0000000..073a2a3 --- /dev/null +++ b/external/boost/type_traits/remove_volatile.hpp @@ -0,0 +1,88 @@ + +// (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 +#include +#include +#include +#include + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC,<=1300) +#include +#endif + +// should be the last #include +#include + +namespace boost { + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +namespace detail { + +template +struct remove_volatile_helper +{ + typedef T type; +}; + +template +struct remove_volatile_helper +{ + typedef T const type; +}; + +template +struct remove_volatile_impl +{ + typedef typename remove_volatile_helper< + typename cv_traits_imp::unqualified_type + , ::boost::is_const::value + >::type type; +}; + +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +#ifndef BOOST_NO_RVALUE_REFERENCES +template +struct remove_volatile_impl +{ + typedef T&& type; +}; +#endif +} // namespace detail + +// * convert a type T to a non-volatile type - remove_volatile + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl::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::type) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include + +#endif // BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED diff --git a/external/boost/type_traits/type_with_alignment.hpp b/external/boost/type_traits/type_with_alignment.hpp new file mode 100644 index 0000000..a86137f --- /dev/null +++ b/external/boost/type_traits/type_with_alignment.hpp @@ -0,0 +1,399 @@ +// (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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// should be the last #include +#include + +#include + +#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 +struct lower_alignment_helper_impl +{ + template + struct apply + { + typedef char type; + enum { value = true }; + }; +}; + +template <> +struct lower_alignment_helper_impl +{ + template + struct apply + : public mpl::if_c<(alignment_of::value == target), TestType, char> + { + enum { value = (alignment_of::value == target) }; + }; +}; + +template +struct lower_alignment_helper + : public lower_alignment_helper_impl::template apply +{ +}; +#else +template +struct lower_alignment_helper +{ + typedef char type; + enum { value = true }; +}; + +template +struct lower_alignment_helper +{ + enum { value = (alignment_of::value == target) }; + typedef typename mpl::if_c::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::value \ + }; + +#define BOOST_TT_CHOOSE_T(R,P,I,T) T BOOST_PP_CAT(t,I); + +template +struct has_one_T +{ + T data; +}; + +template +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 +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 +struct is_pod< ::boost::detail::lower_alignment > +{ + 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. +namespace detail{ + +template +class type_with_alignment_imp +{ + typedef ::boost::detail::lower_alignment t1; + typedef typename mpl::if_c< + ::boost::detail::is_aligned< ::boost::alignment_of::value,Align >::value + , t1 + , ::boost::detail::max_align + >::type align_t; + + BOOST_STATIC_CONSTANT(std::size_t, found = alignment_of::value); + + BOOST_STATIC_ASSERT(found >= Align); + BOOST_STATIC_ASSERT(found % Align == 0); + + public: + typedef align_t type; +}; + +} + +template +class type_with_alignment + : public ::boost::detail::type_with_alignment_imp +{ +}; + +#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 {}; +struct __attribute__((__aligned__(64))) a64 {}; +struct __attribute__((__aligned__(128))) a128 {}; +} + +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; }; +template<> class type_with_alignment<64> { public: typedef align::a64 type; }; +template<> class type_with_alignment<128> { public: typedef align::a128 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) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true) +} +#endif +#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && _MSC_VER >= 1300 +// +// MSVC supports types which have alignments greater than the normal +// maximum: these are used for example in the types __m64 and __m128 +// to provide types with alignment requirements which match the SSE +// registers. Therefore we extend type_with_alignment<> to support +// such types, however, we have to be careful to use a builtin type +// whenever possible otherwise we break previously working code: +// see http://article.gmane.org/gmane.comp.lib.boost.devel/173011 +// for an example and test case. Thus types like a8 below will +// be used *only* if the existing implementation can't provide a type +// with suitable alignment. This does mean however, that type_with_alignment<> +// may return a type which cannot be passed through a function call +// by value (and neither can any type containing such a type like +// Boost.Optional). However, this only happens when we have no choice +// in the matter because no other "ordinary" type is available. +// +namespace align { +struct __declspec(align(8)) a8 { + char m[8]; + typedef a8 type; +}; +struct __declspec(align(16)) a16 { + char m[16]; + typedef a16 type; +}; +struct __declspec(align(32)) a32 { + char m[32]; + typedef a32 type; +}; +struct __declspec(align(64)) a64 +{ + char m[64]; + typedef a64 type; +}; +struct __declspec(align(128)) a128 { + char m[128]; + typedef a128 type; +}; +} + +template<> class type_with_alignment<8> +{ + typedef mpl::if_c< + ::boost::alignment_of::value < 8, + align::a8, + boost::detail::type_with_alignment_imp<8> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<16> +{ + typedef mpl::if_c< + ::boost::alignment_of::value < 16, + align::a16, + boost::detail::type_with_alignment_imp<16> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<32> +{ + typedef mpl::if_c< + ::boost::alignment_of::value < 32, + align::a32, + boost::detail::type_with_alignment_imp<32> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<64> { + typedef mpl::if_c< + ::boost::alignment_of::value < 64, + align::a64, + boost::detail::type_with_alignment_imp<64> >::type t1; +public: + typedef t1::type type; +}; +template<> class type_with_alignment<128> { + typedef mpl::if_c< + ::boost::alignment_of::value < 128, + align::a128, + boost::detail::type_with_alignment_imp<128> >::type t1; +public: + typedef t1::type type; +}; + +namespace detail { +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) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,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; + +//#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610)) +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) +//#endif +} + +template 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 + +#endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED + + diff --git a/external/boost/units/detail/utility.hpp b/external/boost/units/detail/utility.hpp new file mode 100644 index 0000000..da46b45 --- /dev/null +++ b/external/boost/units/detail/utility.hpp @@ -0,0 +1,104 @@ +// Boost.Units - A C++ library for zero-overhead dimensional analysis and +// unit/quantity manipulation and conversion +// +// Copyright (C) 2003-2008 Matthias Christian Schabel +// Copyright (C) 2008 Steven Watanabe +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UNITS_UTILITY_HPP +#define BOOST_UNITS_UTILITY_HPP + +#include +#include +#include + +#if defined(__GLIBCXX__) || defined(__GLIBCPP__) +#define BOOST_UNITS_USE_DEMANGLING +#include +#endif // __GNUC__ + +#ifdef BOOST_UNITS_USE_DEMANGLING + +#include + +namespace boost { + +namespace units { + +namespace detail { + +inline +std::string +demangle(const char* name) +{ + // need to demangle C++ symbols + char* realname; + std::size_t len; + int stat; + + realname = abi::__cxa_demangle(name,NULL,&len,&stat); + + if (realname != NULL) + { + std::string out(realname); + + std::free(realname); + + boost::replace_all(out,"boost::units::",""); + + return out; + } + + return std::string("demangle :: error - unable to demangle specified symbol"); +} + +} // namespace detail + +template +std::string simplify_typename(const L& /*source*/) +{ + const std::string demangled = detail::demangle(typeid(L).name()); + + return demangled; +} + +} // namespace units + +} // namespace boost + +#else // BOOST_UNITS_USE_DEMANGLING + +namespace boost { + +namespace units { + +namespace detail { + +inline +std::string +demangle(const char* name) +{ + return name; +} + +} // namespace detail + +template +std::string simplify_typename(const L& /*source*/) +{ + return std::string(typeid(L).name()); +} + +} // namespace units + +} // namespace boost + +// To get system-specific predefined macros: +// gcc -arch ppc -dM -E - < /dev/null | sort + +#endif // BOOST_UNITS_USE_DEMANGLING + +#endif // BOOST_UNITS_UTILITY_HPP diff --git a/external/boost/utility.hpp b/external/boost/utility.hpp new file mode 100644 index 0000000..b909f29 --- /dev/null +++ b/external/boost/utility.hpp @@ -0,0 +1,20 @@ +// 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 .) + +// See for the library's home page. + +#ifndef BOOST_UTILITY_HPP +#define BOOST_UTILITY_HPP + +#include +#include +#include +#include +#include +#include +#include + +#endif // BOOST_UTILITY_HPP diff --git a/external/boost/utility/addressof.hpp b/external/boost/utility/addressof.hpp new file mode 100644 index 0000000..95cd92f --- /dev/null +++ b/external/boost/utility/addressof.hpp @@ -0,0 +1,102 @@ +// Copyright (C) 2002 Brad King (brad.king@kitware.com) +// Douglas Gregor (gregod@cs.rpi.edu) +// +// Copyright (C) 2002, 2008 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 +# include + +namespace boost +{ + +namespace detail +{ + +template struct addr_impl_ref +{ + T & v_; + + inline addr_impl_ref( T & v ): v_( v ) {} + inline operator T& () const { return v_; } + +private: + addr_impl_ref & operator=(const addr_impl_ref &); +}; + +template struct addressof_impl +{ + static inline T * f( T & v, long ) + { + return reinterpret_cast( + &const_cast(reinterpret_cast(v))); + } + + static inline T * f( T * v, int ) + { + return v; + } +}; + +} // namespace detail + +template T * addressof( T & v ) +{ +#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) + + return boost::detail::addressof_impl::f( v, 0 ); + +#else + + return boost::detail::addressof_impl::f( boost::detail::addr_impl_ref( v ), 0 ); + +#endif +} + +#if defined( __SUNPRO_CC ) && BOOST_WORKAROUND( __SUNPRO_CC, BOOST_TESTED_AT( 0x590 ) ) + +namespace detail +{ + +template struct addressof_addp +{ + typedef T * type; +}; + +} // namespace detail + +template< class T, std::size_t N > +typename detail::addressof_addp< T[N] >::type addressof( T (&t)[N] ) +{ + return &t; +} + +#endif + +// Borland doesn't like casting an array reference to a char reference +// but these overloads work around the problem. +#if defined( __BORLANDC__ ) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +template +T (*addressof(T (&t)[N]))[N] +{ + return reinterpret_cast(&t); +} + +template +const T (*addressof(const T (&t)[N]))[N] +{ + return reinterpret_cast(&t); +} +#endif + +} // namespace boost + +#endif // BOOST_UTILITY_ADDRESSOF_HPP diff --git a/external/boost/utility/base_from_member.hpp b/external/boost/utility/base_from_member.hpp new file mode 100644 index 0000000..04aabb5 --- /dev/null +++ b/external/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 +// .) + +// See for the library's home page. + +#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP +#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP + +#include +#include +#include +#include + + +// 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/external/boost/utility/binary.hpp b/external/boost/utility/binary.hpp new file mode 100644 index 0000000..8cef146 --- /dev/null +++ b/external/boost/utility/binary.hpp @@ -0,0 +1,708 @@ +/*============================================================================= + Copyright (c) 2005 Matthew Calabrese + + Use, modification and distribution is subject to the Boost Software + License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ + +#ifndef BOOST_UTILITY_BINARY_HPP +#define BOOST_UTILITY_BINARY_HPP + +/*============================================================================= + + Binary Literal Utility + ______________________ + + + The following code works by converting the input bit pattern into a + Boost.Preprocessor sequence, then converting groupings of 3 bits each into + the corresponding octal digit, and finally concatenating all of the digits + together along with a leading zero. This yields a standard octal literal + with the desired value as specified in bits. + +==============================================================================*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BOOST_BINARY( bit_groupings ) \ + BOOST_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings ) + +#define BOOST_BINARY_U( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, U ) + +#define BOOST_BINARY_L( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, L ) + +#define BOOST_BINARY_UL( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, UL ) + +#define BOOST_BINARY_LU( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LU ) + +#define BOOST_BINARY_LL( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LL ) + +#define BOOST_BINARY_ULL( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, ULL ) + +#define BOOST_BINARY_LLU( bit_groupings ) \ + BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LLU ) + +#define BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, suffix ) \ + BOOST_SUFFIXED_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings, suffix ) + +#define BOOST_SUFFIXED_BINARY_LITERAL_D( d, bit_groupings, suffix ) \ + BOOST_PP_CAT( BOOST_BINARY_LITERAL_D( d, bit_groupings ), suffix ) + +#define BOOST_BINARY_LITERAL_D( d, bit_groupings ) \ + BOOST_PP_SEQ_CAT \ + ( (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \ + ) + +#define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \ + BOOST_PP_SEQ_TRANSFORM \ + ( BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION \ + , BOOST_PP_NIL \ + , BOOST_PP_IDENTITY( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE )()\ + ( BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE \ + ( \ + d \ + , BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings ) \ + ) \ + ) \ + ) + +#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE( bit_sequence ) \ + BOOST_PP_CAT \ + ( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 bit_sequence \ + , END_BIT \ + ) + +#define BOOST_DETAIL_BITS_PER_OCTIT 3 + +#define BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE( d, incomplete_nibble_sequence ) \ + BOOST_PP_CAT \ + ( BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_ \ + , BOOST_PP_MOD_D( d \ + , BOOST_PP_SEQ_SIZE( incomplete_nibble_sequence ) \ + , BOOST_DETAIL_BITS_PER_OCTIT \ + ) \ + ) \ + incomplete_nibble_sequence + +#define BOOST_DETAIL_FIXED_COMPL( bit ) \ + BOOST_PP_CAT( BOOST_DETAIL_FIXED_COMPL_, bit ) + +#define BOOST_DETAIL_FIXED_COMPL_0 1 + +#define BOOST_DETAIL_FIXED_COMPL_1 0 + +#define BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings ) \ + BOOST_PP_EMPTY \ + BOOST_PP_CAT( BOOST_PP_WHILE_, d ) \ + ( BOOST_DETAIL_BINARY_LITERAL_PREDICATE \ + , BOOST_DETAIL_BINARY_LITERAL_OPERATION \ + , bit_groupings () \ + ) + +#define BOOST_DETAIL_BINARY_LITERAL_PREDICATE( d, state ) \ + BOOST_DETAIL_FIXED_COMPL( BOOST_DETAIL_IS_NULLARY_ARGS( state ) ) + +#define BOOST_DETAIL_BINARY_LITERAL_OPERATION( d, state ) \ + BOOST_DETAIL_SPLIT_AND_SWAP \ + ( BOOST_PP_CAT( BOOST_DETAIL_BINARY_LITERAL_ELEMENT_, state ) ) + +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION( s, dummy_param, tuple ) \ + BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL tuple + +#define BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL( bit2, bit1, bit0 ) \ + BOOST_DETAIL_TRIPLE_TO_OCTAL_ ## bit2 ## bit1 ## bit0 + +#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_1 (0)(0) +#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_2 (0) +#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_0 + +#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1END_BIT + +#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1( bit ) \ + ( ( bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2 + +#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2( bit ) \ + bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3 + +#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3( bit ) \ + bit ) ) BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 + +#define BOOST_DETAIL_SPLIT_AND_SWAP( params ) \ + BOOST_PP_IDENTITY( BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS )()( params ) + +#define BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS( first_param, second_param ) \ + second_param first_param + +#define BOOST_DETAIL_LEFT_OF_COMMA( params ) \ + BOOST_PP_IDENTITY( BOOST_DETAIL_FIRST_MACRO_PARAM )()( params ) + +#define BOOST_DETAIL_FIRST_MACRO_PARAM( first_param, second_param ) \ + first_param + +/* Begin derived concepts from Chaos by Paul Mensonides */ + +#define BOOST_DETAIL_IS_NULLARY_ARGS( param ) \ + BOOST_DETAIL_LEFT_OF_COMMA \ + ( BOOST_PP_CAT( BOOST_DETAIL_IS_NULLARY_ARGS_R_ \ + , BOOST_DETAIL_IS_NULLARY_ARGS_C param \ + ) \ + ) + +#define BOOST_DETAIL_IS_NULLARY_ARGS_C() \ + 1 + +#define BOOST_DETAIL_IS_NULLARY_ARGS_R_1 \ + 1, BOOST_PP_NIL + +#define BOOST_DETAIL_IS_NULLARY_ARGS_R_BOOST_DETAIL_IS_NULLARY_ARGS_C \ + 0, BOOST_PP_NIL + +/* End derived concepts from Chaos by Paul Mensonides */ + +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_000 0 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_001 1 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_010 2 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_011 3 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_100 4 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_101 5 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_110 6 +#define BOOST_DETAIL_TRIPLE_TO_OCTAL_111 7 + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0 (0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1 (1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000 (0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001 (0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010 (0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011 (0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100 (1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101 (1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110 (1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111 (1)(1)(1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000 (0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001 (0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010 (0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011 (0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100 (0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101 (0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110 (0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111 (0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000 (1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001 (1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010 (1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011 (1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100 (1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101 (1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110 (1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111 (1)(1)(1)(1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000 (0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001 (0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010 (0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011 (0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100 (0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101 (0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110 (0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111 (0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000 (0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001 (0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010 (0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011 (0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100 (0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101 (0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110 (0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111 (0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000 (1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001 (1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010 (1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011 (1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100 (1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101 (1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110 (1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111 (1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000 (1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001 (1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010 (1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011 (1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100 (1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101 (1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110 (1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111 (1)(1)(1)(1)(1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000000 (0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000001 (0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000010 (0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000011 (0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000100 (0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000101 (0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000110 (0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000111 (0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001000 (0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001001 (0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001010 (0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001011 (0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001100 (0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001101 (0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001110 (0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001111 (0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010000 (0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010001 (0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010010 (0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010011 (0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010100 (0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010101 (0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010110 (0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010111 (0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011000 (0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011001 (0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011010 (0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011011 (0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011100 (0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011101 (0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011110 (0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011111 (0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100000 (1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100001 (1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100010 (1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100011 (1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100100 (1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100101 (1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100110 (1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100111 (1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101000 (1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101001 (1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101010 (1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101011 (1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101100 (1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101101 (1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101110 (1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101111 (1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110000 (1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110001 (1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110010 (1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110011 (1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110100 (1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110101 (1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110110 (1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110111 (1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111000 (1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111001 (1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111010 (1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111011 (1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111100 (1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111101 (1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111110 (1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111111 (1)(1)(1)(1)(1)(1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000000 (0)(0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000001 (0)(0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000010 (0)(0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000011 (0)(0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000100 (0)(0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000101 (0)(0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000110 (0)(0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000111 (0)(0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001000 (0)(0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001001 (0)(0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001010 (0)(0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001011 (0)(0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001100 (0)(0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001101 (0)(0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001110 (0)(0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001111 (0)(0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010000 (0)(0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010001 (0)(0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010010 (0)(0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010011 (0)(0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010100 (0)(0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010101 (0)(0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010110 (0)(0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010111 (0)(0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011000 (0)(0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011001 (0)(0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011010 (0)(0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011011 (0)(0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011100 (0)(0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011101 (0)(0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011110 (0)(0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011111 (0)(0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100000 (0)(1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100001 (0)(1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100010 (0)(1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100011 (0)(1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100100 (0)(1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100101 (0)(1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100110 (0)(1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100111 (0)(1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101000 (0)(1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101001 (0)(1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101010 (0)(1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101011 (0)(1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101100 (0)(1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101101 (0)(1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101110 (0)(1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101111 (0)(1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110000 (0)(1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110001 (0)(1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110010 (0)(1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110011 (0)(1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110100 (0)(1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110101 (0)(1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110110 (0)(1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110111 (0)(1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111000 (0)(1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111001 (0)(1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111010 (0)(1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111011 (0)(1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111100 (0)(1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111101 (0)(1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111110 (0)(1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111111 (0)(1)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000000 (1)(0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000001 (1)(0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000010 (1)(0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000011 (1)(0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000100 (1)(0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000101 (1)(0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000110 (1)(0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000111 (1)(0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001000 (1)(0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001001 (1)(0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001010 (1)(0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001011 (1)(0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001100 (1)(0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001101 (1)(0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001110 (1)(0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001111 (1)(0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010000 (1)(0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010001 (1)(0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010010 (1)(0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010011 (1)(0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010100 (1)(0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010101 (1)(0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010110 (1)(0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010111 (1)(0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011000 (1)(0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011001 (1)(0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011010 (1)(0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011011 (1)(0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011100 (1)(0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011101 (1)(0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011110 (1)(0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011111 (1)(0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100000 (1)(1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100001 (1)(1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100010 (1)(1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100011 (1)(1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100100 (1)(1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100101 (1)(1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100110 (1)(1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100111 (1)(1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101000 (1)(1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101001 (1)(1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101010 (1)(1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101011 (1)(1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101100 (1)(1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101101 (1)(1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101110 (1)(1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101111 (1)(1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110000 (1)(1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110001 (1)(1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110010 (1)(1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110011 (1)(1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110100 (1)(1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110101 (1)(1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110110 (1)(1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110111 (1)(1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111000 (1)(1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111001 (1)(1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111010 (1)(1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111011 (1)(1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111100 (1)(1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111101 (1)(1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111110 (1)(1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111111 (1)(1)(1)(1)(1)(1)(1), + +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000000 (0)(0)(0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000001 (0)(0)(0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000010 (0)(0)(0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000011 (0)(0)(0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000100 (0)(0)(0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000101 (0)(0)(0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000110 (0)(0)(0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000111 (0)(0)(0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001000 (0)(0)(0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001001 (0)(0)(0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001010 (0)(0)(0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001011 (0)(0)(0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001100 (0)(0)(0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001101 (0)(0)(0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001110 (0)(0)(0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001111 (0)(0)(0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010000 (0)(0)(0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010001 (0)(0)(0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010010 (0)(0)(0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010011 (0)(0)(0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010100 (0)(0)(0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010101 (0)(0)(0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010110 (0)(0)(0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010111 (0)(0)(0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011000 (0)(0)(0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011001 (0)(0)(0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011010 (0)(0)(0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011011 (0)(0)(0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011100 (0)(0)(0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011101 (0)(0)(0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011110 (0)(0)(0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011111 (0)(0)(0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100000 (0)(0)(1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100001 (0)(0)(1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100010 (0)(0)(1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100011 (0)(0)(1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100100 (0)(0)(1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100101 (0)(0)(1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100110 (0)(0)(1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100111 (0)(0)(1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101000 (0)(0)(1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101001 (0)(0)(1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101010 (0)(0)(1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101011 (0)(0)(1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101100 (0)(0)(1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101101 (0)(0)(1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101110 (0)(0)(1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101111 (0)(0)(1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110000 (0)(0)(1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110001 (0)(0)(1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110010 (0)(0)(1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110011 (0)(0)(1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110100 (0)(0)(1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110101 (0)(0)(1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110110 (0)(0)(1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110111 (0)(0)(1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111000 (0)(0)(1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111001 (0)(0)(1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111010 (0)(0)(1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111011 (0)(0)(1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111100 (0)(0)(1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111101 (0)(0)(1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111110 (0)(0)(1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111111 (0)(0)(1)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000000 (0)(1)(0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000001 (0)(1)(0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000010 (0)(1)(0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000011 (0)(1)(0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000100 (0)(1)(0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000101 (0)(1)(0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000110 (0)(1)(0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000111 (0)(1)(0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001000 (0)(1)(0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001001 (0)(1)(0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001010 (0)(1)(0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001011 (0)(1)(0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001100 (0)(1)(0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001101 (0)(1)(0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001110 (0)(1)(0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001111 (0)(1)(0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010000 (0)(1)(0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010001 (0)(1)(0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010010 (0)(1)(0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010011 (0)(1)(0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010100 (0)(1)(0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010101 (0)(1)(0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010110 (0)(1)(0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010111 (0)(1)(0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011000 (0)(1)(0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011001 (0)(1)(0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011010 (0)(1)(0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011011 (0)(1)(0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011100 (0)(1)(0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011101 (0)(1)(0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011110 (0)(1)(0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011111 (0)(1)(0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100000 (0)(1)(1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100001 (0)(1)(1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100010 (0)(1)(1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100011 (0)(1)(1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100100 (0)(1)(1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100101 (0)(1)(1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100110 (0)(1)(1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100111 (0)(1)(1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101000 (0)(1)(1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101001 (0)(1)(1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101010 (0)(1)(1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101011 (0)(1)(1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101100 (0)(1)(1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101101 (0)(1)(1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101110 (0)(1)(1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101111 (0)(1)(1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110000 (0)(1)(1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110001 (0)(1)(1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110010 (0)(1)(1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110011 (0)(1)(1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110100 (0)(1)(1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110101 (0)(1)(1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110110 (0)(1)(1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110111 (0)(1)(1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111000 (0)(1)(1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111001 (0)(1)(1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111010 (0)(1)(1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111011 (0)(1)(1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111100 (0)(1)(1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111101 (0)(1)(1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111110 (0)(1)(1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111111 (0)(1)(1)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000000 (1)(0)(0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000001 (1)(0)(0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000010 (1)(0)(0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000011 (1)(0)(0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000100 (1)(0)(0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000101 (1)(0)(0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000110 (1)(0)(0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000111 (1)(0)(0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001000 (1)(0)(0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001001 (1)(0)(0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001010 (1)(0)(0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001011 (1)(0)(0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001100 (1)(0)(0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001101 (1)(0)(0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001110 (1)(0)(0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001111 (1)(0)(0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010000 (1)(0)(0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010001 (1)(0)(0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010010 (1)(0)(0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010011 (1)(0)(0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010100 (1)(0)(0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010101 (1)(0)(0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010110 (1)(0)(0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010111 (1)(0)(0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011000 (1)(0)(0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011001 (1)(0)(0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011010 (1)(0)(0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011011 (1)(0)(0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011100 (1)(0)(0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011101 (1)(0)(0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011110 (1)(0)(0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011111 (1)(0)(0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100000 (1)(0)(1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100001 (1)(0)(1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100010 (1)(0)(1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100011 (1)(0)(1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100100 (1)(0)(1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100101 (1)(0)(1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100110 (1)(0)(1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100111 (1)(0)(1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101000 (1)(0)(1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101001 (1)(0)(1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101010 (1)(0)(1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101011 (1)(0)(1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101100 (1)(0)(1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101101 (1)(0)(1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101110 (1)(0)(1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101111 (1)(0)(1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110000 (1)(0)(1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110001 (1)(0)(1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110010 (1)(0)(1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110011 (1)(0)(1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110100 (1)(0)(1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110101 (1)(0)(1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110110 (1)(0)(1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110111 (1)(0)(1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111000 (1)(0)(1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111001 (1)(0)(1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111010 (1)(0)(1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111011 (1)(0)(1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111100 (1)(0)(1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111101 (1)(0)(1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111110 (1)(0)(1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111111 (1)(0)(1)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000000 (1)(1)(0)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000001 (1)(1)(0)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000010 (1)(1)(0)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000011 (1)(1)(0)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000100 (1)(1)(0)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000101 (1)(1)(0)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000110 (1)(1)(0)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000111 (1)(1)(0)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001000 (1)(1)(0)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001001 (1)(1)(0)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001010 (1)(1)(0)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001011 (1)(1)(0)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001100 (1)(1)(0)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001101 (1)(1)(0)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001110 (1)(1)(0)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001111 (1)(1)(0)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010000 (1)(1)(0)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010001 (1)(1)(0)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010010 (1)(1)(0)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010011 (1)(1)(0)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010100 (1)(1)(0)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010101 (1)(1)(0)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010110 (1)(1)(0)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010111 (1)(1)(0)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011000 (1)(1)(0)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011001 (1)(1)(0)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011010 (1)(1)(0)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011011 (1)(1)(0)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011100 (1)(1)(0)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011101 (1)(1)(0)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011110 (1)(1)(0)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011111 (1)(1)(0)(1)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100000 (1)(1)(1)(0)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100001 (1)(1)(1)(0)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100010 (1)(1)(1)(0)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100011 (1)(1)(1)(0)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100100 (1)(1)(1)(0)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100101 (1)(1)(1)(0)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100110 (1)(1)(1)(0)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100111 (1)(1)(1)(0)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101000 (1)(1)(1)(0)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101001 (1)(1)(1)(0)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101010 (1)(1)(1)(0)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101011 (1)(1)(1)(0)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101100 (1)(1)(1)(0)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101101 (1)(1)(1)(0)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101110 (1)(1)(1)(0)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101111 (1)(1)(1)(0)(1)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110000 (1)(1)(1)(1)(0)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110001 (1)(1)(1)(1)(0)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110010 (1)(1)(1)(1)(0)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110011 (1)(1)(1)(1)(0)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110100 (1)(1)(1)(1)(0)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110101 (1)(1)(1)(1)(0)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110110 (1)(1)(1)(1)(0)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110111 (1)(1)(1)(1)(0)(1)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111000 (1)(1)(1)(1)(1)(0)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111001 (1)(1)(1)(1)(1)(0)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111010 (1)(1)(1)(1)(1)(0)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111011 (1)(1)(1)(1)(1)(0)(1)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0), +#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1), + +#endif diff --git a/external/boost/utility/compare_pointees.hpp b/external/boost/utility/compare_pointees.hpp new file mode 100644 index 0000000..7e2515c --- /dev/null +++ b/external/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/libs/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 + +namespace boost { + +// template bool equal_pointees(OP const& x, OP const& y); +// template 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 +inline +bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y ) +{ + return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ; +} + +template +struct equal_pointees_t : std::binary_function +{ + bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const + { return equal_pointees(x,y) ; } +} ; + +// template bool less_pointees(OP const& x, OP const& y); +// template 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 +inline +bool less_pointees ( OptionalPointee const& x, OptionalPointee const& y ) +{ + return !y ? false : ( !x ? true : (*x) < (*y) ) ; +} + +template +struct less_pointees_t : std::binary_function +{ + bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const + { return less_pointees(x,y) ; } +} ; + +} // namespace boost + +#endif + diff --git a/external/boost/utility/detail/in_place_factory_prefix.hpp b/external/boost/utility/detail/in_place_factory_prefix.hpp new file mode 100644 index 0000000..afd76b5 --- /dev/null +++ b/external/boost/utility/detail/in_place_factory_prefix.hpp @@ -0,0 +1,36 @@ +// Copyright (C) 2003, Fernando Luis Cacciola Carballal. +// Copyright (C) 2007, Tobias Schwinger. +// +// Use, modification, and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP +#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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_MAX_INPLACE_FACTORY_ARITY 10 + +#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP + +#endif + diff --git a/external/boost/utility/detail/in_place_factory_suffix.hpp b/external/boost/utility/detail/in_place_factory_suffix.hpp new file mode 100644 index 0000000..58f48c7 --- /dev/null +++ b/external/boost/utility/detail/in_place_factory_suffix.hpp @@ -0,0 +1,23 @@ +// Copyright (C) 2003, Fernando Luis Cacciola Carballal. +// Copyright (C) 2007, Tobias Schwinger. +// +// Use, modification, and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP +#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP + +#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT +#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL +#undef BOOST_MAX_INPLACE_FACTORY_ARITY + +#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP + +#endif + diff --git a/external/boost/utility/enable_if.hpp b/external/boost/utility/enable_if.hpp new file mode 100644 index 0000000..d292c6a --- /dev/null +++ b/external/boost/utility/enable_if.hpp @@ -0,0 +1,119 @@ +// Boost enable_if library + +// Copyright 2003 (c) 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 Jarvi (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 + struct enable_if_c { + typedef T type; + }; + + template + struct enable_if_c {}; + + template + struct enable_if : public enable_if_c {}; + + template + struct lazy_enable_if_c { + typedef typename T::type type; + }; + + template + struct lazy_enable_if_c {}; + + template + struct lazy_enable_if : public lazy_enable_if_c {}; + + + template + struct disable_if_c { + typedef T type; + }; + + template + struct disable_if_c {}; + + template + struct disable_if : public disable_if_c {}; + + template + struct lazy_disable_if_c { + typedef typename T::type type; + }; + + template + struct lazy_disable_if_c {}; + + template + struct lazy_disable_if : public lazy_disable_if_c {}; + +} // namespace boost + +#else + +namespace boost { + + namespace detail { typedef void enable_if_default_T; } + + template + struct enable_if_does_not_work_on_this_compiler; + + template + struct enable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct disable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler + { }; + + template + struct enable_if : enable_if_does_not_work_on_this_compiler + { }; + + template + struct disable_if : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_enable_if : enable_if_does_not_work_on_this_compiler + { }; + + template + struct lazy_disable_if : enable_if_does_not_work_on_this_compiler + { }; + +} // namespace boost + +#endif // BOOST_NO_SFINAE + +#endif diff --git a/external/boost/utility/in_place_factory.hpp b/external/boost/utility/in_place_factory.hpp new file mode 100644 index 0000000..f84b003 --- /dev/null +++ b/external/boost/utility/in_place_factory.hpp @@ -0,0 +1,88 @@ +// Copyright (C) 2003, Fernando Luis Cacciola Carballal. +// Copyright (C) 2007, Tobias Schwinger. +// +// Use, modification, and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +#ifndef BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP +#ifndef BOOST_PP_IS_ITERATING + +#include + +namespace boost { + +class in_place_factory_base {} ; + +#define BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY) +#define BOOST_PP_FILENAME_1 +#include BOOST_PP_ITERATE() + +} // namespace boost + +#include + +#define BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP +#else +#define N BOOST_PP_ITERATION() + +#if N +template< BOOST_PP_ENUM_PARAMS(N, class A) > +#endif +class BOOST_PP_CAT(in_place_factory,N) + : + public in_place_factory_base +{ +public: + + explicit BOOST_PP_CAT(in_place_factory,N) + ( BOOST_PP_ENUM_BINARY_PARAMS(N,A,const& a) ) +#if N > 0 + : BOOST_PP_ENUM(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _) +#endif + {} + + template + void* apply(void* address + BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) const + { + return new(address) T( BOOST_PP_ENUM_PARAMS(N, m_a) ); + } + + template + void* apply(void* address, std::size_t n + BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) const + { + for(char* next = address = this->BOOST_NESTED_TEMPLATE apply(address); + !! --n;) + this->BOOST_NESTED_TEMPLATE apply(next = next+sizeof(T)); + return address; + } + + BOOST_PP_REPEAT(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _) +}; + +#if N > 0 +template< BOOST_PP_ENUM_PARAMS(N, class A) > +inline BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) > +in_place( BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) ) +{ + return BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) > + ( BOOST_PP_ENUM_PARAMS(N, a) ); +} +#else +inline in_place_factory0 in_place() +{ + return in_place_factory0(); +} +#endif + +#undef N +#endif +#endif + diff --git a/external/boost/utility/swap.hpp b/external/boost/utility/swap.hpp new file mode 100644 index 0000000..6845e79 --- /dev/null +++ b/external/boost/utility/swap.hpp @@ -0,0 +1,55 @@ +// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker +// +// Distributed under the 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_SWAP_HPP +#define BOOST_UTILITY_SWAP_HPP + +// Note: the implementation of this utility contains various workarounds: +// - swap_impl is put outside the boost namespace, to avoid infinite +// recursion (causing stack overflow) when swapping objects of a primitive +// type. +// - swap_impl has a using-directive, rather than a using-declaration, +// because some compilers (including MSVC 7.1, Borland 5.9.3, and +// Intel 8.1) don't do argument-dependent lookup when it has a +// using-declaration instead. +// - boost::swap has two template arguments, instead of one, to +// avoid ambiguity when swapping objects of a Boost type that does +// not have its own boost::swap overload. + +#include //for std::swap +#include //for std::size_t + +namespace boost_swap_impl +{ + template + void swap_impl(T& left, T& right) + { + using namespace std;//use std::swap if argument dependent lookup fails + swap(left,right); + } + + template + void swap_impl(T (& left)[N], T (& right)[N]) + { + for (std::size_t i = 0; i < N; ++i) + { + ::boost_swap_impl::swap_impl(left[i], right[i]); + } + } +} + +namespace boost +{ + template + void swap(T1& left, T2& right) + { + ::boost_swap_impl::swap_impl(left, right); + } +} + +#endif diff --git a/external/boost/utility/value_init.hpp b/external/boost/utility/value_init.hpp new file mode 100644 index 0000000..5de9585 --- /dev/null +++ b/external/boost/utility/value_init.hpp @@ -0,0 +1,258 @@ +// (C) Copyright 2002-2008, 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 +// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker +// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola +// 21 Ago 2008 (Added swap) Niels Dekker, Fernando Cacciola +// 20 Feb 2009 (Fixed logical const-ness issues) Niels Dekker, Fernando Cacciola +// 03 Apr 2010 (Added initialized, suggested by Jeffrey Hellrung, fixing #3472) Niels Dekker +// 30 May 2010 (Made memset call conditional, fixing #3869) Niels Dekker +// +#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP +#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP + +// Note: The implementation of boost::value_initialized had to deal with the +// fact that various compilers haven't fully implemented value-initialization. +// The constructor of boost::value_initialized works around these compiler +// issues, by clearing the bytes of T, before constructing the T object it +// contains. More details on these issues are at libs/utility/value_init.htm + +#include +#include // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION. +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_MSVC +#pragma warning(push) +#if _MSC_VER >= 1310 +// It is safe to ignore the following warning from MSVC 7.1 or higher: +// "warning C4351: new behavior: elements of array will be default initialized" +#pragma warning(disable: 4351) +// It is safe to ignore the following MSVC warning, which may pop up when T is +// a const type: "warning C4512: assignment operator could not be generated". +#pragma warning(disable: 4512) +#endif +#endif + +#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION + // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED + // suggests that a workaround should be applied, because of compiler issues + // regarding value-initialization. + #define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED +#endif + +// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND +// switches the value-initialization workaround either on or off. +#ifndef BOOST_DETAIL_VALUE_INIT_WORKAROUND + #ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED + #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 1 + #else + #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0 + #endif +#endif + +namespace boost { + +template +class initialized +{ + private : + struct wrapper + { +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592)) + typename +#endif + remove_const::type data; + + wrapper() + : + data() + { + } + + wrapper(T const & arg) + : + data(arg) + { + } + }; + + mutable +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592)) + typename +#endif + aligned_storage::value>::type x; + + wrapper * wrapper_address() const + { + return static_cast( static_cast(&x)); + } + + public : + + initialized() + { +#if BOOST_DETAIL_VALUE_INIT_WORKAROUND + std::memset(&x, 0, sizeof(x)); +#endif + new (wrapper_address()) wrapper(); + } + + initialized(initialized const & arg) + { + new (wrapper_address()) wrapper( static_cast(*(arg.wrapper_address()))); + } + + explicit initialized(T const & arg) + { + new (wrapper_address()) wrapper(arg); + } + + initialized & operator=(initialized const & arg) + { + // Assignment is only allowed when T is non-const. + BOOST_STATIC_ASSERT( ! is_const::value ); + *wrapper_address() = static_cast(*(arg.wrapper_address())); + return *this; + } + + ~initialized() + { + wrapper_address()->wrapper::~wrapper(); + } + + T const & data() const + { + return wrapper_address()->data; + } + + T& data() + { + return wrapper_address()->data; + } + + void swap(initialized & arg) + { + ::boost::swap( this->data(), arg.data() ); + } + + operator T const &() const + { + return wrapper_address()->data; + } + + operator T&() + { + return wrapper_address()->data; + } + +} ; + +template +T const& get ( initialized const& x ) +{ + return x.data() ; +} + +template +T& get ( initialized& x ) +{ + return x.data() ; +} + +template +void swap ( initialized & lhs, initialized & rhs ) +{ + lhs.swap(rhs) ; +} + +template +class value_initialized +{ + private : + + // initialized does value-initialization by default. + initialized m_data; + + public : + + value_initialized() + : + m_data() + { } + + T const & data() const + { + return m_data.data(); + } + + T& data() + { + return m_data.data(); + } + + void swap(value_initialized & arg) + { + m_data.swap(arg.m_data); + } + + operator T const &() const + { + return m_data; + } + + operator T&() + { + return m_data; + } +} ; + + +template +T const& get ( value_initialized const& x ) +{ + return x.data() ; +} + +template +T& get ( value_initialized& x ) +{ + return x.data() ; +} + +template +void swap ( value_initialized & lhs, value_initialized & rhs ) +{ + lhs.swap(rhs) ; +} + + +class initialized_value_t +{ + public : + + template operator T() const + { + return initialized().data(); + } +}; + +initialized_value_t const initialized_value = {} ; + + +} // namespace boost + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +#endif diff --git a/external/boost/version.hpp b/external/boost/version.hpp new file mode 100644 index 0000000..0055f1e --- /dev/null +++ b/external/boost/version.hpp @@ -0,0 +1,35 @@ +// 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 patch level +// BOOST_VERSION / 100 % 1000 is the minor version +// BOOST_VERSION / 100000 is the major version + +#define BOOST_VERSION 104900 + +// +// BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION +// but as a *string* in the form "x_y[_z]" where x is the major version +// number, y is the minor version number, and z is the patch level if not 0. +// This is used by to select which library version to link to. + +#define BOOST_LIB_VERSION "1_49" + +#endif + + + diff --git a/external/boost/visit_each.hpp b/external/boost/visit_each.hpp new file mode 100644 index 0000000..1fc8a50 --- /dev/null +++ b/external/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 + +namespace boost { + template + inline void visit_each(Visitor& visitor, const T& t, long) + { + visitor(t); + } + + template + inline void visit_each(Visitor& visitor, const T& t) + { + visit_each(visitor, t, 0); + } +} + +#endif // BOOST_VISIT_EACH_HPP diff --git a/external/boost/weak_ptr.hpp b/external/boost/weak_ptr.hpp new file mode 100644 index 0000000..dd26869 --- /dev/null +++ b/external/boost/weak_ptr.hpp @@ -0,0 +1,18 @@ +#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 + +#endif // #ifndef BOOST_WEAK_PTR_HPP_INCLUDED diff --git a/external/boostcpp.jam b/external/boostcpp.jam new file mode 100644 index 0000000..db7360d --- /dev/null +++ b/external/boostcpp.jam @@ -0,0 +1,575 @@ +# Boost.Build support specific for the Boost C++ Libraries. +# Copyright Vladimir Prus 2002-2010. +# Copyright Dave Abrahams 2005-2006. +# Copyright Rene Rivera 2005-2007. +# Copyright Douglas Gregor 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) + +import option ; +import regex ; +import common ; + +import modules ; +import os ; +import path ; +import build-system ; +import configure ; +import set ; +import package ; +import project ; +import targets ; +import generate ; +import package ; + +############################################################################## +# +# 0. General setup. Parse options, check them. +# +############################################################################## + +BOOST_ROOT = [ modules.binding $(__name__) ] ; +BOOST_ROOT = $(BOOST_ROOT:D) ; + +rule set-version ( version ) +{ + BOOST_VERSION = $(version) ; + + local version-tag = [ MATCH "^([^.]+)[.]([^.]+)[.]([^.]+)" : $(BOOST_VERSION) ] + ; + if $(version-tag[3]) = 0 + { + version-tag = $(version-tag[1-2]) ; + } + + BOOST_VERSION_TAG = $(version-tag:J="_") ; +} + +# Option to choose how many variants to build. The default is "minimal". +build-type = [ option.get "build-type" ] ; +build-type ?= minimal ; +if ! ( $(build-type) in minimal complete ) +{ + ECHO "The value of the --build-type option should be either 'complete' or 'minimal'" ; + EXIT ; +} + +# What kind of layout are we doing? +layout = [ option.get layout : "" ] ; +# On Windows, we used versioned layout by default in order to +# be compatible with autolink. On other systems, we use system +# layout which is what every other program uses. Note that windows +# check is static, and won't +if ! $(layout) +{ + if [ os.name ] = NT + { + layout = versioned ; + } + else + { + layout = system ; + } +} +layout-$(layout) = true ; + +if $(layout) = system && $(build-type) = complete +{ + ECHO "error: Cannot use --layout=system with --build-type complete." ; + ECHO "error: Please used either --layout=versioned or --layout=tagged " ; + ECHO "error: if you wish to build multiple variants." ; + if [ os.name ] != NT + { + ECHO "error: Note that --layout=system is default on Unix starting with Boost 1.40." ; + } + EXIT ; +} + +# Possible stage only location. +stage-locate = [ option.get "stagedir" ] ; +stage-locate ?= stage ; +BOOST_STAGE_LOCATE = $(stage-locate) ; + +# Custom build ID. +build-id = [ option.get "buildid" ] ; +if $(build-id) +{ + BUILD_ID = [ regex.replace $(build-id) "[*\\/:.\"\' ]" "_" ] ; +} + +# Python build id (only for Python libraries) +python-id = [ option.get "python-buildid" ] ; +if $(python-id) +{ + PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ; +} + +############################################################################## +# +# 1. The 'tag' function that adds decoration suitable to the properties if +# versioned or tagged layout is requested. This function is called from +# Jamroot +# +############################################################################## + +rule tag ( name : type ? : property-set ) +{ + if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB + { + local result ; + if $(layout) = versioned + { + result = [ common.format-name + -$(BOOST_VERSION_TAG) + -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + } + else if $(layout) = tagged + { + result = [ common.format-name + + -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + } + else if $(layout) = system + { + result = [ common.format-name + + -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + } + else + { + ECHO "error: invalid layout '$(layout:E=)'" ; + EXIT ; + } + + # Optionally add version suffix. On NT, library with version suffix + # will not be recognized by linkers. On CYGWIN, we get strage + # duplicate symbol errors when library is generated with version + # suffix. On OSX, version suffix is not needed -- the linker expects + # the libFoo.1.2.3.dylib format. AIX linkers do not accept version + # suffixes either. Pgi compilers can not accept library with version + # suffix. + if $(type) = SHARED_LIB && + ( ! ( [ $(property-set).get ] in windows cygwin darwin aix ) && + ! ( [ $(property-set).get ] in pgi ) ) + { + result = $(result).$(BOOST_VERSION) ; + } + + return $(result) ; + } +} + +############################################################################## +# +# 2. Declare targets that build and install all libraries. Specifically: +# +# - 'stage-proper' that puts all libraries in stage/lib +# - 'install-proper' that install libraries and headers to system location +# - 'stage-unversioned' that creates links to libraries without boost veriosn +# in name +# - 'install-unversioned' which creates unversioned linked to installed +# libraries. +# +############################################################################## + +# Worker function suitable to the 'generate' metatarget. Creates a link +# to 'source', striping any version number from the name. +rule make-unversioned-links ( project name ? : property-set : sources * ) +{ + local result ; + local filtered ; + local pattern ; + local nt = [ modules.peek : NT ] ; + + # Collect the libraries that have the version number in 'filtered'. + for local s in $(sources) + { + local m ; + if $(nt) + { + m = [ MATCH "(.*[.]lib)" : [ $(s).name ] ] ; + } + else + { + m = [ MATCH "(.*[.]so[.0-9]+)" "(.*[.]dylib)" "(.*[.]a)" : + [ $(s).name ] ] ; + } + if $(m) + { + filtered += $(s) ; + } + } + + # Create links without version. + for local s in $(filtered) + { + local name = [ $(s).name ] ; + local ea = [ $(s).action ] ; + local ep = [ $(ea).properties ] ; + local a = [ new non-scanning-action $(s) : symlink.ln : $(ep) ] ; + + local noversion-file ; + if $(nt) + { + noversion-file = [ MATCH "(.*)-[0-9_]+(.*[.]lib)" : $(name) ] ; + } + else + { + noversion-file = + [ MATCH "(.*)-[0-9_]+(.*[.]so)[.0-9]*" : $(name) ] + [ MATCH "(.*)-[0-9_]+(.*[.]dylib)" : $(name) ] + [ MATCH "(.*)-[0-9_]+(.*[.]a)" : $(name) ] + [ MATCH "(.*)-[0-9_]+(.*[.]dll[.]a)" : $(name) ] ; + } + + local new-name = + $(noversion-file[1])$(noversion-file[2]) ; + result += [ new file-target $(new-name) exact : [ $(s).type ] : $(project) + : $(a) ] ; + + } + return $(result) ; +} + +rule declare_install_and_stage_proper_targets ( libraries * : headers * ) +{ + install-requirements = $(BOOST_ROOT)/boost ; + + if $(layout-versioned) + { + install-requirements += boost-$(BOOST_VERSION_TAG)/boost ; + } + else + { + install-requirements += boost ; + } + + if [ os.name ] = NT + { + install-requirements += C:/Boost ; + } + else + { + install-requirements += /usr/local ; + } + + p = [ project.current ] ; + + # Complete install. + package.install install-proper + : $(install-requirements) on + : + : libs/$(libraries)/build + : $(headers) + ; + + $(p).mark-target-as-explicit install-proper ; + + # Install just library. + install stage-proper + : libs/$(libraries)/build + : $(stage-locate)/lib + on LIB + on + ; + $(p).mark-target-as-explicit stage-proper ; + + if $(layout-versioned) && ( [ modules.peek : NT ] || [ modules.peek : UNIX ] ) + { + generate stage-unversioned : stage-proper : + boostcpp.make-unversioned-links ; + $(p).mark-target-as-explicit stage-unversioned ; + + generate install-unversioned : install-proper : + boostcpp.make-unversioned-links ; + $(p).mark-target-as-explicit explicit install-unversioned ; + } + else + { + # Create do-nothing aliases. + alias stage-unversioned ; + $(p).mark-target-as-explicit stage-unversioned ; + alias install-unversioned ; + $(p).mark-target-as-explicit install-unversioned ; + } +} + +############################################################################## +# +# 3. Declare top-level targets 'stage' and 'install'. These examine +# the --build-type option and, in case it's 'complete', build the +# 'install-proper' and 'stage-proper' targets with a number of +# property sets. +# +############################################################################## + +class top-level-target : alias-target-class +{ + import modules ; + import errors ; + + rule __init__ ( name : project : sources * : requirements * + : default-build * : usage-requirements * ) + { + alias-target-class.__init__ $(name) : $(project) : $(sources) : + $(requirements) : $(default-build) : $(usage-requirements) ; + + self.build-type = [ modules.peek boostcpp : build-type ] ; + # On Linux, we build release variant by default, since few users will + # ever want to debug C++ Boost libraries, and there's no ABI + # incompatibility between debug and release variants. We build + # shared and static libraries since that's what most packages + # seem to provide (.so in libfoo and .a in libfoo-dev). + self.minimal-properties = [ property-set.create + release multi shared static shared ] ; + # On Windows, new IDE projects use: + # + # runtime-link=dynamic, threading=multi, variant=(debug|release) + # + # and in addition, C++ Boost's autolink defaults to static linking. + self.minimal-properties-win = [ property-set.create + debug release multi static shared ] ; + + self.complete-properties = [ property-set.create + debug release + single multi + shared static + shared static ] ; + } + + rule generate ( property-set ) + { + local x = [ modules.peek : top-level-targets ] ; + x += $(self.name) ; + modules.poke : top-level-targets : $(x) ; + if $(self.build-type) = minimal + { + local expanded ; + + local os = [ $(property-set).get ] ; + # Because we completely override parent's 'generate' + # we need to check for default value of feature ourself. + if ! $(os) + { + os = [ feature.defaults ] ; + os = $(os:G=) ; + } + + if $(os) = windows + { + expanded = [ targets.apply-default-build $(property-set) + : $(self.minimal-properties-win) ] ; + } + else + { + expanded = [ targets.apply-default-build $(property-set) + : $(self.minimal-properties) ] ; + } + return [ build-multiple $(expanded) ] ; + } + else if $(self.build-type) = complete + { + local expanded = [ targets.apply-default-build $(property-set) + : $(self.complete-properties) ] ; + + # Filter inappopriate combinations + local filtered ; + for local p in $(expanded) + { + # See comment in handle-static-runtime regarding this logic. + if [ $(p).get ] = shared && [ $(p).get ] = static + && [ $(p).get ] != cw + { + # Skip this + } + else + { + filtered += $(p) ; + } + } + return [ build-multiple $(filtered) ] ; + } + else + { + errors.error "Unknown build type" ; + } + } + + rule build-multiple ( property-sets * ) + { + local usage-requirements = [ property-set.empty ] ; + local result ; + for local p in $(property-sets) + { + local r = [ alias-target-class.generate $(p) ] ; + if $(r) + { + usage-requirements = [ $(usage-requirements).add $(r[1]) ] ; + result += $(r[2-]) ; + } + } + return $(usage-requirements) [ sequence.unique $(result) ] ; + } +} + +rule declare_top_level_targets ( libraries * : headers * ) +{ + declare_install_and_stage_proper_targets $(libraries) : $(headers) ; + + targets.create-metatarget top-level-target : [ project.current ] + : install + : install-proper install-unversioned + ; + targets.create-metatarget top-level-target : [ project.current ] + : stage + : stage-proper stage-unversioned + ; + + p = [ project.current ] ; + $(p).mark-target-as-explicit install stage ; + + # This target is built by default, and will forward to 'stage' + # after producing some explanations. + targets.create-metatarget top-level-target : [ project.current ] + : forward + : explain stage + ; +} + + +stage-abs = [ path.native [ path.root $(stage-locate)/lib [ path.pwd ] ] ] ; + +############################################################################## +# +# 4. Add hook to report configuration before the build, and confirmation +# with setup instructions after the build +# +############################################################################## + +message explain : +"\nBuilding the Boost C++ Libraries.\n\n" ; +p = [ project.current ] ; +$(p).mark-target-as-explicit explain ; + +rule pre-build ( ) +{ + local tl = [ modules.peek : top-level-targets ] ; + if stage in $(tl) || install in $(tl) + { + # FIXME: remove if when Boost regression tests use trunk + # bjam. + if PAD in [ RULENAMES ] + { + configure.print-component-configuration ; + } + } +} +IMPORT $(__name__) : pre-build : : $(__name__).pre-build ; +build-system.set-pre-build-hook $(__name__).pre-build ; + +# FIXME: revive stage_abs +rule post-build ( ok ? ) +{ + if forward in [ modules.peek : top-level-targets ] + { + if $(ok) + { + ECHO +"\n\nThe Boost C++ Libraries were successfully built! + +The following directory should be added to compiler include paths: + + $(BOOST_ROOT) + +The following directory should be added to linker library paths: + + $(stage-abs) +" ; + } + } +} +IMPORT $(__name__) : post-build : : $(__name__).post-build ; +build-system.set-post-build-hook $(__name__).post-build ; + + +############################################################################## +# +# 5. Top-level setup +# +############################################################################## + + +# Decides which libraries are to be installed by looking at --with- +# --without- arguments. Returns the list of directories under "libs" +# which must be built and installed. +# +rule libraries-to-install ( existing-libraries * ) +{ + local argv = [ modules.peek : ARGV ] ; + local with-parameter = [ MATCH --with-(.*) : $(argv) ] ; + local without-parameter = [ MATCH --without-(.*) : $(argv) ] ; + + if ! $(with-parameter) && ! $(without-parameter) + { + # Nothing is specified on command line. See if maybe + # project-config.jam has some choices. + local project-config-libs = [ modules.peek project-config : libraries ] ; + with-parameter = [ MATCH --with-(.*) : $(project-config-libs) ] ; + without-parameter = [ MATCH --without-(.*) : $(project-config-libs) ] ; + } + + # Do some checks. + if $(with-parameter) && $(without-parameter) + { + ECHO "error: both --with- and --without- specified" ; + EXIT ; + } + + local wrong = [ set.difference $(with-parameter) : $(existing-libraries) ] ; + if $(wrong) + { + ECHO "error: wrong library name '$(wrong[1])' in the --with- option." ; + EXIT ; + } + local wrong = [ set.difference $(without-parameter) : $(existing-libraries) ] ; + if $(wrong) + { + ECHO "error: wrong library name '$(wrong[1])' in the --without- option." ; + EXIT ; + } + + if $(with-parameter) + { + return [ set.intersection $(existing-libraries) : $(with-parameter) ] ; + } + else + { + return [ set.difference $(existing-libraries) : $(without-parameter) ] ; + } +} + +rule declare-targets ( all-libraries * : headers * ) +{ + configure.register-components $(all-libraries) ; + + # Select the libraries to install. + libraries = [ libraries-to-install $(all-libraries) ] ; + configure.components-building $(libraries) ; + + if [ option.get "show-libraries" : : true ] + { + ECHO "The following libraries require building:" ; + for local l in $(libraries) + { + ECHO " - $(l)" ; + } + EXIT ; + } + + declare_top_level_targets $(libraries) : $(headers) ; +} diff --git a/external/bootstrap.bat b/external/bootstrap.bat new file mode 100644 index 0000000..a327ac0 --- /dev/null +++ b/external/bootstrap.bat @@ -0,0 +1,81 @@ +@ECHO OFF + +REM Copyright (C) 2009 Vladimir Prus +REM +REM Distributed under the Boost Software License, Version 1.0. +REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +ECHO Building Boost.Build engine +if exist ".\tools\build\v2\engine\bin.ntx86\b2.exe" del tools\build\v2\engine\bin.ntx86\b2.exe +if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" del tools\build\v2\engine\bin.ntx86\bjam.exe +if exist ".\tools\build\v2\engine\bin.ntx86_64\b2.exe" del tools\build\v2\engine\bin.ntx86_64\b2.exe +if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" del tools\build\v2\engine\bin.ntx86_64\bjam.exe +pushd tools\build\v2\engine + +call .\build.bat %* > ..\..\..\..\bootstrap.log +@ECHO OFF + +popd + +if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" ( + copy .\tools\build\v2\engine\bin.ntx86\b2.exe . > nul + copy .\tools\build\v2\engine\bin.ntx86\bjam.exe . > nul + goto :bjam_built) + +if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" ( + copy .\tools\build\v2\engine\bin.ntx86_64\b2.exe . > nul + copy .\tools\build\v2\engine\bin.ntx86_64\bjam.exe . > nul + goto :bjam_built) + +goto :bjam_failure + +:bjam_built + +REM Ideally, we should obtain the toolset that build.bat has +REM guessed. However, it uses setlocal at the start and does +REM export BOOST_JAM_TOOLSET, and I don't know how to do that +REM properly. Default to msvc for now. +set toolset=msvc + +ECHO import option ; > project-config.jam +ECHO. >> project-config.jam +ECHO using %toolset% ; >> project-config.jam +ECHO. >> project-config.jam +ECHO option.set keep-going : false ; >> project-config.jam +ECHO. >> project-config.jam + +ECHO. +ECHO Bootstrapping is done. To build, run: +ECHO. +ECHO .\b2 +ECHO. +ECHO To adjust configuration, edit 'project-config.jam'. +ECHO Further information: +ECHO. +ECHO - Command line help: +ECHO .\b2 --help +ECHO. +ECHO - Getting started guide: +ECHO http://boost.org/more/getting_started/windows.html +ECHO. +ECHO - Boost.Build documentation: +ECHO http://www.boost.org/boost-build2/doc/html/index.html + +goto :end + +:bjam_failure + +ECHO. +ECHO Failed to build Boost.Build engine. +ECHO Please consult bootstrap.log for furter diagnostics. +ECHO. +ECHO You can try to obtain a prebuilt binary from +ECHO. +ECHO http://sf.net/project/showfiles.php?group_id=7586^&package_id=72941 +ECHO. +ECHO Also, you can file an issue at http://svn.boost.org +ECHO Please attach bootstrap.log in that case. + +goto :end + +:end diff --git a/external/bootstrap.log b/external/bootstrap.log new file mode 100644 index 0000000..23f8923 --- /dev/null +++ b/external/bootstrap.log @@ -0,0 +1,29 @@ +### +### Using 'gcc' toolset. +### +rm -rf bootstrap +mkdir bootstrap +gcc -o bootstrap/jam0 command.c compile.c debug.c expand.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c newstr.c option.c output.c parse.c pathunix.c pathvms.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c pwd.c class.c native.c md5.c w32_getreg.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c execunix.c fileunix.c +expand.c: In function 'var_expand': +expand.c:85:28: warning: field precision specifier '.*' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=] + 85 | printf( "expand '%.*s'\n", end - in, in ); + | ~~^~ ~~~~~~~~ + | | | + | int long int +./bootstrap/jam0 -f build.jam --toolset=gcc --toolset-root= clean +...found 1 target... +...updating 1 target... +[DELETE] clean +...updated 1 target... +./bootstrap/jam0 -f build.jam --toolset=gcc --toolset-root= +...found 49 targets... +...updating 2 targets... +[COMPILE] bin.linuxx86_64/b2 +expand.c: In function 'var_expand': +expand.c:85:28: warning: field precision specifier '.*' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=] + 85 | printf( "expand '%.*s'\n", end - in, in ); + | ~~^~ ~~~~~~~~ + | | | + | int long int +[COPY] bin.linuxx86_64/bjam +...updated 2 targets... diff --git a/external/bootstrap.sh b/external/bootstrap.sh new file mode 100755 index 0000000..2723f28 --- /dev/null +++ b/external/bootstrap.sh @@ -0,0 +1,397 @@ +#!/bin/sh +# Copyright (C) 2005, 2006 Douglas Gregor. +# Copyright (C) 2006 The Trustees of Indiana University +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +# boostinspect:notab - Tabs are required for the Makefile. + +BJAM="" +TOOLSET="" +BJAM_CONFIG="" +BUILD="" +PREFIX=/usr/local +EPREFIX= +LIBDIR= +INCLUDEDIR= +LIBS="" +PYTHON=python +PYTHON_VERSION= +PYTHON_ROOT= +ICU_ROOT= + +# Internal flags +flag_no_python= +flag_icu= +flag_show_libraries= + +for option +do + case $option in + + -help | --help | -h) + want_help=yes ;; + + -prefix=* | --prefix=*) + PREFIX=`expr "x$option" : "x-*prefix=\(.*\)"` + ;; + + -exec-prefix=* | --exec-prefix=*) + EPREFIX=`expr "x$option" : "x-*exec-prefix=\(.*\)"` + ;; + + -libdir=* | --libdir=*) + LIBDIR=`expr "x$option" : "x-*libdir=\(.*\)"` + ;; + + -includedir=* | --includedir=*) + INCLUDEDIR=`expr "x$option" : "x-*includedir=\(.*\)"` + ;; + + -show-libraries | --show-libraries ) + flag_show_libraries=yes + ;; + + -with-bjam=* | --with-bjam=* ) + BJAM=`expr "x$option" : "x-*with-bjam=\(.*\)"` + ;; + + -with-icu | --with-icu ) + flag_icu=yes + ;; + + -with-icu=* | --with-icu=* ) + flag_icu=yes + ICU_ROOT=`expr "x$option" : "x-*with-icu=\(.*\)"` + ;; + + -without-icu | --without-icu ) + flag_icu=no + ;; + + -with-libraries=* | --with-libraries=* ) + library_list=`expr "x$option" : "x-*with-libraries=\(.*\)"` + if test "$library_list" != "all"; then + old_IFS=$IFS + IFS=, + for library in $library_list + do + LIBS="$LIBS --with-$library" + + if test $library = python; then + requested_python=yes + fi + done + IFS=$old_IFS + + if test "x$requested_python" != xyes; then + flag_no_python=yes + fi + fi + ;; + + -without-libraries=* | --without-libraries=* ) + library_list=`expr "x$option" : "x-*without-libraries=\(.*\)"` + old_IFS=$IFS + IFS=, + for library in $library_list + do + LIBS="$LIBS --without-$library" + + if test $library = python; then + flag_no_python=yes + fi + done + IFS=$old_IFS + ;; + + -with-python=* | --with-python=* ) + PYTHON=`expr "x$option" : "x-*with-python=\(.*\)"` + ;; + + -with-python-root=* | --with-python-root=* ) + PYTHON_ROOT=`expr "x$option" : "x-*with-python-root=\(.*\)"` + ;; + + -with-python-version=* | --with-python-version=* ) + PYTHON_VERSION=`expr "x$option" : "x-*with-python-version=\(.*\)"` + ;; + + -with-toolset=* | --with-toolset=* ) + TOOLSET=`expr "x$option" : "x-*with-toolset=\(.*\)"` + ;; + + -*) + { echo "error: unrecognized option: $option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + esac +done + +if test "x$want_help" = xyes; then + cat < bootstrap.log 2>&1 + if [ $? -ne 0 ]; then + echo + echo "Failed to build Boost.Build build engine" + echo "Consult 'bootstrap.log' for more details" + exit 1 + fi + cd "$pwd" + arch=`cd $my_dir/tools/build/v2/engine && ./bootstrap/jam0 -d0 -f build.jam --toolset=$TOOLSET --toolset-root= --show-locate-target && cd ..` + BJAM="$my_dir/tools/build/v2/engine/$arch/b2" + echo "tools/build/v2/engine/$arch/b2" + cp "$BJAM" . + cp "$my_dir/tools/build/v2/engine/$arch/bjam" . + +fi + +# TBD: Turn BJAM into an absolute path + +# If there is a list of libraries +if test "x$flag_show_libraries" = xyes; then + cat < /dev/null 2>&1` + if [ "$?" -ne "0" ]; then + flag_no_python=yes + fi +fi + +if test "x$flag_no_python" = x; then + if test "x$PYTHON_VERSION" = x; then + echo -n "Detecting Python version... " + PYTHON_VERSION=`$PYTHON -c "import sys; print (\"%d.%d\" % (sys.version_info[0], sys.version_info[1]))"` + echo $PYTHON_VERSION + fi + + if test "x$PYTHON_ROOT" = x; then + echo -n "Detecting Python root... " + PYTHON_ROOT=`$PYTHON -c "import sys; print sys.prefix"` + echo $PYTHON_ROOT + fi +fi + +# Configure ICU +echo -n "Unicode/ICU support for Boost.Regex?... " +if test "x$flag_icu" != xno; then + if test "x$ICU_ROOT" = x; then + COMMON_ICU_PATHS="/usr /usr/local /sw" + for p in $COMMON_ICU_PATHS; do + if test -r $p/include/unicode/utypes.h; then + ICU_ROOT=$p + fi + done + + if test "x$ICU_ROOT" = x; then + echo "not found." + else + BJAM_CONFIG="$BJAM_CONFIG -sICU_PATH=$ICU_ROOT" + echo "$ICU_ROOT" + fi + else + BJAM_CONFIG="$BJAM_CONFIG -sICU_PATH=$ICU_ROOT" + echo "$ICU_ROOT" + fi +else + echo "disabled." +fi + +# Backup the user's existing project-config.jam +JAM_CONFIG_OUT="project-config.jam" +if test -r "project-config.jam"; then + counter=1 + + while test -r "project-config.jam.$counter"; do + counter=`expr $counter + 1` + done + + echo "Backing up existing Boost.Build configuration in project-config.jam.$counter" + mv "project-config.jam" "project-config.jam.$counter" +fi + +# Generate user-config.jam +echo "Generating Boost.Build configuration in project-config.jam..." +cat > project-config.jam < ] +{ + using $TOOLSET ; +} + +project : default-build $TOOLSET ; +EOF + +# - Python configuration +if test "x$flag_no_python" = x; then + cat >> project-config.jam <> project-config.jam << EOF + +path-constant ICU_PATH : $ICU_ROOT ; + +EOF +fi + +cat >> project-config.jam << EOF + +# List of --with- and --without- +# options. If left empty, all libraries will be built. +# Options specified on the command line completely +# override this variable. +libraries = $LIBS ; + +# These settings are equivivalent to corresponding command-line +# options. +option.set prefix : $PREFIX ; +option.set exec-prefix : $EPREFIX ; +option.set libdir : $LIBDIR ; +option.set includedir : $INCLUDEDIR ; + +# Stop on first error +option.set keep-going : false ; +EOF + +cat << EOF + +Bootstrapping is done. To build, run: + + ./b2 + +To adjust configuration, edit 'project-config.jam'. +Further information: + + - Command line help: + ./b2 --help + + - Getting started guide: + http://www.boost.org/more/getting_started/unix-variants.html + + - Boost.Build documentation: + http://www.boost.org/boost-build2/doc/html/index.html + +EOF \ No newline at end of file diff --git a/external/doc/src/minimal.css b/external/doc/src/minimal.css new file mode 100644 index 0000000..401b73e --- /dev/null +++ b/external/doc/src/minimal.css @@ -0,0 +1,22 @@ +/* + + © Copyright Beman Dawes, 2007 + + Distributed under the Boost Software License, Version 1.0. + See www.boost.org/LICENSE_1_0.txt + +*/ + +/******************************************************************************* + Body +*******************************************************************************/ + +body { font-family: sans-serif; margin: 1em; } + +/******************************************************************************* + Table +*******************************************************************************/ + +table { margin: 0.5em; } + +/*** end ***/ \ No newline at end of file diff --git a/external/libs/config/test/config_info.cpp b/external/libs/config/test/config_info.cpp new file mode 100644 index 0000000..f565ec5 --- /dev/null +++ b/external/libs/config/test/config_info.cpp @@ -0,0 +1,1141 @@ +// Boost config.hpp configuration test program file -----------------------// + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Beman Dawes 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. +// +// Revision $Id: config_info.cpp 76122 2011-12-23 17:17:31Z johnmaddock $ +// + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_HAS_UNISTD_H +#include +#endif + +#if defined(__MINGW32__) +# include <_mingw.h> +#endif + +static unsigned int indent = 4; +static unsigned int width = 40; + +using std::cout; +using std::istream; + +void print_macro(const char* name, const char* value) +{ + // if name == value+1 then then macro is not defined, + // in which case we don't print anything: + if(0 != strcmp(name, value+1)) + { + for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); + std::cout << std::setw(width); + cout.setf(istream::left, istream::adjustfield); + std::cout << name; + if(value[1]) + { + // macro has a value: + std::cout << value << "\n"; + } + else + { + // macro is defined but has no value: + std::cout << " [no value]\n"; + } + } +} + +#define PRINT_MACRO(X) print_macro(#X, BOOST_STRINGIZE(=X)) + +template +void print_expression(const char* expression, T val) +{ + for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); + std::cout << std::setw(width); + std::cout.setf(istream::left, istream::adjustfield); + std::cout << expression << "=" << val << std::endl; +} + +#define PRINT_EXPRESSION(E) print_expression(#E, E); + +template +void print_byte_order(const char* what, T /* t */ ) +{ + T val = 0; + unsigned i; + for(i = 1; i < sizeof(T); ++i) + { + val |= (CHAR_BIT * static_cast(i)) << (CHAR_BIT * static_cast(i)); + } + const char* p = reinterpret_cast(&val); + + for(i = 0; i < indent; ++i) std::cout.put(' '); + std::cout << std::setw(width); + std::cout.setf(istream::left, istream::adjustfield); + std::cout << what << "="; + for(i = 0; i < sizeof(T); ++i) + { + std::cout << (int)p[i] << " "; + } + std::cout << std::endl; +} + +#define PRINT_ORDER(T) print_byte_order(BOOST_STRINGIZE(byte order for type T), T()) + +template +void print_sign(const char* what, T t) +{ + t = static_cast(-1); // cast suppresses warnings + for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); + std::cout << "Type " << what << " is " << ((t > 0) ? "unsigned" : "signed") << std::endl; +} + +#define PRINT_SIGN(T) print_sign(#T, T()) + + +void print_compiler_macros() +{ + std::cout << BOOST_COMPILER << "\n"; + // Borland options: + PRINT_MACRO(__BORLANDC__); + PRINT_MACRO(__CDECL__); + PRINT_MACRO(_CHAR_UNSIGNED); + PRINT_MACRO(__CODEGUARD__); + PRINT_MACRO(__CONSOLE__); + PRINT_MACRO(_CPPUNWIND); + PRINT_MACRO(__cplusplus); + PRINT_MACRO(__FLAT__); + PRINT_MACRO(__FUNC__); + PRINT_MACRO(_M_IX86); + PRINT_MACRO(__MSDOS__); + PRINT_MACRO(__MT__ ); + PRINT_MACRO(__PASCAL__); + PRINT_MACRO(__STDC__); + PRINT_MACRO(__TLS__); + PRINT_MACRO(_WCHAR_T); + PRINT_MACRO(_Windows); + PRINT_MACRO(__WIN32__); + PRINT_MACRO(_WIN32); + PRINT_MACRO(_WIN64); + PRINT_MACRO(_WIN32_WCE); + PRINT_MACRO(WIN32); + PRINT_MACRO(_RTLDLL); + PRINT_MACRO(__DEBUG); + +// Internal MSVC 7 error workaround (Peter Dimov) + +#ifndef _NATIVE_WCHAR_T_DEFINED + PRINT_MACRO(_WCHAR_T_DEFINED); +#endif + // MSVC macros: + PRINT_MACRO(_CPPRTTI); + PRINT_MACRO(_DLL); + PRINT_MACRO(_M_ALPHA); + PRINT_MACRO(_M_MPPC); + PRINT_MACRO(_M_MRX000); + PRINT_MACRO(_M_PPC); + PRINT_MACRO(_MFC_VER); + PRINT_MACRO(_MSC_EXTENSIONS); + PRINT_MACRO(_MSC_VER); + PRINT_MACRO(_MSC_FULL_VER); + PRINT_MACRO(_MT); + PRINT_MACRO(_NATIVE_WCHAR_T_DEFINED); + // GNUC options: + PRINT_MACRO(__GNUC__); + PRINT_MACRO(__GNUC_MINOR__); + PRINT_MACRO(__GNUC_PATCHLEVEL__); + PRINT_MACRO(__STDC_VERSION__); + PRINT_MACRO(__GNUG__); + PRINT_MACRO(__STRICT_ANSI__); + PRINT_MACRO(__GXX_EXPERIMENTAL_CXX0X__); + PRINT_MACRO(__VERSION__); + PRINT_MACRO(__OPTIMIZE__); + PRINT_MACRO(__CHAR_UNSIGNED__); + PRINT_MACRO(__REGISTER_PREFIX__); + PRINT_MACRO(__USER_LABEL_PREFIX__); + PRINT_MACRO(__GNUPRO__); + PRINT_MACRO(__EXCEPTIONS); + PRINT_MACRO(__FreeBSD__); + PRINT_MACRO(__FreeBSD_cc_version); + PRINT_MACRO(__ELF__); + PRINT_MACRO(__GNUPRO__); + PRINT_MACRO(unix); + PRINT_MACRO(bsd); + PRINT_MACRO(vax); + PRINT_MACRO(mc68000); + PRINT_MACRO(m68k); + PRINT_MACRO(M68020); + PRINT_MACRO(_AM29K); + PRINT_MACRO(ns32000); + PRINT_MACRO(sun); + PRINT_MACRO(pyr); + PRINT_MACRO(sequent); + PRINT_MACRO(__i386__); + PRINT_MACRO(__sparc); + PRINT_MACRO(__sparc__); + PRINT_MACRO(__powerpc__); + PRINT_MACRO(__hppa); + PRINT_MACRO(__CYGWIN__); + PRINT_MACRO(__MINGW32__); + // HP aCC: + PRINT_MACRO(__HP_aCC); + PRINT_MACRO(_HPACC_); + PRINT_MACRO(__LP64__); + PRINT_MACRO(__RISC2_0__); + PRINT_MACRO(__STDCPP__); + PRINT_MACRO(__hppa); + PRINT_MACRO(__hpux); + PRINT_MACRO(__hp9000s800); + PRINT_MACRO(__hp9000s700); + PRINT_MACRO(_PA_RISC1_1); + PRINT_MACRO(__HPUX_SOURCE); + PRINT_MACRO(_INCLUDE__STDC_A1_SOURCE); + // SGI IRIX: + PRINT_MACRO(__sgi); + PRINT_MACRO(_COMPILER_VERSION); + // Sunpro: + PRINT_MACRO(__SUNPRO_CC); + PRINT_MACRO(__SUNPRO_CC_COMPAT); + PRINT_MACRO(__BUILTIN_VA_ARG_INCR); + PRINT_MACRO(__sun); + PRINT_MACRO(__SVR4); + PRINT_MACRO(__unix); + PRINT_MACRO(__sparcv9); + PRINT_MACRO(__i386); + PRINT_MACRO(i386); + // Metrowerks + PRINT_MACRO(__MWERKS__); + PRINT_MACRO(__MSL__); + PRINT_MACRO(__MSL_CPP__); + PRINT_MACRO(__A5__); + PRINT_MACRO(__embedded_cplusplus); + PRINT_MACRO(__fourbyteints__); + PRINT_MACRO(__IEEEdoubles__); + PRINT_MACRO(__MC68K__); + PRINT_MACRO(__MC68020__); + PRINT_MACRO(__MC68881__); + PRINT_MACRO(__MIPS__); + PRINT_MACRO(__MIPS_ISA2__); + PRINT_MACRO(__MIPS_ISA3__); + PRINT_MACRO(__MIPS_ISA4__); + PRINT_MACRO(__MWBROWSER__); + PRINT_MACRO(__profile__); + PRINT_MACRO(__powerc); + PRINT_MACRO(_powerc); + PRINT_MACRO(__POWERPC__); + PRINT_MACRO(macintosh); + PRINT_MACRO(__MACH__); + PRINT_MACRO(__APPLE__); + PRINT_MACRO(__APPLE_CC__); + // MPW (MrCpp and SCpp) + PRINT_MACRO(__MRC__); + PRINT_MACRO(__SC__); + PRINT_MACRO(__FPCE__); + PRINT_MACRO(__FPCE_IEEE__); + PRINT_MACRO(MPW_CPLUS); + PRINT_MACRO(MPW_C); + PRINT_MACRO(__MC601); + PRINT_MACRO(__POWERPC); + PRINT_MACRO(__useAppleExts__); + PRINT_MACRO(powerc); + PRINT_MACRO(MC68000); + PRINT_MACRO(THINK_PLUS); + PRINT_MACRO(mc68881); + PRINT_MACRO(__FAR_CODE__); + PRINT_MACRO(__FAR_DATA__); + PRINT_MACRO(__CFM68K__); + // EDG + PRINT_MACRO(__EDG__); + PRINT_MACRO(__EDG_VERSION__); + PRINT_MACRO(c_plusplus); // indication for strict mode + PRINT_MACRO(_BOOL); + PRINT_MACRO(_EXPLICIT); + PRINT_MACRO(__SIGNED_CHARS__); + PRINT_MACRO(_TYPENAME); + PRINT_MACRO(_WCHAR_T); + PRINT_MACRO(__ARRAY_OPERATORS); + PRINT_MACRO(__EDG_ABI_COMPATIBILITY_VERSION); + PRINT_MACRO(__EDG_IMPLICIT_USING_STD); + PRINT_MACRO(__EDG_RUNTIME_USES_NAMESPACES); + PRINT_MACRO(__BOOL_DEFINED); + PRINT_MACRO(__RTTI); + PRINT_MACRO(__PLACEMENT_DELETE); + PRINT_MACRO(__NO_LONG_LONG); + + // Intel options: + PRINT_MACRO(__INTEL__); + PRINT_MACRO(__ICC); + PRINT_MACRO(__ICL); + PRINT_MACRO(__ECC); + PRINT_MACRO(__INTEL_COMPILER); + PRINT_MACRO(__INITIAL_POINTER_SIZE); + PRINT_MACRO(_INTEGRAL_MAX_BITS); + PRINT_MACRO(__INTEL_COMPILER_BUILD_DATE); + PRINT_MACRO(__INTEL_MS_COMPAT_LEVEL); + PRINT_MACRO(__LONG_DOUBLE_SIZE__); + PRINT_MACRO(_M_X64); + PRINT_MACRO(_OPENMP); + PRINT_MACRO(_OPENMPT); + PRINT_MACRO(_PGO_INSTRUMENT); + PRINT_MACRO(__QMSPP_); + + // Cray options: + PRINT_MACRO(_CRAYC); + PRINT_MACRO(_RELEASE); + PRINT_MACRO(cray); + PRINT_MACRO(CRAY); + PRINT_MACRO(CRAY1); + PRINT_MACRO(_CRAY1); + PRINT_MACRO(_CRAYMPP); + PRINT_MACRO(_CRAYT3E); + PRINT_MACRO(_CRAYIEEE); + PRINT_MACRO(_ADDR32); + PRINT_MACRO(_ADDR64); + PRINT_MACRO(_LD64); + PRINT_MACRO(_FASTMD); + PRINT_MACRO(_MAXVL); + + // misc compilers not covered so far: + PRINT_MACRO(__USLC__); + PRINT_MACRO(__DECCXX); + PRINT_MACRO(__IBMCPP__); + PRINT_MACRO(_REENTRANT); + PRINT_MACRO(_PTHREADS); + PRINT_MACRO(__STDC_HOSTED__); + PRINT_MACRO(__COMO__); + PRINT_MACRO(__COMO_VERSION__); + PRINT_MACRO(__DM__); + PRINT_MACRO(__osf__); + PRINT_MACRO(__OSF__); + PRINT_MACRO(__QNXNTO__); + PRINT_MACRO(__QNX__); + PRINT_MACRO(_NTO_VERSION); + PRINT_MACRO(__OPEN64__); + PRINT_MACRO(__open64); +} + +void print_stdlib_macros() +{ + std::cout << BOOST_STDLIB << std::endl; + #ifdef _RWSTD_VER + // Rogue Wave 2.x config options: + PRINT_MACRO(__NO_EDG_EXCEPTION_CLASSES); + PRINT_MACRO(_RWSTD_ALLOCATOR); + PRINT_MACRO(_RWSTD_BAD_ALLOC_DEFINED); + PRINT_MACRO(_RWSTD_BAD_EXCEPTION_DEFINED); + PRINT_MACRO(_RWSTD_BOUNDS_CHECKING); + PRINT_MACRO(_RWSTD_COMPILE_INSTANTIATE); + PRINT_MACRO(_RWSTD_DEFAULT_PRECISION); + PRINT_MACRO(_RWSTD_EXCEPTION_DEFINED); + PRINT_MACRO(_RWSTD_EXCEPTION_HANDLER_IN_STD); + PRINT_MACRO(_RWSTD_EXCEPTION_PREDEFINED); + PRINT_MACRO(_RWSTD_FLT_ROUNDS_IS_CONSTANT); + PRINT_MACRO(_RWSTD_LOCALIZED_ERRORS); + PRINT_MACRO(_RWSTD_MESSAGE); + PRINT_MACRO(_RWSTD_MUTEXATTR_DEFAULT); + PRINT_MACRO(_RWSTD_NO_ANSI_SPRINTF); + PRINT_MACRO(_RWSTD_NO_ARG_MATCH); + PRINT_MACRO(_RWSTD_NO_BAD_CAST); + PRINT_MACRO(_RWSTD_NO_BASE_CLASS_MATCH); + PRINT_MACRO(_RWSTD_NO_BOOL); + PRINT_MACRO(_RWSTD_NO_BUILTIN_CTOR); + PRINT_MACRO(_RWSTD_NO_CATOPEN_CATGETS); + PRINT_MACRO(_RWSTD_NO_CLASS_PARTIAL_SPEC); + PRINT_MACRO(_RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES); + PRINT_MACRO(_RWSTD_NO_COMPLICATED_EXCEPTIONS); + PRINT_MACRO(_RWSTD_NO_COMPLICATED_TYPEDEF); + PRINT_MACRO(_RWSTD_NO_CONST_INST); + PRINT_MACRO(_RWSTD_NO_CTOR_RETURN); + PRINT_MACRO(_RWSTD_NO_DEFAULT_FOR_TPARAM); + PRINT_MACRO(_RWSTD_NO_DEFAULT_TEMPLATE_ARGS); + PRINT_MACRO(_RWSTD_NO_DESTROY_BUILTIN); + PRINT_MACRO(_RWSTD_NO_DESTROY_NONBUILTIN); + PRINT_MACRO(_RWSTD_NO_EMBEDDED_TYPEDEF); + PRINT_MACRO(_RWSTD_NO_EX_SPEC); + PRINT_MACRO(_RWSTD_NO_EXCEPTIONS); + PRINT_MACRO(_RWSTD_NO_EXPLICIT); + PRINT_MACRO(_RWSTD_NO_EXPLICIT_ARG); + PRINT_MACRO(_RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION); + PRINT_MACRO(_RWSTD_NO_EXPLICIT_INSTANTIATION); + PRINT_MACRO(_RWSTD_NO_EXTENSION); + PRINT_MACRO(_RWSTD_NO_FORWARD_SPECIALIZATIONS); + PRINT_MACRO(_RWSTD_NO_FPOS_T); + PRINT_MACRO(_RWSTD_NO_FRIEND_TEMPLATES); + PRINT_MACRO(_RWSTD_NO_FUNC_PARTIAL_SPEC); + PRINT_MACRO(_RWSTD_NO_GETTIMEOFDAY); + PRINT_MACRO(_RWSTD_NO_GLOBAL_TZ); + PRINT_MACRO(_RWSTD_NO_INHERITED_TYPEDEFS); + PRINT_MACRO(_RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG); + PRINT_MACRO(_RWSTD_NO_INT_TYPEDEF); + PRINT_MACRO(_RWSTD_NO_LDIV); + PRINT_MACRO(_RWSTD_NO_LEADING_UNDERSCORE); + PRINT_MACRO(_RWSTD_NO_LOCALE); + PRINT_MACRO(_RWSTD_NO_LONG_NAME); + PRINT_MACRO(_RWSTD_NO_LONGDOUBLE); + PRINT_MACRO(_RWSTD_NO_MBSTATE_T); + PRINT_MACRO(_RWSTD_NO_MEM_CLASS_TEMPLATES); + PRINT_MACRO(_RWSTD_NO_MEMBER_TEMPLATES); + PRINT_MACRO(_RWSTD_NO_MEMBER_TYPE_TPARAM); + PRINT_MACRO(_RWSTD_NO_MEMBER_WO_DEF_CTOR); + PRINT_MACRO(_RWSTD_NO_MEMMOVE); + PRINT_MACRO(_RWSTD_NO_MULTI_DIM_ARRAY); + PRINT_MACRO(_RWSTD_NO_MUTABLE); + PRINT_MACRO(_RWSTD_NO_NAME_INJECTION); + PRINT_MACRO(_RWSTD_NO_NAMESPACE); + PRINT_MACRO(_RWSTD_NO_NESTING_TEMPLATES); + PRINT_MACRO(_RWSTD_NO_NEW_BRACKETS); + PRINT_MACRO(_RWSTD_NO_NEW_DECL); + PRINT_MACRO(_RWSTD_NO_NEW_HEADER); + PRINT_MACRO(_RWSTD_NO_NEW_TEMPLATE_SYNTAX); + PRINT_MACRO(_RWSTD_NO_NONCLASS_ARROW_RETURN); + PRINT_MACRO(_RWSTD_NO_NONTYPE_ARGS); + PRINT_MACRO(_RWSTD_NO_ONLY_NEEDED_INSTANTIATION); + PRINT_MACRO(_RWSTD_NO_OVERLOAD_C_POW); + PRINT_MACRO(_RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION); + PRINT_MACRO(_RWSTD_NO_OVERLOAD_WCHAR); + PRINT_MACRO(_RWSTD_NO_PART_SPEC_OVERLOAD); + PRINT_MACRO(_RWSTD_NO_RET_TEMPLATE); + PRINT_MACRO(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES); + PRINT_MACRO(_RWSTD_NO_STATIC_CAST); + PRINT_MACRO(_RWSTD_NO_STATIC_DEF); + PRINT_MACRO(_RWSTD_NO_STATIC_DEF2); + PRINT_MACRO(_RWSTD_NO_STATIC_DEF3); + PRINT_MACRO(_RWSTD_NO_STATIC_MEM_DEF); + PRINT_MACRO(_RWSTD_NO_STI_SIMPLE); + PRINT_MACRO(_RWSTD_NO_STI_TEMPLATE); + PRINT_MACRO(_RWSTD_NO_STREAM_LONG_DOUBLE); + PRINT_MACRO(_RWSTD_NO_STRFTIME_CAPC); + PRINT_MACRO(_RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE); + PRINT_MACRO(_RWSTD_NO_SWPRINTF); + PRINT_MACRO(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE); + PRINT_MACRO(_RWSTD_NO_TEMPLATE_TEMPLATE); + PRINT_MACRO(_RWSTD_NO_THREADS); + PRINT_MACRO(_RWSTD_NO_THROW_SPEC_ON_NEW); + PRINT_MACRO(_RWSTD_NO_THROW_WITH_SHARED); + PRINT_MACRO(_RWSTD_NO_TYPEDEF_INST); + PRINT_MACRO(_RWSTD_NO_TYPEDEF_OVERLOAD); + PRINT_MACRO(_RWSTD_NO_TYPENAME); + PRINT_MACRO(_RWSTD_NO_UNDEFINED_FRIEND); + PRINT_MACRO(_RWSTD_NO_UNINITIALIZED_STATIC_DEF); + PRINT_MACRO(_RWSTD_NO_WCHAR_H); + PRINT_MACRO(_RWSTD_NO_WCTYPE_H); + PRINT_MACRO(_RWSTD_NO_WIDE_CHAR); + PRINT_MACRO(_RWSTD_NO_WINT_TYPE); + PRINT_MACRO(_RWSTD_NO_WSTR); + PRINT_MACRO(_RWSTD_NOT_ALL_WSTR_CFUNCTIONS); + PRINT_MACRO(_RWSTD_POSIX_D10_THREADS); + PRINT_MACRO(_RWSTD_POSIX_THREADS); + PRINT_MACRO(_RWSTD_REQUIRES_IEEEFP); + PRINT_MACRO(_RWSTD_SOLARIS_THREADS); + PRINT_MACRO(_RWSTD_STRUCT_TM_TZ); + PRINT_MACRO(_RWSTD_WIDE_STRING_NULL_PROBLEM); + #elif defined(__STD_RWCOMPILER_H__) + // Rogue Wave 1.x std lib: + PRINT_MACRO(__NO_EDG_EXCEPTION_CLASSES); + PRINT_MACRO(RWSTD_ALLOCATOR); + PRINT_MACRO(RWSTD_BAD_ALLOC_DEFINED); + PRINT_MACRO(RWSTD_BAD_EXCEPTION_DEFINED); + PRINT_MACRO(RWSTD_BOUNDS_CHECKING); + PRINT_MACRO(RWSTD_COMPILE_INSTANTIATE); + PRINT_MACRO(RWSTD_DEFAULT_PRECISION); + PRINT_MACRO(RWSTD_EXCEPTION_DEFINED); + PRINT_MACRO(RWSTD_EXCEPTION_HANDLER_IN_STD); + PRINT_MACRO(RWSTD_EXCEPTION_PREDEFINED); + PRINT_MACRO(RWSTD_FLT_ROUNDS_IS_CONSTANT); + PRINT_MACRO(RWSTD_LOCALIZED_ERRORS); + PRINT_MACRO(RWSTD_MESSAGE); + PRINT_MACRO(RWSTD_MUTEXATTR_DEFAULT); + PRINT_MACRO(RWSTD_NO_ANSI_SPRINTF); + PRINT_MACRO(RWSTD_NO_ARG_MATCH); + PRINT_MACRO(RWSTD_NO_BAD_CAST); + PRINT_MACRO(RWSTD_NO_BASE_CLASS_MATCH); + PRINT_MACRO(RWSTD_NO_BOOL); + PRINT_MACRO(RWSTD_NO_BUILTIN_CTOR); + PRINT_MACRO(RWSTD_NO_CATOPEN_CATGETS); + PRINT_MACRO(RWSTD_NO_CLASS_PARTIAL_SPEC); + PRINT_MACRO(RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES); + PRINT_MACRO(RWSTD_NO_COMPLICATED_EXCEPTIONS); + PRINT_MACRO(RWSTD_NO_COMPLICATED_TYPEDEF); + PRINT_MACRO(RWSTD_NO_CONST_INST); + PRINT_MACRO(RWSTD_NO_CTOR_RETURN); + PRINT_MACRO(RWSTD_NO_DEFAULT_FOR_TPARAM); + PRINT_MACRO(RWSTD_NO_DEFAULT_TEMPLATE_ARGS); + PRINT_MACRO(RWSTD_NO_DESTROY_BUILTIN); + PRINT_MACRO(RWSTD_NO_DESTROY_NONBUILTIN); + PRINT_MACRO(RWSTD_NO_EMBEDDED_TYPEDEF); + PRINT_MACRO(RWSTD_NO_EX_SPEC); + PRINT_MACRO(RWSTD_NO_EXCEPTIONS); + PRINT_MACRO(RWSTD_NO_EXPLICIT); + PRINT_MACRO(RWSTD_NO_EXPLICIT_ARG); + PRINT_MACRO(RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION); + PRINT_MACRO(RWSTD_NO_EXPLICIT_INSTANTIATION); + PRINT_MACRO(RWSTD_NO_EXTENSION); + PRINT_MACRO(RWSTD_NO_FORWARD_SPECIALIZATIONS); + PRINT_MACRO(RWSTD_NO_FPOS_T); + PRINT_MACRO(RWSTD_NO_FRIEND_TEMPLATES); + PRINT_MACRO(RWSTD_NO_FUNC_PARTIAL_SPEC); + PRINT_MACRO(RWSTD_NO_GETTIMEOFDAY); + PRINT_MACRO(RWSTD_NO_GLOBAL_TZ); + PRINT_MACRO(RWSTD_NO_INHERITED_TYPEDEFS); + PRINT_MACRO(RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG); + PRINT_MACRO(RWSTD_NO_INT_TYPEDEF); + PRINT_MACRO(RWSTD_NO_LDIV); + PRINT_MACRO(RWSTD_NO_LEADING_UNDERSCORE); + PRINT_MACRO(RWSTD_NO_LOCALE); + PRINT_MACRO(RWSTD_NO_LONG_NAME); + PRINT_MACRO(RWSTD_NO_LONGDOUBLE); + PRINT_MACRO(RWSTD_NO_MBSTATE_T); + PRINT_MACRO(RWSTD_NO_MEM_CLASS_TEMPLATES); + PRINT_MACRO(RWSTD_NO_MEMBER_TEMPLATES); + PRINT_MACRO(RWSTD_NO_MEMBER_TYPE_TPARAM); + PRINT_MACRO(RWSTD_NO_MEMBER_WO_DEF_CTOR); + PRINT_MACRO(RWSTD_NO_MEMMOVE); + PRINT_MACRO(RWSTD_NO_MULTI_DIM_ARRAY); + PRINT_MACRO(RWSTD_NO_MUTABLE); + PRINT_MACRO(RWSTD_NO_NAME_INJECTION); + PRINT_MACRO(RWSTD_NO_NAMESPACE); + PRINT_MACRO(RWSTD_NO_NESTING_TEMPLATES); + PRINT_MACRO(RWSTD_NO_NEW_BRACKETS); + PRINT_MACRO(RWSTD_NO_NEW_DECL); + PRINT_MACRO(RWSTD_NO_NEW_HEADER); + PRINT_MACRO(RWSTD_NO_NEW_TEMPLATE_SYNTAX); + PRINT_MACRO(RWSTD_NO_NONCLASS_ARROW_RETURN); + PRINT_MACRO(RWSTD_NO_NONTYPE_ARGS); + PRINT_MACRO(RWSTD_NO_ONLY_NEEDED_INSTANTIATION); + PRINT_MACRO(RWSTD_NO_OVERLOAD_C_POW); + PRINT_MACRO(RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION); + PRINT_MACRO(RWSTD_NO_OVERLOAD_WCHAR); + PRINT_MACRO(RWSTD_NO_PART_SPEC_OVERLOAD); + PRINT_MACRO(RWSTD_NO_RET_TEMPLATE); + PRINT_MACRO(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES); + PRINT_MACRO(RWSTD_NO_STATIC_CAST); + PRINT_MACRO(RWSTD_NO_STATIC_DEF); + PRINT_MACRO(RWSTD_NO_STATIC_DEF2); + PRINT_MACRO(RWSTD_NO_STATIC_DEF3); + PRINT_MACRO(RWSTD_NO_STATIC_MEM_DEF); + PRINT_MACRO(RWSTD_NO_STI_SIMPLE); + PRINT_MACRO(RWSTD_NO_STI_TEMPLATE); + PRINT_MACRO(RWSTD_NO_STREAM_LONG_DOUBLE); + PRINT_MACRO(RWSTD_NO_STRFTIME_CAPC); + PRINT_MACRO(RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE); + PRINT_MACRO(RWSTD_NO_SWPRINTF); + PRINT_MACRO(RWSTD_NO_TEMPLATE_ON_RETURN_TYPE); + PRINT_MACRO(RWSTD_NO_TEMPLATE_TEMPLATE); + PRINT_MACRO(RWSTD_NO_THREADS); + PRINT_MACRO(RWSTD_NO_THROW_SPEC_ON_NEW); + PRINT_MACRO(RWSTD_NO_THROW_WITH_SHARED); + PRINT_MACRO(RWSTD_NO_TYPEDEF_INST); + PRINT_MACRO(RWSTD_NO_TYPEDEF_OVERLOAD); + PRINT_MACRO(RWSTD_NO_TYPENAME); + PRINT_MACRO(RWSTD_NO_UNDEFINED_FRIEND); + PRINT_MACRO(RWSTD_NO_UNINITIALIZED_STATIC_DEF); + PRINT_MACRO(RWSTD_NO_WCHAR_H); + PRINT_MACRO(RWSTD_NO_WCTYPE_H); + PRINT_MACRO(RWSTD_NO_WIDE_CHAR); + PRINT_MACRO(RWSTD_NO_WINT_TYPE); + PRINT_MACRO(RWSTD_NO_WSTR); + PRINT_MACRO(RWSTD_NOT_ALL_WSTR_CFUNCTIONS); + PRINT_MACRO(RWSTD_POSIX_D10_THREADS); + PRINT_MACRO(RWSTD_POSIX_THREADS); + PRINT_MACRO(RWSTD_REQUIRES_IEEEFP); + PRINT_MACRO(RWSTD_SOLARIS_THREADS); + PRINT_MACRO(RWSTD_STRUCT_TM_TZ); + PRINT_MACRO(RWSTD_WIDE_STRING_NULL_PROBLEM); + #endif + // Dinkumware options: + PRINT_MACRO(_CPPLIB_VER); + PRINT_MACRO(_GLOBAL_USING); + PRINT_MACRO(_HAS_EXCEPTIONS); + PRINT_MACRO(_HAS_MEMBER_TEMPLATES_REBIND); + PRINT_MACRO(_HAS_TEMPLATE_PARTIAL_ORDERING); + // STLPort and generic SGI STL options: + PRINT_MACRO(__SGI_STL_NO_ARROW_OPERATOR); + PRINT_MACRO(__SGI_STL_OWN_IOSTREAMS); + PRINT_MACRO(__SGI_STL_PORT); + PRINT_MACRO(__STL_AUTOMATIC_TYPE_TRAITS); + PRINT_MACRO(__STL_BASE_MATCH_BUG); + PRINT_MACRO(__STL_BASE_TYPEDEF_BUG); + PRINT_MACRO(__STL_BASE_TYPEDEF_OUTSIDE_BUG); + PRINT_MACRO(__STL_BROKEN_USING_DIRECTIVE); + PRINT_MACRO(__STL_CONST_CONSTRUCTOR_BUG); + PRINT_MACRO(__STL_DEBUG); + PRINT_MACRO(__STL_DEBUG_ALLOC); + PRINT_MACRO(__STL_DEFAULT_CONSTRUCTOR_BUG); + PRINT_MACRO(__STL_DEFAULT_TYPE_PARAM); + PRINT_MACRO(__STL_DONT_REDEFINE_STD); + PRINT_MACRO(__STL_DONT_USE_BOOL_TYPEDEF); + PRINT_MACRO(__STL_HAS_NO_EXCEPTIONS); + PRINT_MACRO(__STL_HAS_NO_NAMESPACES); + PRINT_MACRO(__STL_HAS_NO_NEW_C_HEADERS); + PRINT_MACRO(__STL_HAS_NO_NEW_IOSTREAMS); + PRINT_MACRO(__STL_IMPORT_VENDOR_CSTD); + PRINT_MACRO(__STL_LIMITED_DEFAULT_TEMPLATES); + PRINT_MACRO(__STL_LINK_TIME_INSTANTIATION); + PRINT_MACRO(__STL_LONG_LONG); + PRINT_MACRO(__STL_LOOP_INLINE_PROBLEMS); + PRINT_MACRO(__STL_MEMBER_POINTER_PARAM_BUG); + PRINT_MACRO(__STL_NEED_EXPLICIT); + PRINT_MACRO(__STL_NEED_MUTABLE); + PRINT_MACRO(__STL_NEED_TYPENAME); + PRINT_MACRO(__STL_NESTED_TYPE_PARAM_BUG); + PRINT_MACRO(__STL_NO_BAD_ALLOC); + PRINT_MACRO(__STL_NO_BOOL); + PRINT_MACRO(__STL_NO_CLASS_PARTIAL_SPECIALIZATION); + PRINT_MACRO(__STL_NO_CSTD_FUNCTION_IMPORTS); + PRINT_MACRO(__STL_NO_DEFAULT_NON_TYPE_PARAM); + PRINT_MACRO(__STL_NO_EXCEPTION_HEADER); + PRINT_MACRO(__STL_NO_EXCEPTION_SPEC); + PRINT_MACRO(__STL_NO_EXCEPTIONS); + PRINT_MACRO(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS); + PRINT_MACRO(__STL_NO_FRIEND_TEMPLATES); + PRINT_MACRO(__STL_NO_FUNCTION_TMPL_PARTIAL_ORDER); + PRINT_MACRO(__STL_NO_IOSTREAMS); + PRINT_MACRO(__STL_NO_LONG_DOUBLE); + PRINT_MACRO(__STL_NO_MEMBER_TEMPLATE_CLASSES); + PRINT_MACRO(__STL_NO_MEMBER_TEMPLATE_KEYWORD); + PRINT_MACRO(__STL_NO_MEMBER_TEMPLATES); + PRINT_MACRO(__STL_NO_METHOD_SPECIALIZATION); + PRINT_MACRO(__STL_NO_NAMESPACES); + PRINT_MACRO(__STL_NO_NEW_IOSTREAMS); + PRINT_MACRO(__STL_NO_NEW_NEW_HEADER); + PRINT_MACRO(__STL_NO_NEW_STYLE_CASTS); + PRINT_MACRO(__STL_NO_PARTIAL_SPECIALIZATION_SYNTAX); + PRINT_MACRO(__STL_NO_QUALIFIED_FRIENDS); + PRINT_MACRO(__STL_NO_RELOPS_NAMESPACE); + PRINT_MACRO(__STL_NO_SGI_IOSTREAMS); + PRINT_MACRO(__STL_NO_STATIC_TEMPLATE_DATA); + PRINT_MACRO(__STL_NO_TEMPLATE_CONVERSIONS); + PRINT_MACRO(__STL_NO_WCHAR_T); + PRINT_MACRO(__STL_NON_TYPE_TMPL_PARAM_BUG); + PRINT_MACRO(__STL_NONTEMPL_BASE_MATCH_BUG); + PRINT_MACRO(__STL_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS); + PRINT_MACRO(__STL_RAND48); + PRINT_MACRO(__STL_STATIC_ARRAY_BUG); + PRINT_MACRO(__STL_STATIC_CONST_INIT_BUG); + PRINT_MACRO(__STL_STATIC_CONST_INIT_BUG); + PRINT_MACRO(__STL_THROW_RETURN_BUG); + PRINT_MACRO(__STL_TRIVIAL_CONSTRUCTOR_BUG); + PRINT_MACRO(__STL_TRIVIAL_DESTRUCTOR_BUG); + PRINT_MACRO(__STL_UNINITIALIZABLE_PRIVATE); + PRINT_MACRO(__STL_USE_ABBREVS); + PRINT_MACRO(__STL_USE_DEFALLOC); + PRINT_MACRO(__STL_USE_MALLOC); + PRINT_MACRO(__STL_USE_NEW_C_HEADERS); + PRINT_MACRO(__STL_USE_NEW_IOSTREAMS); + PRINT_MACRO(__STL_USE_NEWALLOC); + PRINT_MACRO(__STL_USE_OWN_NAMESPACE); + PRINT_MACRO(__STL_USE_SGI_ALLOCATORS); + PRINT_MACRO(__STL_WCHAR_T_IS_USHORT); + PRINT_MACRO(__STL_WEAK_ATTRIBUTE); + PRINT_MACRO(__STL_YVALS_H); + PRINT_MACRO(_NOTHREADS); + PRINT_MACRO(_PTHREADS); +#if defined(__SGI_STL_PORT) && (__SGI_STL_PORT > 0x0400) + PRINT_MACRO(_STLP_AUTOMATIC_TYPE_TRAITS); + PRINT_MACRO(_STLP_BASE_MATCH_BUG); + PRINT_MACRO(_STLP_BASE_TYPEDEF_BUG); + PRINT_MACRO(_STLP_BASE_TYPEDEF_OUTSIDE_BUG); + PRINT_MACRO(_STLP_BROKEN_USING_DIRECTIVE); + PRINT_MACRO(_STLP_CONST_CONSTRUCTOR_BUG); + PRINT_MACRO(_STLP_DEBUG); + PRINT_MACRO(_STLP_DEBUG_ALLOC); + PRINT_MACRO(_STLP_DEFAULT_CONSTRUCTOR_BUG); + PRINT_MACRO(_STLP_DEFAULT_TYPE_PARAM); + PRINT_MACRO(_STLP_DONT_REDEFINE_STD); + PRINT_MACRO(_STLP_DONT_USE_BOOL_TYPEDEF); + PRINT_MACRO(_STLP_HAS_NO_EXCEPTIONS); + PRINT_MACRO(_STLP_HAS_NO_NAMESPACES); + PRINT_MACRO(_STLP_HAS_NO_NEW_C_HEADERS); + PRINT_MACRO(_STLP_HAS_NO_NEW_IOSTREAMS); + PRINT_MACRO(_STLP_IMPORT_VENDOR_CSTD); + PRINT_MACRO(_STLP_LIMITED_DEFAULT_TEMPLATES); + PRINT_MACRO(_STLP_LINK_TIME_INSTANTIATION); + PRINT_MACRO(_STLP_LONG_LONG); + PRINT_MACRO(_STLP_LOOP_INLINE_PROBLEMS); + PRINT_MACRO(_STLP_MEMBER_POINTER_PARAM_BUG); + PRINT_MACRO(_STLP_NEED_EXPLICIT); + PRINT_MACRO(_STLP_NEED_MUTABLE); + PRINT_MACRO(_STLP_NEED_TYPENAME); + PRINT_MACRO(_STLP_NESTED_TYPE_PARAM_BUG); + PRINT_MACRO(_STLP_NO_ARROW_OPERATOR); + PRINT_MACRO(_STLP_NO_BAD_ALLOC); + PRINT_MACRO(_STLP_NO_BOOL); + PRINT_MACRO(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION); + PRINT_MACRO(_STLP_NO_CSTD_FUNCTION_IMPORTS); + PRINT_MACRO(_STLP_NO_DEFAULT_NON_TYPE_PARAM); + PRINT_MACRO(_STLP_NO_EXCEPTION_HEADER); + PRINT_MACRO(_STLP_NO_EXCEPTION_SPEC); + PRINT_MACRO(_STLP_NO_EXCEPTIONS); + PRINT_MACRO(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS); + PRINT_MACRO(_STLP_NO_FRIEND_TEMPLATES); + PRINT_MACRO(_STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER); + PRINT_MACRO(_STLP_NO_IOSTREAMS); + PRINT_MACRO(_STLP_NO_LONG_DOUBLE); + PRINT_MACRO(_STLP_NO_MEMBER_TEMPLATE_CLASSES); + PRINT_MACRO(_STLP_NO_MEMBER_TEMPLATE_KEYWORD); + PRINT_MACRO(_STLP_NO_MEMBER_TEMPLATES); + PRINT_MACRO(_STLP_NO_METHOD_SPECIALIZATION); + PRINT_MACRO(_STLP_NO_NAMESPACES); + PRINT_MACRO(_STLP_NO_NEW_IOSTREAMS); + PRINT_MACRO(_STLP_NO_NEW_NEW_HEADER); + PRINT_MACRO(_STLP_NO_NEW_STYLE_CASTS); + PRINT_MACRO(_STLP_NO_PARTIAL_SPECIALIZATION_SYNTAX); + PRINT_MACRO(_STLP_NO_QUALIFIED_FRIENDS); + PRINT_MACRO(_STLP_NO_RELOPS_NAMESPACE); + PRINT_MACRO(_STLP_NO_SGI_IOSTREAMS); + PRINT_MACRO(_STLP_NO_STATIC_TEMPLATE_DATA); + PRINT_MACRO(_STLP_NO_TEMPLATE_CONVERSIONS); + PRINT_MACRO(_STLP_NO_WCHAR_T); + PRINT_MACRO(_STLP_NON_TYPE_TMPL_PARAM_BUG); + PRINT_MACRO(_STLP_NONTEMPL_BASE_MATCH_BUG); + PRINT_MACRO(_STLP_OWN_IOSTREAMS); + PRINT_MACRO(_STLP_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS); + PRINT_MACRO(_STLP_RAND48); + PRINT_MACRO(_STLP_STATIC_ARRAY_BUG); + PRINT_MACRO(_STLP_STATIC_CONST_INIT_BUG); + PRINT_MACRO(_STLP_STATIC_CONST_INIT_BUG); + PRINT_MACRO(_STLP_THROW_RETURN_BUG); + PRINT_MACRO(_STLP_TRIVIAL_CONSTRUCTOR_BUG); + PRINT_MACRO(_STLP_TRIVIAL_DESTRUCTOR_BUG); + PRINT_MACRO(_STLP_UNINITIALIZABLE_PRIVATE); + PRINT_MACRO(_STLP_USE_ABBREVS); + PRINT_MACRO(_STLP_USE_DEFALLOC); + PRINT_MACRO(_STLP_USE_MALLOC); + PRINT_MACRO(_STLP_USE_NEW_C_HEADERS); + PRINT_MACRO(_STLP_USE_NEWALLOC); + PRINT_MACRO(_STLP_USE_OWN_NAMESPACE); + PRINT_MACRO(_STLP_USE_SGI_ALLOCATORS); + PRINT_MACRO(_STLP_WCHAR_T_IS_USHORT); + PRINT_MACRO(_STLP_WEAK_ATTRIBUTE); + PRINT_MACRO(_STLP_YVALS_H); +#endif + PRINT_MACRO(__GLIBCPP__); + PRINT_MACRO(_GLIBCPP_USE_WCHAR_T); + PRINT_MACRO(_GLIBCPP_VERSION); + PRINT_MACRO(__GLIBCXX__); + PRINT_MACRO(_GLIBCXX_USE_WCHAR_T); + PRINT_MACRO(_GLIBCXX_VERSION); + PRINT_MACRO(_GLIBCXX_USE_LONG_LONG); + PRINT_MACRO(_GLIBCXX_USE_NLS); + PRINT_MACRO(_GLIBCXX_USE_C99_MATH); + PRINT_MACRO(_GLIBCXX_USE_C99); + PRINT_MACRO(_GLIBCXX_CONCEPT_CHECKS); + PRINT_MACRO(_GLIBCXX_USE_LFS); + PRINT_MACRO(_GLIBCXX_SYMVER); + PRINT_MACRO(_GLIBCXX_MEM_LIMITS); + PRINT_MACRO(_GLIBCXX_HOSTED); + PRINT_MACRO(_GLIBCXX_SJLJ_EXCEPTIONS); + + // Modena C++ standard library + PRINT_MACRO(MSIPL_ANSI_HEADER); + PRINT_MACRO(MSIPL_BOOL_BUILTIN); + PRINT_MACRO(MSIPL_DEF_EXPLICIT); + PRINT_MACRO(MSIPL_DEF_TEMPARG); + PRINT_MACRO(MSIPL_EXPINST_ALLOWED); + PRINT_MACRO(MSIPL_EXPLICIT_FUNC_TEMPLATE_ARG); + PRINT_MACRO(MISPL_EXPLICIT_TEMPLATE_ARGUMENT); + PRINT_MACRO(MSIPL_FUNC_TEMPLATE_DEFARG); + PRINT_MACRO(MSIPL_MEMBER_TEMPLATE); + PRINT_MACRO(MSIPL_MULTITHREAD); + PRINT_MACRO(MSIPL_NON_TYPE_TEMPARG); + PRINT_MACRO(MSIPL_PARTIAL_TEMPL); + PRINT_MACRO(MSIPL_STATIC_CONST_INIT); + PRINT_MACRO(MSIPL_TEMPL_NEWSPEC); + PRINT_MACRO(MSIPL_TYPENAME); + PRINT_MACRO(MSIPL_USING_NAMESPACE); + PRINT_MACRO(MSIPL_WCHART); +} + +void print_platform_macros() +{ + std::cout << "Detected Platform: " << BOOST_PLATFORM << std::endl; + // signedness: + PRINT_SIGN(char); + PRINT_SIGN(wchar_t); + // byte ordering: + PRINT_ORDER(short); + PRINT_ORDER(int); + PRINT_ORDER(long); + // sizes: + PRINT_EXPRESSION(sizeof(wchar_t)); + PRINT_EXPRESSION(sizeof(short)); + PRINT_EXPRESSION(sizeof(int)); + PRINT_EXPRESSION(sizeof(long)); + PRINT_EXPRESSION(sizeof(size_t)); + PRINT_EXPRESSION(sizeof(ptrdiff_t)); + PRINT_EXPRESSION(sizeof(void*)); + PRINT_EXPRESSION(sizeof(void(*)(void))); + PRINT_EXPRESSION(sizeof(float)); + PRINT_EXPRESSION(sizeof(double)); + PRINT_EXPRESSION(sizeof(long double)); + // limits: + PRINT_MACRO(CHAR_BIT); + PRINT_MACRO(CHAR_MAX); + PRINT_MACRO(WCHAR_MAX); + PRINT_MACRO(SHRT_MAX); + PRINT_MACRO(INT_MAX); + PRINT_MACRO(LONG_MAX); + PRINT_MACRO(LLONG_MAX); + PRINT_MACRO(LONG_LONG_MAX); + PRINT_MACRO(LONGLONG_MAX); + PRINT_MACRO(ULLONG_MAX); // uses these, so we need to know them + PRINT_MACRO(ULONG_LONG_MAX); + PRINT_MACRO(ULONGLONG_MAX); + // general C99: + PRINT_MACRO(__STDC_IEC_559__); + PRINT_MACRO(__STDC_IEC_559_COMPLEX__); + PRINT_MACRO(__STDC_ISO_10646__); + // GNU: + PRINT_MACRO(__GLIBC__); + PRINT_MACRO(__GLIBC_MINOR__); + PRINT_MACRO(__GNU_LIBRARY__); + PRINT_MACRO(_BSD_SOURCE); + PRINT_MACRO(_GNU_SOURCE); + PRINT_MACRO(_ISOC99_SOURCE); + PRINT_MACRO(_ISOC9X_SOURCE); + PRINT_MACRO(_LARGEFILE_SOURCE); + PRINT_MACRO(_LARGEFILE64_SOURCE); + PRINT_MACRO(_SVID_SOURCE); + PRINT_MACRO(_THREAD_SAFE); + PRINT_MACRO(_XOPEN_SOURCE_EXTENDED); + PRINT_MACRO(XPG); + PRINT_MACRO(__MINGW32_MAJOR_VERSION); + PRINT_MACRO(__MINGW32_MINOR_VERSION); + // POSIX: + PRINT_MACRO(_POSIX_ADVISORY_INFO); + PRINT_MACRO(_POSIX_ASYNCHRONOUS_IO); + PRINT_MACRO(_POSIX_BARRIERS); + PRINT_MACRO(_POSIX_C_SOURCE); + PRINT_MACRO(_POSIX_CHOWN_RESTRICTED); + PRINT_MACRO(_POSIX_CLOCK_SELECTION); + PRINT_MACRO(_POSIX_CPUTIME); + PRINT_MACRO(_POSIX_FSYNC); + PRINT_MACRO(_POSIX_JOB_CONTROL); + PRINT_MACRO(_POSIX_MAPPED_FILES); + PRINT_MACRO(_POSIX_MEMLOCK); + PRINT_MACRO(_POSIX_MEMLOCK_RANGE); + PRINT_MACRO(_POSIX_MEMORY_PROTECTION); + PRINT_MACRO(_POSIX_MESSAGE_PASSING); + PRINT_MACRO(_POSIX_MONOTONIC_CLOCK); + PRINT_MACRO(_POSIX_NO_TRUNC); + PRINT_MACRO(_POSIX_PRIORITIZED_IO); + PRINT_MACRO(_POSIX_PRIORITY_SCHEDULING); + PRINT_MACRO(_POSIX_RAW_SOCKETS); + PRINT_MACRO(_POSIX_READER_WRITER_LOCKS); + PRINT_MACRO(_POSIX_REALTIME_SIGNALS); + PRINT_MACRO(_POSIX_REGEXP); + PRINT_MACRO(_POSIX_SAVED_IDS); + PRINT_MACRO(_POSIX_SEMAPHORES); + PRINT_MACRO(_POSIX_SHARED_MEMORY_OBJECTS); + PRINT_MACRO(_POSIX_SHELL); + PRINT_MACRO(_POSIX_SOURCE); + PRINT_MACRO(_POSIX_SPAWN); + PRINT_MACRO(_POSIX_SPIN_LOCKS); + PRINT_MACRO(_POSIX_SPORADIC_SERVER); + PRINT_MACRO(_POSIX_SYNCHRONIZED_IO); + PRINT_MACRO(_POSIX_THREAD_ATTR_STACKADDR); + PRINT_MACRO(_POSIX_THREAD_ATTR_STACKSIZE); + PRINT_MACRO(_POSIX_THREAD_CPUTIME); + PRINT_MACRO(_POSIX_THREAD_PRIO_INHERIT); + PRINT_MACRO(_POSIX_THREAD_PRIO_PROTECT); + PRINT_MACRO(_POSIX_THREAD_PRIORITY_SCHEDULING); + PRINT_MACRO(_POSIX_THREAD_PROCESS_SHARED); + PRINT_MACRO(_POSIX_THREAD_SAFE_FUNCTIONS); + PRINT_MACRO(_POSIX_THREAD_SPORADIC_SERVER); + PRINT_MACRO(_POSIX_THREADS); + PRINT_MACRO(_POSIX_TIMEOUTS); + PRINT_MACRO(_POSIX_TIMERS); + PRINT_MACRO(_POSIX_TRACE); + PRINT_MACRO(_POSIX_TRACE_EVENT_FILTER); + PRINT_MACRO(_POSIX_TRACE_INHERIT); + PRINT_MACRO(_POSIX_TRACE_LOG); + PRINT_MACRO(_POSIX_TYPED_MEMORY_OBJECTS); + PRINT_MACRO(_POSIX_VDISABLE); + PRINT_MACRO(_POSIX_VERSION); + PRINT_MACRO(_POSIX2_C_BIND); + PRINT_MACRO(_POSIX2_C_DEV); + PRINT_MACRO(_POSIX2_CHAR_TERM); + PRINT_MACRO(_POSIX2_FORT_DEV); + PRINT_MACRO(_POSIX2_FORT_RUN); + PRINT_MACRO(_POSIX2_LOCALEDEF); + PRINT_MACRO(_POSIX2_PBS); + PRINT_MACRO(_POSIX2_PBS_ACCOUNTING); + PRINT_MACRO(_POSIX2_PBS_CHECKPOINT); + PRINT_MACRO(_POSIX2_PBS_LOCATE); + PRINT_MACRO(_POSIX2_PBS_MESSAGE); + PRINT_MACRO(_POSIX2_PBS_TRACK); + PRINT_MACRO(_POSIX2_SW_DEV); + PRINT_MACRO(_POSIX2_UPE); + PRINT_MACRO(_POSIX2_VERSION); + PRINT_MACRO(_V6_ILP32_OFF32); + PRINT_MACRO(_V6_ILP32_OFFBIG); + PRINT_MACRO(_V6_LP64_OFF64); + PRINT_MACRO(_V6_LPBIG_OFFBIG); + PRINT_MACRO(_XBS5_ILP32_OFF32); + PRINT_MACRO(_XBS5_ILP32_OFFBIG); + PRINT_MACRO(_XBS5_LP64_OFF64); + PRINT_MACRO(_XBS5_LPBIG_OFFBIG); + PRINT_MACRO(_XOPEN_CRYPT); + PRINT_MACRO(_XOPEN_ENH_I18N); + PRINT_MACRO(_XOPEN_LEGACY); + PRINT_MACRO(_XOPEN_REALTIME); + PRINT_MACRO(_XOPEN_REALTIME_THREADS); + PRINT_MACRO(_XOPEN_SHM); + PRINT_MACRO(_XOPEN_SOURCE); + PRINT_MACRO(_XOPEN_STREAMS); + PRINT_MACRO(_XOPEN_UNIX); + PRINT_MACRO(_XOPEN_VERSION); + // Misc: + PRINT_MACRO(__USE_BSD); + PRINT_MACRO(_FILE_OFFSET_BITS); +} + +void print_boost_macros() +{ + std::cout << "Boost version " << BOOST_STRINGIZE(BOOST_VERSION) << std::endl; + // config setup macros first: + PRINT_MACRO(BOOST_USER_CONFIG); + PRINT_MACRO(BOOST_COMPILER_CONFIG); + PRINT_MACRO(BOOST_STDLIB_CONFIG); + PRINT_MACRO(BOOST_PLATFORM_CONFIG); + PRINT_MACRO(BOOST_NO_CONFIG); + PRINT_MACRO(BOOST_NO_USER_CONFIG); + PRINT_MACRO(BOOST_NO_COMPILER_CONFIG); + PRINT_MACRO(BOOST_NO_STDLIB_CONFIG); + PRINT_MACRO(BOOST_NO_PLATFORM_CONFIG); + // then defect and feature macros: + PRINT_MACRO(BOOST_DISABLE_THREADS); + PRINT_MACRO(BOOST_DISABLE_WIN32); + PRINT_MACRO(BOOST_HAS_THREADS); + PRINT_MACRO(BOOST_WINDOWS); + + // BEGIN GENERATED BLOCK DO NOT EDIT THIS!!!!!! + PRINT_MACRO(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG); + PRINT_MACRO(BOOST_DEDUCED_TYPENAME); + PRINT_MACRO(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL); + PRINT_MACRO(BOOST_HAS_BETHREADS); + PRINT_MACRO(BOOST_HAS_CLOCK_GETTIME); + PRINT_MACRO(BOOST_HAS_DIRENT_H); + PRINT_MACRO(BOOST_HAS_EXPM1); + PRINT_MACRO(BOOST_HAS_FTIME); + PRINT_MACRO(BOOST_HAS_GETSYSTEMTIMEASFILETIME); + PRINT_MACRO(BOOST_HAS_GETTIMEOFDAY); + PRINT_MACRO(BOOST_HAS_HASH); + PRINT_MACRO(BOOST_HAS_LOG1P); + PRINT_MACRO(BOOST_HAS_LONG_LONG); + PRINT_MACRO(BOOST_HAS_MACRO_USE_FACET); + PRINT_MACRO(BOOST_HAS_MS_INT64); + PRINT_MACRO(BOOST_HAS_NANOSLEEP); + PRINT_MACRO(BOOST_HAS_NL_TYPES_H); + PRINT_MACRO(BOOST_HAS_NRVO); + PRINT_MACRO(BOOST_HAS_PARTIAL_STD_ALLOCATOR); + PRINT_MACRO(BOOST_HAS_PTHREADS); + PRINT_MACRO(BOOST_HAS_PTHREAD_DELAY_NP); + PRINT_MACRO(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE); + PRINT_MACRO(BOOST_HAS_PTHREAD_YIELD); + PRINT_MACRO(BOOST_HAS_RVALUE_REFS); + PRINT_MACRO(BOOST_HAS_SCHED_YIELD); + PRINT_MACRO(BOOST_HAS_SGI_TYPE_TRAITS); + PRINT_MACRO(BOOST_HAS_SIGACTION); + PRINT_MACRO(BOOST_HAS_SLIST); + PRINT_MACRO(BOOST_HAS_STATIC_ASSERT); + PRINT_MACRO(BOOST_HAS_STDINT_H); + PRINT_MACRO(BOOST_HAS_STLP_USE_FACET); + PRINT_MACRO(BOOST_HAS_TR1_ARRAY); + PRINT_MACRO(BOOST_HAS_TR1_BIND); + PRINT_MACRO(BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG); + PRINT_MACRO(BOOST_HAS_TR1_COMPLEX_OVERLOADS); + PRINT_MACRO(BOOST_HAS_TR1_FUNCTION); + PRINT_MACRO(BOOST_HAS_TR1_HASH); + PRINT_MACRO(BOOST_HAS_TR1_MEM_FN); + PRINT_MACRO(BOOST_HAS_TR1_RANDOM); + PRINT_MACRO(BOOST_HAS_TR1_REFERENCE_WRAPPER); + PRINT_MACRO(BOOST_HAS_TR1_REGEX); + PRINT_MACRO(BOOST_HAS_TR1_RESULT_OF); + PRINT_MACRO(BOOST_HAS_TR1_SHARED_PTR); + PRINT_MACRO(BOOST_HAS_TR1_TUPLE); + PRINT_MACRO(BOOST_HAS_TR1_TYPE_TRAITS); + PRINT_MACRO(BOOST_HAS_TR1_UNORDERED_MAP); + PRINT_MACRO(BOOST_HAS_TR1_UNORDERED_SET); + PRINT_MACRO(BOOST_HAS_TR1_UTILITY); + PRINT_MACRO(BOOST_HAS_TWO_ARG_USE_FACET); + PRINT_MACRO(BOOST_HAS_UNISTD_H); + PRINT_MACRO(BOOST_HAS_VARIADIC_TMPL); + PRINT_MACRO(BOOST_HAS_WINTHREADS); + PRINT_MACRO(BOOST_MSVC6_MEMBER_TEMPLATES); + PRINT_MACRO(BOOST_MSVC_STD_ITERATOR); + PRINT_MACRO(BOOST_NO_0X_HDR_ARRAY); + PRINT_MACRO(BOOST_NO_0X_HDR_CHRONO); + PRINT_MACRO(BOOST_NO_0X_HDR_CODECVT); + PRINT_MACRO(BOOST_NO_0X_HDR_CONDITION_VARIABLE); + PRINT_MACRO(BOOST_NO_0X_HDR_FORWARD_LIST); + PRINT_MACRO(BOOST_NO_0X_HDR_FUTURE); + PRINT_MACRO(BOOST_NO_0X_HDR_INITIALIZER_LIST); + PRINT_MACRO(BOOST_NO_0X_HDR_MUTEX); + PRINT_MACRO(BOOST_NO_0X_HDR_RANDOM); + PRINT_MACRO(BOOST_NO_0X_HDR_RATIO); + PRINT_MACRO(BOOST_NO_0X_HDR_REGEX); + PRINT_MACRO(BOOST_NO_0X_HDR_SYSTEM_ERROR); + PRINT_MACRO(BOOST_NO_0X_HDR_THREAD); + PRINT_MACRO(BOOST_NO_0X_HDR_TUPLE); + PRINT_MACRO(BOOST_NO_0X_HDR_TYPEINDEX); + PRINT_MACRO(BOOST_NO_0X_HDR_TYPE_TRAITS); + PRINT_MACRO(BOOST_NO_0X_HDR_UNORDERED_MAP); + PRINT_MACRO(BOOST_NO_0X_HDR_UNORDERED_SET); + PRINT_MACRO(BOOST_NO_ADL_BARRIER); + PRINT_MACRO(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP); + PRINT_MACRO(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS); + PRINT_MACRO(BOOST_NO_AUTO_DECLARATIONS); + PRINT_MACRO(BOOST_NO_AUTO_MULTIDECLARATIONS); + PRINT_MACRO(BOOST_NO_AUTO_PTR); + PRINT_MACRO(BOOST_NO_CHAR16_T); + PRINT_MACRO(BOOST_NO_CHAR32_T); + PRINT_MACRO(BOOST_NO_COMPLETE_VALUE_INITIALIZATION); + PRINT_MACRO(BOOST_NO_CONSTEXPR); + PRINT_MACRO(BOOST_NO_CTYPE_FUNCTIONS); + PRINT_MACRO(BOOST_NO_CV_SPECIALIZATIONS); + PRINT_MACRO(BOOST_NO_CV_VOID_SPECIALIZATIONS); + PRINT_MACRO(BOOST_NO_CWCHAR); + PRINT_MACRO(BOOST_NO_CWCTYPE); + PRINT_MACRO(BOOST_NO_DECLTYPE); + PRINT_MACRO(BOOST_NO_DECLTYPE_N3276); + PRINT_MACRO(BOOST_NO_DEFAULTED_FUNCTIONS); + PRINT_MACRO(BOOST_NO_DELETED_FUNCTIONS); + PRINT_MACRO(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS); + PRINT_MACRO(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS); + PRINT_MACRO(BOOST_NO_EXCEPTIONS); + PRINT_MACRO(BOOST_NO_EXCEPTION_STD_NAMESPACE); + PRINT_MACRO(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS); + PRINT_MACRO(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS); + PRINT_MACRO(BOOST_NO_EXTERN_TEMPLATE); + PRINT_MACRO(BOOST_NO_FENV_H); + PRINT_MACRO(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS); + PRINT_MACRO(BOOST_NO_FUNCTION_TEMPLATE_ORDERING); + PRINT_MACRO(BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS); + PRINT_MACRO(BOOST_NO_INCLASS_MEMBER_INITIALIZATION); + PRINT_MACRO(BOOST_NO_INITIALIZER_LISTS); + PRINT_MACRO(BOOST_NO_INTEGRAL_INT64_T); + PRINT_MACRO(BOOST_NO_INTRINSIC_WCHAR_T); + PRINT_MACRO(BOOST_NO_IOSFWD); + PRINT_MACRO(BOOST_NO_IOSTREAM); + PRINT_MACRO(BOOST_NO_IS_ABSTRACT); + PRINT_MACRO(BOOST_NO_LAMBDAS); + PRINT_MACRO(BOOST_NO_LIMITS); + PRINT_MACRO(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS); + PRINT_MACRO(BOOST_NO_LONG_LONG); + PRINT_MACRO(BOOST_NO_LONG_LONG_NUMERIC_LIMITS); + PRINT_MACRO(BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS); + PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATES); + PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_FRIENDS); + PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_KEYWORD); + PRINT_MACRO(BOOST_NO_MS_INT64_NUMERIC_LIMITS); + PRINT_MACRO(BOOST_NO_NESTED_FRIENDSHIP); + PRINT_MACRO(BOOST_NO_NOEXCEPT); + PRINT_MACRO(BOOST_NO_NULLPTR); + PRINT_MACRO(BOOST_NO_NUMERIC_LIMITS_LOWEST); + PRINT_MACRO(BOOST_NO_OPERATORS_IN_NAMESPACE); + PRINT_MACRO(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS); + PRINT_MACRO(BOOST_NO_POINTER_TO_MEMBER_CONST); + PRINT_MACRO(BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS); + PRINT_MACRO(BOOST_NO_PRIVATE_IN_AGGREGATE); + PRINT_MACRO(BOOST_NO_RAW_LITERALS); + PRINT_MACRO(BOOST_NO_RTTI); + PRINT_MACRO(BOOST_NO_RVALUE_REFERENCES); + PRINT_MACRO(BOOST_NO_SCOPED_ENUMS); + PRINT_MACRO(BOOST_NO_SFINAE); + PRINT_MACRO(BOOST_NO_SFINAE_EXPR); + PRINT_MACRO(BOOST_NO_STATIC_ASSERT); + PRINT_MACRO(BOOST_NO_STDC_NAMESPACE); + PRINT_MACRO(BOOST_NO_STD_ALLOCATOR); + PRINT_MACRO(BOOST_NO_STD_DISTANCE); + PRINT_MACRO(BOOST_NO_STD_ITERATOR); + PRINT_MACRO(BOOST_NO_STD_ITERATOR_TRAITS); + PRINT_MACRO(BOOST_NO_STD_LOCALE); + PRINT_MACRO(BOOST_NO_STD_MESSAGES); + PRINT_MACRO(BOOST_NO_STD_MIN_MAX); + PRINT_MACRO(BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN); + PRINT_MACRO(BOOST_NO_STD_TYPEINFO); + PRINT_MACRO(BOOST_NO_STD_UNORDERED); + PRINT_MACRO(BOOST_NO_STD_USE_FACET); + PRINT_MACRO(BOOST_NO_STD_WSTREAMBUF); + PRINT_MACRO(BOOST_NO_STD_WSTRING); + PRINT_MACRO(BOOST_NO_STRINGSTREAM); + PRINT_MACRO(BOOST_NO_SWPRINTF); + PRINT_MACRO(BOOST_NO_TEMPLATED_IOSTREAMS); + PRINT_MACRO(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS); + PRINT_MACRO(BOOST_NO_TEMPLATE_ALIASES); + PRINT_MACRO(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION); + PRINT_MACRO(BOOST_NO_TEMPLATE_TEMPLATES); + PRINT_MACRO(BOOST_NO_TWO_PHASE_NAME_LOOKUP); + PRINT_MACRO(BOOST_NO_TYPEID); + PRINT_MACRO(BOOST_NO_TYPENAME_WITH_CTOR); + PRINT_MACRO(BOOST_NO_UNICODE_LITERALS); + PRINT_MACRO(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX); + PRINT_MACRO(BOOST_NO_UNREACHABLE_RETURN_DETECTION); + PRINT_MACRO(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE); + PRINT_MACRO(BOOST_NO_USING_TEMPLATE); + PRINT_MACRO(BOOST_NO_VARIADIC_MACROS); + PRINT_MACRO(BOOST_NO_VARIADIC_TEMPLATES); + PRINT_MACRO(BOOST_NO_VOID_RETURNS); + + + + + + + + + + + + + + + // END GENERATED BLOCK + + PRINT_MACRO(BOOST_INTEL); + PRINT_MACRO(BOOST_MSVC); + PRINT_MACRO(BOOST_STD_EXTENSION_NAMESPACE); + PRINT_MACRO(BOOST_UNREACHABLE_RETURN(0)); + PRINT_MACRO(BOOST_CONSTEXPR); + PRINT_MACRO(BOOST_CONSTEXPR_OR_CONST); + PRINT_MACRO(BOOST_STATIC_CONSTEXPR); + PRINT_MACRO(BOOST_NOEXCEPT); + PRINT_MACRO(BOOST_FORCEINLINE); +} + +void print_separator() +{ + std::cout << +"\n\n*********************************************************************\n\n"; +} + +int main() +{ + + // boost compiler workaround defines + print_compiler_macros(); + print_separator(); + print_stdlib_macros(); + print_separator(); + print_platform_macros(); + print_separator(); + print_boost_macros(); + + return 0; +} diff --git a/external/libs/date_time/build/Jamfile.v2 b/external/libs/date_time/build/Jamfile.v2 new file mode 100644 index 0000000..f294c2e --- /dev/null +++ b/external/libs/date_time/build/Jamfile.v2 @@ -0,0 +1,34 @@ +# 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.txt or http://www.boost.org/LICENSE_1_0.txt) +# +# Boost.date_time build and test Jamfile +# +# Based on boost.python Jamfile +# +# To run all tests quietly: jam test +# +# Declares the following targets: +# 1. libboost_date_time, a static link library to be linked with all +# Boost.date_time modules +# + + +project boost/date_time + : requirements + DATE_TIME_INLINE + shared:BOOST_ALL_DYN_LINK=1 + static:BOOST_DATE_TIME_STATIC_LINK + : usage-requirements + DATE_TIME_INLINE + shared:BOOST_DATE_TIME_DYN_LINK=1 + : source-location ../src + ; + +# Base names of the source files for libboost_date_time +CPP_SOURCES = greg_month greg_weekday date_generators ; + +lib boost_date_time : gregorian/$(CPP_SOURCES).cpp ; + +boost-install boost_date_time ; diff --git a/external/libs/date_time/src/date_time.doc b/external/libs/date_time/src/date_time.doc new file mode 100644 index 0000000..8987946 --- /dev/null +++ b/external/libs/date_time/src/date_time.doc @@ -0,0 +1,72 @@ +/* Copyright (c) 2001-2004 CrystalClear Software, Inc. + * Use, modification and distribution is subject to the + * Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-03-26 17:16:15 -0400 (Wed, 26 Mar 2008) $ + */ + + +/*! @mainpage Boost Date-Time Library Reference Documentation + * + * + *@section intro Introduction + * + * The Boost Date-Time Library (originally the Generic Date-Time Library or GDTL) + * is a set of C++ date-time libraries based on the concepts of generic programming. + * This is an online reference guide generated from the source code + * that provides a handy way to learn about the details of the + * library. If you are a user you should start with the + * User Documentation. + * + *@section using Using This Documentation + * + * The online documentation provides extensive information about the details + * of the library including: + * - Class hierarchy + * - Namespace Documentation + * - List of source files + * - Annotated list of classes and structs + * (Compound List) + * + * For example, suppose you wanted to learn more about the + * gregorian::greg_month class. + * You could alternatively browse the + * - Class documentation page + * - Include dependencies for greg_month.hpp + * - Hyperlinked and colorized source files: [hpp file] [cpp file] + * + * The main navigation bar at the top provides that access to many + * different modes of naviation through the library. + + * + */ + +//! Overall boost namespace -- library does not put any symbols here +namespace boost { + +//! Namespace for basic templates and components used to construct date-time systems +/*! + This namespace encapsulates various types of templates and classes used + to construct coherent date-time systems including date, time, etc. These + components should be considered helper components to be utilized in the + construction of specific date-time system implementations. See namespace + gregorian for one such example. +*/ +namespace date_time {} + +} +/*! Namespace for the c++ standard library. Library does not define any symbols in the namespace, but uses some classes from this namespace. +*/ +namespace std {} + +/*!\class std::out_of_range + \brief Exception class defined in c++ standard library. + A derivative of std::logic_error and std::exception and base class for + many exceptions in the library. See also: + + Mandragor docs for libstdcpp_v3 std::out_of_range +*/ + + + diff --git a/external/libs/date_time/src/gregorian/date_generators.cpp b/external/libs/date_time/src/gregorian/date_generators.cpp new file mode 100644 index 0000000..bbef7f6 --- /dev/null +++ b/external/libs/date_time/src/gregorian/date_generators.cpp @@ -0,0 +1,38 @@ +/* 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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + + +#ifndef BOOST_DATE_TIME_SOURCE +#define BOOST_DATE_TIME_SOURCE +#endif +#include "boost/date_time/date_generators.hpp" + +namespace boost { +namespace date_time { + + const char* const _nth_as_str[] = {"out of range", "first", "second", + "third", "fourth", "fifth"}; + + //! Returns nth arg as string. 1 -> "first", 2 -> "second", max is 5. + BOOST_DATE_TIME_DECL const char* nth_as_str(int ele) + { + if(ele >= 1 || ele <= 5) { + return _nth_as_str[ele]; + } + else { + return _nth_as_str[0]; + } + } + +} } //namespace date_time + + + + + diff --git a/external/libs/date_time/src/gregorian/greg_month.cpp b/external/libs/date_time/src/gregorian/greg_month.cpp new file mode 100644 index 0000000..efca973 --- /dev/null +++ b/external/libs/date_time/src/gregorian/greg_month.cpp @@ -0,0 +1,173 @@ +/* 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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-11-23 06:13:35 -0500 (Sun, 23 Nov 2008) $ + */ + + + +#ifndef BOOST_DATE_TIME_SOURCE +#define BOOST_DATE_TIME_SOURCE +#endif +#include "boost/date_time/gregorian/greg_month.hpp" +#include "boost/date_time/gregorian/greg_facet.hpp" +#include "boost/date_time/date_format_simple.hpp" +#include "boost/date_time/compiler_config.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 +#include "boost/date_time/date_parsing.hpp" +#include "boost/date_time/gregorian/parsers.hpp" + +#include "greg_names.hpp" +namespace boost { +namespace gregorian { + + /*! Returns a shared pointer to a map of Month strings & numbers. + * Strings are both full names and abbreviations. + * Ex. ("jan",1), ("february",2), etc... + * Note: All characters are lowercase - for case insensitivity + */ + greg_month::month_map_ptr_type greg_month::get_month_map_ptr() + { + static month_map_ptr_type month_map_ptr(new greg_month::month_map_type()); + + if(month_map_ptr->empty()) { + std::string s(""); + for(unsigned short i = 1; i <= 12; ++i) { + greg_month m(static_cast(i)); + s = m.as_long_string(); + s = date_time::convert_to_lower(s); + month_map_ptr->insert(std::make_pair(s, i)); + s = m.as_short_string(); + s = date_time::convert_to_lower(s); + month_map_ptr->insert(std::make_pair(s, i)); + } + } + return month_map_ptr; + } + + + //! Returns 3 char english string for the month ex: Jan, Feb, Mar, Apr + const char* + greg_month::as_short_string() const + { + return short_month_names[value_-1]; + } + + //! Returns full name of month as string in english ex: January, February + const char* + greg_month::as_long_string() const + { + return long_month_names[value_-1]; + } + + //! Return special_value from string argument + /*! Return special_value from string argument. If argument is + * not one of the special value names (defined in names.hpp), + * return 'not_special' */ + special_values special_value_from_string(const std::string& s) { + short i = date_time::find_match(special_value_names, + special_value_names, + date_time::NumSpecialValues, + s); + if(i >= date_time::NumSpecialValues) { // match not found + return not_special; + } + else { + return static_cast(i); + } + } + + +#ifndef BOOST_NO_STD_WSTRING + //! Returns 3 wchar_t english string for the month ex: Jan, Feb, Mar, Apr + const wchar_t* + greg_month::as_short_wstring() const + { + return w_short_month_names[value_-1]; + } + + //! Returns full name of month as wchar_t string in english ex: January, February + const wchar_t* + greg_month::as_long_wstring() const + { + return w_long_month_names[value_-1]; + } +#endif // BOOST_NO_STD_WSTRING + +#ifndef BOOST_DATE_TIME_NO_LOCALE + /*! creates an all_date_names_put object with the correct set of names. + * This function is only called in the event of an exception where + * the imbued locale containing the needed facet is for some reason + * unreachable. + */ + BOOST_DATE_TIME_DECL + boost::date_time::all_date_names_put* + create_facet_def(char type) + { + typedef + boost::date_time::all_date_names_put facet_def; + + return new facet_def(short_month_names, + long_month_names, + special_value_names, + short_weekday_names, + long_weekday_names); + } + + //! 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){ + typedef boost::date_time::all_date_names_put facet_def; + return std::locale(loc, new facet_def(short_month_names, + long_month_names, + special_value_names, + short_weekday_names, + long_weekday_names) + ); + } + +#ifndef BOOST_NO_STD_WSTRING + /*! creates an all_date_names_put object with the correct set of names. + * This function is only called in the event of an exception where + * the imbued locale containing the needed facet is for some reason + * unreachable. + */ + BOOST_DATE_TIME_DECL + boost::date_time::all_date_names_put* + create_facet_def(wchar_t type) + { + typedef + boost::date_time::all_date_names_put facet_def; + + return new facet_def(w_short_month_names, + w_long_month_names, + w_special_value_names, + w_short_weekday_names, + w_long_weekday_names); + } + + //! 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){ + typedef boost::date_time::all_date_names_put facet_def; + return std::locale(loc, new facet_def(w_short_month_names, + w_long_month_names, + w_special_value_names, + w_short_weekday_names, + w_long_weekday_names) + ); + } +#endif // BOOST_NO_STD_WSTRING +#endif // BOOST_DATE_TIME_NO_LOCALE + +} } //namespace gregorian + + + + + + diff --git a/external/libs/date_time/src/gregorian/greg_names.hpp b/external/libs/date_time/src/gregorian/greg_names.hpp new file mode 100644 index 0000000..76a1a24 --- /dev/null +++ b/external/libs/date_time/src/gregorian/greg_names.hpp @@ -0,0 +1,43 @@ +/* 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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + + +#ifndef DATE_TIME_SRC_GREG_NAMES_HPP___ +#define DATE_TIME_SRC_GREG_NAMES_HPP___ + +#include "boost/date_time/gregorian/greg_month.hpp" +#include "boost/date_time/special_defs.hpp" +namespace boost { +namespace gregorian { + + + const char* const short_month_names[NumMonths]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", "NAM"}; + const char* const long_month_names[NumMonths]={"January","February","March","April","May","June","July","August","September","October","November","December","NotAMonth"}; + const char* const special_value_names[date_time::NumSpecialValues]={"not-a-date-time","-infinity","+infinity","min_date_time","max_date_time","not_special"}; + + + const char* const short_weekday_names[]={"Sun", "Mon", "Tue", + "Wed", "Thu", "Fri", "Sat"}; + const char* const long_weekday_names[]= {"Sunday","Monday","Tuesday", + "Wednesday", "Thursday", + "Friday", "Saturday"}; + +#ifndef BOOST_NO_STD_WSTRING + const wchar_t* const w_short_month_names[NumMonths]={L"Jan",L"Feb",L"Mar",L"Apr",L"May",L"Jun",L"Jul",L"Aug",L"Sep",L"Oct",L"Nov",L"Dec",L"NAM"}; + const wchar_t* const w_long_month_names[NumMonths]={L"January",L"February",L"March",L"April",L"May",L"June",L"July",L"August",L"September",L"October",L"November",L"December",L"NotAMonth"}; + const wchar_t* const w_special_value_names[date_time::NumSpecialValues]={L"not-a-date-time",L"-infinity",L"+infinity",L"min_date_time",L"max_date_time",L"not_special"}; + + const wchar_t* const w_short_weekday_names[]={L"Sun", L"Mon", L"Tue", + L"Wed", L"Thu", L"Fri", L"Sat"}; + const wchar_t* const w_long_weekday_names[]= {L"Sunday",L"Monday",L"Tuesday", + L"Wednesday", L"Thursday", + L"Friday", L"Saturday"}; +#endif // BOOST_NO_STD_WSTRING +} } // boost::gregorian +#endif // DATE_TIME_SRC_GREG_NAMES_HPP___ diff --git a/external/libs/date_time/src/gregorian/greg_weekday.cpp b/external/libs/date_time/src/gregorian/greg_weekday.cpp new file mode 100644 index 0000000..4057d29 --- /dev/null +++ b/external/libs/date_time/src/gregorian/greg_weekday.cpp @@ -0,0 +1,50 @@ +/* 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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland, Bart Garst + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + + +#ifndef BOOST_DATE_TIME_SOURCE +#define BOOST_DATE_TIME_SOURCE +#endif +#include "boost/date_time/gregorian/greg_weekday.hpp" + +#include "greg_names.hpp" + +namespace boost { +namespace gregorian { + + //! Return a 3 digit english string of the day of week (eg: Sun) + const char* + greg_weekday::as_short_string() const + { + return short_weekday_names[value_]; + } + //! Return a point to a long english string representing day of week + const char* + greg_weekday::as_long_string() const + { + return long_weekday_names[value_]; + } + +#ifndef BOOST_NO_STD_WSTRING + //! Return a 3 digit english wchar_t string of the day of week (eg: Sun) + const wchar_t* + greg_weekday::as_short_wstring() const + { + return w_short_weekday_names[value_]; + } + //! Return a point to a long english wchar_t string representing day of week + const wchar_t* + greg_weekday::as_long_wstring() const + { + return w_long_weekday_names[value_]; + } +#endif // BOOST_NO_STD_WSTRING + +} } //namespace gregorian + diff --git a/external/libs/date_time/src/gregorian/gregorian_types.cpp b/external/libs/date_time/src/gregorian/gregorian_types.cpp new file mode 100644 index 0000000..a856e79 --- /dev/null +++ b/external/libs/date_time/src/gregorian/gregorian_types.cpp @@ -0,0 +1,62 @@ +/* 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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +/** @defgroup date_basics Date Basics + This page summarizes some of the key user types and functions needed + to write programs using the gregorian date system. This is not a + comprehensive list, but rather some key types to start exploring. + + +**/ + +/** @defgroup date_alg Date Algorithms / Generators + Date algorithms or generators are tools for generating other dates or + schedules of dates. A generator function starts with some part of a + date such as a month and day and is supplied another part to then + generate a final date. + +**/ + +/** @defgroup date_format Date Formatting + The functions on these page are some of the key formatting functions + for dates. +**/ + + +//File doesn't have a current purpose except to generate docs +//and keep it changeable without recompiles +/*! @example days_alive.cpp + Calculate the number of days you have been living using durations and dates. +*/ +/*! @example days_till_new_year.cpp + Calculate the number of days till new years +*/ +/*! @example print_month.cpp + Simple utility to print out days of the month with the days of a month. Demontstrates date iteration (date_time::date_itr). +*/ +/*! @example localization.cpp + An example showing localized stream-based I/O. +*/ +/*! @example dates_as_strings.cpp + Various parsing and output of strings (mostly supported for + compilers that do not support localized streams). +*/ +/*! @example period_calc.cpp + Calculates if a date is in an 'irregular' collection of periods using + period calculation functions. +*/ +/*! @example print_holidays.cpp + This is an example of using functors to define a holiday schedule + */ +/*! @example localization.cpp + Demonstrates the use of facets to localize date output for Gregorian dates. + */ + + + diff --git a/external/libs/date_time/src/posix_time/posix_time_types.cpp b/external/libs/date_time/src/posix_time/posix_time_types.cpp new file mode 100644 index 0000000..06ef563 --- /dev/null +++ b/external/libs/date_time/src/posix_time/posix_time_types.cpp @@ -0,0 +1,35 @@ + +/* 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.txt or http://www.boost.org/LICENSE_1_0.txt) + * Author: Jeff Garland + * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + */ + + +//File doesn't have a current purpose except to generate docs +//and keep it changeable without recompiles + +/** @defgroup time_basics Time Basics + +**/ + +/** @defgroup time_format Time Formatting + +**/ + + + +/*! @example local_utc_conversion.cpp + Demonstrate utc to local and local to utc calculations including dst. +*/ +/*! @example time_periods.cpp Demonstrate some simple uses of time periods. +*/ +/*! @example print_hours.cpp Demonstrate time iteration, clock retrieval, and simple calculation. + */ +/*! @example time_math.cpp Various types of calculations with times and time durations. + */ + + + diff --git a/external/libs/detail/utf8_codecvt_facet.cpp b/external/libs/detail/utf8_codecvt_facet.cpp new file mode 100644 index 0000000..7ea5eeb --- /dev/null +++ b/external/libs/detail/utf8_codecvt_facet.cpp @@ -0,0 +1,285 @@ +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// utf8_codecvt_facet.cpp + +// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu) +// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Please see the comments in to +// learn how this file should be used. + +#include + +#include // for multi-byte converson routines +#include + +#include +#include + +// If we don't have wstring, then Unicode support +// is not available anyway, so we don't need to even +// compiler this file. This also fixes the problem +// with mingw, which can compile this file, but will +// generate link error when building DLL. +#ifndef BOOST_NO_STD_WSTRING + +BOOST_UTF8_BEGIN_NAMESPACE + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// implementation for wchar_t + +// Translate incoming UTF-8 into UCS-4 +std::codecvt_base::result utf8_codecvt_facet::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 { + // Basic algorithm: The first octet determines how many + // octets total make up the UCS-4 character. The remaining + // "continuing octets" all begin with "10". To convert, subtract + // the amount that specifies the number of octets from the first + // octet. Subtract 0x80 (1000 0000) from each continuing octet, + // then mash the whole lot together. Note that each continuing + // octet only uses 6 bits as unique values, so only shift by + // multiples of 6 to combine. + while (from != from_end && to != to_end) { + + // Error checking on the first octet + if (invalid_leading_octet(*from)){ + from_next = from; + to_next = to; + return std::codecvt_base::error; + } + + // The first octet is adjusted by a value dependent upon + // the number of "continuing octets" encoding the character + const int cont_octet_count = get_cont_octet_count(*from); + const wchar_t octet1_modifier_table[] = { + 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc + }; + + // The unsigned char conversion is necessary in case char is + // signed (I learned this the hard way) + wchar_t ucs_result = + (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count]; + + // Invariants : + // 1) At the start of the loop, 'i' continuing characters have been + // processed + // 2) *from points to the next continuing character to be processed. + int i = 0; + while(i != cont_octet_count && from != from_end) { + + // Error checking on continuing characters + if (invalid_continuing_octet(*from)) { + from_next = from; + to_next = to; + return std::codecvt_base::error; + } + + ucs_result *= (1 << 6); + + // each continuing character has an extra (10xxxxxx)b attached to + // it that must be removed. + ucs_result += (unsigned char)(*from++) - 0x80; + ++i; + } + + // If the buffer ends with an incomplete unicode character... + if (from == from_end && i != cont_octet_count) { + // rewind "from" to before the current character translation + from_next = from - (i+1); + to_next = to; + return std::codecvt_base::partial; + } + *to++ = ucs_result; + } + from_next = from; + to_next = to; + + // Were we done converting or did we run out of destination space? + if(from == from_end) return std::codecvt_base::ok; + else return std::codecvt_base::partial; +} + +std::codecvt_base::result utf8_codecvt_facet::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 +{ + // RG - consider merging this table with the other one + const wchar_t octet1_modifier_table[] = { + 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc + }; + + wchar_t max_wchar = (std::numeric_limits::max)(); + while (from != from_end && to != to_end) { + + // Check for invalid UCS-4 character + if (*from > max_wchar) { + from_next = from; + to_next = to; + return std::codecvt_base::error; + } + + int cont_octet_count = get_cont_octet_out_count(*from); + + // RG - comment this formula better + int shift_exponent = (cont_octet_count) * 6; + + // Process the first character + *to++ = static_cast(octet1_modifier_table[cont_octet_count] + + (unsigned char)(*from / (1 << shift_exponent))); + + // Process the continuation characters + // Invariants: At the start of the loop: + // 1) 'i' continuing octets have been generated + // 2) '*to' points to the next location to place an octet + // 3) shift_exponent is 6 more than needed for the next octet + int i = 0; + while (i != cont_octet_count && to != to_end) { + shift_exponent -= 6; + *to++ = static_cast(0x80 + ((*from / (1 << shift_exponent)) % (1 << 6))); + ++i; + } + // If we filled up the out buffer before encoding the character + if(to == to_end && i != cont_octet_count) { + from_next = from; + to_next = to - (i+1); + return std::codecvt_base::partial; + } + ++from; + } + from_next = from; + to_next = to; + // Were we done or did we run out of destination space + if(from == from_end) return std::codecvt_base::ok; + else return std::codecvt_base::partial; +} + +// How many char objects can I process to get <= max_limit +// wchar_t objects? +int utf8_codecvt_facet::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 +{ + // RG - this code is confusing! I need a better way to express it. + // and test cases. + + // Invariants: + // 1) last_octet_count has the size of the last measured character + // 2) char_count holds the number of characters shown to fit + // within the bounds so far (no greater than max_limit) + // 3) from_next points to the octet 'last_octet_count' before the + // last measured character. + int last_octet_count=0; + std::size_t char_count = 0; + const char* from_next = from; + // Use "<" because the buffer may represent incomplete characters + while (from_next+last_octet_count <= from_end && char_count <= max_limit) { + from_next += last_octet_count; + last_octet_count = (get_octet_count(*from_next)); + ++char_count; + } + return static_cast(from_next-from_end); +} + +unsigned int utf8_codecvt_facet::get_octet_count( + unsigned char lead_octet +){ + // if the 0-bit (MSB) is 0, then 1 character + if (lead_octet <= 0x7f) return 1; + + // Otherwise the count number of consecutive 1 bits starting at MSB +// assert(0xc0 <= lead_octet && lead_octet <= 0xfd); + + if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2; + else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3; + else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4; + else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5; + else return 6; +} +BOOST_UTF8_END_NAMESPACE + +namespace { +template +int get_cont_octet_out_count_impl(wchar_t word){ + if (word < 0x80) { + return 0; + } + if (word < 0x800) { + return 1; + } + return 2; +} + +template<> +int get_cont_octet_out_count_impl<4>(wchar_t word){ + if (word < 0x80) { + return 0; + } + if (word < 0x800) { + return 1; + } + + // Note that the following code will generate warnings on some platforms + // where wchar_t is defined as UCS2. The warnings are superfluous as the + // specialization is never instantitiated with such compilers, but this + // can cause problems if warnings are being treated as errors, so we guard + // against that. Including as we do + // should be enough to get WCHAR_MAX defined. +#if !defined(WCHAR_MAX) +# error WCHAR_MAX not defined! +#endif + // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX +#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier + return 2; +#elif WCHAR_MAX > 0x10000 + + if (word < 0x10000) { + return 2; + } + if (word < 0x200000) { + return 3; + } + if (word < 0x4000000) { + return 4; + } + return 5; + +#else + return 2; +#endif +} + +} // namespace anonymous + +BOOST_UTF8_BEGIN_NAMESPACE +// How many "continuing octets" will be needed for this word +// == total octets - 1. +int utf8_codecvt_facet::get_cont_octet_out_count( + wchar_t word +) const { + return get_cont_octet_out_count_impl(word); +} +BOOST_UTF8_END_NAMESPACE + +#endif diff --git a/external/libs/filesystem/build/Jamfile.v2 b/external/libs/filesystem/build/Jamfile.v2 new file mode 100644 index 0000000..212019d --- /dev/null +++ b/external/libs/filesystem/build/Jamfile.v2 @@ -0,0 +1,61 @@ +# Boost Filesystem Library Build Jamfile + +# (C) Copyright Beman Dawes 2002-2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt) + + +# See library home page at http://www.boost.org/libs/filesystem + +project boost/filesystem + : source-location .. + : usage-requirements # pass these requirement to dependents (i.e. users) + shared:BOOST_FILESYSTEM_DYN_LINK=1 + ; + +local disable-filesystem2 = [ MATCH (--disable-filesystem2) : [ modules.peek : ARGV ] ] ; +local disable-filesystem3 = [ MATCH (--disable-filesystem3) : [ modules.peek : ARGV ] ] ; + +if ! $(disable-filesystem2) +{ + if ! $(disable-filesystem3) + { + SOURCES = + v2/src/v2_operations v2/src/v2_path v2/src/v2_portability + v3/src/operations v3/src/path v3/src/portability v3/src/windows_file_codecvt + v3/src/codecvt_error_category v3/src/path_traits v3/src/unique_path + v3/src/utf8_codecvt_facet + ; + } + else + { + SOURCES = + v2/src/v2_operations v2/src/v2_path v2/src/v2_portability + v3/src/utf8_codecvt_facet # used by both v2 and v3 + ; + } +} +else +{ + SOURCES = + v3/src/operations v3/src/path v3/src/portability v3/src/windows_file_codecvt + v3/src/codecvt_error_category v3/src/path_traits v3/src/unique_path + v3/src/utf8_codecvt_facet + ; +} + +lib boost_filesystem + : $(SOURCES).cpp ../../system/build//boost_system + : shared:BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's + : + : # Boost.Filesystem uses some of Boost.System functions in inlined/templated + # functions, so clients that use Boost.Filesystem will have direct references + # to Boost.System symbols. On Windows, Darwin, and some other platforms, this + # means those clients have to be directly linked to Boost.System. For static + # linking this happens anyway, but for shared we need to make it happen. Since + # doing so is harmless even when not needed, we do it for all platforms. + shared:../../system/build//boost_system + ; + + +boost-install boost_filesystem ; \ No newline at end of file diff --git a/external/libs/filesystem/v2/build/Jamfile.v2 b/external/libs/filesystem/v2/build/Jamfile.v2 new file mode 100644 index 0000000..8ba6310 --- /dev/null +++ b/external/libs/filesystem/v2/build/Jamfile.v2 @@ -0,0 +1,31 @@ +# Boost Filesystem Library Build Jamfile + +# (C) Copyright Beman Dawes 2002-2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt) + +# See library home page at http://www.boost.org/libs/filesystem + +project boost/filesystem + : source-location ../src + : usage-requirements # pass these requirement to dependents (i.e. users) + shared:BOOST_FILESYSTEM_DYN_LINK=1 + ; + +SOURCES = + operations path portability utf8_codecvt_facet ; + +lib boost_filesystem + : $(SOURCES).cpp ../../system/build//boost_system + : shared:BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's + : + : # Boost.Filesystem uses some of Boost.System functions in inlined/templated + # functions, so clients that use Boost.Filesystem will have direct references + # to Boost.System symbols. On Windows, Darwin, and some other platforms, this + # means those clients have to be directly linked to Boost.System. For static + # linking this happens anyway, but for shared we need to make it happen. Since + # doing so is harmless even when not needed, we do it for all platforms. + shared:../../system/build//boost_system + ; + +boost-install boost_filesystem ; diff --git a/external/libs/filesystem/v2/doc/design.htm b/external/libs/filesystem/v2/doc/design.htm new file mode 100644 index 0000000..8c79da9 --- /dev/null +++ b/external/libs/filesystem/v2/doc/design.htm @@ -0,0 +1,353 @@ + + + + + + + +Boost Filesystem Library Design + + + + +

    +Filesystem +Library Design

    + +

    Introduction
    +Requirements
    +Realities
    +Rationale
    +Abandoned_Designs
    +References

    + +

    Introduction

    + +

    The primary motivation for beginning work on the Filesystem Library was +frustration with Boost administrative tools.  Scripts were written in +Python, Perl, Bash, and Windows command languages.  There was no single +scripting language familiar and acceptable to all Boost administrators. Yet they +were all skilled C++ programmers - why couldn't C++ be used as the scripting +language?

    + +

    The key feature C++ lacked for script-like applications was the ability to +perform portable filesystem operations on directories and their contents. The +Filesystem Library was developed to fill that void.

    + +

    The intent is not to compete with traditional scripting languages, but to +provide a solution for situations where C++ is already the language +of choice..

    + +

    Requirements

    +
      +
    • Be able to write portable script-style filesystem operations in modern + C++.
      +
      + Rationale: This is a common programming need. It is both an + embarrassment and a hardship that this is not possible with either the current + C++ or Boost libraries.  The need is particularly acute + when C++ is the only toolset allowed in the tool chain.  File system + operations are provided by many languages used on multiple platforms, + such as Perl and Python, as well as by many platform specific scripting + languages. All operating systems provide some form of API for filesystem + operations, and the POSIX bindings are increasingly available even on + operating systems not normally associated with POSIX, such as the Mac, z/OS, + or OS/390.
    • +
    • Work within the realities described below.
      +
      + Rationale: This isn't a research project. The need is for something that works on + today's platforms, including some of the embedded operating systems + with limited file systems. Because of the emphasis on portability, such a + library would be much more useful if standardized. That means being able to + work with a much wider range of platforms that just Unix or Windows and their + clones.
    • +
    • Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications + and use of global variables. If a dangerous feature is provided, identify it as such.
      +
      + Rationale: Normally this would be covered by "the usual Boost requirements...", + but it is mentioned explicitly because the equivalent native platform and + scripting language interfaces often depend on all-too-easy-to-ignore error + notifications and global variables like "current + working directory".
    • +
    • Structure the library so that it is still useful even if some functionality + does not map well onto a given platform or directory tree. Particularly, much + useful functionality should be portable even to flat +(non-hierarchical) filesystems.
      +
      + Rationale: Much functionality which does not + require a hierarchical directory structure is still useful on flat-structure + filesystems.  There are many systems, particularly embedded systems, + where even very limited functionality is still useful.
    • +
    +
      +
    • Interface smoothly with current C++ Standard Library input/output + facilities.  For example, paths should be + easy to use in std::basic_fstream constructors.
      +
      + Rationale: One of the most common uses of file system functionality is to + manipulate paths for eventual use in input/output operations.  + Thus the need to interface smoothly with standard library I/O.
    • +
    • Suitable for eventual standardization. The implication of this requirement + is that the interface be close to minimal, and that great care be take + regarding portability.
      +
      + Rationale: The lack of file system operations is a serious hole + in the current standard, with no other known candidates to fill that hole. + Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for + standardization.
    • +
    • The usual Boost requirements and + guidelines apply.
    • +
    • Encourage, but do not require, portability in path names.
      +
      + Rationale: For paths which originate from user input it is unreasonable to + require portable path syntax.
    • +
    • Avoid giving the illusion of portability where portability in fact does not + exist.
      +
      + Rationale: Leaving important behavior unspecified or "implementation defined" does a + great disservice to programmers using a library because it makes it appear + that code relying on the behavior is portable, when in fact there is nothing + portable about it. The only case where such under-specification is acceptable is when both users and implementors know from + other sources exactly what behavior is required, yet for some reason it isn't + possible to specify it exactly.
    • +
    +

    Realities

    +
      +
    • Some operating systems have a single directory tree root, others have + multiple roots.
    • +
    • Some file systems provide both a long and short form of filenames.
    • +
    • Some file systems have different syntax for file paths and directory + paths.
    • +
    • Some file systems have different rules for valid file names and valid + directory names.
    • +
    • Some file systems (ISO-9660, level 1, for example) use very restricted + (so-called 8.3) file names.
    • +
    • Some operating systems allow file systems with different + characteristics to be "mounted" within a directory tree.  Thus a + ISO-9660 or Windows + file system may end up as a sub-tree of a POSIX directory tree.
    • +
    • Wide-character versions of directory and file operations are available on some operating + systems, and not available on others.
    • +
    • There is no law that says directory hierarchies have to be specified in + terms of left-to-right decent from the root.
    • +
    • Some file systems have a concept of file "version number" or "generation + number".  Some don't.
    • +
    • Not all operating systems use single character separators in path names.  Some use + paired notations. A typical fully-specified OpenVMS filename + might look something like this:
      +
      +    DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5
      +

      + The general OpenVMS format is:
      +
      +     + Device:[directories.dot.separated]filename.extension;version_number
    • +
    • For common file systems, determining if two descriptors are for same + entity is extremely difficult or impossible.  For example, the concept of + equality can be different for each portion of a path - some portions may be + case or locale sensitive, others not. Case sensitivity is a property of the + pathname itself, and not the platform. Determining collating sequence is even + worse.
    • +
    • Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the + filesystem.  That may well include computers on the other side of the + world or in orbit around the world. This implies that file system operations + may fail in unexpected ways. For example:
      +
      +      assert( exists("foo") == exists("foo") ); + // may fail!
      +     assert( is_directory("foo") == is_directory("foo"); + // may fail!
      +

      + In the first example, the file may have been deleted between calls to + exists().  In the second example, the file may have been deleted and then + replaced by a directory of the same name between the calls to is_directory().
    • +
    • Even though an application may be portable, it still will have to traffic + in system specific paths occasionally; user provided input is a common + example.
    • +
    • Symbolic links cause canonical and + normal form of some paths to represent different files or directories. For + example, given the directory hierarchy /a/b/c, with a symbolic + link in /a named x  pointing to b/c, + then under POSIX Pathname Resolution rules a path of "/a/x/.." + should resolve to "/a/b". If "/a/x/.." were first + normalized to "/a", it would resolve incorrectly. (Case supplied + by Walter Landry.)
    • +
    + +

    Rationale

    + +

    The Requirements and +Realities above drove much of the C++ interface design.  In particular, +the desire to make script-like code straightforward caused a great deal of +effort to go into ensuring that apparently simple expressions like exists( "foo" +) work as expected.

    + +

    See the FAQ for the rationale behind many detailed +design decisions.

    + +

    Several key insights went into the path class design:

    +
      +
    • Decoupling of the input formats, internal conceptual (vector<string> + or other sequence) + model, and output formats.
    • +
    • Providing two input formats (generic and O/S specific) broke a major + design deadlock.
    • +
    • Providing several output formats solved another set of previously + intractable problems.
    • +
    • Several non-obvious functions (particularly decomposition and composition) + are required to support portable code. (Peter Dimov, Thomas Witt, Glen + Knowles, others.)
    • +
    + +

    Error checking was a particularly difficult area. One key insight was that +with file and directory names, portability isn't a universal truth.  +Rather, the programmer must think out the question "What operating systems do I +want this path to be portable to?"  By providing support for several +answers to that question, the Filesystem Library alerts programmers of the need +to ask it in the first place.

    +

    Abandoned Designs

    +

    operations.hpp

    +

    Dietmar Kühl's original dir_it design and implementation supported +wide-character file and directory names. It was abandoned after extensive +discussions among Library Working Group members failed to identify portable +semantics for wide-character names on systems not providing native support. See +FAQ.

    +

    Previous iterations of the interface design used explicitly named functions providing a +large number of convenience operations, with no compile-time or run-time +options. There were so many function names that they were very confusing to use, +and the interface was much larger. Any benefits seemed theoretical rather than +real.

    +

    Designs based on compile time (rather than runtime) flag and option selection +(via policy, enum, or int template parameters) became so complicated that they +were abandoned, often after investing quite a bit of time and effort. The need +to qualify attribute or option names with namespaces, even aliases, made use in +template parameters ugly; that wasn't fully appreciated until actually writing +real code.

    +

    Yet another set of convenience functions ( for example, remove with +permissive, prune, recurse, and other options, plus predicate, and possibly +other, filtering features) were abandoned because the details became both +complex and contentious.

    + +

    What is left is a toolkit of low-level operations from which the user can +create more complex convenience operations, plus a very small number of +convenience functions which were found to be useful enough to justify inclusion.

    + +

    path.hpp

    + +

    There were so many abandoned path designs, I've lost track. Policy-based +class templates in several flavors, constructor supplied runtime policies, +operation specific runtime policies, they were all considered, often +implemented, and ultimately abandoned as far too complicated for any small +benefits observed.

    + +

    Additional design considerations apply to +Internationalization.

    + +

    error checking

    + +

    A number of designs for the error checking machinery were abandoned, some +after experiments with implementations. Totally automatic error checking was +attempted in particular. But automatic error checking tended to make the overall +library design much more complicated.

    + +

    Some designs associated error checking mechanisms with paths.  Some with +operations functions.  A policy-based error checking template design was +partially implemented, then abandoned as too complicated for everyday +script-like programs.

    + +

    The final design, which depends partially on explicit error checking function +calls,  is much simpler and straightforward, although it does depend to +some extent on programmer discipline.  But it should allow programmers who +are concerned about portability to be reasonably sure that their programs will +work correctly on their choice of target systems.

    + +

    References

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [IBM-01]IBM Corporation, z/OS V1R3.0 C/C++ Run-Time +Library Reference, SA22-7821-02, 2001, + + www-1.ibm.com/servers/eserver/zseries/zos/bkserv/
    [ISO-9660]International Standards Organization, 1988
    [Kuhn]UTF-8 and Unicode FAQ for Unix/Linux, + + www.cl.cam.ac.uk/~mgk25/unicode.html
    [MSDN] Microsoft Platform SDK for Windows, Storage Start +Page, + + msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp
    [POSIX-01]IEEE Std 1003.1-2001, ISO/IEC 9945:2002, and The Open Group Base Specifications, Issue 6. Also known as The + Single Unix® Specification, Version 3. + Available from each of the organizations involved in its creation. For + example, read online or download from + + www.unix.org/single_unix_specification/. The ISO JTC1/SC22/WG15 - POSIX +homepage is + www.open-std.org/jtc1/sc22/WG15/
    [URI]RFC-2396, Uniform Resource Identifiers (URI): Generic +Syntax, + www.ietf.org/rfc/rfc2396.txt
    [UTF-16]Wikipedia, UTF-16, + + en.wikipedia.org/wiki/UTF-16
    [Wulf-Shaw-73]William Wulf, Mary Shaw, Global +Variable Considered Harmful, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34
    + +
    +

    Revised +02 August, 2005

    + +

    © Copyright Beman Dawes, 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 +www.boost.org/LICENSE_1_0.txt)

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v2/doc/do-list.htm b/external/libs/filesystem/v2/doc/do-list.htm new file mode 100644 index 0000000..ff7f383 --- /dev/null +++ b/external/libs/filesystem/v2/doc/do-list.htm @@ -0,0 +1,42 @@ +Boost Filesystem Do-list +

    +Filesystem +Do-list

    +

    Current

    +
      +
    • Add test cases and docs for Windows \\?\ and \\?\UNC\ naming conventions.
    • +
    • Should operations.cpp assert or BOOST_ASSERT on more preconditions?
    • +
    • Apply PJP's Wide/Narrow conversion proposal to traits, once he stabilizes it.
    • +
    • Glob syntax -> regex syntax converter. See + Rich Johnson's + lists.boost.org/boost-users/2004/01/5770.php, and John Maddock's + lists.boost.org/boost-users/2004/01/5770.php
    • +
    • Issue (Adrian Martin): >Comparison between paths doesn't use locale.
      + >
      + >The paths are not treated as plain characters since a lexicographical
      + >compare is made. But the individual elements are treated
      + >as plain characters and the internal string type's operator< is used. This +
      + >is a bit contradicting.
      + >
      + >I think the comparison operators should compare the elements in a locale
      + >dependent way.
      +
      + I've opened this as an issue. It needs to be answered in the context of what + comparison is used for. Remember that equivalence should be determined by the + equivalent() function. An important use of operator< is when path is used as a + map or set key. Not sure how locale impacts that.
    • +
    • Move canonize() and normalize() to convenience.hpp?
    • +
    • Need wording to the effect that basic_path::iterators are invalidated in + the basic_path object's lifetime ends.
    • +
    • Move name checks to convenience.hpp?
    • +
    • Move rename_all to convenience.hpp?
    • +
    +
    +

    Revised +18 March, 2008

    +

    © Copyright Beman Dawes, 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 +www.boost.org/LICENSE_1_0.txt)

    diff --git a/external/libs/filesystem/v2/doc/faq.htm b/external/libs/filesystem/v2/doc/faq.htm new file mode 100644 index 0000000..938c71f --- /dev/null +++ b/external/libs/filesystem/v2/doc/faq.htm @@ -0,0 +1,150 @@ + + + + + + + +Filesystem FAQ + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Library +
    + + + + + +
    Boost Home    + Library Home    + Tutorial    + Reference   FAQ
    + +

    +Frequently Asked Questions

    +

    Why base the generic-path string format on POSIX?

    +

    [POSIX-01] is an ISO Standard. It is the basis for the most familiar path-string formats, +not just for POSIX systems but also for the native Windows format and the +URL portion of URI's. It is ubiquitous and +familiar.  On many systems, it is very easy to implement because it is +either the native operating system format (Unix and Windows) or via a +operating system supplied +POSIX library (z/OS, OS/390, and many more.)

    +

    Why not use a full URI (Universal Resource Identifier) based path?

    +

    URI's would promise more than the Filesystem Library can actually deliver, +since URI's extend far beyond what most operating systems consider a file or a +directory.  Thus for the primary "portable script-style file system +operations" requirement of the Filesystem Library, full URI's appear to be over-specification.

    +

    Why isn't path a base class with derived directory_path and +file_path classes?

    +

    Why bother?  The behavior of all three classes is essentially identical. +Several early versions did require users to identify each path as a file or +directory path, and this seemed to increase errors and decrease code +readability. There was no apparent upside benefit.

    +

    Why are fully specified paths called complete rather than +absolute?

    +

    To avoid long-held assumptions (what do you mean, "/foo" isn't +absolute on some systems?) by programmers used to single-rooted filesystems. +Using an unfamiliar name for the concept and related functions causes +programmers to read the specs rather than just assuming the meaning is known.

    +

    Why not support a concept of specific kinds of file systems, such as posix_file_system or windows_file_system.

    +

    Portability is one of the most important requirements for the +library. Gaining some advantage by using features specific to particular +operating systems is not a requirement. There doesn't appear to be much need for +the ability to manipulate, say, a classic Mac OS path while running on an +OpenVMS machine.

    +

    Furthermore, concepts like "file system" +are very slippery. What happens when a NTFS or FAT file system is mounted +in directory on a machine running a POSIX-like operating system, for example? +Some of the POSIX API's may return very un-POSIX like results.

    +

    Why not supply a 'handle' type, and let the file and directory operations +traffic in it?

    +

    It isn't clear there is any feasible way to meet the "portable script-style +file system operations" requirement with such a system. File systems exist where operations are usually performed on + some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where +trafficking in paths isn't always natural.   

    +

    The case for the "handle" (opaque data type to identify a file) +style may be strongest for directory iterator value type.  (See Jesse Jones' Jan 28, +2002, Boost postings). However, as class path has evolved, it seems sufficient +even as the directory iterator value type.

    +

    Why are the operations.hpp non-member functions so low-level?

    +

    To provide a toolkit from which higher-level functionality can be created.

    +

    An +extended attempt to add convenience functions on top of, or as a replacement +for, the low-level functionality failed because there is no widely acceptable +set of simple semantics for most convenience functions considered.  +Attempts to provide alternate semantics via either run-time options or +compile-time polices became overly complicated in relation to the value +delivered, or became contentious.  OTOH, the specific functionality needed for several trial +applications was very easy for the user to construct from the lower-level +toolkit functions.  See Failed +Attempts.

    +

    Isn't it inconsistent then to provide a few convenience functions?

    +

    Yes, but experience with both this library, POSIX, and Windows indicates +the utility of certain convenience functions, and that it is possible to provide +simple, yet widely acceptable, semantics for them. For example, remove_all.

    +

    Why are there basic_directory_iterator<> overloads for operations.hpp +predicate functions? Isn't two ways to do the same thing poor design?

    +

    Yes, two ways to do the same thing is often a poor design practice. But the +iterator versions are often much more efficient. Calling status() during +iteration over a directory containing 15,000 files took 6 seconds for the path +overload, and 1 second for the iterator overload, for tests on a freshly booted +machine. Times were .90 seconds and .30 seconds, for tests after prior use of +the directory. This performance gain is large enough to justify deviating from +preferred design practices. Neither overload alone meets all needs.

    +

    Why are library functions so picky about errors?

    +

    Safety. The default is to be safe rather than sorry. This is particularly +important given the reality that on many computer systems files and directories +are globally shared resources, and thus subject to +unexpected errors.

    +

    Why are errors reported by exception rather than return code or error +notification variable?

    +

    Safety. Return codes or error notification variables are often ignored +by programmers.  Exceptions are much harder to ignore, provided desired +default behavior (program termination) if not caught, yet allow error recovery +if desired. Non-throwing versions of functions are provided where experience +indicates the need.

    +

    Why are attributes accessed via named functions rather than property maps?

    +

    For commonly used attributes (existence, directory or file, emptiness), +simple syntax and guaranteed presence outweigh other considerations. Because +access to many other attributes is inherently system dependent, +property maps are viewed as the best hope for access and modification, but it is +better design to provide such functionality in a separate library. (Historical +note: even the apparently simple attribute "read-only" turned out to be so +system depend as to be disqualified as a "guaranteed presence" operation.)

    +

    Why aren't wide-character names supported? Why not std::wstring or even +a templated type?

    +

    They are supported, starting with version 1.33. See +Internationalization.

    +

    Why isn't automatic name portability error detection provided?

    +

    A number (at least six) of designs for name validity error +detection were evaluated, including at least four complete implementations.  +While the details for rejection differed, all of the more powerful name validity checking +designs distorted other +otherwise simple aspects of the library. Even the simple name checking provided +in prior library versions was a constant source of user complaints. While name checking can be helpful, it +isn't important enough to justify added a lot of additional complexity.

    +

    Why are paths sometimes manipulated by member functions and sometimes by +non-member functions?

    +

    The design rule is that purely lexical operations are supplied as class +basic_path member +functions, while operations performed by the operating system are provided as +free functions.

    +
    +

    Revised +18 March, 2008

    +

    © Copyright Beman Dawes, 2002

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    \ No newline at end of file diff --git a/external/libs/filesystem/v2/doc/i18n.html b/external/libs/filesystem/v2/doc/i18n.html new file mode 100644 index 0000000..1305493 --- /dev/null +++ b/external/libs/filesystem/v2/doc/i18n.html @@ -0,0 +1,426 @@ + + + + + + + +1.34 (Internationalization) Changes + + + + +

    1.34 (Internationalization) Changes

    +

    Introduction

    +

    This release is a major upgrade for the Filesystem Library, in preparation +for submission to the C++ Standards Committee. Features of this release +include:

    +
      +
    • Internationalization, provided by + class templates basic_path, basic_filesystem_error, + basic_directory_iterator, and basic_directory_entry.
    • +
    • Simplification of the path interface, + including elimination of distinction between native and generic formats, + and separation of name checking functionality from general path functionality. + Also simplification of basic_filesystem_error.
    • +
    • Rationalization of predicate function + design, including the addition of several new functions.
    • +
    • Clearer specification by reference to [POSIX-01], + the ISO/IEEE Single Unix Standard, with provisions for Windows and other + operating systems.
    • +
    • Preservation of existing user code whenever + possible.
    • +
    • More efficient operations when iterating over directories.
    • +
    • A recursive + directory iterator is now provided.
    • +
    +

    Rationale for some of the changes is also provided.

    +

    Internationalization

    +

    Cass templates basic_path, basic_filesystem_error, and +basic_directory_iterator provide the basic mechanisms for +internationalization, in ways very similar to the C++ Standard Library's +basic_string and similar class templates. The following typedefs are also +provided:

    +
    +
    typedef basic_path<std::string, ...> path;
    +typedef basic_path<std::wstring, ...> wpath;
    +
    +typedef basic_filesystem_error<path> filesystem_error;
    +typedef basic_filesystem_error<wpath> wfilesystem_error;
    +
    +typedef basic_directory_iterator<path> directory_iterator;
    +typedef basic_directory_iterator<wpath> wdirectory_iterator;
    +
    +

    The string type used by Boost.Filesystem basic_path (std::string, +std::wstring, or whatever) is called the internal string type. The string +type used by the operating system for paths (often char*, sometimes wchar_t*) is +called the external string type. Conversion between internal and external +types is performed by path traits classes. The specific conversions for path +and wpath is implementation defined, with normative encouragement to use +the operating system's preferred file system encoding. For many modern POSIX-based +file systems the wpath external encoding is +UTF-8, while for modern Windows file systems such as NTFS it is +UTF-16.

    +

    The operational functions in +operations.hpp are provided with overloads for +path, wpath, and user-defined basic_path's. A +"do-the-right-thing" rule +applies to implementations, ensuring that the correct overload will be chosen.

    +

    Simplification of path interface

    +

    Prior versions of the library required users of class path to identify +the format (native or generic) and name error-checking policy, either via a +second constructor argument or via a default mechanism. That approach caused +complaints, particularly from users not needing the name checking features. The +interface has now been simplified:

    +
      +
    • The distinction between native and generic formats has been eliminated. + See rationale. Two argument forms of path + constructors are now deprecated, with the second argument having no effect. + These constructors are only provided to ease the transition of existing code.
    • +
    • Path name checking functionality has been moved out of class path and into + separate free-functions. This still provides name checking for those who need + it, but with much less impact on those who don't need it.
    • +
    +

    Additionally, +basic_filesystem_error has been put +on a diet and generally simplified.

    +

    Error codes have been moved to a separate library, +Boost.System.

    +

    "//:" has been introduced as a path escape prefix to identify +native paths. Rationale: simplifies basic_path constructor interfaces, easier +use for platforms needing explicit native format identification.

    +

    Rationalization of predicate functions

    +

    In discussions and bug reports on the Boost developers mailing list, it +became obvious that Boost.Filesystem's exists(), symbolic_link_exists(), and +is_directory() predicate functions were poorly specified. There were suggestions +to add an is_accessible() function, but Peter Dimov argued that this amounted to +papering over the lack of a clear specification and would likely lead to future +problems.

    +

    Peter suggested that an interesting way to analyze the problem was to ask +what the expectations were for true and false values of the various predicates. +See the table below.

    +

    status()

    +

    As part of the predicate discussions, particularly with Rob Stewart, it +became obvious that sometimes applications need access to raw status information +without any possibility of an exception being thrown. The +status() function was added to meet this +need. It also proved clearer to specify the semantics of predicate functions in +terms of status().

    +

    is_file()

    +

    About the same time, Jeff Garland suggested that an +is_file() predicate would +compliment is_directory(). In working on the analysis below, it became obvious +that the expectations for is_file() were different from the expectations for !is_directory(), +so is_file() was added.

    +

    is_other()

    +

    On some operating systems, it is possible to have a directory entry which is +not for either a directory or a file. The +is_other() +function identifies such cases.

    +

    Should predicates throw on errors?

    +

    Some conditions reported by operating systems as errors (see +footnote) clearly simply indicate that the predicate is +false, rather than indicating serious failure. But other errors represent +serious hardware or network problems, or permissions problems.

    +

    Some people, particularly Rob Stewart, argue that in a function like +is_directory(), any error should simply cause the function to return false. If +there is actually an underlying problem, it will be detected it due course when +a directory_iterator or fstream operation is attempted.

    +

    That view is was rejected because of the following considerations:

    +
      +
    • As a general principle, the earlier errors can be reported, the better. + The rationale being that it is often much cheaper to fix errors sooner rather + than later. I've also had a lot of negative experiences where failure to + detect errors early caused a lot of pain and unhappy customers. Some of these + were directly caused by ignoring error returns from file system operations.
      +  
    • +
    • Analysis of existing programs indicated that as much as 30% of the use of + a predicate was not followed by directory_iterator or fstream operations on + the path in question. Instead, the applications performed reporting or + fall-back operations that would not fail, and thus were either misleading or + completely wrong if the false return value was in fact caused by + hardware or network failure, or permissions problems.
    • +
    +

    However, the discussion did identify that there are valid cases where +non-throwing behavior is a requirement, and a programmer may prefer to deal with +file or directory attributes and errors at a very low, bit-mask, level. Function status() +was proposed to meet those needs.

    +

    Expectations table

    +

    In the table below, p is a non-empty path.

    +

    Unless otherwise specified, all functions throw on hardware or general +failure errors, permission or access errors, symbolic link loop errors, and +invalid path errors. If an O/S fails to distinguish between error types, +predicate operations return false on such ambiguous errors.

    +

    Expectations identify operations that are expected to succeed +or fail, assuming no hardware, permission, or access right errors, and no race +conditions.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ExpressionExpectationsSemantics
    is_directory(p)Returns true if p is found and is a directory, else false.
    + If true, then directory_iterator(p) would succeed.
    + If false, then directory_iterator(p) would fail.
    Throws: if status() & error_flag
    + Returns: status() & directory_flag
    is_file(p)Returns true if p is found and is not a directory, else + false.
    + If true, then ifstream(p) would succeed.
    + False, however, does not imply ifstream(p) would fail (because some + operating systems allow directories to be opened as files, but stat() does + set the "regular file" flag.)
    Throws: if status() & error_flag
    + Returns: status() & file_flag
    exists(p) Returns is_directory(p) || is_file(p) || is_other(p)Throws: if status() & error_flag
    + Returns: status() &   (directory_flag|file_flag|other_flag)
    is_symlink(p)Returns true if p is found by shallow (non-transitive) + search, and is a symbolic link, else false.
    + If true, and p points to q, then for any filesystem function f except those + specified as working shallowly on symlinks themselves, f(p) calls f(q), and + returns any value returned by f(q).
    Throws: if symlink_status() & + error_flag
    + Returns: symlink_status() & symlink_flag
    !exists(p) && ((p.has_branch_path() && exists( p.branch_path()) + || (!p.has_branch_path() && !p.has_root_path()))
    + In other words, if the path does not exist, and (the branch does exist, + or (there is no branch and no root)).
    If true, create_directory(p) would succeed.
    + If true, ofstream(p) would succeed.
    +  
     
    directory_iterator it(p)If it != directory_iterator(), assert(exists(*it)||is_symlink(*it)). + Note: exists(*it) may throw, and likewise status(*it) may return error_flag + - there is no guarantee of accessibility. 
    +

    Conclusion

    +

    Predicate operations is_directory(), is_file(), is_symlink(), and exists() +with the indicated semantics form a self-consistent set that meets expectations.

    +

    Preservation of existing user code

    +

    Although the change to a template based approach required a complete overhaul +of the implementation code, the interface as used by existing applications is mostly unchanged. +Conversion problems which would +otherwise affect user code have been reduced by providing deprecated +functions to ease transition. The deprecated functions are:

    +
    +
    // class basic_path - 2nd constructor argument ignored:
    +basic_path( const string_type & str, name_check );
    +basic_path( const typename string_type::value_type * s, name_check );
    +
    +// class basic_path - old names provided for renamed functions:
    +string_type native_file_string() const;
    +string_type native_directory_string() const;
    +
    +// class basic_path - now defined such that these no longer have any real effect:
    +static bool default_name_check_writable() { return false; } 
    +static void default_name_check( name_check ) {}
    +static name_check default_name_check() { return 0; }
    +
    +// non-deducible operations functions assume class path
    +inline path current_path()
    +inline const path & initial_path()
    +
    +// the new basic_directory_entry provides leaf()
    +// to cover the common existing use case itr->leaf()
    +typename Path::string_type leaf() const;
    +
    +

    If you do not want the deprecated functions to be included, define the macro BOOST_FILESYSTEM_NO_DEPRECATED.

    +

    The greatest impact on existing code is the change of directory iterator +value type from path to directory_entry. To ease the +most common directory iterator use case, basic_directory_entry +provides an automatic conversion to basic_path, and this also +serves to prevent breakage of a lot of existing code. See the +next section for discussion of rationale.

    +
    +
    // the new basic_directory_entry provides:
    +operator const path_type &() const;
    +
    +

    More efficient operations when iterating over +directories

    +

    Several common real-world operating systems (BSD derivatives, Linux, Windows) +provide status information during directory iteration. Caching of this status +information results in three to six times faster operation for typical predicate +operations. (For a directory containing 15,047 files, iteration in 1 second vs 6 +seconds on a freshly booted system, and 0.3 seconds vs 0.9 seconds after prior use of +the directory.

    +

    The efficiency gains from caching such status information were considered too +significant to ignore. Because the possibility of race-conditions differs +depending on whether the cached information is used or an actual system call is +performed, it was considered necessary to provide explicit functions utilizing +the cached information, rather than implicitly using the cache behind the +scenes.

    +

    Three options were explored for exposing the cached status information, with +full implementations of each. After initial implementation of option 1 exposed +the problems noted below, option 2 was tested as a possible engineering +tradeoff. Option 3 +was finally chosen as the cleanest design.

    + + + + + + + + + + + + + + + + + + + + + +
    OptionHow cache accessedPros and Cons
    1Predicate function overloads
    + (basic_directory_iterator value_type is path)
    +
      +
    • Very Questionable design (friendship abuse, overload abuse, etc)
    • +
    • User cannot reuse cache
    • +
    • Readability problem; easy to miss difference between f(*it) and f(it)
    • +
    • Write-ability problem (error prone?)
    • +
    • Most common iterator use is brief: *it
    • +
    • Preserves existing code
    • +
    +
    2Predicate member functions of basic_directory_iterator
    + (basic_directory_iterator value_type is path)
    +
      +
    • Somewhat cleaner design (although added iterator functions is unusual)
    • +
    • User cannot reuse cache
    • +
    • Readability and write-ability is OK: f(*it) and it.f() sufficiently + different
    • +
    • Most common iterator use is brief: *it
    • +
    • Preserves existing code
    • +
    +
    3Predicate member functions of basic_directory_entry
    + (basic_directory_iterator value_type is basic_directory_entry)
    +
      +
    • Cleanest design.
    • +
    • User can reuse cache.
    • +
    • Readability and write-ability is OK: f(*it) and it->f() sufficiently + different.
    • +
    • Most common iterator use is longer: it->path(), but by providing + "operator const basic_path &" it is still possible to write a bare *it.
    • +
    • Breaks some existing code. The "operator const basic_path &" + conversion eliminates breakage of the most common use case, while + providing a (deprecated) leaf() prevents breakage of the second most + common use case.
    • +
    +
    +

    Rationale

    +

    Elimination of the native versus generic distinction

    +

    Elimination of user confusion and general design simplification was the +original motivation for elimination of the distinction between native and +generic paths.

    +

    During design work, a further technical argument was discovered. Consider the +path "c:foo/bar". On many POSIX systems, "c:foo" is a +valid directory name, so we have a two element path and there is no issue of +native versus generic format. On Windows system, however, "c:" is a +drive specification, so we have a three element path. All calls to the operating +system will result in "c:" being considered a drive specification; +there is no way that fact-of-life can be changed by claiming the format is +generic. The native versus generic distinction is thus useless and misleading +for POSIX, Windows, and probably most other operating systems.

    +

    If paths for a particular operating system did require a distinction be made, +it could be done by requiring that native paths be prefixed with some unique +implementation-defined identification. For example, "native-path:". +This would only be required for operating systems where (1) the distinction +mattered, and (2) there was no lexical way to distinguish the two forms. For +example, a native operating system that used the same syntax as the Filesystem +Library's generic POSIX-like format, but processed the elements right-to-left +instead of left-to-right.

    +

    Preservation of existing code

    +

    Allowing existing user code to continue to work with the updated version of +the library has obvious benefits in terms of preserving the effort users have +applied to both learning the library and writing code which uses the library.

    +

    There is an additional motivation; other than the name checking portion of +class path,  the existing interface has proven to be useful and robust, so +there is no reason to fiddle with it.

    +

    Single path design

    +

    During preliminary internationalization discussion on the Boost developer's +list, a design was considered for a single path class which could hold either +narrow or wide character based paths. That design was rejected because:

    +
      +
    • The design was, for many applications, an over-generalization with runtime + memory and speed costs which would have to be paid for even when not needed.
    • +
    • There was concern that the design would be confusing to users, given that + the standard library already uses single-value-type strings, rather than + strings which morph value types as needed.
    • +
    • There were technical issues with conversions when a narrow path was + appended to a wide path, and visa versa. The concern was that double + conversions could cause incorrect results, that conversions best left to the + operating system would be performed, and that the technical complexity was too + great in relation to perceived benefits. User-defined types would only make + the problem worse.
    • +
    +

    No versions of status() which throw exceptions on +errors

    +

    The rationale for not including versions of status() +which throw exceptions on errors is that (1) the primary purpose of this +function is to perform queries at a very low-level, where exceptions are usually +unwanted, and (2) exceptions on errors are already provided by the predicate +functions. There would be little or no efficiency gain from providing a throwing +version of status().

    +

    Symlink identifying version of status() function

    +

    A symlink identifying version of the status() function is distinguished by a +second argument. Often separately named functions are more appropriate than +overloading when behavior +differs, which is the case here, while overloads are more appropriate when +behavior is the same but argument types differ (Iain Hanson). Overloading was +chosen in this particular case because a subjective judgment that a single +function name with an optional "symlink" second argument produced more +understandable code. The original implementation of the function used the name "symlink_status", +but that just didn't read right in real code.

    +

    POSIX wpath_traits defaults to locale(""), but allows imbuing of locale

    +

    Vladimir Prus pointed out that for Linux (and presumably other POSIX +operating systems) that need to convert wide character paths to narrow +characters, the default conversion should not depend on the operating system +alone, but on the std::locale("") default. For example, the usual encoding +for Russian on Linux (and Russian web sites) is KOI8-R (RFC1489). The ability to safely specify a different locale +is also provided, to meet unforeseen needs.

    +
    +

    Revised +18 March, 2008

    +

    © Copyright Beman Dawes, 2005

    +

    Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or +copy at www.boost.org/LICENSE_1_0.txt)

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v2/doc/index.htm b/external/libs/filesystem/v2/doc/index.htm new file mode 100644 index 0000000..ee0c089 --- /dev/null +++ b/external/libs/filesystem/v2/doc/index.htm @@ -0,0 +1,835 @@ + + + + + + + +Filesystem Home + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Library
    + Version 2
    +
    + + + + + +
    Boost Home    + Library Home    Tutorial    + Reference   FAQ
    + + + + + + + + + + + + + + +
    + Contents
    + Introduction
    + Using the library
    + Two-minute tutorial
    + Cautions
    + Example programs
    + Implementation
    + Macros
    + Deprecated names and features
    + Using only narrow character paths
    + Building the object-library
    +     Notes for Cygwin users
    + Acknowledgements
    + Change history
    + Other Documents
    + Reference
    + Library Design
    + FAQ
    + Portability Guide
    + Do-list +
    + +
    +
    + + + + +
    +

    This is the home page for Version 2 of the Filesystem library.

    +

    Version 3, a major revision with many new and improved + features, is also available. Version 3 may break some user code written + for Version 2.

    +

    To ease the transition, Boost releases 1.44 through 1.47 + will supply both V2 and V3. Version 2 is the default version for Boost release 1.44 + and 1.45. Version 3 will be the default starting with release 1.46.

    +

    Define macro BOOST_FILESYSTEM_VERSION as 3 to use + Version 3. This will be the default for release 1.46 and later.

    +

    Define macro BOOST_FILESYSTEM_VERSION as 2 to use + Version 2. This is the default for release 1.44 and 1.45.

    +

    You may define the BOOST_FILESYSTEM_VERSION macro:

    +
      +
    • +

      On the build command line; the exact format depends on + your compiler or IDE

      +
    • +
    • +

      In your code, before including any filesystem header, + #define BOOST_FILESYSTEM_VERSION n

      +
    • +
    • +

      #define BOOST_FILESYSTEM_VERSION n in boost/config/user.hpp. + Note that this approach applies to all uses of Boost.Filesystem.

      +
    • +
    +

    Existing code should be moved to version 3 as soon as + convenient. New code should be written for version 3.

    +

    Version 2 is deprecated, and will not be included in Boost + releases 1.48 and later.

    +

    Building the library

    +

    By default, the Boost build system creates libraries that + support both version 2 and version 3. To support only a single version, + include --disable-filesystem2 or --disable-filesystem3 + on the bjam command line.

    +
    +
    +
    + +

    Introduction

    +

    The Boost.Filesystem library provides portable facilities to query and +manipulate paths, files, and directories.

    + +

    The motivation for the library is the need to perform portable script-like operations from within C++ programs. The intent is not to +compete with Python, Perl, or shell languages, but rather to provide portable filesystem +operations when C++ is already the language of choice. The +design encourages, but does not require, safe and portable usage.

    + +

    Programs using the library are portable, both in the sense that +the syntax of program code is portable, and the sense that the semantics or +behavior of code is portable. The generic path +grammar is another important aid to portability.

    + +

    Usage is safe in the sense that errors cannot be ignored since most functions throw C++ +exceptions when errors are detected. This is also convenient for users because +it alleviates the need to explicitly check error +return codes.

    + +

    A proposal, + +N1975, to include Boost.Filesystem in Technical Report 2 has been accepted +by the C++ Standards Committee. The Boost.Filesystem library will stay in +alignment with the TR2 Filesystem proposal as it works its way through the TR2 +process. Note, however, that namespaces and header granularity differs between +Boost.Filesystem and the TR2 proposal.

    + +

    The Boost.Filesystem library provides several  headers:

    + +
      +
    • Header <boost/filesystem.hpp> provides class + basic_path, a portable mechanism for representing + paths in C++ programs. Typedefs path and + wpath ease the most common usages of basic_path. Operational + functions provide useful query and maintenance operations on files and directories. + Class basic_directory_iterator with typdefs + directory_iterator and wdirectory_iterator provide iteration over + the contents of directories. Convenience functions and classes combine lower-level functionality + in useful ways.
    • +
    • Header <boost/filesystem/fstream.hpp> provides the same components as the C++ Standard + Library's fstream header, except + that files are identified by basic_path objects rather that char *'s.
    • +
    +

    Using the library

    +

    Boost.Filesystem is implemented as a separately compiled library, so before +using it you must install it in a location that can be found by your linker. See +Building the object-library.

    +

    The library's example directory contains very simple +scripts for building the example programs on various +platforms. You can use these scripts to see what's needed to compile and link +your own programs.

    +

    Two-minute tutorial

    +

    (A + +more elaborate tutorial is also available from Tabrez Iqbal.)

    +

    First some preliminaries:

    +
    +
    #include "boost/filesystem.hpp"   // includes all needed Boost.Filesystem declarations
    +#include <iostream>               // for std::cout
    +using boost::filesystem;          // for ease of tutorial presentation;
    +                                  //  a namespace alias is preferred practice in real code
    +
    +

    A class path object can be created:

    +
    +
    path my_path( "some_dir/file.txt" );
    +
    +

    The string passed to the path constructor may be in a +portable generic path format or an +implementation-defined native operating system format. Access functions +make my_path contents available to the underlying operating system API in an operating system dependent format, +such as "some_dir:file.txt", "[some_dir]file.txt", +"some_dir/file.txt", or whatever is appropriate for the +operating system. If class wpath is used instead of class path, +translation between wide and narrow character paths is performed automatically +if necessary for the operating system.

    +

    Class path has conversion constructors from const char* and +const std:: string&, so that even though the Filesystem Library +functions used in the following code snippet have const path& formal +parameters, the user can just +code C-style strings as actual arguments:

    +
    +
    remove_all( "foobar" );
    +create_directory( "foobar" );
    +ofstream file( "foobar/cheeze" );
    +file << "tastes good!\n";
    +file.close();
    +if ( !exists( "foobar/cheeze" ) )
    +  std::cout << "Something is rotten in foobar\n";
    +
    +

    To make class path objects easy to use in expressions, operator/ +appends paths:

    +
    +
    ifstream file1( arg_path / "foo/bar" );
    +ifstream file2( arg_path / "foo" / "bar" );
    +
    +

    The expressions arg_path / "foo/bar" and arg_path / "foo" +/ "bar" yield identical results.

    +

    Paths can include references to the current directory, using "." +notation, and the parent directory, using ".." +notation.

    +

    Class basic_directory_iterator +is an important component of the library. It provides an input iterator over the +contents of a directory, with the value type being class basic_path. +Typedefs directory_iterator and wdirectory_iterator are provided +to cover the most common use cases.

    +

    The following function, given a directory path and a file name, recursively +searches the directory and its sub-directories for the file name, returning a +bool, and if successful, the path to the file that was found.  The code +below is extracted from a real program, slightly modified for clarity:

    +
    +
    bool find_file( const path & dir_path,         // in this directory,
    +                const std::string & file_name, // search for this name,
    +                path & path_found )            // placing path here if found
    +{
    +  if ( !exists( dir_path ) ) return false;
    +  directory_iterator end_itr; // default construction yields past-the-end
    +  for ( directory_iterator itr( dir_path );
    +        itr != end_itr;
    +        ++itr )
    +  {
    +    if ( is_directory(itr->status()) )
    +    {
    +      if ( find_file( itr->path(), file_name, path_found ) ) return true;
    +    }
    +    else if ( itr->path().filename() == file_name ) // see below
    +    {
    +      path_found = itr->path();
    +      return true;
    +    }
    +  }
    +  return false;
    +}
    +
    +

    The expression itr->path().filename() == file_name, in the line commented // +see below, calls the filename() function on the path returned by +calling the path() function of the directory_entry object pointed +to by the iterator. filename() returns a string which is a copy of the +last (closest to the leaf, farthest from the root) file or directory name in the +path object.

    +

    Notice that find_file() does not do explicit error checking, such as +verifying that the dir_path argument really represents a directory. +Boost.Filesystem functions throw +exceptions if they do not complete successfully, so there is enough implicit +error checking that this application doesn't need to supply additional error +checking code unless desired. Several Boost.Filesystem functions have non-throwing +versions, to ease use cases where exceptions would not be appropriate.

    +
    +

    Note: Recursive +directory iteration was added as a convenience function after the above tutorial code +was written, so nowadays you +don't have to actually code the recursion yourself.

    +
    +

    Cautions

    +

    After reading the tutorial you can dive right into simple, +script-like programs using the Filesystem Library! Before doing any serious +work, however, there a few cautions to be aware of:

    +

    Effects and Postconditions not guaranteed in the presence of race-conditions

    +

    Filesystem function specifications follow the C++ Standard Library form, specifying behavior in terms of +effects and postconditions. If +a race-condition exists, a function's +postconditions may no longer be true by the time the function returns to the +caller.

    +
    +

    Explanation: The state of files and directories is often +globally shared, and thus may be changed unexpectedly by other threads, +processes, or even other computers having network access to the filesystem. As an +example of the difficulties this can cause, note that the following asserts +may fail:

    +
    +

    assert( exists( "foo" ) == exists( "foo" ) );  // +(1)
    +
    +remove_all( "foo" );
    +assert( !exists( "foo" ) );  // (2)
    +
    +assert( is_directory( "foo" ) == is_directory( "foo" ) ); // +(3)

    +
    +

    (1) will fail if a non-existent "foo" comes into existence, or an +existent "foo" is removed, between the first and second call to exists(). +This could happen if, during the execution of the example code, another thread, +process, or computer is also performing operations in the same directory.

    +

    (2) will fail if between the call to remove_all() and the call to +exists() a new file or directory named "foo" is created by another +thread, process, or computer.

    +

    (3) will fail if another thread, process, or computer removes an +existing file "foo" and then creates a directory named "foo", between the +example code's two calls to is_directory().

    +
    +

    May throw exceptions

    +

    Unless otherwise specified, Boost.Filesystem functions throw +basic_filesystem_error +exceptions if they cannot successfully complete their operational +specifications. Also, implementations may use C++ Standard Library functions, +which may throw std::bad_alloc. These exceptions may be thrown even +though the error condition leading to the exception is not explicitly specified +in the function's "Throws" paragraph.

    +

    All exceptions thrown by the Filesystem +Library are implemented by calling +boost::throw_exception(). Thus exact behavior may differ depending on +BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.

    +

    Non-throwing versions are provided of several functions that are often used +in contexts where error codes may be the preferred way to report an error.

    +

    Example programs

    +

    simple_ls.cpp

    +

    The example program simple_ls.cpp is +given a path as a command line argument. Since the command line argument may be +a relative path, the complete path is determined so that messages displayed +can be more precise.

    +

    The program checks to see if the path exists; if not a message is printed.

    +

    If the path identifies a directory, the directory is iterated through, +printing the name of the entries found, and an indication if they are +directories. A count of directories and files is updated, and then printed after +the iteration is complete.

    +

    If the path is for a file, a message indicating that is printed.

    +

    Try compiling and executing simple_ls.cpp +to see how it works on your system. Try various path arguments to see what +happens.

    +

    file_size.cpp

    +

    This example program prints the file's size if it is a regular file.

    +

    Other examples

    +

    The programs used to generate the Boost regression test status tables use the +Filesystem Library extensively.  See:

    + +

    Test programs are sometimes useful in understanding a library, as they +illustrate what the developer expected to work and not work. See:

    + +

    Implementation

    +

    The current implementation supports operating systems which provide +either the POSIX or Windows API.

    +

    The library is in regular use on Apple OS X, HP-UX, IBM AIX, Linux, +Microsoft Windows, SGI IRIX, and Sun Solaris operating systems using a variety +of compilers.

    +

    Macros

    +

    Users may defined the following macros if desired. Sensible defaults are +provided, so users can ignore these macros unless they have special needs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Macro NameDefaultEffect if defined
    BOOST_FILESYSTEM_DYN_LINKDefined if BOOST_ALL_DYN_LINK is defined, + otherwise not defined.Boost.System library is dynamically linked. If not defined, + static linking is assumed.
    BOOST_FILESYSTEM_NO_LIBDefined if BOOST_ALL_NO_LIB is defined, + otherwise not defined.Boost.System library does not use the Boost auto-link + facility.
    BOOST_FILESYSTEM_NARROW_ONLYNot defined.Removes features that require wchar_t support.
    BOOST_FILESYSTEM_NO_DEPRECATEDNot defined.Deprecated features are excluded.
    +

    Deprecated names and features

    +

    User-defined BOOST_POSIX_API and BOOST_WINDOWS_API +macros are no longer supported.

    +

    As the library evolves over time, names sometimes +change or features are removed. To ease transition, Boost.Filesystem deprecates +the old names and features, but continues to provide them unless macro +BOOST_FILESYSTEM_NO_DEPRECATED is defined.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Component +

    Old name, now deprecated

    +

    New name

    basic_pathleaf()filename()
    basic_pathbranch_path()parent_path()
    basic_pathhas_leaf()has_filename()
    basic_pathhas_branch_path()has_parent_path()
    + basic_path +

    remove_leaf()

    +

    remove_filename()

    + basic_path + basic_path( const string_type & str,
    +  name_check )
    + feature removed
    + basic_path + basic_path( const string_type::value_type * s,
    +  name_check )
    + feature removed
    + basic_path + native_file_string() + file_string()
    + basic_path + native_directory_string() + directory_string()
    + basic_path + default_name_check_writable() + feature removed
    + basic_path + default_name_check( name_check ) + feature removed
    + basic_path + default_name_check() + feature removed
    + basic_path + canonize() + feature removed
    + basic_path + normalize() + feature removed
    + operations.hpp + is_regular( file_status f ) + is_regular_file( file_status f )
    + operations.hpp + symbolic_link_exists( const path & ph ) + feature removed
    + basic_directory_status + filename() + feature removed, use path().filename() instead
    + basic_directory_status + leaf() + feature removed, use path().filename() instead
    + basic_directory_status + string() + feature removed, use path().string() instead
    +

    Restricting library to narrow character paths

    +

    Compilers or standard libraries which do not support wide characters (wchar_t) +or wide character strings (std::wstring) are detected automatically, and cause +the library to compile code that is restricted to narrow character paths +(boost::filesystem::path). Users can force this restriction by defining the +macro BOOST_FILESYSTEM_NARROW_ONLY. That may be useful for dealing with legacy +compilers or operating systems.

    +

    Building the object-library

    +

    The object-library will be built automatically if you are using the Boost +build system. See +Getting Started. It can also be +built manually using a Jamfile +supplied in directory libs/filesystem/build, or the user can construct an IDE +project or make file which includes the object-library source files.

    +

    The object-library source files are +supplied in directory libs/filesystem/src. These source files implement the +library for POSIX or Windows compatible operating systems; no implementation is +supplied for other operating systems. Note that many operating systems not +normally thought of as POSIX systems, such as mainframe legacy +operating systems or embedded operating systems, support POSIX compatible file +systems which will work with the Filesystem Library.

    +

    The object-library can be built for static or dynamic (shared/dll) linking. +This is controlled by the BOOST_ALL_DYN_LINK or BOOST_FILESYSTEM_DYN_LINK +macros. See the Separate +Compilation page for a description of the techniques used.

    +

    Note for Cygwin users

    +

    The library's implementation code treats Cygwin +as a Windows platform, and thus uses the Windows API.

    +

    Acknowledgements

    +

    The Filesystem Library was designed and implemented by Beman Dawes. The +original directory_iterator and filesystem_error classes were +based on prior work from Dietmar Kuehl, as modified by Jan Langer. Thomas Witt +was a particular help in later stages of initial development. Peter Dimov and +Rob Stewart made many useful suggestions and comments over a long period of +time. Howard Hinnant helped with internationalization issues.

    + +

    Key design requirements and +design realities were developed during +extensive discussions on the Boost mailing list, followed by comments on the +initial implementation. Numerous helpful comments were then received during the +Formal Review.

    Participants included +Aaron Brashears, +Alan Bellingham, +Aleksey Gurtovoy, +Alex Rosenberg, +Alisdair Meredith, +Andy Glew, +Anthony Williams, +Baptiste Lepilleur, +Beman Dawes, +Bill Kempf, +Bill Seymour, +Carl Daniel, +Chris Little, +Chuck Allison, +Craig Henderson, +Dan Nuffer, +Dan'l Miller, +Daniel Frey, +Darin Adler, +David Abrahams, +David Held, +Davlet Panech, +Dietmar Kuehl, +Douglas Gregor, +Dylan Nicholson, +Ed Brey, +Eric Jensen, +Eric Woodruff, +Fedder Skovgaard, +Gary Powell, +Gennaro Prota, +Geoff Leyland, +George Heintzelman, +Giovanni Bajo, +Glen Knowles, +Hillel Sims, +Howard Hinnant, +Jaap Suter, +James Dennett, +Jan Langer, +Jani Kajala, +Jason Stewart, +Jeff Garland, +Jens Maurer, +Jesse Jones, +Jim Hyslop, +Joel de Guzman, +Joel Young, +John Levon, +John Maddock, +John Williston, +Jonathan Caves, +Jonathan Biggar, +Jurko, +Justus Schwartz, +Keith Burton, +Ken Hagen, +Kostya Altukhov, +Mark Rodgers, +Martin Schuerch, +Matt Austern, +Matthias Troyer, +Mattias Flodin, +Michiel Salters, +Mickael Pointier, +Misha Bergal, +Neal Becker, +Noel Yap, +Parksie, +Patrick Hartling, Pavel Vozenilek, +Pete Becker, +Peter Dimov, +Rainer Deyke, +Rene Rivera, +Rob Lievaart, +Rob Stewart, +Ron Garcia, +Ross Smith, +Sashan, +Steve Robbins, +Thomas Witt, +Tom Harris, +Toon Knapen, +Victor Wagner, +Vincent Finn, +Vladimir Prus, and +Yitzhak Sapir + +

    A lengthy discussion on the C++ committee's library reflector illuminated the "illusion +of portability" problem, particularly in postings by PJ Plauger and Pete Becker.

    + +

    Walter Landry provided much help illuminating symbolic link use cases for +version 1.31.0.

    + +

    Version 1.34 (i18n) acknowledgements

    + +

    So many people have contributed comments and bug reports that it isn't any +longer possible to acknowledge them individually. That said, Peter Dimov and Rob +Stewart need to be specially thanked for their many constructive criticisms and +suggestions. Terence +Wilson and Chris Frey contributed timing programs which helped illuminate +performance issues.

    + +

    Change history

    + +

    Version 1.37.0

    + +
      +
    • Doc fixes: Update release history, add tables of macros and deprecated + names.
    • +
    • Bug fix: convenience.hpp didn't fully apply BOOST_FILESYSTEM_NO_DEPRECATED + to name changes.
    • +
    • Bug fix: Ticket #1972 'remove' fixes.
    • +
    • Bug fix: Restore deprecated basic_directory_entry names inadvertently + removed.
    • +
    • Bug fix: Provide deprecated functions has_branch_path and has_leaf, + inadvertently omitted from 1.36.0
    • +
    • Add workarounds for Codegear/Borland C++ Builder 2009.
    • +
    + +

    Version 1.36.0 - August 14th, 2008

    + +
      +
    • Added stem(), extension(), and replace_extension() member functions to + basic_path, based on the basename(), extension(), and change_extension() + functions from convenience.hpp.
    • +
    • Changed path.hpp function names:
        +
      • leaf() -> filename().
      • +
      • has_leaf() -> has_filename().
      • +
      • branch_path() -> parent_path().
      • +
      • has_branch_path() -> has_parent_path().
      • +
      • remove_leaf() -> remove_filename().
      • +
      +
    • +
    • Changed operations.hpp function names:
        +
      • is_regular() -> is_regular_file().
      • +
      +
    • +
    • Bug fix: Add path.cpp #include <cwchar>
    • +
    • Cleared path.hpp gcc shadow warnings.
    • +
    + +

    Version 1.35.0 - March 29th, 2008

    + +
      +
    • Diagnostics moved to the separate + Boost.System library.
    • +
    • current_path() function added to set the current directory path.
    • +
    • Test coverage extended.
    • +
    • A few minor implementation fixes.
    • +
    + +

    Version 1.34.1 - July 24th, 2007

    + +

    Version 1.34.0 - May 12th, 2007

    + +
      +
    • Internationalization, provided by + class templates basic_path, basic_filesystem_error, and + basic_directory_iterator.
    • +
    • Simplification of the path interface, + including elimination of distinction between native and generic formats, + and separation of name checking functionality from general path functionality.
    • +
    • Rationalization of predicate + function design, including the addition of several new functions.
    • +
    • Preservation of existing user code whenever + possible. Deprecated features (symbolic_link_exists(), etc.) remain + available for legacy code.
    • +
    • Clearer specification, by reference to [POSIX-01], + the ISO/IEEE Single Unix Standard, with provisions for Windows and other + operating systems.
    • +
    • New functions status, + symlink_status, + is_file, + is_symlink, + create_hard_link, + create_symlink, path member and non-member swap, path inserter, path + extractor, additional path relational and "/" operator overloads, additional + path member template functions taking iterator arguments.
    • +
    • More efficient operations when iterating over directories.
    • +
    • Separation within the implementation of the distinction between the native + operating system path syntax and API. This is important for CYGWIN users + because it allows them to build for either the Windows or POSIX API's.
    • +
    • Numerous small implementation fixes.
    • +
    + +

    Version 1.33.0 - August 11th, 2005

    + +
      +
    • Some small implementation fixes.
    • +
    + +

    Version 1.32.0 - November 19th, 2004

    + + + +

    Version 1.31.0 - January 26th, 2004

    + +
      +
    • The object library can now be built for either + static or dynamic (shared/dll) linking.
    • +
    • Several added functions, including improved checking for directory and + file name portability. See + Name check functions.
    • +
    • Separation of canonical form and normalized form and a new path member + function normalize(). This changes behavior, + in that canonical form is now different, but eliminates a subtle + bug when symbolic links to + directories are present.
    • +
    + +

     
    +Version 1.30.0 - March 19th, 2003

    +
      +
    • Initial official Boost version.
    • +
    + +
    +

    Revised +06 December, 2010

    + +

    © Copyright Beman Dawes, 2002-2005

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v2/doc/portability_guide.htm b/external/libs/filesystem/v2/doc/portability_guide.htm new file mode 100644 index 0000000..9dc2318 --- /dev/null +++ b/external/libs/filesystem/v2/doc/portability_guide.htm @@ -0,0 +1,226 @@ + + + + + + + +Portability Guide + + + + + +

    +Path +Name Portability +Guide

    + +

    +Introduction
    +name_check functions
    +File and directory name recommendations

    +

    Introduction

    +

    Like any other C++ program which performs I/O operations, there is no +guarantee that a program using Boost.Filesystem will be portable between +operating systems. Critical aspects of I/O such as how the operating system +interprets paths are unspecified by the C and C++ Standards.

    +

    It is not possible to know if a file or directory name will be +valid (and thus portable) for an unknown operating system. There is always the possibility that an operating system could use +names which are unusual (numbers less than 4096, for example) or very +limited in size (maximum of six character names, for example). In other words, +portability is never absolute; it is always relative to specific operating +systems or +file systems.

    +

    It is possible, however, to know in advance if a directory or file name is likely to be valid for a particular +operating system. It is also possible to construct names which are +likely to be portable to a large number of modern and legacy operating systems.

    + +

    Almost all modern operating systems support multiple file systems. At the +minimum, they support a native file system plus a CD-ROM file system (Generally +ISO-9669, often with Juliet extensions).

    + +

    Each file system +may have its own naming rules. For example, modern versions of Windows support NTFS, FAT, FAT32, and ISO-9660 file systems, among others, and the naming rules +for those file systems differ. Each file system may also have +differing rules for overall path validity, such as a maximum length or number of +sub-directories. Some legacy systems have different rules for directory names +versus regular file names.

    + +

    As a result, Boost.Filesystem's name_check functions +cannot guarantee directory and file name portability. Rather, they are intended to +give the programmer a "fighting chance" to achieve portability by early +detection of common naming problems.

    + +

    name_check functions

    + +

    A name_check function +returns true if its argument is valid as a directory and regular file name for a +particular operating or file system. A number of these functions are provided.

    + +

    The portable_name function is of particular +interest because it has been carefully designed to provide wide +portability yet not overly restrict expressiveness.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Library Supplied name_check Functions
    FunctionDescription
    portable_posix_name(const + std::string& name)Returns: true if !name.empty() && name contains only the characters + specified in Portable Filename Character Set rules as defined in by + POSIX (www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html).
    + The allowed characters are 0-9, a-z, A-Z, + '.', '_', and '-'.

    Use: + applications which must be portable to any POSIX system.

    windows_name(const + std::string& name)Returns:  true if !name.empty() && name contains + only the characters specified by the Windows platform SDK as valid + regardless of the file system && (name is "." or + ".."  or does not end with a trailing space or period).  + The allowed characters are anything except 0x0-0x1F, '<', + '>', ':', '"', '/', + '\', and '|'.

    + Use: applications which must be portable to Windows.

    +

    Note: Reserved device names are not valid as file names, but are + not being detected because they are still valid as a path. Specifically, + CON, PRN, AUX, CLOCK$, NUL, COM[1-9], LPT[1-9], and these names followed by + an extension (for example, NUL.tx7).

    portable_name(const + std::string& name)Returns:  windows_name(name) && portable_posix_name(name) + && (name is "." or "..", and the first character not a period or hyphen).

    Use: applications which must be portable to a wide variety of + modern operating systems, large and small, and to some legacy O/S's. The + first character not a period or hyphen restriction is a requirement of + several older operating systems.

    + portable_directory_name(const std::string& name)Returns: portable_name(name) && (name is "." + or ".."  or contains no periods).

    Use: applications + which must be portable to a wide variety of platforms, including OpenVMS.

    + portable_file_name(const std::string& name)Returns: portable_name(name) && any period is followed by one to three additional + non-period characters.

    Use: + applications which must be portable to a wide variety of platforms, + including OpenVMS and other systems which have a concept of "file extension" + but limit its length.

    native(const + std::string& name)Returns: Implementation defined. Returns + true for names considered valid by the operating system's native file + systems.

    Note: May return true for some names not considered valid + by the operating system under all conditions (particularly on operating systems which support + multiple file systems.)

    + +

    File and directory name recommendations

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    RecommendationRationale
    Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and + underscore.

    Use any of the "portable_" + name check functions to enforce this recommendation.

    These are the characters specified by the POSIX standard for portable directory and + file names, and are also valid for Windows, Mac, and many other modern file systems.
    Do not use a period or hyphen as the first + character of a name. Do not use period as the last character of a name.

    + Use portable_name, + portable_directory_name, or + portable_file_name to enforce this + recommendation.

    Some operating systems treat have special rules for the + first character of names. POSIX, for example. Windows does not permit period + as the last character.
    Do not use periods in directory names.

    Use + portable_directory_name to enforce + this recommendation.

    Requirement for ISO-9660 without Juliet extensions, OpenVMS filesystem, and other legacy systems.
    Do not use more that one period in a file name, and limit + the portion after the period to three characters.

    Use + portable_file_name to enforce this + recommendation.

    Requirement for ISO-9660 level 1, OpenVMS filesystem, and + other legacy systems.
    Do not assume names are case sensitive. For example, do not expected a directory to be + able to hold separate elements named "Foo" and "foo". Some file systems are case insensitive.  For example, Windows + NTFS is case preserving in the way it stores names, but case insensitive in + searching for names (unless running under the POSIX sub-system, it which + case it does case sensitive searches).
    Do not assume names are case insensitive.  For example, do not expect a file + created with the name of "Foo" to be opened successfully with the name of "foo".Some file systems are case sensitive.  For example, POSIX.
    Don't use hyphens in names.ISO-9660 level 1, and possibly some legacy systems, do not permit + hyphens.
    Limit the length of the string returned by path::string() to + 255 characters.  + Note that ISO 9660 has an explicit directory tree depth limit of 8, although + this depth limit is removed by the Juliet extensions.Some operating systems place limits on the total path length.  For example, + Windows 2000 limits paths to 260 characters total length.
    Limit the length of any one name in a path.  Pick the specific limit according to + the operating systems and or file systems you wish portability to:
    +    Not a concern::  POSIX, Windows, MAC OS X.
    +    31 characters: Classic Mac OS
    +   8 characters + period + 3 characters: ISO 9660 level 1
    +   32 characters: ISO 9660 level 2 and 3
    +   128 characters (64 if Unicode): ISO 9660 with Juliet extensions
    Limiting name length can markedly reduce the expressiveness of file names, yet placing + only very high limits on lengths inhibits widest portability.
    + +
    +

    Revised +11 January, 2009

    + +

    © 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 +www.boost.org/LICENSE_1_0.txt)

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v2/doc/reference.html b/external/libs/filesystem/v2/doc/reference.html new file mode 100644 index 0000000..8db3b6c --- /dev/null +++ b/external/libs/filesystem/v2/doc/reference.html @@ -0,0 +1,3094 @@ + + + + + + + +Filesystem Reference + + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Library +
    + + + + + +
    Boost Home    + Library Home    + Tutorial    + Reference   FAQ
    + +

    Reference Documentation

    + +

    Table of Contents

    + + + + + + + +
    Introduction
    + Definitions
    + Requirements
    +    +Requirements on programs
    +    Requirementson implementations
    + + Header <filesystem> synopsis
    + Path traits
    + + Class template basic_path
    +     +Pathname formats
    +     +Pathname grammar
    +     +Filename conversion
    +     +Requirements
     Class template basic_path (continued)
    +            +basic_path constructors
    +            +basic_path assignments
    +            +basic_path modifiers
    +            +basic_path operators
    +            +basic_path observers
    +            +basic_path iterators
    +            +basic_path non-member functions
    +            +basic_path inserter and extractor
    +
            +Class template + basic_filesystem_error
    +            +basic_filesystem_error + constructors
    +            +basic_filesystem_error observers
    +        +Class template + basic_directory_entry
    +            +basic_directory_entry constructors
    +            +basic_directory_entry modifiers
    +            +basic_directory_entry observers
    +            +basic_directory_entry comparisons
    Filesystem library chapter (continued)
    +        +Class template + basic_directory_iterator
    +            +basic_directory_iterator + constructors
    +        +Class template + basic_recursive_directory_iterator
    +        Class + file_status
    + + Non-member operational functions
    +     +Status functions
    +     +Predicate functions
    +     +Attribute functions
    +     +Other operations functions
    +     +Convenience functions
    + Additions + to header <fstream>
    +Suggestions for <fstream>
    + implementations
    +Path decomposition table
    +Acknowledgements
    +References
    + +

    Some functions have been renamed or deprecated since earlier releases of +the library. See Deprecated names and +features.

    + +

    Introduction

    +

    Some library behavior is specified by reference to ISO/IEC 9945:2003, +POSIX. How such behavior is actually implemented is unspecified.

    +
    +

    [Note: This constitutes an "as if" rule for implementation of +operating system dependent behavior. Presumably implementations will usually call native +operating system API's. --end note]

    +
    +

    Implementations are encouraged, but not required, to support such behavior + +as it is defined by POSIX. Implementations shall document any +behavior that differs from the POSIX defined behavior. Implementations that do not support exact POSIX behavior are +encouraged to provide behavior as close to POSIX behavior as is reasonable given the +limitations of actual operating systems and file systems. If an implementation cannot provide any +reasonable behavior, the implementation shall report an error in an +implementation-defined manner.

    +
    +

    [Note: Such errors might be reported by an #error directive, a +static_assert, a basic_filesystem_error exception, a special +return value, or some other manner. --end note]

    +
    +

    Specific operating systems such as OpenMVS, +UNIX, and Windows are mentioned only for purposes of illustration or to +give guidance to implementors. No slight to other operating systems is implied +or intended.

    +

    The Effects and Postconditions of functions described in this +reference +may not be achieved in +the presence of race conditions. No diagnostic is required.

    +

    If the possibility of race conditions makes it unreliable for a program to +test for a precondition before calling a function described in this clause, +Requires is not specified for the condition. Instead, the condition is +specified as a Throws condition.

    +
    +

    [Note: As a design practice, preconditions are not specified when it +is unreasonable for a program to detect them prior to calling the function. +-- end note]

    +
    +

    Definitions

    +

    The following definitions apply throughout this reference documentation:

    +

    File: An object that can be written to, or read from, or both. A file +has certain attributes, including type. File types include regular file, +symbolic link, and directory. Other types of files may be supported by the +implementation.

    +

    File system: A collection of files and certain of their attributes.

    +

    Filename: The name of a file. The format is as +specified by the POSIX + +Filename base definition.

    +

    Path: A sequence of elements which identify +a location within a filesystem. The elements are the root-name, +root-directory, and each successive filename. See +Pathname grammar.

    +

    Pathname: A character string that represents a +path.

    +

    Link: A directory entry object that associates a +filename with a file. On some file systems, several directory entries can +associate names with the same file.

    +

    Hard link: A link to an existing file. Some +file systems support multiple hard links to a file. If the last hard link to a +file is removed, the file itself is removed.

    +
    +

    [Note: A hard link can be thought of as a shared-ownership smart +pointer to a file. -- end note]

    +
    +

    Symbolic link: A type of file with the +property that when the file is encountered during pathname resolution, a string +stored by the file is used to modify the pathname resolution.

    +
    +

    [Note: A symbolic link can be thought of as a raw pointer to a file. +If the file pointed to does not exist, the symbolic link is said to be a +"dangling" symbolic link. -- end note]

    +
    +

    Slash: The character '/', also known as +solidus.

    +

    Dot: The character '.', also known as period.

    +

    Race condition: The condition that occurs +when multiple threads, processes, or computers interleave access and +modification of +the same object within a file system.

    +

    Requirements

    +

    Requirements on programs

    +

    The arguments for template parameters named Path, Path1, +or Path2 described in this clause shall be of type basic_path, +or a class derived from basic_path, unless otherwise +specified.

    +

    Requirements on implementations

    +

    Some function templates described in this clause have a template parameter +named Path, Path1, or Path2. When called +with a function argument s of type char* or +std::string, the implementation shall treat the argument as if it were +coded path(s). When called with a function argument s +of type wchar_t* or std::wstring, the implementation +shall treat the argument as if it were coded wpath(s). For +functions with two arguments, implementations shall not supply this treatment +when Path1 and Path2 are different types.

    +
    +

    [Note: This "do-the-right-thing" rule allows users to write exists("foo"), +taking advantage of class basic_path's string conversion +constructor,  rather +than the lengthier and more error prone exists(path("foo")). This +is particularly important for the simple, script-like, programs which are an +important use case for the library. Calling two argument functions with +different types is a very rare usage, and may well be a coding error, so +automatic conversion is not supported for such cases.

    +

    The implementation technique is unspecified. One possible implementation +technique, using +exists() as an example, is:

    +
    +
    template <class Path>
    +  typename boost::enable_if<is_basic_path<Path>,bool>::type exists(const Path& p);
    +inline bool exists(const path& p) { return exists<path>(p); }
    +inline bool exists(const wpath& p) { return exists<wpath>(p); }
    +
    +

     The enable_if will fail for a C string or + std::basic_string argument, which will then be automatically converted + to a basic_path object via the appropriate basic_path conversion + constructor.   -- end note]

    +

    The two overloads are not given + in the normative text because:

    +
      +
    • Better techniques for + achieving the desired affect may be developed, perhaps enabled by core + language changes like Concepts.
    • +
    • Implementations may prefer + techniques that work with legacy compilers that do not support enable_if.
    • +
    • Spelling out the overloads + makes the text longer and harder to read without adding much benefit.
    • +
    • More overloads will probably + be needed for char16_t and char32_t (or whatever they end up being called), + making it even less attractive to actually spell out each one. +
    • +
    +
    +

    Implementations of functions described in this clause are permitted to call the applications +program interface (API) provided by the operating system. If such an operating +system API call results in an error, implementations +shall report the error by throwing exception basic_filesystem_error, +unless otherwise specified.

    +
    +

    [Note: Such exceptions and the conditions that cause them to be thrown +are not explicitly described in each Throws element within this clause. +Because hardware failures, network failures, race conditions, and a plethora of +other errors occur frequently in file system operations, users should be aware +that unless otherwise specified any file system operation, not matter how apparently innocuous, may throw +an exception. -- end note]

    +
    +

    Functions commonly used in contexts +where errors are not exceptional have overloads taking an additional argument of +type error_code& ec. Such overloaded functions shall not throw exceptions. If an error occurs, +ec shall be set to the +error code reported by the operating system, otherwise ec shall be set to 0. If +an overload without an argument of type +error_code& ec returns void, the other overload (with an argument of type +error_code& ec) returns an +error_code with the value of ec.

    +

    Header <boost/filesystem> synopsis

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      template <class String, class Traits> class basic_path;
    +
    +      template<class String, class Traits>
    +      void swap(basic_path<String, Traits> & lhs, basic_path<String, Traits> & rhs);
    +
    +      template<class String, class Traits> bool operator<(a a, b b);
    +      template<class String, class Traits> bool operator==(a a, b b);
    +      template<class String, class Traits> bool operator!=(a a, b b);
    +      template<class String, class Traits> bool operator>(a a, b b);
    +      template<class String, class Traits> bool operator<=(a a, b b);
    +      template<class String, class Traits> bool operator>=(a a, b b);
    +      template<class String, class Traits> bool operator/(a a, b b);
    +
    +      template<class Path>
    +        basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type> &
    +          operator<<(basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& os, const Path & ph);
    +
    +      template<class Path>
    +        basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type> &
    +          operator>>(basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& is, Path & ph);
    +      
    +      struct path_traits;
    +      struct wpath_traits;
    +
    +      typedef basic_path<std::string, path_traits>    path;
    +      typedef basic_path<std::wstring, wpath_traits>  wpath;
    +
    +      template<class Path> struct is_basic_path;
    +
    +      template<class Path> struct slash { static const char value = '/'; };
    +      template<class Path> struct dot   { static const char value = '.'; };
    +      template<class Path> struct colon { static const char value = ':'; };
    +
    +      class filesystem_error;
    +      
    +      template <class Path> class basic_filesystem_error;
    +
    +      typedef basic_filesystem_error<path> filesystem_error;
    +      typedef basic_filesystem_error<wpath> wfilesystem_error;
    +
    +      template <class Path> class basic_directory_entry;
    +
    +      typedef basic_directory_entry<path> directory_entry;
    +      typedef basic_directory_entry<wpath> wdirectory_entry;
    +
    +      template <class Path> class basic_directory_iterator;
    +
    +      typedef basic_directory_iterator<path> directory_iterator;
    +      typedef basic_directory_iterator<wpath> wdirectory_iterator;
    +
    +      template <class Path> class basic_recursive_directory_iterator;
    +
    +      typedef basic_recursive_directory_iterator<path> recursive_directory_iterator;
    +      typedef basic_recursive_directory_iterator<wpath> wrecursive_directory_iterator;
    +
    +      enum file_type { status_unknown, file_not_found, regular_file, directory_file,
    +                       symlink_file, block_file, character_file, fifo_file, socket_file,
    +                       type_unknown
    +                     };
    +
    +      class file_status;
    +
    +      struct space_info  // returned by space function
    +      {
    +        uintmax_t capacity;
    +        uintmax_t free;
    +        uintmax_t available;
    +      };
    +
    +      //  status functions
    +      template <class Path> file_status status(const Path& p);
    +      template <class Path> file_status status(const Path& p, error_code& ec);
    +      template <class Path> file_status symlink_status(const Path& p);
    +      template <class Path> file_status symlink_status(const Path& p, error_code& ec);
    +
    +      //  predicate functions
    +      bool status_known( file_status s ); 
    +      bool exists( file_status s );
    +      bool is_regular_file( file_status s ); 
    +      bool is_directory( file_status s );
    +      bool is_symlink( file_status s );
    +      bool is_other( file_status s );
    +
    +      template <class Path> bool exists(const Path& p);
    +      template <class Path> bool is_directory(const Path& p);
    +      template <class Path> bool is_regular_file(const Path& p);
    +      template <class Path> bool is_other(const Path& p);
    +      template <class Path> bool is_symlink(const Path& p);
    +      template <class Path> bool is_empty(const Path& p);
    +
    +      template <class Path1, class Path2>
    +        bool equivalent(const Path1& p1, const Path2& p2);
    +
    +      //  attribute functions
    +      template <class Path> Path current_path();
    +      template <class Path> void current_path(const Path& p);
    +      template <class Path> const Path& initial_path();
    +      template <class Path> uintmax_t file_size(const Path& p);
    +      template <class Path> space_info space(const Path& p);
    +      template <class Path> std::time_t last_write_time(const Path& p);
    +      template <class Path>
    +        void last_write_time(const Path& p, const std::time_t new_time);
    +
    +      //  operations functions
    +      template <class Path> bool create_directory(const Path& dp);
    +      template <class Path1, class Path2>
    +        void create_hard_link(const Path1& old_fp, const Path2& new_fp);
    +      template <class Path1, class Path2>
    +        error_code create_hard_link(const Path1& old_fp, const Path2& new_fp, error_code& ec);
    +      template <class Path1, class Path2>
    +        void create_symlink(const Path1& old_fp, const Path2& new_fp);
    +      template <class Path1, class Path2>
    +        error_code create_symlink(const Path1& old_fp, const Path2& new_fp, error_code& ec);
    +      template <class Path> bool remove(const Path& p);
    +      template <class Path1, class Path2>
    +        void rename(const Path1& from_p, const Path2& to_p);
    +
    +      BOOST_SCOPED_ENUM_START(copy_option)
    +        { fail_if_exists, overwrite_if_exists };
    +      BOOST_SCOPED_ENUM_END
    +
    +      template <class Path1, class Path2>
    +        void copy_file(const Path1& from_fp, const Path2& to_fp,
    +          BOOST_SCOPED_ENUM(copy_option) option=copy_option::fail_if_exists);
    +
    +      template <class Path> Path system_complete(const Path& p);
    +      template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>());
    +
    +      //  convenience functions
    +      template <class Path> bool create_directories(const Path& p);
    +      template <class Path> typename Path::string_type extension(const Path& p);
    +      template <class Path> typename Path::string_type basename(const Path& p);
    +      template <class Path>
    +        Path change_extension(const Path& p, const typename Path::string_type& new_extension);
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    Path traits

    +

    This subclause defines requirements on classes representing path behavior +traits, and defines two classes that satisfy those requirements for paths based +on string and wstring.. It also defines several path +additional path traits structure templates, and defines several specializations +of them.

    +

    Class template basic_path defined in this clause requires additional +types, values, and behavior to complete the definition of its semantics.

    +

    For purposes of exposition, Traits behaves as if it is a class with private +members bool m_locked, initialized false, and std::locale m_locale, initialized

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Path Behavior Traits + Requirements
    ExpressionRequirements
    Traits::external_string_typeA typedef which is a specialization of basic_string. + The value_type is a character type used by the operating system + to represent pathnames.
    Traits::internal_string_typeA typedef which is a specialization of basic_string. + The value_type is a character type to be used by the program to + represent pathnames. Required be the same type as the basic_path + String template parameter.
    Traits::to_external( p, is )is, converted by the m_locale + codecvt facet to external_string_type.
    Traits::to_internal( p, xs )xs, converted by the m_locale + codecvt facet to to internal_string_type.
    Traits::imbue(loc)Effects: if m_locked, throw. Otherwise, + m_locked = true; m_locale = loc;
    +
    Returns: void
    +
    Throws: basic_filesystem_error
    Traits::imbue(loc, std::nothrow)Effects: if (!m_locked) m_locale = loc; bool + temp(m_locked); m_locked = true;
    +
    Returns: temp
    +

    Type is_basic_path shall be a UnaryTypeTrait (TR1, 4.1). +The primary template shall be derived directly or indirectly from +std::tr1::false_type. Type is_basic_path shall be +specialized for path, wpath, and any +user-specialized basic_path types, and such specializations shall +be derived directly or indirectly from std::tr1::true_type.

    +

    Structure templates slash, dot, and +colon +are supplied with +values of type char. If a user-specialized basic_path +has a +value_type type which is not convertible from char, the +templates  slash and dot shall be specialized to +provide value with type which is convertible to +basic_path::value_type.

    +

    Class template basic_path

    +

    Class template basic_path provides a portable mechanism for +representing paths in C++ programs, using a portable generic +pathname grammar. When portability is not a +requirement, native file system specific formats can be used. Class template +basic_path is concerned only with the lexical and syntactic aspects +of a path. The path does not have to exist in the operating system's file +system, and may contain names which are not even valid for the current operating +system.

    +
    +

    [Note: If the library's functions trafficked only in C++ or + C-style strings, they would provide only the illusion of portability since + while the syntax of function calls would be portable, the semantics of the + strings they operate on would not be portable. -- end note]

    +
    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      template <class String, class Traits> class basic_path
    +      {
    +      public:
    +        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 basic_path& p);
    +        basic_path(const string_type& s);
    +        basic_path(const value_type* s);
    +        template <class InputIterator>
    +          basic_path(InputIterator first, InputIterator last);
    +
    +       ~basic_path();
    +
    +        // assignments
    +        basic_path& operator=(const basic_path& p);
    +        basic_path& operator=(const string_type& s);
    +        basic_path& operator=(const value_type* s);
    +        template <class InputIterator>
    +          basic_path& assign(InputIterator first, InputIterator last);
    +
    +        // modifiers
    +        basic_path& operator/=(const basic_path& rhs);
    +        basic_path& operator/=(const string_type& s);
    +        basic_path& operator/=(const value_type* s);
    +        template <class InputIterator>
    +          basic_path& append(InputIterator first, InputIterator last);
    +
    +        void clear();
    +        void swap( basic_path & rhs );
    +        basic_path& remove_filename();
    +        basic_path& replace_extension(const string_type & new_extension = "");
    +
    +        // observers
    +        const string_type string() const;
    +        const string_type file_string() const;
    +        const string_type directory_string() const;
    +
    +        const external_string_type external_file_string() const;
    +        const external_string_type external_directory_string() const;
    +
    +        string_type  root_name() const;
    +        string_type  root_directory() const;
    +        basic_path   root_path() const;
    +        basic_path   relative_path() const;
    +
    +        basic_path   parent_path() const;
    +        string_type  filename() const;
    +
    +        string_type  stem() const;
    +        string_type  extension() const;
    +
    +        bool empty() const;
    +        bool is_complete() const;
    +        bool has_root_name() const;
    +        bool has_root_directory() const;
    +        bool has_root_path() const;
    +        bool has_relative_path() const;
    +        bool has_filename() const;
    +        bool has_parent_path() const;
    +
    +        // iterators
    +        class iterator;
    +        typedef iterator const_iterator;
    +
    +        iterator begin() const;
    +        iterator end() const;
    +
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    A basic_path object stores a possibly empty path. +The internal form of the stored path is unspecified.

    +

    Functions described in this clause which access files or their attributes do so by +resolving a basic_path object into a particular file in a file +hierarchy. The pathname, suitably converted to the string type, format, and +encoding +required by the operating system, is resolved as if by the POSIX + +Pathname Resolution mechanism. The encoding of the resulting pathname is determined by the Traits::to_external conversion function.

    +
    +

    [Note: There is no guarantee that the path stored in a  basic_path +object is valid for a particular operating system or file system. -- end note]

    +
    +

    Some functions in this clause return basic_path objects for +paths composed partly or wholly of pathnames obtained from the operating system. +Such pathnames are suitably converted from the actual format and string +type supplied by the operating system. The encoding of the resulting path is determined by the Traits::to_internal conversion function.

    +

    For member functions described as returning "const string_type" or +"const external_string_type", implementations are permitted to return +"const string_type&" or  "const external_string_type&" +respectively.

    +
    +

    [Note: This allows implementations to avoid unnecessary copies. +Return-by-value is specified as +const to ensure programs won't break if moved to a return-by-reference +implementation. -- +end note]

    +
    +

    Pathname formats

    +

    There are two formats for string or sequence arguments that describe a +path:

    +
      +
    • The portable pathname format as described in + Pathname grammar and by the POSIX Filename, + +Pathname and + +Pathname Resolution definitions.
      +

      [Note: The POSIX format +is the basis for the portable format because it is already an ISO standard, is +the basis for the ubiquitous URL format, and is the native format or a +subset of the native format for UNIX-like and Windows-like +operating systems familiar to large numbers of programmers.

      +

      Use of the portable format does not alone guarantee +portability; filenames must also be portable. +See Filename conversions. Each operating system + +follows its own rules. Use of the portable format +does not change that. -- end note]

      +
      +
    • +
    • A native pathname format + as defined by the operating system.
      +

      [Note: If an operating system supports only the POSIX + pathname format, the portable format and the native format are the same.

      +

      Identifying user-provided paths + as native format is a common need, and ensures maximum portability, even + though not strictly needed except on systems where the native format + is not implicitly recognized.

      +

      Programs using hard-coding native + formats are likely to be non-portable.  -- end note]

      +
      +
    • +
    +

    All basic_path string or sequence arguments that describe a +path shall accept the portable pathname format, and shall accept the native +format if explicitly identified by a native format escape sequence prefix of +slash slash colon.

    +
    +

    [Note: slash + slash colon was chosen as the escape sequence because a leading + slash slash  is already implementation-defined by POSIX, + colon is prohibited in a Windows filename, and on any system a single + slash can be used when a filename beginning with a colon + is desired. These factors eliminate the chance of collision with a real + filename. -- end note]

    +
    +

    Implementations are encouraged to +implicitly recognize the native pathname format if it can be lexically +identified. An implementation shall document whether or +not the native pathname format is +implicitly recognized.

    +
    +

    [Example:

    +

    -- OpenVMS: "SYS1::DISK1:[JANE.TYLER.HARRY]" is treated +as a native pathname with a system name, drive name, and three directory +filenames, rather than a portable pathname with one filename.

    +

    -- Windows: "c:\\jane\\tyler\\harry" is treated as a +native pathname with a drive letter, root-directory, and three filenames, rather +than a portable pathname with one filename.

    +

    -- Counter-example 1: An operating system that allows slashes in +filenames and uses dot as a directory separator. Distinguishing between portable +and native format argument strings or sequences is not possible as there is no +other distinguishing syntax. The implementation does not accept native format +pathnames unless the native argument is present.

    +

    -- Counter-example 2: An operating system that allows slashes in +filenames and uses some unusual character as a directory separator. The +implementation does accept native format pathnames without the additional +native argument, which only has to be used for native format arguments +containing slashes in filenames.

    +

    -- end example]

    +

    [Note: This duck-rule ("if it looks +like a duck, walks like a duck, and quacks like a duck, it must be a duck") +eliminates format confusion as a source of programmer error and support +requests. -- end note]

    +
    +

    If both the portable and native formats are accepted, implementations shall +document what characters or character sequences are used to distinguish between +portable and native formats.

    +
    +

    [Note: Windows implementations are encouraged to define colons +and backslashes as the characters which distinguish native from portable +formats. --end note]

    +
    +

    Pathname grammar

    +

    The grammar for the portable pathname format is as follows:

    +
    +

    pathname:
    +            root-nameopt +root-directoryopt relative-pathopt

    +

    root-name:
    +            +implementation-defined

    +

    root-directory:
    +            slash
    +            +root-directory slash
    +            +implementation-defined

    +

    relative-path:
    +            +filename
    +            relative-path +slash
    +            relative-path +slash filename

    +

    filename:
    +            name
    +            dot
    +            dot dot

    +

    slash:
    +            +slash<Path>::value

    +

    dot:
    +            +dot<Path>::value

    +
    +

    The grammar is aligned with the POSIX  Filename, + +Pathname and + +Pathname Resolution definitions. Any conflict between the grammar and +POSIX is unintentional. This technical report defers to POSIX.

    +
    +

    The form of the above wording was taken +from POSIX, which uses it in several places to defer to the C standard.

    +

    [Note: Windows implementations are encouraged to define slash slash +name as a permissible root-name. POSIX permits, but does not +require, implementations to do the same. Windows implementations are +encouraged to define an additional root-directory element +root_directory name. It is applicable only to the slash slash name +form of root-name.

    +

    Windows implementations are encouraged to recognize a name +followed by a colon as a native format root-name, +and a backslash as a format element equivalent to slash. -- end note]

    +
    +

    Filename conversion

    +

    When converting filenames to the native operating system format, +implementations are encouraged, but not required, to convert otherwise invalid +characters or character sequences to valid characters or character sequences. +Such conversions are implementation-defined.

    +
    +

    [Note: Filename conversion allows much wider portability of both +programs and filenames that would otherwise be possible.

    +

    Implementations are encouraged to base conversion on existing standards or +practice. Examples include the Uniform Resource Locator escape syntax of a percent sign ('%') +followed by two hex digits representing the character value. On +OpenVMS, which does not allow percent signs in filenames, a dollar sign ('$') +followed by two hex digits is the existing practice, as is converting lowercase +letters to uppercase. -- end note.]

    +

    The Boost implementation for +Windows currently does not map invalid characters. Pending feedback from the LWG, +Boost may settle on % hex hex as the preferred escape sequence. If so, should +there be normative encouragement?

    +
    +

    Requirements

    +

    The argument for the template parameter named String shall be a +class that includes members with the same names, types, values, and semantics as +class template basic_string.

    +

    The argument for the template parameter named Traits shall be a +class that satisfies the requirements specified in the +Path Behavior Traits Requirements +table.

    +

    The argument for template parameters named InputIterator shall satisfy the +requirements of an input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]) and shall have a value type convertible to +basic_path::value_type.

    +

    Some function templates with a template +parameter named InputIterator also have non-template overloads. Implementations shall +only select the function template overload if the type named by InputIterator +is not path_format_t.

    +
    +

    [Note: This "do-the-right-thing" rule ensures that the +overload expected by the user is selected. The implementation technique is unspecified - +implementations may use +enable_if or +other techniques to achieve the effect. -- end note]

    +
    +

    basic_path constructors

    +
    basic_path();
    +
    +

    Postconditions: empty().

    +
    +
    basic_path(const string_type& s);
    +basic_path(const value_type * s);
    +template <class InputIterator>
    +  basic_path(InputIterator s, InputIterator last);
    +
    +

    Remarks: The format of string s and sequence [first,last) + is described in Pathname formats.

    +

    Effects: The path elements in string s or sequence [first,last) + are stored.

    +
    +

    basic_path assignments

    +
    basic_path& operator=(const string_type& s);
    +basic_path& operator=(const value_type* s);
    +template <class InputIterator>
    +  basic_path& assign(InputIterator first, InputIterator last);
    +
    +

    Remarks: The format of string s and sequence [first,last) + is described in Pathname formats.

    +

    Effects: The path elements in string s or sequence [first,last) + are stored.

    +

    Returns: *this

    +
    +

    basic_path modifiers

    +
    basic_path& operator/=(const basic_path& rhs);
    +
    +

    Effects: The path stored in rhs is appended to the + stored path.

    +

    Returns: *this

    +
    +
    basic_path& operator/=(const string_type& s);
    +basic_path& operator/=(const value_type* s);
    +template <class InputIterator>
    +basic_path& append(InputIterator first, InputIterator last);
    +
    +

    Remarks: The format of string s and sequence [first,last) + is described in Pathname formats.

    +

    Effects: The path elements in string s or sequence [first,last) + are appended to the stored path.

    +

    Returns: *this

    +
    +
    void clear();
    +
    +

    Postcondition: this->empty() is true.

    +
    +
    void swap( basic_path & rhs );
    +
    +

    Effects: + Swaps the contents of the two paths.

    +

    Throws: + nothing.

    +

    Postcondition: + this->string() + contains the same sequence of characters that were in + rhs.string(), + rhs.string() + contains the same sequence of characters that were is + this->string().

    +

    Complexity: + constant time.

    +
    +
    basic_path& remove_filename();
    +
    +

    Effects: If has_parent_path() then remove the last filename from the stored path. If that leaves + the stored path with one or more trailing slash elements not + representing  root-directory, remove them.

    +

    Returns: *this

    +

    [Note: This function is needed to efficiently implement + basic_directory_iterator. It is made public to allow additional uses. -- end + note]

    +
    +
    basic_path& replace_extension( const string_type & new_extension = "" );
    +
    +

    Postcondition: extension() == replacement, + where replacement is new_extension if + new_extension.empty() || new_extension[0] == the dot character, + otherwise replacement is the dot character followed by + new_extension.

    +

    Returns: *this

    +
    +

    basic_path observers

    +
    +

    See the +Path decomposition table for examples +for values returned by decomposition functions.

    +
    +
    const string_type string() const;
    +
    +

    Returns: The stored path, formatted according to the +Pathname grammar rules.

    +
    +
    const string_type file_string() const;
    +
    +

    Returns: The stored path, formatted according to the +operating system rules for regular file pathnames, with any +Filename conversion applied.

    +

    [Note: For some operating systems, including POSIX and +Windows, the native format for regular file pathnames and directory +pathnames is the same, so file_string() and directory_string() +return the same string. On OpenMVS, however, the expression path("/cats/jane").file_string() +would return the string "[CATS]JANE" while path("/cats/jane").directory_string() +would return the string "[CATS.JANE]". -- end note]

    +
    +
    const string_type directory_string() const;
    +
    +

    Returns: The stored path, formatted according to the +operating system rules for directory pathnames, with any +Filename conversion applied.

    +
    +
    const external_string_type external_file_string() const;
    +
    +

    Returns: The stored path, formatted according to the +operating system rules for regular file pathnames, with any +Filename conversion applied, and encoded by the Traits::to_external +conversion function.

    +
    +
    const external_string_type external_directory_string() const;
    +
    +

    Returns: The stored path, formatted according to the +operating system rules for directory pathnames, with any +Filename conversion applied, and encoded by the Traits::to_external +conversion function.

    +
    +
    string_type root_name() const;
    +
    +

    Returns: root-name, if the stored path includes +root-name, otherwise string_type().

    +
    +
    string_type root_directory() const;
    +
    +

    Returns: root-directory, if the stored path includes +root-directory, otherwise string_type().

    +

    If root-directory is composed slash name, slash is +excluded from the returned string.

    +
    +
    basic_path root_path() const;
    +
    +

    Returns: root_name() / root_directory()

    +
    +
    basic_path relative_path() const;
    +
    +

    Returns: A basic_path composed from the the stored path, if any, beginning +with the first filename after root-path. +Otherwise, an empty basic_path.

    +
    +
    string_type filename() const;
    +
    +

    Returns: empty() ? string_type() : *--end()

    +
    +
    basic_path parent_path() const;
    +
    +

    Returns: (string().empty() || begin() == --end()) ? path_type("") : + br, where br is constructed as if by + starting with an empty basic_path and successively applying + operator/= for each element in the range begin(), + --end().

    +
    +
    string_type stem(const Path & p) const;
    +
    +

    Returns: if p.filename() contains a dot, returns + the substring of p.filename() starting at its beginning and + ending at the last dot (the dot is not included). Otherwise, + returns + p.filename().

    +
    +
    string_type extension(const Path & p) const;
    +
    +

    Returns: if p.filename() contains a dot, returns + the substring of p.filename() starting at the rightmost dot + and ending at the string's end. Otherwise, returns an empty string.

    +

    [Note: The dot is included in the return value so that + it is possible to distinguish between no extension and an empty extension.

    +

    Implementations are permitted but not required to define additional + behavior for file systems which append additional elements to extensions, such + as alternate data stream or partitioned dataset names. -- end note]

    +
    +
    bool empty() const;
    +
    +

    Returns: string().empty().

    +
    +
    bool is_complete() const;
    +
    +

    Returns: true, + if the elements of root_path() uniquely identify a directory, else false.

    +
    +
    bool has_root_path() const;
    +
    +

    Returns: !root_path().empty()

    +
    +
    bool has_root_name() const;
    +
    +

    Returns: !root_name().empty()

    +
    +
    bool has_root_directory() const;
    +
    +

    Returns: !root_directory().empty()

    +
    +
    bool has_relative_path() const;
    +
    +

    Returns: !relative_path().empty()

    +
    +
    bool has_filename() const;
    +
    +

    Returns: !filename().empty()

    +
    +
    bool has_parent_path() const;
    +
    +

    Returns: !parent_path().empty()

    +
    +

    basic_path iterators

    +

    A basic_path::iterator is a constant iterator satisfying all +the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional +iterators [lib.bidirectional.iterators]). Its value_type is +string_type.

    +

    Calling any non-const member function of a basic_path object + invalidates all iterators referring to elements of the object.

    +

    The forward traversal order is as follows:

    +
      +
    • The root-name element, if present.
    • +
    • The root-directory element, if present.
    • +
    • Each successive filename element, if present.
    • +
    • Dot, if one or more trailing non-root slash + characters are present.
    • +
    +

    The backward traversal order is the reverse of forward traversal.

    +
    iterator begin() const;
    +
    +

    Returns: An iterator for the first present element in the traversal + list above. If no elements are present, the end iterator.

    +
    +
    iterator end() const;
    +
    +

    Returns: The end iterator.

    +
    +

    +basic_path non-member functions

    +
    template<class String, class Traits>
    +void swap( basic_path<String, Traits> & lhs, basic_path<String, Traits> & rhs )
    +
    +

    Effects: + lhs.swap( + rhs )

    +
    +

    basic_path non-member operators

    +

    There are seven basic_path non-member operators (/, + ==, + + !=, + <, + >, + <=, + >=), + each with five overloads. For brevity, the specifications are given in tabular + form. Each of the resulting thirty-five signatures is a template, with + template parameter list template<class + String, class Traits>. + The format of such arguments is described in + Pathname formats.

    + + + + + + + + + + + + + + + + + + + +
    +

    Argument type overloads

    + basic_path<String, Traits>& a, basic_path<String, Traits>& + b
    const + typename basic_path<String, Traits>::string_type& a, + basic_path<String, Traits>& b
    const + typename basic_path<String, Traits>::string_type::value_type* a, + basic_path<String, Traits>& b
    const + basic_path<String, Traits>& a, typename basic_path<String, Traits>::string_type& + b
    const + basic_path<String, Traits>& a, typename + basic_path<String, Traits>::string_type::value_type* b
    +

    In the + basic_path non-member operators + table, + a + and b + are of the types given in the + Argument type overloads + table. If a + or b + is of type const + basic_path<String, Traits>&, + then a' + or b' + respectively is a + or b + respectively. Otherwise a' + or b' + respectively represent named or unnamed temporary + basic_path<String, Traits> + objects constructed from + a or + b + respectively.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + basic_path non-member operators
    + Expression + Return type + Semantics
    + a / b + basic_path<String, Traits> + basic_path<String, Traits> tmp(a);
    + return tmp /=
    b';
    + a < b + bool + return lexicographical_compare(a'.begin(), + a'.end(), + b'.begin(), + b'.end());
    + a == b + bool + return !(a' + < b') + && !(b' + < a');
    + a != b + bool + return !(a' + == b');
    + a > b + bool + return b' + < a';
    + a <= b + bool + return !(b' + < a');
    + a >= b + bool + return !(a' + < b');
    +
    +

    [Note: + Path equality and path + equivalence have different semantics.

    +

    Equality is determined by + basic_path's + non-member + operator==, which considers the two path's lexical representations + only. Paths "abc" and "ABC" are never equal.

    +

    Equivalence is determined by the + equivalent() + non-member function, which determines if two paths + resolve to the same file system entity. + Paths "abc" + and "ABC" may or may not resolve to the same file, depending on the file + system.

    +

    Programmers wishing to determine if two paths are "the same" must decide if + "the same" means "the same representation" or "resolve to the same actual + file", and choose the appropriate function accordingly. + -- end note]

    +
    +

    + basic_path inserter + and extractor

    +
    template<class Path>
    +  basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>&
    +    operator>>(basic_istream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& is,
    +               Path& ph );
    +
    +

    Effects:  + typename Path::string_type str;
    +        + is >> str;
    +        + ph = str;

    +

    Returns: + is

    +
    +
    template<class Path>
    +  basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>&
    +    operator<<(basic_ostream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& os,
    +               const Path& ph );
    +
    +

    Effects:  + os << ph.string()

    +

    Returns: + os

    +
    +

    Class template basic_filesystem_error

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      template <class Path> class basic_filesystem_error : public system_error
    +      {
    +      public:
    +        typedef Path path_type;
    +
    +        explicit basic_filesystem_error(const std::string& what_arg, error_code ec);
    +        basic_filesystem_error(const std::string& what_arg, const path_type& p1, error_code ec);
    +        basic_filesystem_error(const std::string& what_arg, const path_type& p1, const path_type& p2, error_code ec);
    +
    +        const path_type& path1() const;
    +        const path_type& path2() const;
    +
    +        const char * what() const;
    +      };
    +    } // namespace filesystem
    +  } // namespace boost
    +

    The class template basic_filesystem_error defines the type of +objects thrown as exceptions to report file system errors from functions described in this +clause.

    +

    basic_filesystem_error constructors

    +
    explicit basic_filesystem_error(const std::string& what_arg, error_code ec);
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + what_arg.c_str()
    code()ec
    path1().empty()true
    path2().empty()true
    +
    +
    basic_filesystem_error(const std::string& what_arg, const path_type& p1, error_code ec);
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + what_arg.c_str()
    code()ec
    path1()Reference to stored copy of + p1
    path2().empty()true
    +
    +
    basic_filesystem_error(const std::string& what_arg, const path_type& p1, const path_type& p2, error_code ec);
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + + what_arg.c_str()
    code()ec
    path1()Reference to stored copy of + p1
    path2()Reference to stored copy of + p2
    +
    +

    basic_filesystem_error observers

    +
    const path_type& path1() const;
    +
    +

    Returns: Reference to copy of p1 stored by the + constructor, or, if none, an empty path.

    +
    +
    const path_type& path2() const;
    +
    +

    Returns: Reference to copy of p2 stored by the + constructor, or, if none, an empty path.

    +
    +
    const char * what() const;
    +
    +

    Returns: A string containing runtime_error::what() and + the result of calling system_message() with a first argument of + code(). The exact format is unspecified.

    +

    The implementation shall supply a specialization template<> const char +* basic_filesystem_error<path>::what() const that returns a string +containing runtime_error::what(), the result of calling +system_message() with a first argument of code(), and if +non-empty, path1().file_string() and path2.file_string(). +The exact format is unspecified.

    +

    Implementations and users are permitted to provide other specializations of +the what member function.

    +
    +

    Class template basic_directory_entry

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      template <class Path> class basic_directory_entry
    +      {
    +      public:
    +        typedef Path path_type;
    +        typedef typename Path::string_type string_type;
    +
    +        // constructors
    +        basic_directory_entry();
    +        explicit basic_directory_entry(const path_type& p,
    +          file_status st=file_status(), file_status symlink_st=file_status());
    +
    +        // modifiers
    +        void assign(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +        void replace_filename(const string_type& s, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +        // observers
    +        const Path& path() const;
    +        operator const Path&() const;
    +
    +        file_status  status() const;
    +        file_status  status(error_code& ec) const;
    +        file_status  symlink_status() const;
    +        file_status  symlink_status(error_code& ec) const;
    +
    +        // comparisons
    +        bool operator<(const basic_directory_entry<Path>& rhs);
    +        bool operator==(const basic_directory_entry<Path>& rhs);
    +        bool operator!=(const basic_directory_entry<Path>& rhs);
    +        bool operator>(const basic_directory_entry<Path>& rhs);
    +        bool operator<=(const basic_directory_entry<Path>& rhs);
    +        bool operator>=(const basic_directory_entry<Path>& rhs);
    +
    +      private:
    +        path_type            m_path;           // for exposition only
    +        mutable file_status  m_status;         // for exposition only; stat()-like
    +        mutable file_status  m_symlink_status; // for exposition only; lstat()-like
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    A basic_directory_entry object stores a basic_path object, +a file_status object for non-symbolic link status, and a +file_status object for symbolic link status. The file_status +objects act as value caches.

    +
    +

    [Note: Because status()on a pathname may be a very expensive operation, +some operating systems provide status information as a byproduct of directory +iteration. Caching such status information can result is significant time savings. Cached and +non-cached results may differ in the presence of race conditions. -- end note]

    +

    Actual cold-boot timing of iteration over +a directory with 15,047 entries was six seconds for non-cached status queries +versus one second for cached status queries. Windows XP, 3.0 GHz processor, with +a moderately fast hard-drive. Similar speedup expected on Linux and BSD-derived +Unix variants that provide status during directory iteration.

    +
    +

    basic_directory_entry constructors

    +
    basic_directory_entry();
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path().empty()true
    status()file_status()
    symlink_status()file_status()
    +
    +
    explicit basic_directory_entry(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()p
    status()st
    symlink_status()symlink_st
    +
    +

    basic_directory_entry modifiers

    +
    void assign(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()p
    status()st
    symlink_status()symlink_st
    +
    +
    void replace_filename(const string_type& s, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postconditions:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()path().branch() / s
    status()st
    symlink_status()symlink_st
    +
    +

    basic_directory_entry observers

    +
    const Path& path() const;
    +operator const Path&() const;
    +
    +

    Returns: m_path

    +
    +
    file_status status() const;
    +
    +

    Effects: +As if,

    +
    +
    if ( !status_known( m_status ) )
    +{
    +  if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
    +    { m_status = m_symlink_status; }
    +  else { m_status = status(m_path); }
    +}
    +
    +

    Throws: See status + function.

    +

    Returns: m_status

    +
    +
    file_status status(error_code& ec) const;
    +
    +

    Effects: +As if,

    +
    +
    if ( !status_known( m_status ) )
    +{
    +  if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
    +    { m_status = m_symlink_status; }
    +  else { m_status = status(m_path, ec); }
    +}
    +else ec = 0;
    +
    +

    Returns: m_status

    +
    +
    file_status symlink_status() const;
    +
    +

    Effects: +As if,

    +
    +
    if ( !status_known( m_symlink_status ) )
    +{
    +  m_symlink_status = symlink_status(m_path);
    +}
    +
    +

    Throws: See symlink_status + function.

    +

    Returns: + m_symlink_status

    +
    +
    file_status symlink_status(error_code& ec) const;
    +
    +

    Effects: +As if,

    +
    +
    if ( !status_known( m_symlink_status ) )
    +{
    +  m_symlink_status = symlink_status(m_path, ec);
    +}
    +else ec = 0;
    +
    +

    Returns: m_symlink_status

    +
    +

    Class template basic_directory_iterator

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      template <class Path>
    +      class basic_directory_iterator :
    +        public iterator<input_iterator_tag, basic_directory_entry<Path> >
    +      {
    +      public:
    +        typedef Path path_type;
    +
    +        // constructors
    +        basic_directory_iterator();
    +        explicit basic_directory_iterator(const Path& dp);
    +        basic_directory_iterator(const Path& dp, error_code& ec);
    +        basic_directory_iterator(const basic_directory_iterator& bdi);
    +        basic_directory_iterator& operator=(const basic_directory_iterator& bdi);
    +       ~basic_directory_iterator();
    +
    +        // other members as required by
    +        //  C++ Std, 24.1.1 Input iterators [lib.input.iterators]
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    basic_directory_iterator satisfies the requirements of an +input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]).

    +

    A basic_directory_iterator reads successive elements from the directory for +which it was constructed, as if by calling POSIX + +readdir_r(). After a basic_directory_iterator is constructed, and every time +operator++ is called, +it reads and stores a value of basic_directory_entry<Path> +and possibly stores associated status values. +operator++ is not equality preserving; that is, i == j does not imply that +++i == ++j.

    +
    +

    [Note: The practical consequence of not preserving equality is that directory iterators +can be used only for single-pass algorithms. --end note]

    +
    +

    If the end of the directory elements is reached, the iterator becomes equal to +the end iterator value. The constructor basic_directory_iterator() +with no arguments always constructs an end iterator object, which is the only +legitimate iterator to be used for the end condition. The result of +operator* on an end iterator is not defined. For any other iterator value +a const basic_directory_entry<Path>& is returned. The result of +operator-> on an end iterator is not defined. For any other +iterator value a const basic_directory_entry<Path>* is +returned.

    +

    Two end iterators are always equal. An end iterator is not equal to a non-end +iterator.

    +
    +

    The above wording is based on the +Standard Library's istream_iterator wording. Commentary was shortened and +moved into a note.

    +
    +

    The result of calling the path() member of the +basic_directory_entry object obtained by dereferencing a +basic_directory_iterator is a reference to a basic_path +object composed of the directory argument from which the iterator was +constructed with filename of the directory entry appended as if by +operator/=.

    +
    +

    [Example: This program accepts an +optional command line argument, and if that argument is a directory pathname, +iterates over the contents of the directory. For each directory entry, the name +is output, and if the entry is for a regular file, the size of the file is +output.

    +
    +
    #include <iostream>
    +#include <filesystem>
    +
    +using std::tr2::sys;
    +using std::cout;
    +
    +int main(int argc, char* argv[])
    +{
    +  std::string p(argc <= 1 ? "." : argv[1]);
    +
    +  if (is_directory(p))
    +  {
    +    for (directory_iterator itr(p); itr!=directory_iterator(); ++itr)
    +    {
    +      cout << itr->path().filename() << ' '; // display filename only
    +      if (is_regular_file(itr->status())) cout << " [" << file_size(itr->path()) << ']';
    +      cout << '\n';
    +    }
    +  }
    +  else cout << (exists(p) ? "Found: " : "Not found: ") << p << '\n';
    +
    +  return 0;
    +}
    +
    +

    -- end example]

    +
    +

    Directory iteration shall not yield directory entries for the current (dot) +and parent (dot dot) directories.

    +

    The order of directory entries obtained by dereferencing successive +increments of a basic_directory_iterator is unspecified.

    +
    +

    [Note: Programs performing directory iteration may wish to test if the +path obtained by dereferencing a directory iterator actually exists. It could be +a +symbolic link to a non-existent file. Programs recursively +walking directory trees for purposes of removing and renaming entries may wish +to avoid following symbolic links.

    +

    If a file is removed from or added to a directory after the +construction of a basic_directory_iterator for the directory, it is +unspecified whether or not subsequent incrementing of the iterator will ever +result in an iterator whose value is the removed or added directory entry. See +POSIX + +readdir_r(). +--end note]

    +
    +

    basic_directory_iterator constructors

    + +

    basic_directory_iterator();

    + +
    + +

    Effects: Constructs the end iterator.

    + +
    + +

    explicit basic_directory_iterator(const Path& dp);

    + +
    + +

    Effects: Constructs a iterator representing the first +entry in the directory resolved to by dp, otherwise, the end iterator.

    + +

    [Note: To iterate over the current directory, write +directory_iterator(".") rather than directory_iterator(""). +-- end note]

    +
    +
    basic_directory_iterator(const Path& dp, error_code& ec );
    +
    + +

    Effects: Constructs a iterator representing the first +entry in the directory resolved to by dp, otherwise, the end iterator. +If an error occurs while establishing the results, the iterator constructed +represents the end iterator and ec is set to the error code +reported by the operating system, otherwise to 0.

    + +
    +

    Class template basic_recursive_directory_iterator

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      template <class Path>
    +      class basic_recursive_directory_iterator :
    +        public iterator<input_iterator_tag, basic_directory_entry<Path> >
    +      {
    +      public:
    +        typedef Path path_type;
    +
    +        // constructors
    +        basic_recursive_directory_iterator();
    +        explicit basic_recursive_directory_iterator(const Path& dp);
    +        basic_recursive_directory_iterator(const basic_recursive_directory_iterator& brdi);
    +        basic_recursive_directory_iterator& operator=(const basic_recursive_directory_iterator& brdi);
    +       ~basic_recursive_directory_iterator();
    +
    +        // observers
    +        int level() const;
    +
    +        // modifiers
    +        void pop();
    +        void no_push();
    +
    +        // other members as required by
    +        //  C++ Std, 24.1.1 Input iterators [lib.input.iterators]
    +
    +      private:
    +        int m_level; // for exposition only
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    The behavior of a basic_recursive_directory_iterator is the same +as a basic_directory_iterator unless otherwise specified.

    +
      +
    • When an iterator is constructed, m_level is set to 0;
    • +
    • When an iterator it is incremented, if it->is_directory() + is true and no_push() had not been called subsequent to + the most recent increment operation (or construction, if no increment has + occurred), then  m_level is incremented, the + directory is visited, and its contents recursively iterated over.
    • +
    • When an iterator reaches the end of the directory currently being iterated + over, or when pop() is called, m_level is + decremented, and iteration continues with the parent directory, until the + directory specified in the constructor argument is reached.
    • +
    • level() returns m_level.
    • +
    • level(), pop(), and no_push() all + require that the iterator not be the end iterator.
    • +
    +
    +

    [Note: One of the uses of no_push() is to prevent + unwanted recursion into symlinked directories. This may be necessary to + prevent loops on some operating systems. --end note]

    +
    +

    Class file_status

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class file_status
    +      {
    +      public:
    +        explicit file_status( file_type v = status_unknown );
    +
    +        file_type type() const;
    +        void type( file_type v );
    +      };
    +    } // namespace filesystem
    +  } // namespace boost
    +

    A file_status object stores information about the status of a +file. The internal form of the stored information is unspecified.

    +
    +

    [Note: The class may be extended in the future to store + additional status information. --end note]

    +
    +

    Members

    +
    explicit file_status( file_type v = status_unknown );
    +
    +

    Effects: Stores v.

    +
    +
    file_type type() const;
    +
    +

    Returns: The stored file_type.

    +
    +
    void type( file_type v );
    +
    +

    Effects: Stores v, replacing the previously stored + value.

    +
    +

    Non-member operational functions

    +

    Status functions

    +
    template <class Path> file_status status(const Path& p, error_code& ec);
    +template <class Path> file_status symlink_status(const Path& p, error_code& ec);
    +
    +

    Returns:

    +
    + For status, determine the attributes + of + p as if by POSIX + stat(), + for symlink_status, determine the attributes as if by POSIX + + lstat().
    +

    [Note: For symbolic links, stat() continues + pathname resolution using the contents of the symbolic link, lstat() + does not. -- + end note]

    +
    +

    If the underlying file system reports an error during attribute determination:

    +
      +
    • If the error indicating that p could not be resolved, as + if by POSIX errors ENOENT or ENOTDIR, call ec.clear() and return + file_status(not_found_flag).
    • +
    +
    +
    +

    [Note: The effect of this behavior is to distinguish between + knowing that p + does not exist, and not being able to determine the status of p. This + distinction is important to users.  --end note]

    +
    +
    +
      +
    • Otherwise, set ec to the error number reported by the underlying + implementation API + and return + file_status(status_unknown).
    • +
    + Otherwise:
      +
    • If the attributes indicate a regular file, as if by POSIX S_ISREG(), + return + file_status(regular_file).
    • +
    • Else if the attributes indicate a directory, as if by POSIX S_ISDIR(), + return + file_status(directory_file).
    • +
    • Else if the attributes indicate a symbolic link, as if by POSIX S_ISLNK(), + return + file_status(symlink_file). [Note: Only possible for + symlink_status. --end note]
    • +
    • Else if the attributes indicate a block special file, as if by POSIX S_ISBLK(), + return + file_status(block_file).
    • +
    • Else if the attributes indicate a character special file, as if by POSIX S_ISCHR(), + return + file_status(character_file).
    • +
    • Else if the attributes indicate a fifo or pipe file, as if by POSIX S_ISFIFO(), + return + file_status(fifo_file).
    • +
    • Else if the attributes indicate a socket, as if by POSIX S_ISSOCK(), + return + file_status(socket_file).
    • +
    • Else return + file_status(type_unknown).
    • +
    +
    +

    [Note: directory_file implies +basic_directory_iterator on the file would succeed, and +regular_file implies appropriate <fstream> operations would succeed, +assuming no hardware, permission, access, or race +condition errors. For regular_file, the converse is not true; lack of +regular_file does not necessarily imply <fstream> operations would +fail on a directory. +-- end note]

    +
    +
    template <class Path> file_status status(const Path& p);
    +
    +

    Effects: system_error_code ec;
    +              + file_status stat(status(p, ec));

    +

    Throws: basic_filesystem_error<Path> if ec + != 0

    +

    Returns: stat

    +
    +
    template <class Path> file_status symlink_status(const Path& p);
    +
    +

    Effects: system_error_code ec;
    +              + file_status stat(symlink_status(p, ec));

    +

    Throws: basic_filesystem_error<Path> if ec + != 0

    +

    Returns: stat

    +
    +

    Predicate functions

    +
    bool status_known(file_status s);
    +
    +

    Returns: + s.type() != status_unknown

    +
    +
    bool exists(file_status s);
    +
    +

    Returns: + status_known(s) && s.type() != file_not_found

    +
    +
    template <class Path> bool exists(const Path& p);
    +
    +

    Returns: exists( status(p) )

    +
    +
    bool is_regular_file(file_status s);
    +
    +

    Returns: + s.type() == regular_file

    +
    +
    template <class Path> bool is_regular_file(const Path& p);
    +
    +

    Returns: is_regular_file( status(p) )

    +
    +
    bool is_directory(file_status s);
    +
    +

    Returns: + s.type() == directory_file

    +
    +
    template <class Path> bool is_directory(const Path& p);
    +
    +

    Returns: is_directory( status(p) )

    +
    +
    bool is_symlink(file_status s);
    +
    +

    Returns: + s.type() == symlink_file

    +
    +
    template <class Path> bool is_symlink(const Path& p);
    +
    +

    Returns: is_symlink( symlink_status(p) )

    +
    +
    bool is_other(file_status s);
    +
    +

    Returns: + return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)

    +

    [Note: The specification of + is_other() will remain unchanged even if additional is_xxx() + functions are added in the future. -- end note]

    +
    +
    template <class Path> bool is_other(const Path& p);
    +
    +

    Returns: is_other( status(p) )

    +
    +
    template <class Path> bool is_empty(const Path& p);
    +
    +

    Effects: Determines file_status s, as if by + status(p).

    +

    Throws: basic_filesystem_error<Path> if !exist(s) || + is_other(s).

    +

    Returns: is_directory(s)
    +         ? + basic_directory_iterator<Path>(p) == basic_directory_iterator<Path>()
    +         : file_size(p) == 0;

    +
    +
    template <class Path1, class Path2> bool equivalent(const Path1& p1, const Path2& p2);
    +
    +

    Requires: Path1::external_string_type and + Path2::external_string_type are the same type.

    +

    Effects: Determines file_status s1 and s2, + as if by status(p1) and  status(p2), + respectively.

    +

    Throws: basic_filesystem_error<Path1> + if (!exists(s1) && !exists(s2)) || (is_other(s1) && + is_other(s2)).

    +

    Returns: true, if sf1 == sf2 and p1 and p2 + resolve to the same file system entity, else false.

    +

    Two paths are considered to resolve to + the same file system entity if two candidate entities reside on the same + device at the same location. This is determined as if by the values of the POSIX + stat + structure, obtained as if by + stat() for the two paths, having equal + st_dev values and equal st_ino values.

    +

    [Note: POSIX requires that "st_dev must be unique + within a Local Area Network". Conservative POSIX implementations may + also wish to check for equal st_size and st_mtime + values. Windows implementations may use GetFileInformationByHandle() as a surrogate for + stat(), and consider "same" to be equal values for + dwVolumeSerialNumber, nFileIndexHigh, + nFileIndexLow, nFileSizeHigh, nFileSizeLow, + ftLastWriteTime.dwLowDateTime, and + ftLastWriteTime.dwHighDateTime. -- end note]

    +
    +

    Attribute functions

    +

    [Note: A strictly limited number of attribute functions are provided +because few file system attributes are portable. Even the functions provided will be impossible to implement on some file +systems. --end note.]

    +
    template <class Path> const Path& initial_path();
    +
    +

    Returns: current_path() at the time of entry to + main().

    +

    [Note: These semantics turn a dangerous global variable into a safer + global constant. --end note]

    +

    [Note: Full implementation requires runtime library support. + Implementations which cannot provide runtime library support are encouraged to + instead store the value of current_path() at the first call of + initial_path(), and + return this value for all subsequent calls. Programs using + initial_path() are + encouraged to call it immediately on entrance to main() so that + they will work correctly with such partial implementations. --end note]

    +
    +
    template <class Path> Path current_path();
    +
    +

    Returns: The current path, as if by POSIX + + getcwd().

    +

    Postcondition: current_path().is_complete()

    +

    [Note: The current path as returned by many operating systems is a + dangerous global variable. It may be changed unexpectedly by a third-party or + system library functions, or by another thread. Although dangerous, the + function is useful in dealing with other libraries.. For a safer alternative, + see initial_path(). The + current_path() name was chosen to emphasize that the return is a + complete path, not just a single directory name. -- end note]

    +
    +
    template <class Path> void current_path(const Path& p);
    +
    +

    Postcondition: equivalent( p, current_path() );

    +
    +
    template <class Path> uintmax_t file_size(const Path& p);
    +
    +

    Returns: The size + in bytes + of the file p resolves to, determined as if by the value of + the POSIX + stat structure member st_size + obtained as if by POSIX + stat().

    +
    +
    template <class Path> space_info space(const Path& p);
    +
    +

    Returns: A space_info + object. The value of the space_info object is determined as if by + using POSIX + + statvfs() to obtain a POSIX struct + + statvfs, and then multiplying its f_blocks, + f_bfree, and f_bavail members by its f_frsize + member, and assigning the results to the capacity, free, + and available members respectively. Any members for which the + value cannot be determined shall be set to -1.

    +
    +
    template <class Path> std::time_t last_write_time(const Path& p);
    +
    +

    Returns: The time of last data modification of p, determined as if by the + value of the POSIX + stat structure member st_mtime  obtained + as if by POSIX + stat().

    +
    +
    template <class Path> void last_write_time(const Path& p, const std::time_t new_time);
    +
    +

    Effects: Sets the time of last data modification of the file + resolved to by p + to new_time, as if by POSIX + stat() + followed by POSIX + + utime().

    +

    [Note: The apparent postcondition last_write_time(p) == + new_time is not specified since it would not hold for many file systems + due to coarse time mechanism granularity. -- end note]

    +
    +

    Other operations functions

    +
    template <class Path> bool create_directory(const Path& dp);
    +
    +

    Effects: Attempts to create the directory dp resolves to, + as if by POSIX + mkdir() with a second argument of S_IRWXU|S_IRWXG|S_IRWXO.

    +

    Throws: basic_filesystem_error<Path> if + Effects fails for any reason other than because the directory already exists.

    +

    Returns: True if a new directory was created, otherwise false.

    +

    Postcondition: is_directory(dp)

    +
    +
    template <class Path1, class Path2>
    +  error_code create_hard_link(const Path1& to_p, const Path2& from_p, error_code& ec);
    +
    +

    Requires: + Path1::external_string_type and + + Path2::external_string_type are the same type.

    +

    Effects: Establishes the postcondition, as if by + POSIX + + + link().

    +

    Returns: If the + postcondition cannot be established, a system error code + indicating the reason for the failure, otherwise 0.

    +

    Postcondition:

    +
      +
    •  exists(to_p) && exists(from_p) && equivalent(to_p, + from_p)
    • +
    • The contents of the file or directory + to_p resolves to are unchanged.
    • +
    +

    [Note: + Some operating systems do not support hard links or support + them only for regular files. Some operating systems limit the number of links per + file. + Some file systems that do not + support + hard links - the FAT system used on floppy discs, memory cards and flash + drives, + for example. Thus hard links should be avoided if wide portability is + a concern. -- end note]

    +
    +
    template <class Path1, class Path2>
    +  void create_hard_link(const Path1& to_p, const Path2& from_p);
    +
    +

    Requires: + Path1::external_string_type and + + Path2::external_string_type are the same type.

    +

    Effects: + As if system_error_code ec( create_hard_link( to_p, from_p ) );

    +

    Throws: + basic_filesystem_error<Path1, Path2> + if ec is not zero.

    +
    +
    template <class Path1, class Path2>
    +  error_code create_symlink(const Path1& to_p, const Path2& from_p, error_code& ec);
    +
    +

    Requires: + Path1::external_string_type and + + Path2::external_string_type are the same type.

    +

    Effects: Establishes the postcondition, as if by + POSIX + + + + symlink().

    +

    Returns: If the + postcondition cannot be established, a system error code + indicating the reason for the failure, otherwise 0.

    +

    Postcondition: from_p + resolves to a symbolic link file that contains an unspecified representation + of to_p.

    +

    [Note: + Some operating systems do not support symbolic links at all or support + them only for regular files. Thus symbolic links should be avoided if code portability is + a concern. -- end note]

    +
    +
    template <class Path1, class Path2>
    +  void create_symlink(const Path1& to_p, const Path2& from_p);
    +
    +

    Requires: + Path1::external_string_type and + + Path2::external_string_type are the same type.

    +

    Effects: + As if system_error_code ec( create_symlink( to_p, from_p ) );

    +

    Throws: + basic_filesystem_error<Path1, Path2> + if ec is not zero.

    +
    +
    template <class Path> bool remove(const Path& p, system::error_code & ec = singular );
    +
    +

    Effects:  Removes the file p, + as if by POSIX + remove(). + If no error is reported by the underlying removal implementation or if + status(p).type() == file_not_found, then:

    +
      +
    • if ec != singular, then ec.clear().
    • +
    +

    Otherwise,

    +
      +
    • if ec != singular, then set ec + to represent the error.
    • +
    • otherwise, throw basic_filesystem_error<Path> to represent + the error.if ec != singular, then + ec.clear()
    • +
    +

    Returns: true if the file was removed, otherwise + false.

    +

    Postcondition: !exists(p)

    +

    Throws: See Effects.

    +

    [Note: A symbolic link is itself removed, rather than the file it + resolves to being removed. -- end note]

    +
    +
    template <class Path> unsigned long remove_all(const Path& p);
    +
    +

    Effects:  Recursively deletes the contents of p if it exists, + then deletes file p itself, + as if by POSIX + remove().

    +

    Returns: The number of files removed.

    +

    Postcondition: !exists(p)

    +

    [Note: A symbolic link is itself removed, rather than the file it + resolves to being removed. -- end note]

    +
    +
    template <class Path1, class Path2> void rename(const Path1& from_p, const Path2& to_p);
    +
    +

    Requires: Path1::external_string_type and + Path2::external_string_type are the same type.

    +

    Effects: Renames from_p to to_p, as if by + POSIX + + rename().

    +

    Postconditions: !exists(from_p) && exists(to_p), and + the contents and attributes of the file originally named from_p + are otherwise unchanged.

    +

    [Note: If from_p and to_p resolve to the + same file, no action is taken. Otherwise, if to_p resolves to an + existing file, it is removed. A symbolic link is itself renamed, rather than + the file it resolves to being renamed. -- end note]

    +
    +
    template <class Path1, class Path2>
    +  void copy_file(const Path1& from_fp, const Path2& to_fp,
    +                 BOOST_SCOPED_ENUM(copy_option) option=copy_option::fail_if_exists);
    +
    +

    Requires: Path1::external_string_type and + Path2::external_string_type are the same type.

    +

    Effects: The contents and attributes of the file from_fp + resolves to are copied to the file to_fp resolves to.

    +

    Throws: basic_filesystem_error<Path> if + from_fp.empty() || to_fp.empty() ||!exists(from_fp) || !is_regular_file(from_fp) + || (option==copy_option::fail_if_exists && exists(to_fp))

    +
    +
    template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>());
    +
    +

    Effects: Composes a complete path from p and base, + using the following rules:

    + + + + + + + + + + + + + + + + +
     p.has_root_directory()!p.has_root_directory()
    p.has_root_name()pprecondition failure
    !p.has_root_name()base.root_name()
    + / p
    base / p
    +

    Returns: The composed path.

    +

    Postcondition: For the returned path, rp, + rp.is_complete() is true.

    +

    Throws: + If + !(base.is_complete() && (p.is_complete() || !p.has_root_name()))

    +

    [Note: When portable behavior is + required, use complete(). When operating system dependent behavior is + required, use system_complete().

    +

    Portable behavior is useful when dealing with paths created + internally within a program, particularly if the program should exhibit the + same behavior on all operating systems.

    +

    Operating system dependent behavior is useful when dealing with + paths supplied by user input, reported to program users, or when such behavior + is expected by program users. -- + end note]

    +
    +
    template <class Path> Path system_complete(const Path& p);
    +
    +

    Effects: Composes a complete path from p, using the + same rules used by the operating system to resolve a path passed as the + filename argument to standard library open functions.

    +

    Returns: The composed path.

    +

    Postcondition: For the returned path, rp, + rp.is_complete() is true.

    +

    Throws: If p.empty().

    +

    [Note: For POSIX, system_complete(p) has the same semantics as + complete(p, current_path()).

    +

    For Windows, system_complete(p) has the + same semantics as complete(ph, current_path()) if + p.is_complete() || !p.has_root_name() or p and base have the same + root_name(). + Otherwise it acts like complete(p, kinky), where kinky + is the current directory for the p.root_name() drive. This will + be the current directory of that drive the last time it was set, and thus may + be residue left over from a prior program run by the command + processor! Although these semantics are often useful, they are also very + error-prone.

    +

    See + complete() note for usage suggestions. -- end note]

    +
    +

    Convenience functions

    +
    template <class Path> bool create_directories(const Path & p);
    +
    +

    Requires: p.empty() ||
    + forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )
    +

    +

    Returns: The value of !exists(p) prior to the + establishment of the postcondition.

    +

    Postcondition: is_directory(p)

    +

    Throws:  basic_filesystem_error<Path> if + exists(p) && !is_directory(p)

    +
    + + + + +
    +

    Deprecated convenience functions

    +

    The following functions have been replaced by basic_path + member functions extension(), stem(), and + replace_extension().

    +
    template <class Path> typename Path::string_type extension(const Path & p);
    +
    +

    Returns: if p.filename() contains a dot, returns + the substring of p.filename() starting at the rightmost dot + and ending at the string's end. Otherwise, returns an empty string.

    +

    [Note: The dot is included in the return value so that + it is possible to distinguish between no extension and an empty extension.

    +

    Implementations are permitted but not required to define additional + behavior for file systems which append additional elements to extensions, such + as alternate data stream or partitioned dataset names. -- end note]

    +
    +
    template <class Path> typename Path::string_type basename(const Path & p);
    +
    +

    Returns: if p.filename() contains a dot, returns + the substring of p.filename() starting at its beginning and + ending at the last dot (the dot is not included). Otherwise, + returns + p.filename().

    +
    +
    template <class Path>
    +  Path change_extension(const Path & p, const typename Path::string_type & new_extension);
    +
    +

    Postcondition: basename(return_value) == basename(p) && + extension(return_value) == new_extension

    +

    [Note: It follows from the semantics of extension() + that new_extension should include dot to achieve + reasonable results. -- end note]

    +
    +
    +

    Additions to header <fstream>

    +
    +

    These additions have been carefully +specified to avoid breaking existing code in common operating environments such as + POSIX, + +Windows, and + OpenVMS. +See +Suggestions for <fstream> +implementations for +techniques to avoid breaking existing code in other environments, particularly +on operating systems allowing slashes in filenames.

    +

    [Note: The +"do-the-right-thing" rule from +Requirements on implementations does apply to header <fstream>.

    +

    The overloads +below are specified as additions rather than replacements for existing +functions. This preserves existing code (perhaps +using a home-grown path class) that relies on an +automatic conversion to const char*. -- end note]

    +
    +

    In 27.8.1.1 Class template +basic_filebuf [lib.filebuf] synopsis preceding paragraph 1, add the function:

    +
    +
    template <class Path> basic_filebuf<charT,traits>* open(const Path& p, ios_base::openmode mode);
    +
    +

    In 27.8.1.3 Member functions [lib.filebuf.members], +add the above to the signature preceding paragraph 2, and replace the +sentence:

    +
    +

    It then opens a file, if possible, +whose name is the NTBS s (“as if†by calling std::fopen(s ,modstr +)).

    +
    +

    with:

    +
    +

    It then opens, if possible, the file +that +p or path(s) resolves to, “as if†by calling std::fopen() with a +second argument of modstr.

    +
    +

    In 27.8.1.5 Class template +basic_ifstream [lib.ifstream] synopsis preceding paragraph 1, add the functions:

    +
    +
    template <class Path> explicit basic_ifstream(const Path& p, ios_base::openmode mode = ios_base::in);
    +template <class Path> void open(const Path& p, ios_base::openmode mode = ios_base::in);
    +
    +

    In 27.8.1.6 basic_ifstream +constructors [lib.ifstream.cons] +add the above constructor to the signature preceding +paragraph 2, and in paragraph 2 replace

    +
    +

    rdbuf()->open(s, mode | +ios_base::in)

    +
    +

    with

    +
    +

    rdbuf()->open(path(s), mode | +ios_base::in) or rdbuf()->open(p, mode | ios_base::in) as +appropriate

    +
    +

    In 27.8.1.7 Member functions [lib.ifstream.members] +add the above open +function to the signature +preceding paragraph 3, and in paragraph 3 replace

    +
    +

    rdbuf()->open(s, mode | +ios_base::in)

    +
    +

    with

    +
    +

    rdbuf()->open(path(s), mode | +ios_base::in) or rdbuf()->open(p, mode | ios_base::in) as +appropriate

    +
    +

    In 27.8.1.8 Class template +basic_ofstream [lib.ofstream] synopsis preceding paragraph 1, add the + +functions:

    +
    +
    template <class Path> explicit basic_ofstream(const Path& p, ios_base::openmode mode = ios_base::out);
    +template <class Path> void open(const Path& p, ios_base::openmode mode = ios_base::out);
    +
    +

    In 27.8.1.9 basic_ofstream +constructors [lib.ofstream.cons] +add the above constructor to the signature preceding +paragraph 2, and in paragraph 2 replace

    +
    +

    rdbuf()->open(s, mode | +ios_base::out)

    +
    +

    with

    +
    +

    rdbuf()->open(path(s), mode | +ios_base::out) or rdbuf()->open(p, mode | ios_base::out) as +appropriate

    +
    +

    In 27.8.1.10 Member functions [lib.ofstream.members] +add the above open +function to the signature +preceding paragraph 3, and in paragraph 3 replace

    +
    +

    rdbuf()->open(s, mode | +ios_base::out)

    +
    +

    with

    +
    +

    rdbuf()->open(path(s), mode | +ios_base::out) or rdbuf()->open(p, mode | ios_base::out) as +appropriate

    +
    +

    In 27.8.1.11 Class template +basic_fstream [lib.fstream] synopsis preceding paragraph 1, add the functions:

    +
    +
    template <class Path> explicit basic_fstream(const Path& p, ios_base::openmode mode = ios_base::in|ios_base::out);
    +template <class Path> void open(const Path& p, ios_base::openmode mode = ios_base::in|ios_base::out);
    +
    +

    In 27.8.1.12 basic_fstream +constructors [lib.fstream.cons] +add the above constructor to the signature preceding +paragraph 2, and in paragraph 2 replace

    +
    +

    rdbuf()->open(s, mode)

    +
    +

    with

    +
    +

    rdbuf()->open(path(s), mode) +or rdbuf()->open(p, mode) as appropriate

    +
    +

    In 27.8.1.13 Member functions [lib.fstream.members] +add the above open +function to the signature +preceding paragraph 3, and in paragraph 3 replace

    +
    +

    rdbuf()->open(s, mode)

    +
    +

    with

    +
    +

    rdbuf()->open(path(s), mode) +or rdbuf()->open(p, mode) as appropriate

    +
    +

    End of proposed text.

    +

    Path decomposition table

    +

    The table is generated by a program compiled with the Boost implementation.

    +

    Shaded entries indicate cases where POSIX and Windows +implementations yield different results. The top value is the +POSIX result and the bottom value is the Windows result.
    +  +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Constructor
    argument
    Elements found
    by iteration
    string()file_
    string()
    root_
    path()
    .string()
    root_
    name()
    root_
    directory()
    relative_
    path()
    .string()
    parent_
    path()
    .string()
    filename()
    """"""""""""""""""""
    ".""."".""."""""""".""""."
    ".."".."".."".."""""""".."""".."
    "foo""foo""foo""foo""""""""foo""""foo"
    "/""/""/""/"
    "\"
    "/""""/""""""/"
    "/foo""/","foo""/foo""/foo"
    "\foo"
    "/""""/""foo""/""foo"
    "foo/""foo",".""foo/""foo/"
    "foo\"
    """""""foo/""foo""."
    "/foo/""/","foo",".""/foo/""/foo/"
    "\foo\"
    "/""""/""foo/""/foo""."
    "foo/bar""foo","bar""foo/bar""foo/bar"
    "foo\bar"
    """""""foo/bar""foo""bar"
    "/foo/bar""/","foo","bar""/foo/bar""/foo/bar"
    "\foo\bar"
    "/""""/""foo/bar""/foo""bar"
    "///foo///""/","foo",".""///foo///""///foo///"
    "\foo\\\"
    "/""""/""foo///""///foo""."
    "///foo///bar""/","foo","bar""///foo///bar""///foo///bar"
    "\foo\\\bar"
    "/""""/""foo///bar""///foo""bar"
    "/.""/",".""/.""/."
    "\."
    "/""""/"".""/""."
    "./"".",".""./""./"
    ".\"
    """""""./"".""."
    "/..""/","..""/..""/.."
    "\.."
    "/""""/""..""/"".."
    "../""..",".""../""../"
    "..\"
    """""""../""..""."
    "foo/.""foo",".""foo/.""foo/."
    "foo\."
    """""""foo/.""foo""."
    "foo/..""foo","..""foo/..""foo/.."
    "foo\.."
    """""""foo/..""foo"".."
    "foo/./""foo",".",".""foo/./""foo/./"
    "foo\.\"
    """""""foo/./""foo/.""."
    "foo/./bar""foo",".","bar""foo/./bar""foo/./bar"
    "foo\.\bar"
    """""""foo/./bar""foo/.""bar"
    "foo/..""foo","..""foo/..""foo/.."
    "foo\.."
    """""""foo/..""foo"".."
    "foo/../""foo","..",".""foo/../""foo/../"
    "foo\..\"
    """""""foo/../""foo/..""."
    "foo/../bar""foo","..","bar""foo/../bar""foo/../bar"
    "foo\..\bar"
    """""""foo/../bar""foo/..""bar"
    "c:""c:""c:""c:"""
    "c:"
    +""
    "c:"
    """c:"
    ""
    """c:"
    "c:/""c:","."
    "c:","/"
    "c:/" +"c:/"
    "c:\"
    ""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:/"
    ""
    "c:""."
    "/"
    "c:foo""c:foo"
    "c:","foo"
    "c:foo""c:foo"""
    "c:"
    +""
    "c:"
    """c:foo"
    "foo"
    ""
    "c:"
    "c:foo"
    "foo"
    "c:/foo""c:","foo"
    "c:","/","foo"
    "c:/foo""c:/foo"
    "c:\foo"
    ""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:/foo"
    "foo"
    "c:"
    "c:/"
    "foo"
    "c:foo/""c:foo","."
    "c:","foo","."
    "c:foo/""c:foo/"
    "c:foo\"
    ""
    "c:"
    +""
    "c:"
    """c:foo/"
    "foo/"
    "c:foo""."
    "c:/foo/""c:","foo","."
    "c:","/","foo","."
    "c:/foo/""c:/foo/"
    "c:\foo\"
    ""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:/foo/"
    "foo/"
    "c:/foo""."
    "c:/foo/bar""c:","foo","bar"
    "c:","/","foo","bar"
    "c:/foo/bar""c:/foo/bar"
    "c:\foo\bar"
    ""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:/foo/bar"
    "foo/bar"
    "c:/foo""bar"
    "prn:""prn:""prn:""prn:"""
    "prn:"
    +""
    "prn:"
    """prn:"
    ""
    """prn:"
    "c:\""c:\"
    "c:","/"
    "c:\"
    "c:/"
    "c:\"""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:\"
    ""
    ""
    "c:"
    "c:\"
    "/"
    "c:foo""c:foo"
    "c:","foo"
    "c:foo""c:foo"""
    "c:"
    +""
    "c:"
    """c:foo"
    "foo"
    ""
    "c:"
    "c:foo"
    "foo"
    "c:\foo""c:\foo"
    "c:","/","foo"
    "c:\foo"
    "c:/foo"
    "c:\foo"""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:\foo"
    "foo"
    ""
    "c:/"
    "c:\foo"
    "foo"
    "c:foo\""c:foo\"
    "c:","foo","."
    "c:foo\"
    "c:foo/"
    "c:foo\"""
    "c:"
    +""
    "c:"
    """c:foo\"
    "foo/"
    ""
    "c:foo"
    "c:foo\"
    "."
    "c:\foo\""c:\foo\"
    "c:","/","foo","."
    "c:\foo\"
    "c:/foo/"
    "c:\foo\"""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:\foo\"
    "foo/"
    ""
    "c:/foo"
    "c:\foo\"
    "."
    "c:\foo/""c:\foo","."
    "c:","/","foo","."
    "c:\foo/"
    "c:/foo/"
    "c:\foo/"
    "c:\foo\"
    ""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:\foo/"
    "foo/"
    "c:\foo"
    "c:/foo"
    "."
    "c:/foo\bar""c:","foo\bar"
    "c:","/","foo","bar"
    "c:/foo\bar"
    "c:/foo/bar"
    "c:/foo\bar"
    "c:\foo\bar"
    ""
    "c:/"
    +""
    "c:"
    ""
    "/"
    "c:/foo\bar"
    "foo/bar"
    "c:"
    "c:/foo"
    "foo\bar"
    "bar"
    +

    Suggestions for <fstream> +implementations

    +

    The change in semantics to functions +taking const char* arguments can break existing code, but only on +operating systems where implementations don't +implicitly accept native format pathnames or +operating systems that allow slashes in filenames. Thus on POSIX, +Windows, and OpenVMS, for example, there is no problem if the +implementation follows encouraged behavior.

    +

    For most of the Filesystem Library, +there is no existing code, so the issue preserving existing code that uses +slashes in filenames doesn't arise. New code simply must use basic_path +constructors with path_format_t arguments of native. +To preserve existing fstream code that uses slashes in filenames, an +implementation may wish to provide a mechanism such as a macro to control +selection of the old behavior.

    +

    Implementations are already required +by the TR front-matter to provide a mechanism such as a macro to control +selection of the old behavior (useful to guarantee protection of existing code) +or new behavior (useful in new code, and code being ported from other systems) +for headers. Because use of the rest of the Filesystem Library is independent of +use of the <fstream> additions, affected implementations are +encouraged to allow disabling the <fstream> additions separately +from other TR features.

    +

    An rejected alternative was to supply +new fstream classes in namespace filesystem, inheriting from the current +classes, overriding the constructors and opens taking pathname arguments, and +providing the additional overloads. In Lillehammer LWG members indicated lack of +support for this alternative, feeling that costs outweigh benefits.

    +

    Acknowledgements

    +

    This Filesystem Library is dedicated to my wife, Sonda, who provided the +support necessary to see both a trial implementation and the proposal itself +through to completion. She gave me the strength to continue after a difficult +year of cancer treatment in the middle of it all.

    +

    Many people contributed technical comments, ideas, and suggestions to the +Boost Filesystem Library. See + +http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements.

    +

    Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas +Witt were particularly helpful in refining the library.

    +

    The create_directories, extension, basename, and replace_extension functions +were developed by Vladimir Prus.

    +

    Howard Hinnant and John Maddock reviewed a draft of the proposal, and +identified a number of mistakes or weaknesses, resulting in a more polished +final document.

    +

    References

    + + + + + + + + + +
    [ISO-POSIX]ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group + Base Specifications, Issue 6. Also known as The Single Unix® + Specification, Version 3. Available from each of the organizations involved + in its creation. For example, read online or download from + + www.unix.org/single_unix_specification/. The ISO JTC1/SC22/WG15 - + POSIX homepage is + www.open-std.org/jtc1/sc22/WG15/
    [Abrahams]Dave Abrahams, Error and Exception Handling, + + www.boost.org/more/error_handling.html
    +
    +

    © Copyright Beman Dawes, 2002, 2006, 2007

    +

    Distributed under the Boost Software License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    +

    Revised +10 November 2009

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v2/example/Jamfile.v2 b/external/libs/filesystem/v2/example/Jamfile.v2 new file mode 100644 index 0000000..edb41a4 --- /dev/null +++ b/external/libs/filesystem/v2/example/Jamfile.v2 @@ -0,0 +1,16 @@ +# Boost Filesystem Library Example Jamfile + +# (C) Copyright Vladimir Prus 2003 + +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt) + +# See library home page at http://www.boost.org/libs/filesystem + +project + : requirements ../build//boost_filesystem + true + ; + +exe file_size : file_size.cpp ; +exe simple_ls : simple_ls.cpp ; diff --git a/external/libs/filesystem/v2/example/file_size.cpp b/external/libs/filesystem/v2/example/file_size.cpp new file mode 100644 index 0000000..0d6b7a3 --- /dev/null +++ b/external/libs/filesystem/v2/example/file_size.cpp @@ -0,0 +1,44 @@ +// file_size program -------------------------------------------------------// + +// Copyright Beman Dawes, 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/libs/filesystem for documentation. + +#include +#include + +namespace fs = boost::filesystem; + +int main( int argc, char* argv[] ) +{ + + if ( argc != 2 ) + { + std::cout << "Usage: file_size path\n"; + return 1; + } + + std::cout << "sizeof(intmax_t) is " << sizeof(boost::intmax_t) << '\n'; + + fs::path p( argv[1], fs::native ); + + if ( !fs::exists( p ) ) + { + std::cout << "not found: " << argv[1] << std::endl; + return 1; + } + + if ( !fs::is_regular( p ) ) + { + std::cout << "not a regular file: " << argv[1] << std::endl; + return 1; + } + + std::cout << "size of " << argv[1] << " is " << fs::file_size( p ) + << std::endl; + return 0; +} diff --git a/external/libs/filesystem/v2/example/mbcopy.cpp b/external/libs/filesystem/v2/example/mbcopy.cpp new file mode 100644 index 0000000..6f004d4 --- /dev/null +++ b/external/libs/filesystem/v2/example/mbcopy.cpp @@ -0,0 +1,92 @@ +// Boost.Filesystem mbcopy.cpp ---------------------------------------------// + +// 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) + +// Copy the files in a directory, using mbpath to represent the new file names +// See http://../doc/path.htm#mbpath for more information + +#define BOOST_FILESYSTEM_VERSION 2 + +// See deprecated_test for tests of deprecated features +#define BOOST_FILESYSTEM_NO_DEPRECATED + +#include +# ifdef BOOST_FILESYSTEM2_NARROW_ONLY +# error This compiler or standard library does not support wide-character strings or paths +# endif + +#include "mbpath.hpp" +#include +#include +#include +#include + +namespace fs = boost::filesystem; + +namespace +{ + // we can't use boost::filesystem::copy_file() because the argument types + // differ, so provide a not-very-smart replacement. + + void copy_file( const fs::wpath & from, const user::mbpath & to ) + { + fs::ifstream from_file( from, std::ios_base::in | std::ios_base::binary ); + if ( !from_file ) { std::cout << "input open failed\n"; return; } + + fs::ofstream to_file( to, std::ios_base::out | std::ios_base::binary ); + if ( !to_file ) { std::cout << "output open failed\n"; return; } + + char c; + while ( from_file.get(c) ) + { + to_file.put(c); + if ( to_file.fail() ) { std::cout << "write error\n"; return; } + } + + if ( !from_file.eof() ) { std::cout << "read error\n"; } + } +} + +int main( int argc, char * argv[] ) +{ + if ( argc != 2 ) + { + std::cout << "Copy files in the current directory to a target directory\n" + << "Usage: mbcopy \n"; + return 1; + } + + // For encoding, use Boost UTF-8 codecvt + std::locale global_loc = std::locale(); + std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet ); + user::mbpath_traits::imbue( loc ); + + std::string target_string( argv[1] ); + user::mbpath target_dir( user::mbpath_traits::to_internal( target_string ) ); + + if ( !fs::is_directory( target_dir ) ) + { + std::cout << "Error: " << argv[1] << " is not a directory\n"; + return 1; + } + + for ( fs::wdirectory_iterator it( L"." ); + it != fs::wdirectory_iterator(); ++it ) + { + if ( fs::is_regular_file(it->status()) ) + { + copy_file( *it, target_dir / it->path().filename() ); + } + } + + return 0; +} + + + + + diff --git a/external/libs/filesystem/v2/example/mbpath.cpp b/external/libs/filesystem/v2/example/mbpath.cpp new file mode 100644 index 0000000..25cefbb --- /dev/null +++ b/external/libs/filesystem/v2/example/mbpath.cpp @@ -0,0 +1,82 @@ +// Boost.Filesystem mbpath.cpp ---------------------------------------------// + +// (c) 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 Boost.Filesystem home page at http://www.boost.org/libs/filesystem + +#define BOOST_FILESYSTEM_VERSION 2 + +#include +# ifdef BOOST_FILESYSTEM2_NARROW_ONLY +# error This compiler or standard library does not support wide-character strings or paths +# endif + +#include "mbpath.hpp" +#include +#include + +namespace fs = boost::filesystem; + +namespace +{ + // ISO C calls this "the locale-specific native environment": + std::locale loc(""); + + const std::codecvt * + cvt( &std::use_facet > + ( loc ) ); +} + +namespace user +{ + mbpath_traits::external_string_type + mbpath_traits::to_external( const mbpath & ph, + const internal_string_type & src ) + { + std::size_t work_size( cvt->max_length() * (src.size()+1) ); + boost::scoped_array work( new char[ work_size ] ); + std::mbstate_t state; + const internal_string_type::value_type * from_next; + external_string_type::value_type * to_next; + if ( cvt->out( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + boost::throw_exception >( + fs::basic_filesystem_error( + "user::mbpath::to_external conversion error", + ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) ); + *to_next = '\0'; + return external_string_type( work.get() ); + } + + mbpath_traits::internal_string_type + mbpath_traits::to_internal( const external_string_type & src ) + { + std::size_t work_size( src.size()+1 ); + boost::scoped_array work( new wchar_t[ work_size ] ); + std::mbstate_t state; + const external_string_type::value_type * from_next; + internal_string_type::value_type * to_next; + if ( cvt->in( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + boost::throw_exception >( + fs::basic_filesystem_error( + "user::mbpath::to_internal conversion error", + boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) ); + *to_next = L'\0'; + return internal_string_type( work.get() ); + } + + void mbpath_traits::imbue( const std::locale & new_loc ) + { + loc = new_loc; + cvt = &std::use_facet + >( loc ); + } + +} // namespace user diff --git a/external/libs/filesystem/v2/example/mbpath.hpp b/external/libs/filesystem/v2/example/mbpath.hpp new file mode 100644 index 0000000..281e8d0 --- /dev/null +++ b/external/libs/filesystem/v2/example/mbpath.hpp @@ -0,0 +1,44 @@ +// Boost.Filesystem mbpath.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) + +// Encodes wide character paths as MBCS +// See http://../doc/path.htm#mbpath for more information + +#include +#include // for std::mbstate_t +#include +#include + +namespace user +{ + struct mbpath_traits; + + typedef boost::filesystem::basic_path mbpath; + + struct mbpath_traits + { + typedef std::wstring internal_string_type; + typedef std::string external_string_type; + + static external_string_type to_external( const mbpath & ph, + const internal_string_type & src ); + + static internal_string_type to_internal( const external_string_type & src ); + + static void imbue( const std::locale & loc ); + }; +} // namespace user + +namespace boost +{ + namespace filesystem2 + { + template<> struct is_basic_path + { static const bool value = true; }; + } +} diff --git a/external/libs/filesystem/v2/example/path_table.cpp b/external/libs/filesystem/v2/example/path_table.cpp new file mode 100644 index 0000000..b175873 --- /dev/null +++ b/external/libs/filesystem/v2/example/path_table.cpp @@ -0,0 +1,264 @@ +// Generate an HTML table showing path decomposition -----------------------// + +// Copyright Beman Dawes 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/filesystem for documentation. + +// For purposes of generating the table, support both POSIX and Windows paths +#define BOOST_FILESYSTEM_NAMESPACE posix +#define BOOST_POSIX_PATH +#include "boost/filesystem/path.hpp" + +#undef BOOST_FILESYSTEM_PATH_HPP +#undef BOOST_FILESYSTEM_NAMESPACE +#define BOOST_FILESYSTEM_NAMESPACE windows +#define BOOST_WINDOWS_PATH +#include "boost/filesystem/path.hpp" + +namespace pos = boost::posix; +namespace win = boost::windows; + +#include +#include + +using std::string; +using std::cout; + +namespace +{ + std::ifstream infile; + std::ofstream outfile; + + const string empty_string; + + struct column_abc + { + virtual string heading() const = 0; + virtual string cell_value( const pos::path & p ) const = 0; + virtual string cell_value( const win::path & p ) const = 0; + }; + + struct c0 : public column_abc + { + string heading() const { return string("string()"); } + string cell_value( const pos::path & p ) const + { + return p.string(); + } + string cell_value( const win::path & p ) const + { + return p.string(); + } + } o0; + + struct c1 : public column_abc + { + string heading() const { return string("file_
    string()"); } + string cell_value( const pos::path & p ) const { return p.file_string(); } + string cell_value( const win::path & p ) const { return p.file_string(); } + } o1; + + struct c2 : public column_abc + { + string heading() const { return string("Elements found
    by iteration"); } + string cell_value( const pos::path & p ) const + { + string s; + for( pos::path::iterator i(p.begin()); i != p.end(); ++i ) + { + if ( i != p.begin() ) s += ','; + s += '\"'; + s += *i; + s += '\"'; + } + if ( s.empty() ) s += "\"\""; + return s; + } + string cell_value( const win::path & p ) const + { + string s; + for( win::path::iterator i(p.begin()); i != p.end(); ++i ) + { + if ( i != p.begin() ) s += ','; + s += '\"'; + s += *i; + s += '\"'; + } + if ( s.empty() ) s += "\"\""; + return s; + } + } o2; + + struct c3 : public column_abc + { + string heading() const { return string("root_
    path()
    .string()
    "); } + string cell_value( const pos::path & p ) const { return p.root_path().string(); } + string cell_value( const win::path & p ) const { return p.root_path().string(); } + } o3; + + struct c4 : public column_abc + { + string heading() const { return string("root_
    name()
    "); } + string cell_value( const pos::path & p ) const { return p.root_name(); } + string cell_value( const win::path & p ) const { return p.root_name(); } + } o4; + + struct c5 : public column_abc + { + string heading() const { return string("root_
    directory()
    "); } + string cell_value( const pos::path & p ) const { return p.root_directory(); } + string cell_value( const win::path & p ) const { return p.root_directory(); } + } o5; + + struct c6 : public column_abc + { + string heading() const { return string("relative_
    path()
    .string()
    "); } + string cell_value( const pos::path & p ) const { return p.relative_path().string(); } + string cell_value( const win::path & p ) const { return p.relative_path().string(); } + } o6; + + struct c7 : public column_abc + { + string heading() const { return string("branch_
    path()
    .string()
    "); } + string cell_value( const pos::path & p ) const { return p.branch_path().string(); } + string cell_value( const win::path & p ) const { return p.branch_path().string(); } + } o7; + + struct c8 : public column_abc + { + string heading() const { return string("leaf()"); } + string cell_value( const pos::path & p ) const { return p.leaf(); } + string cell_value( const win::path & p ) const { return p.leaf(); } + } o8; + + const column_abc * column[] = { &o2, &o0, &o1, &o3, &o4, &o5, &o6, &o7, &o8 }; + + // do_cell ---------------------------------------------------------------// + + void do_cell( const string & test_case, int i ) + { + + string posix_result( column[i]->cell_value( pos::path(test_case) ) ); + string windows_result( column[i]->cell_value( win::path(test_case) ) ); + + outfile << + (posix_result != windows_result + ? "" + : ""); + + if ( posix_result.empty() || posix_result[0] != '\"' ) + outfile << '\"' << posix_result << '\"'; + else + outfile << posix_result; + + if ( posix_result != windows_result ) + { + outfile << "
    "; + if ( windows_result.empty() || windows_result[0] != '\"' ) + outfile << '\"' << windows_result << '\"'; + else + outfile << windows_result; + } + + outfile << "
    \n"; + } + +// do_row ------------------------------------------------------------------// + + void do_row( const string & test_case ) + { + outfile << "\n\"" << test_case << "\"\n"; + + for ( int i = 0; i < sizeof(column)/sizeof(column_abc&); ++i ) + { + do_cell( test_case, i ); + } + + outfile << "\n"; + } + +// do_table ----------------------------------------------------------------// + + void do_table() + { + outfile << + "

    Path Decomposition Table for POSIX and Windows

    \n" + "

    Shaded entries indicate cases where POSIX and Windows\n" + "implementations yield different results. The top value is the\n" + "POSIX result and the bottom value is the Windows result.\n" + "\n" + "

    \n" + ; + + // generate the column headings + + outfile << "

    \n"; + + for ( int i = 0; i < sizeof(column)/sizeof(column_abc&); ++i ) + { + outfile << "\n"; + } + + outfile << "\n"; + + // generate a row for each input line + + string test_case; + while ( std::getline( infile, test_case ) ) + { + do_row( test_case ); + } + + outfile << "
    Constructor
    argument
    " << column[i]->heading() << "
    \n"; + } + +} // unnamed namespace + +// main --------------------------------------------------------------------// + +#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE +#include + +int cpp_main( int argc, char * argv[] ) // note name! +{ + if ( argc != 3 ) + { + std::cerr << + "Usage: path_table input-file output-file\n" + " input-file contains the paths to appear in the table.\n" + " output-file will contain the generated HTML.\n" + ; + return 1; + } + + infile.open( argv[1] ); + if ( !infile ) + { + std::cerr << "Could not open input file: " << argv[1] << std::endl; + return 1; + } + + outfile.open( argv[2] ); + if ( !outfile ) + { + std::cerr << "Could not open output file: " << argv[2] << std::endl; + return 1; + } + + outfile << "\n" + "\n" + "Path Decomposition Table\n" + "\n" + "\n" + ; + + do_table(); + + outfile << "\n" + "\n" + ; + + return 0; +} diff --git a/external/libs/filesystem/v2/example/simple_ls.cpp b/external/libs/filesystem/v2/example/simple_ls.cpp new file mode 100644 index 0000000..7861e1e --- /dev/null +++ b/external/libs/filesystem/v2/example/simple_ls.cpp @@ -0,0 +1,89 @@ +// simple_ls program -------------------------------------------------------// + +// Copyright Jeff Garland and 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 http://www.boost.org/libs/filesystem for documentation. + +#define BOOST_FILESYSTEM_VERSION 2 + +// As an example program, we don't want to use any deprecated features +#define BOOST_FILESYSTEM_NO_DEPRECATED + +#include "boost/filesystem/operations.hpp" +#include "boost/filesystem/path.hpp" +#include "boost/progress.hpp" +#include + +namespace fs = boost::filesystem; + +int main( int argc, char* argv[] ) +{ + boost::progress_timer t( std::clog ); + + fs::path full_path( fs::initial_path() ); + + if ( argc > 1 ) + full_path = fs::system_complete( fs::path( argv[1] ) ); + else + std::cout << "\nusage: simple_ls [path]" << std::endl; + + unsigned long file_count = 0; + unsigned long dir_count = 0; + unsigned long other_count = 0; + unsigned long err_count = 0; + + if ( !fs::exists( full_path ) ) + { + std::cout << "\nNot found: " << full_path.file_string() << std::endl; + return 1; + } + + if ( fs::is_directory( full_path ) ) + { + std::cout << "\nIn directory: " + << full_path.directory_string() << "\n\n"; + fs::directory_iterator end_iter; + for ( fs::directory_iterator dir_itr( full_path ); + dir_itr != end_iter; + ++dir_itr ) + { + try + { + if ( fs::is_directory( dir_itr->status() ) ) + { + ++dir_count; + std::cout << dir_itr->path().filename() << " [directory]\n"; + } + else if ( fs::is_regular_file( dir_itr->status() ) ) + { + ++file_count; + std::cout << dir_itr->path().filename() << "\n"; + } + else + { + ++other_count; + std::cout << dir_itr->path().filename() << " [other]\n"; + } + + } + catch ( const std::exception & ex ) + { + ++err_count; + std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl; + } + } + std::cout << "\n" << file_count << " files\n" + << dir_count << " directories\n" + << other_count << " others\n" + << err_count << " errors\n"; + } + else // must be a file + { + std::cout << "\nFound: " << full_path.file_string() << "\n"; + } + return 0; +} diff --git a/external/libs/filesystem/v2/src/v2_operations.cpp b/external/libs/filesystem/v2/src/v2_operations.cpp new file mode 100644 index 0000000..a93b54a --- /dev/null +++ b/external/libs/filesystem/v2/src/v2_operations.cpp @@ -0,0 +1,1381 @@ +// operations.cpp ----------------------------------------------------------// + +// Copyright 2002-2005 Beman Dawes +// 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 + +//----------------------------------------------------------------------------// + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r() needs this + +#if !(defined(__HP_aCC) && defined(_ILP32) && \ + !defined(_STATVFS_ACPP_PROBLEMS_FIXED)) +#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect, +#endif +#if !defined(__PGI) +#define __USE_FILE_OFFSET64 // but that is harmless on Windows and on POSIX + // 64-bit systems or on 32-bit systems which don't have files larger + // than can be represented by a traditional POSIX/UNIX off_t type. + // OTOH, defining them should kick in 64-bit off_t's (and thus + // st_size) on 32-bit systems that provide the Large File + // Support (LFS) interface, such as Linux, Solaris, and IRIX. + // The defines are given before any headers are included to + // ensure that they are available to all included headers. + // That is required at least on Solaris, and possibly on other + // systems as well. + +// for some compilers (CodeWarrior, for example), windows.h +// is getting included by some other boost header, so do this early: +#if !defined(_WIN32_WINNT) +#define _WIN32_WINNT 0x0500 // Default to Windows 2K or later +#endif +#endif + + +#include +#include +#include +#include +#include // for malloc, free + +namespace fs = boost::filesystem2; +using boost::system::error_code; +using boost::system::system_category; + +# if defined(BOOST_WINDOWS_API) +# include +# include // for time_t + +# else // BOOST_POSIX_API +# include +# if !defined(__APPLE__) && !defined(__OpenBSD__) +# include +# define BOOST_STATVFS statvfs +# define BOOST_STATVFS_F_FRSIZE vfs.f_frsize +# else +#ifdef __OpenBSD__ +# include +#endif +# include +# define BOOST_STATVFS statfs +# define BOOST_STATVFS_F_FRSIZE static_cast( vfs.f_bsize ) +# endif +# include +# include +# include +# include +# include "limits.h" +# endif + +// BOOST_FILESYSTEM_STATUS_CACHE enables file_status cache in +// dir_itr_increment. The config tests are placed here because some of the +// macros being tested come from dirent.h. +// +// TODO: find out what macros indicate dirent::d_type present in more libraries +# if defined(BOOST_WINDOWS_API) \ + || (defined(_DIRENT_HAVE_D_TYPE) /* defined by GNU C library if d_type present */ \ + && !(defined(__SUNPRO_CC) && !defined(__sun))) // _DIRENT_HAVE_D_TYPE wrong for Sun compiler on Linux +# define BOOST_FILESYSTEM_STATUS_CACHE +# endif + +#include // even on Windows some functions use stat() +#include +#include +#include // for remove, rename +#include +// #include // for debugging only; comment out when not in use + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std { using ::strcmp; using ::remove; using ::rename; } +#endif + +// helpers -----------------------------------------------------------------// + +namespace +{ + const error_code ok; + + bool is_empty_directory( const std::string & dir_path ) + { + static const fs::directory_iterator end_itr; + return fs::directory_iterator(fs::path(dir_path)) == end_itr; + } + +#ifdef BOOST_WINDOWS_API + +// For Windows, the xxxA form of various function names is used to avoid +// inadvertently getting wide forms of the functions. (The undecorated +// forms are actually macros, so can misfire if the user has various +// other macros defined. There was a bug report of this happening.) + + inline DWORD get_file_attributes( const char * ph ) + { return ::GetFileAttributesA( ph ); } + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + inline DWORD get_file_attributes( const wchar_t * ph ) + { return ::GetFileAttributesW( ph ); } + + bool is_empty_directory( const std::wstring & dir_path ) + { + static const fs::wdirectory_iterator wend_itr; + return fs::wdirectory_iterator(fs::wpath(dir_path)) == wend_itr; + } + + inline BOOL get_file_attributes_ex( const wchar_t * ph, + WIN32_FILE_ATTRIBUTE_DATA & fad ) + { return ::GetFileAttributesExW( ph, ::GetFileExInfoStandard, &fad ); } + + HANDLE create_file( const wchar_t * ph, DWORD dwDesiredAccess, + DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile ) + { + return ::CreateFileW( ph, dwDesiredAccess, dwShareMode, + lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, + hTemplateFile ); + } + + inline DWORD get_current_directory( DWORD sz, wchar_t * buf ) + { return ::GetCurrentDirectoryW( sz, buf ); } + + inline bool set_current_directory( const wchar_t * buf ) + { return ::SetCurrentDirectoryW( buf ) != 0 ; } + + inline bool get_free_disk_space( const std::wstring & ph, + PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free ) + { return ::GetDiskFreeSpaceExW( ph.c_str(), avail, total, free ) != 0; } + + inline std::size_t get_full_path_name( + const std::wstring & ph, std::size_t len, wchar_t * buf, wchar_t ** p ) + { + return static_cast( + ::GetFullPathNameW( ph.c_str(), + static_cast(len), buf, p )); + } + + inline bool remove_directory( const std::wstring & ph ) + { return ::RemoveDirectoryW( ph.c_str() ) != 0; } + + inline bool delete_file( const std::wstring & ph ) + { return ::DeleteFileW( ph.c_str() ) != 0; } + + inline bool create_directory( const std::wstring & dir ) + { return ::CreateDirectoryW( dir.c_str(), 0 ) != 0; } + +#if _WIN32_WINNT >= 0x500 + inline bool create_hard_link( const std::wstring & to_ph, + const std::wstring & from_ph ) + { return ::CreateHardLinkW( from_ph.c_str(), to_ph.c_str(), 0 ) != 0; } +#endif + +# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + template< class String > + fs::file_status status_template( const String & ph, error_code & ec ) + { + DWORD attr( get_file_attributes( ph.c_str() ) ); + if ( attr == 0xFFFFFFFF ) + { + ec = error_code( ::GetLastError(), system_category() ); + if ((ec.value() == ERROR_FILE_NOT_FOUND) + || (ec.value() == ERROR_PATH_NOT_FOUND) + || (ec.value() == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo" + || (ec.value() == ERROR_INVALID_DRIVE) // USB card reader with no card inserted + || (ec.value() == ERROR_NOT_READY) // CD/DVD drive with no disc inserted + || (ec.value() == ERROR_INVALID_PARAMETER) // ":sys:stat.h" + || (ec.value() == ERROR_BAD_PATHNAME) // "//nosuch" on Win64 + || (ec.value() == ERROR_BAD_NETPATH)) // "//nosuch" on Win32 + { + ec = ok; // these are not considered errors; + // the status is considered not found + return fs::file_status( fs::file_not_found ); + } + else if ((ec.value() == ERROR_SHARING_VIOLATION)) + { + ec = ok; // these are not considered errors; + // the file exists but the type is not known + return fs::file_status( fs::type_unknown ); + } + return fs::file_status( fs::status_unknown ); + } + ec = ok;; + return (attr & FILE_ATTRIBUTE_DIRECTORY) + ? fs::file_status( fs::directory_file ) + : fs::file_status( fs::regular_file ); + } + + BOOL get_file_attributes_ex( const char * ph, + WIN32_FILE_ATTRIBUTE_DATA & fad ) + { return ::GetFileAttributesExA( ph, ::GetFileExInfoStandard, &fad ); } + + template< class String > + boost::filesystem2::detail::query_pair + is_empty_template( const String & ph ) + { + WIN32_FILE_ATTRIBUTE_DATA fad; + if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 ) + return std::make_pair( error_code( ::GetLastError(), system_category() ), false ); + return std::make_pair( ok, + ( fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + ? is_empty_directory( ph ) + :( !fad.nFileSizeHigh && !fad.nFileSizeLow ) ); + } + + HANDLE create_file( const char * ph, DWORD dwDesiredAccess, + DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile ) + { + return ::CreateFileA( ph, dwDesiredAccess, dwShareMode, + lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, + hTemplateFile ); + } + + // Thanks to Jeremy Maitin-Shepard for much help and for permission to + // base the equivalent() implementation on portions of his + // file-equivalence-win32.cpp experimental code. + struct handle_wrapper + { + HANDLE handle; + handle_wrapper( HANDLE h ) + : handle(h) {} + ~handle_wrapper() + { + if ( handle != INVALID_HANDLE_VALUE ) + ::CloseHandle(handle); + } + }; + + template< class String > + boost::filesystem2::detail::query_pair + equivalent_template( const String & ph1, const String & ph2 ) + { + // Note well: Physical location on external media is part of the + // equivalence criteria. If there are no open handles, physical location + // can change due to defragmentation or other relocations. Thus handles + // must be held open until location information for both paths has + // been retrieved. + handle_wrapper p1( + create_file( + ph1.c_str(), + 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + 0 ) ); + int error1(0); // save error code in case we have to throw + if ( p1.handle == INVALID_HANDLE_VALUE ) + error1 = ::GetLastError(); + handle_wrapper p2( + create_file( + ph2.c_str(), + 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + 0 ) ); + if ( p1.handle == INVALID_HANDLE_VALUE + || p2.handle == INVALID_HANDLE_VALUE ) + { + if ( p1.handle != INVALID_HANDLE_VALUE + || p2.handle != INVALID_HANDLE_VALUE ) + { return std::make_pair( ok, false ); } + BOOST_ASSERT( p1.handle == INVALID_HANDLE_VALUE + && p2.handle == INVALID_HANDLE_VALUE ); + { return std::make_pair( error_code( error1, system_category()), false ); } + } + // at this point, both handles are known to be valid + BY_HANDLE_FILE_INFORMATION info1, info2; + if ( !::GetFileInformationByHandle( p1.handle, &info1 ) ) + { return std::make_pair( error_code( ::GetLastError(), system_category() ), false ); } + if ( !::GetFileInformationByHandle( p2.handle, &info2 ) ) + { return std::make_pair( error_code( ::GetLastError(), system_category() ), false ); } + // In theory, volume serial numbers are sufficient to distinguish between + // devices, but in practice VSN's are sometimes duplicated, so last write + // time and file size are also checked. + return std::make_pair( ok, + info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber + && info1.nFileIndexHigh == info2.nFileIndexHigh + && info1.nFileIndexLow == info2.nFileIndexLow + && info1.nFileSizeHigh == info2.nFileSizeHigh + && info1.nFileSizeLow == info2.nFileSizeLow + && info1.ftLastWriteTime.dwLowDateTime + == info2.ftLastWriteTime.dwLowDateTime + && info1.ftLastWriteTime.dwHighDateTime + == info2.ftLastWriteTime.dwHighDateTime ); + } + + template< class String > + boost::filesystem2::detail::uintmax_pair + file_size_template( const String & ph ) + { + WIN32_FILE_ATTRIBUTE_DATA fad; + // by now, intmax_t is 64-bits on all Windows compilers + if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 ) + return std::make_pair( error_code( ::GetLastError(), system_category() ), 0 ); + if ( (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0 ) + return std::make_pair( error_code( ERROR_FILE_NOT_FOUND, system_category()), 0 ); + return std::make_pair( ok, + (static_cast(fad.nFileSizeHigh) + << (sizeof(fad.nFileSizeLow)*8)) + + fad.nFileSizeLow ); + } + + inline bool get_free_disk_space( const std::string & ph, + PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free ) + { return ::GetDiskFreeSpaceExA( ph.c_str(), avail, total, free ) != 0; } + + template< class String > + boost::filesystem2::detail::space_pair + space_template( String & ph ) + { + ULARGE_INTEGER avail, total, free; + boost::filesystem2::detail::space_pair result; + if ( get_free_disk_space( ph, &avail, &total, &free ) ) + { + result.first = ok; + result.second.capacity + = (static_cast(total.HighPart) << 32) + + total.LowPart; + result.second.free + = (static_cast(free.HighPart) << 32) + + free.LowPart; + result.second.available + = (static_cast(avail.HighPart) << 32) + + avail.LowPart; + } + else + { + result.first = error_code( ::GetLastError(), system_category() ); + result.second.capacity = result.second.free + = result.second.available = 0; + } + return result; + } + + inline DWORD get_current_directory( DWORD sz, char * buf ) + { return ::GetCurrentDirectoryA( sz, buf ); } + + template< class String > + error_code + get_current_path_template( String & ph ) + { + DWORD sz; + if ( (sz = get_current_directory( 0, + static_cast(0) )) == 0 ) + { sz = 1; } + typedef typename String::value_type value_type; + boost::scoped_array buf( new value_type[sz] ); + if ( get_current_directory( sz, buf.get() ) == 0 ) + return error_code( ::GetLastError(), system_category() ); + ph = buf.get(); + return ok; + } + + inline bool set_current_directory( const char * buf ) + { return ::SetCurrentDirectoryA( buf ) != 0; } + + template< class String > + error_code + set_current_path_template( const String & ph ) + { + return error_code( set_current_directory( ph.c_str() ) + ? 0 : ::GetLastError(), system_category() ); + } + + inline std::size_t get_full_path_name( + const std::string & ph, std::size_t len, char * buf, char ** p ) + { + return static_cast( + ::GetFullPathNameA( ph.c_str(), + static_cast(len), buf, p )); + } + + const std::size_t buf_size( 128 ); + + template + error_code + get_full_path_name_template( const String & ph, String & target ) + { + typename String::value_type buf[buf_size]; + typename String::value_type * pfn; + std::size_t len = get_full_path_name( ph, + buf_size , buf, &pfn ); + if ( len == 0 ) return error_code( ::GetLastError(), system_category() ); + if ( len > buf_size ) + { + typedef typename String::value_type value_type; + boost::scoped_array big_buf( new value_type[len] ); + if ( (len=get_full_path_name( ph, len , big_buf.get(), &pfn )) + == 0 ) return error_code( ::GetLastError(), system_category() ); + big_buf[len] = '\0'; + target = big_buf.get(); + return ok; + } + buf[len] = '\0'; + target = buf; + return ok; + } + + template + error_code + get_file_write_time( const String & ph, FILETIME & last_write_time ) + { + handle_wrapper hw( + create_file( ph.c_str(), 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) ); + if ( hw.handle == INVALID_HANDLE_VALUE ) + return error_code( ::GetLastError(), system_category() ); + return error_code( ::GetFileTime( hw.handle, 0, 0, &last_write_time ) != 0 + ? 0 : ::GetLastError(), system_category() ); + } + + template + error_code + set_file_write_time( const String & ph, const FILETIME & last_write_time ) + { + handle_wrapper hw( + create_file( ph.c_str(), FILE_WRITE_ATTRIBUTES, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) ); + if ( hw.handle == INVALID_HANDLE_VALUE ) + return error_code( ::GetLastError(), system_category() ); + return error_code( ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0 + ? 0 : ::GetLastError(), system_category() ); + } + + // these constants come from inspecting some Microsoft sample code + std::time_t to_time_t( const FILETIME & ft ) + { + __int64 t = (static_cast<__int64>( ft.dwHighDateTime ) << 32) + + ft.dwLowDateTime; +# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // > VC++ 7.0 + t -= 116444736000000000LL; +# else + t -= 116444736000000000; +# endif + t /= 10000000; + return static_cast( t ); + } + + void to_FILETIME( std::time_t t, FILETIME & ft ) + { + __int64 temp = t; + temp *= 10000000; +# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // > VC++ 7.0 + temp += 116444736000000000LL; +# else + temp += 116444736000000000; +# endif + ft.dwLowDateTime = static_cast( temp ); + ft.dwHighDateTime = static_cast( temp >> 32 ); + } + + template + boost::filesystem2::detail::time_pair + last_write_time_template( const String & ph ) + { + FILETIME lwt; + error_code ec( + get_file_write_time( ph, lwt ) ); + return std::make_pair( ec, to_time_t( lwt ) ); + } + + template + error_code + last_write_time_template( const String & ph, const std::time_t new_time ) + { + FILETIME lwt; + to_FILETIME( new_time, lwt ); + return set_file_write_time( ph, lwt ); + } + + bool remove_directory( const std::string & ph ) + { return ::RemoveDirectoryA( ph.c_str() ) != 0; } + + bool delete_file( const std::string & ph ) + { return ::DeleteFileA( ph.c_str() ) != 0; } + + template + error_code + remove_template( const String & ph ) + { + // TODO: test this code in the presence of Vista symlinks, + // including dangling, self-referal, and cyclic symlinks + error_code ec; + fs::file_status sf( fs::detail::status_api( ph, ec ) ); + if ( ec ) + return ec; + if ( sf.type() == fs::file_not_found ) + return ok; + if ( fs::is_directory( sf ) ) + { + if ( !remove_directory( ph ) ) + return error_code(::GetLastError(), system_category()); + } + else + { + if ( !delete_file( ph ) ) return error_code(::GetLastError(), system_category()); + } + return ok; + } + + inline bool create_directory( const std::string & dir ) + { return ::CreateDirectoryA( dir.c_str(), 0 ) != 0; } + + template + boost::filesystem2::detail::query_pair + create_directory_template( const String & dir_ph ) + { + error_code error, dummy; + if ( create_directory( dir_ph ) ) return std::make_pair( error, true ); + error = error_code( ::GetLastError(), system_category() ); + // an error here may simply mean the postcondition is already met + if ( error.value() == ERROR_ALREADY_EXISTS + && fs::is_directory( fs::detail::status_api( dir_ph, dummy ) ) ) + return std::make_pair( ok, false ); + return std::make_pair( error, false ); + } + +#if _WIN32_WINNT >= 0x500 + inline bool create_hard_link( const std::string & to_ph, + const std::string & from_ph ) + { return ::CreateHardLinkA( from_ph.c_str(), to_ph.c_str(), 0 ) != 0; } +#endif + +#if _WIN32_WINNT >= 0x500 + template + error_code + create_hard_link_template( const String & to_ph, + const String & from_ph ) + { + return error_code( create_hard_link( to_ph.c_str(), from_ph.c_str() ) + ? 0 : ::GetLastError(), system_category() ); + } +#endif + +#else // BOOST_POSIX_API + + int posix_remove( const char * p ) + { +# if defined(__QNXNTO__) || (defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))) + // Some Metrowerks C library versions fail on directories because of a + // known Metrowerks coding error in ::remove. Workaround is to call + // rmdir() or unlink() as indicated. + // Same bug also reported for QNX, with the same fix. + int err = ::unlink( p ); + if ( err == 0 || errno != EPERM ) + return err; + return ::rmdir( p ); +# else + return std::remove( p ); +# endif + } + +#endif +} // unnamed namespace + +namespace boost +{ + namespace filesystem2 + { + namespace detail + { + BOOST_FILESYSTEM_DECL system::error_code throws; + +// free functions ----------------------------------------------------------// + + BOOST_FILESYSTEM_DECL error_code not_found_error() + { +# ifdef BOOST_WINDOWS_API + return error_code(ERROR_PATH_NOT_FOUND, system_category()); +# else + return error_code(ENOENT, system_category()); +# endif + } + + BOOST_FILESYSTEM_DECL bool possible_large_file_size_support() + { +# ifdef BOOST_POSIX_API + struct stat lcl_stat; + return sizeof( lcl_stat.st_size ) > 4; +# else + return true; +# endif + } + +# ifdef BOOST_WINDOWS_API + + BOOST_FILESYSTEM_DECL fs::file_status + status_api( const std::string & ph, error_code & ec ) + { return status_template( ph, ec ); } + +# ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + BOOST_FILESYSTEM_DECL fs::file_status + status_api( const std::wstring & ph, error_code & ec ) + { return status_template( ph, ec ); } + + BOOST_FILESYSTEM_DECL bool symbolic_link_exists_api( const std::wstring & ) + { return false; } + + BOOST_FILESYSTEM_DECL + fs::detail::query_pair is_empty_api( const std::wstring & ph ) + { return is_empty_template( ph ); } + + BOOST_FILESYSTEM_DECL + fs::detail::query_pair + equivalent_api( const std::wstring & ph1, const std::wstring & ph2 ) + { return equivalent_template( ph1, ph2 ); } + + BOOST_FILESYSTEM_DECL + fs::detail::uintmax_pair file_size_api( const std::wstring & ph ) + { return file_size_template( ph ); } + + BOOST_FILESYSTEM_DECL + fs::detail::space_pair space_api( const std::wstring & ph ) + { return space_template( ph ); } + + BOOST_FILESYSTEM_DECL + error_code + get_current_path_api( std::wstring & ph ) + { return get_current_path_template( ph ); } + + BOOST_FILESYSTEM_DECL + error_code + set_current_path_api( const std::wstring & ph ) + { return set_current_path_template( ph ); } + + BOOST_FILESYSTEM_DECL error_code + get_full_path_name_api( const std::wstring & ph, std::wstring & target ) + { return get_full_path_name_template( ph, target ); } + + BOOST_FILESYSTEM_DECL time_pair + last_write_time_api( const std::wstring & ph ) + { return last_write_time_template( ph ); } + + BOOST_FILESYSTEM_DECL error_code + last_write_time_api( const std::wstring & ph, std::time_t new_value ) + { return last_write_time_template( ph, new_value ); } + + BOOST_FILESYSTEM_DECL fs::detail::query_pair + create_directory_api( const std::wstring & ph ) + { return create_directory_template( ph ); } + +#if _WIN32_WINNT >= 0x500 + BOOST_FILESYSTEM_DECL error_code + create_hard_link_api( const std::wstring & to_ph, + const std::wstring & from_ph ) + { return create_hard_link_template( to_ph, from_ph ); } +#endif + + BOOST_FILESYSTEM_DECL error_code + create_symlink_api( const std::wstring & /*to_ph*/, + const std::wstring & /*from_ph*/ ) + { return error_code( ERROR_NOT_SUPPORTED, system_category() ); } + + BOOST_FILESYSTEM_DECL error_code + remove_api( const std::wstring & ph ) { return remove_template( ph ); } + + BOOST_FILESYSTEM_DECL error_code + rename_api( const std::wstring & from, const std::wstring & to ) + { + return error_code( ::MoveFileW( from.c_str(), to.c_str() ) + ? 0 : ::GetLastError(), system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + copy_file_api( const std::wstring & from, const std::wstring & to, bool fail_if_exists ) + { + return error_code( ::CopyFileW( from.c_str(), to.c_str(), fail_if_exists ) + ? 0 : ::GetLastError(), system_category() ); + } + + BOOST_FILESYSTEM_DECL bool create_file_api( const std::wstring & ph, + std::ios_base::openmode mode ) // true if succeeds + { + DWORD access( + ((mode & std::ios_base::in) == 0 ? 0 : GENERIC_READ) + | ((mode & std::ios_base::out) == 0 ? 0 : GENERIC_WRITE) ); + + DWORD disposition(0); // see 27.8.1.3 Table 92 + if ( (mode&~std::ios_base::binary) + == (std::ios_base::out|std::ios_base::app) ) + disposition = OPEN_ALWAYS; + else if ( (mode&~(std::ios_base::binary|std::ios_base::out)) + == std::ios_base::in ) disposition = OPEN_EXISTING; + else if ( ((mode&~(std::ios_base::binary|std::ios_base::trunc)) + == std::ios_base::out ) + || ((mode&~std::ios_base::binary) + == (std::ios_base::in|std::ios_base::out|std::ios_base::trunc)) ) + disposition = CREATE_ALWAYS; + else BOOST_ASSERT( 0 && "invalid mode argument" ); + + HANDLE handle ( ::CreateFileW( ph.c_str(), access, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, + disposition, (mode &std::ios_base::out) != 0 + ? FILE_ATTRIBUTE_ARCHIVE : FILE_ATTRIBUTE_NORMAL, 0 ) ); + if ( handle == INVALID_HANDLE_VALUE ) return false; + ::CloseHandle( handle ); + return true; + } + + BOOST_FILESYSTEM_DECL std::string narrow_path_api( + const std::wstring & ph ) // return is empty if fails + { + std::string narrow_short_form; + std::wstring short_form; + for ( DWORD buf_sz( static_cast( ph.size()+1 ));; ) + { + boost::scoped_array buf( new wchar_t[buf_sz] ); + DWORD sz( ::GetShortPathNameW( ph.c_str(), buf.get(), buf_sz ) ); + if ( sz == 0 ) return narrow_short_form; + if ( sz <= buf_sz ) + { + short_form += buf.get(); + break; + } + buf_sz = sz + 1; + } + // contributed by Takeshi Mouri: + int narrow_sz( ::WideCharToMultiByte( CP_ACP, 0, + short_form.c_str(), static_cast(short_form.size()), 0, 0, 0, 0 ) ); + boost::scoped_array narrow_buf( new char[narrow_sz] ); + ::WideCharToMultiByte( CP_ACP, 0, + short_form.c_str(), static_cast(short_form.size()), + narrow_buf.get(), narrow_sz, 0, 0 ); + narrow_short_form.assign(narrow_buf.get(), narrow_sz); + + return narrow_short_form; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_first( void *& handle, const std::wstring & dir, + std::wstring & target, file_status & sf, file_status & symlink_sf ) + { + // use a form of search Sebastian Martel reports will work with Win98 + std::wstring dirpath( dir ); + dirpath += (dirpath.empty() + || dirpath[dirpath.size()-1] != L'\\') ? L"\\*" : L"*"; + + WIN32_FIND_DATAW data; + if ( (handle = ::FindFirstFileW( dirpath.c_str(), &data )) + == INVALID_HANDLE_VALUE ) + { + handle = 0; + return error_code( ::GetLastError() == ERROR_FILE_NOT_FOUND + ? 0 : ::GetLastError(), system_category() ); + } + target = data.cFileName; + if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + { sf.type( directory_file ); symlink_sf.type( directory_file ); } + else { sf.type( regular_file ); symlink_sf.type( regular_file ); } + return ok; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_increment( void *& handle, std::wstring & target, + file_status & sf, file_status & symlink_sf ) + { + WIN32_FIND_DATAW data; + if ( ::FindNextFileW( handle, &data ) == 0 ) // fails + { + int error = ::GetLastError(); + dir_itr_close( handle ); + return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category() ); + } + target = data.cFileName; + if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + { sf.type( directory_file ); symlink_sf.type( directory_file ); } + else { sf.type( regular_file ); symlink_sf.type( regular_file ); } + return ok; + } + +# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + // suggested by Walter Landry + BOOST_FILESYSTEM_DECL bool symbolic_link_exists_api( const std::string & ) + { return false; } + + BOOST_FILESYSTEM_DECL + fs::detail::query_pair is_empty_api( const std::string & ph ) + { return is_empty_template( ph ); } + + BOOST_FILESYSTEM_DECL + fs::detail::query_pair + equivalent_api( const std::string & ph1, const std::string & ph2 ) + { return equivalent_template( ph1, ph2 ); } + + BOOST_FILESYSTEM_DECL + fs::detail::uintmax_pair file_size_api( const std::string & ph ) + { return file_size_template( ph ); } + + BOOST_FILESYSTEM_DECL + fs::detail::space_pair space_api( const std::string & ph ) + { return space_template( ph ); } + + BOOST_FILESYSTEM_DECL + error_code + get_current_path_api( std::string & ph ) + { return get_current_path_template( ph ); } + + BOOST_FILESYSTEM_DECL + error_code + set_current_path_api( const std::string & ph ) + { return set_current_path_template( ph ); } + + BOOST_FILESYSTEM_DECL error_code + get_full_path_name_api( const std::string & ph, std::string & target ) + { return get_full_path_name_template( ph, target ); } + + BOOST_FILESYSTEM_DECL time_pair + last_write_time_api( const std::string & ph ) + { return last_write_time_template( ph ); } + + BOOST_FILESYSTEM_DECL error_code + last_write_time_api( const std::string & ph, std::time_t new_value ) + { return last_write_time_template( ph, new_value ); } + + BOOST_FILESYSTEM_DECL fs::detail::query_pair + create_directory_api( const std::string & ph ) + { return create_directory_template( ph ); } + +#if _WIN32_WINNT >= 0x500 + BOOST_FILESYSTEM_DECL error_code + create_hard_link_api( const std::string & to_ph, + const std::string & from_ph ) + { + return create_hard_link_template( to_ph, from_ph ); + } +#endif + + BOOST_FILESYSTEM_DECL error_code + create_symlink_api( const std::string & /*to_ph*/, + const std::string & /*from_ph*/ ) + { return error_code( ERROR_NOT_SUPPORTED, system_category() ); } + + BOOST_FILESYSTEM_DECL error_code + remove_api( const std::string & ph ) { return remove_template( ph ); } + + BOOST_FILESYSTEM_DECL error_code + rename_api( const std::string & from, const std::string & to ) + { + return error_code( ::MoveFileA( from.c_str(), to.c_str() ) + ? 0 : ::GetLastError(), system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + copy_file_api( const std::string & from, const std::string & to, bool fail_if_exists ) + { + return error_code( ::CopyFileA( from.c_str(), to.c_str(), fail_if_exists ) + ? 0 : ::GetLastError(), system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_first( void *& handle, const std::string & dir, + std::string & target, file_status & sf, file_status & symlink_sf ) + // Note: an empty root directory has no "." or ".." entries, so this + // causes a ERROR_FILE_NOT_FOUND error which we do not considered an + // error. It is treated as eof instead. + { + // use a form of search Sebastian Martel reports will work with Win98 + std::string dirpath( dir ); + dirpath += (dirpath.empty() + || (dirpath[dirpath.size()-1] != '\\' + && dirpath[dirpath.size()-1] != ':')) ? "\\*" : "*"; + + WIN32_FIND_DATAA data; + if ( (handle = ::FindFirstFileA( dirpath.c_str(), &data )) + == INVALID_HANDLE_VALUE ) + { + handle = 0; + return error_code( (::GetLastError() == ERROR_FILE_NOT_FOUND + // Windows Mobile returns ERROR_NO_MORE_FILES; see ticket #3551 + || ::GetLastError() == ERROR_NO_MORE_FILES) + ? 0 : ::GetLastError(), system_category() ); + } + target = data.cFileName; + if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + { sf.type( directory_file ); symlink_sf.type( directory_file ); } + else { sf.type( regular_file ); symlink_sf.type( regular_file ); } + return ok; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_close( void *& handle ) + { + if ( handle != 0 ) + { + bool ok = ::FindClose( handle ) != 0; + handle = 0; + return error_code( ok ? 0 : ::GetLastError(), system_category() ); + } + return ok; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_increment( void *& handle, std::string & target, + file_status & sf, file_status & symlink_sf ) + { + WIN32_FIND_DATAA data; + if ( ::FindNextFileA( handle, &data ) == 0 ) // fails + { + int error = ::GetLastError(); + dir_itr_close( handle ); + return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category() ); + } + target = data.cFileName; + if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + { sf.type( directory_file ); symlink_sf.type( directory_file ); } + else { sf.type( regular_file ); symlink_sf.type( regular_file ); } + return ok; + } + +# else // BOOST_POSIX_API + + BOOST_FILESYSTEM_DECL fs::file_status + status_api( const std::string & ph, error_code & ec ) + { + struct stat path_stat; + if ( ::stat( ph.c_str(), &path_stat ) != 0 ) + { + if ( errno == ENOENT || errno == ENOTDIR ) + { + ec = ok; + return fs::file_status( fs::file_not_found ); + } + ec = error_code( errno, system_category() ); + return fs::file_status( fs::status_unknown ); + } + ec = ok; + if ( S_ISDIR( path_stat.st_mode ) ) + return fs::file_status( fs::directory_file ); + if ( S_ISREG( path_stat.st_mode ) ) + return fs::file_status( fs::regular_file ); + if ( S_ISBLK( path_stat.st_mode ) ) + return fs::file_status( fs::block_file ); + if ( S_ISCHR( path_stat.st_mode ) ) + return fs::file_status( fs::character_file ); + if ( S_ISFIFO( path_stat.st_mode ) ) + return fs::file_status( fs::fifo_file ); + if ( S_ISSOCK( path_stat.st_mode ) ) + return fs::file_status( fs::socket_file ); + return fs::file_status( fs::type_unknown ); + } + + BOOST_FILESYSTEM_DECL fs::file_status + symlink_status_api( const std::string & ph, error_code & ec ) + { + struct stat path_stat; + if ( ::lstat( ph.c_str(), &path_stat ) != 0 ) + { + if ( errno == ENOENT || errno == ENOTDIR ) + { + ec = ok; + return fs::file_status( fs::file_not_found ); + } + ec = error_code( errno, system_category() ); + return fs::file_status( fs::status_unknown ); + } + ec = ok; + if ( S_ISREG( path_stat.st_mode ) ) + return fs::file_status( fs::regular_file ); + if ( S_ISDIR( path_stat.st_mode ) ) + return fs::file_status( fs::directory_file ); + if ( S_ISLNK( path_stat.st_mode ) ) + return fs::file_status( fs::symlink_file ); + if ( S_ISBLK( path_stat.st_mode ) ) + return fs::file_status( fs::block_file ); + if ( S_ISCHR( path_stat.st_mode ) ) + return fs::file_status( fs::character_file ); + if ( S_ISFIFO( path_stat.st_mode ) ) + return fs::file_status( fs::fifo_file ); + if ( S_ISSOCK( path_stat.st_mode ) ) + return fs::file_status( fs::socket_file ); + return fs::file_status( fs::type_unknown ); + } + + // suggested by Walter Landry + BOOST_FILESYSTEM_DECL bool + symbolic_link_exists_api( const std::string & ph ) + { + struct stat path_stat; + return ::lstat( ph.c_str(), &path_stat ) == 0 + && S_ISLNK( path_stat.st_mode ); + } + + BOOST_FILESYSTEM_DECL query_pair + is_empty_api( const std::string & ph ) + { + struct stat path_stat; + if ( (::stat( ph.c_str(), &path_stat )) != 0 ) + return std::make_pair( error_code( errno, system_category() ), false ); + return std::make_pair( ok, S_ISDIR( path_stat.st_mode ) + ? is_empty_directory( ph ) + : path_stat.st_size == 0 ); + } + + BOOST_FILESYSTEM_DECL query_pair + equivalent_api( const std::string & ph1, const std::string & ph2 ) + { + struct stat s2; + int e2( ::stat( ph2.c_str(), &s2 ) ); + struct stat s1; + int e1( ::stat( ph1.c_str(), &s1 ) ); + if ( e1 != 0 || e2 != 0 ) + return std::make_pair( error_code( e1 != 0 && e2 != 0 ? errno : 0, system_category() ), false ); + // at this point, both stats are known to be valid + return std::make_pair( ok, + s1.st_dev == s2.st_dev + && s1.st_ino == s2.st_ino + // According to the POSIX stat specs, "The st_ino and st_dev fields + // taken together uniquely identify the file within the system." + // Just to be sure, size and mod time are also checked. + && s1.st_size == s2.st_size + && s1.st_mtime == s2.st_mtime ); + } + + BOOST_FILESYSTEM_DECL uintmax_pair + file_size_api( const std::string & ph ) + { + struct stat path_stat; + if ( ::stat( ph.c_str(), &path_stat ) != 0 ) + return std::make_pair( error_code( errno, system_category() ), 0 ); + if ( !S_ISREG( path_stat.st_mode ) ) + return std::make_pair( error_code( EPERM, system_category() ), 0 ); + return std::make_pair( ok, + static_cast(path_stat.st_size) ); + } + + BOOST_FILESYSTEM_DECL space_pair + space_api( const std::string & ph ) + { + struct BOOST_STATVFS vfs; + space_pair result; + if ( ::BOOST_STATVFS( ph.c_str(), &vfs ) != 0 ) + { + result.first = error_code( errno, system_category() ); + result.second.capacity = result.second.free + = result.second.available = 0; + } + else + { + result.first = ok; + result.second.capacity + = static_cast(vfs.f_blocks) * BOOST_STATVFS_F_FRSIZE; + result.second.free + = static_cast(vfs.f_bfree) * BOOST_STATVFS_F_FRSIZE; + result.second.available + = static_cast(vfs.f_bavail) * BOOST_STATVFS_F_FRSIZE; + } + return result; + } + + BOOST_FILESYSTEM_DECL time_pair + last_write_time_api( const std::string & ph ) + { + struct stat path_stat; + if ( ::stat( ph.c_str(), &path_stat ) != 0 ) + return std::make_pair( error_code( errno, system_category() ), 0 ); + return std::make_pair( ok, path_stat.st_mtime ); + } + + BOOST_FILESYSTEM_DECL error_code + last_write_time_api( const std::string & ph, std::time_t new_value ) + { + struct stat path_stat; + if ( ::stat( ph.c_str(), &path_stat ) != 0 ) + return error_code( errno, system_category() ); + ::utimbuf buf; + buf.actime = path_stat.st_atime; // utime() updates access time too:-( + buf.modtime = new_value; + return error_code( ::utime( ph.c_str(), &buf ) != 0 ? errno : 0, system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + get_current_path_api( std::string & ph ) + { + for ( long path_max = 32;; path_max *=2 ) // loop 'til buffer large enough + { + boost::scoped_array + buf( new char[static_cast(path_max)] ); + if ( ::getcwd( buf.get(), static_cast(path_max) ) == 0 ) + { + if ( errno != ERANGE + // bug in some versions of the Metrowerks C lib on the Mac: wrong errno set +# if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) + && errno != 0 +# endif + ) return error_code( errno, system_category() ); + } + else + { + ph = buf.get(); + break; + } + } + return ok; + } + + BOOST_FILESYSTEM_DECL error_code + set_current_path_api( const std::string & ph ) + { + return error_code( ::chdir( ph.c_str() ) + ? errno : 0, system_category() ); + } + + BOOST_FILESYSTEM_DECL fs::detail::query_pair + create_directory_api( const std::string & ph ) + { + if ( ::mkdir( ph.c_str(), S_IRWXU|S_IRWXG|S_IRWXO ) == 0 ) + { return std::make_pair( ok, true ); } + int ec=errno; + error_code dummy; + if ( ec != EEXIST + || !fs::is_directory( status_api( ph, dummy ) ) ) + { return std::make_pair( error_code( ec, system_category() ), false ); } + return std::make_pair( ok, false ); + } + + BOOST_FILESYSTEM_DECL error_code + create_hard_link_api( const std::string & to_ph, + const std::string & from_ph ) + { + return error_code( ::link( to_ph.c_str(), from_ph.c_str() ) == 0 + ? 0 : errno, system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + create_symlink_api( const std::string & to_ph, + const std::string & from_ph ) + { + return error_code( ::symlink( to_ph.c_str(), from_ph.c_str() ) == 0 + ? 0 : errno, system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + remove_api( const std::string & ph ) + { + if ( posix_remove( ph.c_str() ) == 0 ) + return ok; + int error = errno; + // POSIX says "If the directory is not an empty directory, rmdir() + // shall fail and set errno to EEXIST or ENOTEMPTY." + // Linux uses ENOTEMPTY, Solaris uses EEXIST. + if ( error == EEXIST ) error = ENOTEMPTY; + + error_code ec; + + // ignore errors if post-condition satisfied + return status_api(ph, ec).type() == file_not_found + ? ok : error_code( error, system_category() ) ; + } + + BOOST_FILESYSTEM_DECL error_code + rename_api( const std::string & from, const std::string & to ) + { + // POSIX is too permissive so must check + error_code dummy; + if ( fs::exists( status_api( to, dummy ) ) ) + return error_code( EEXIST, system_category() ); + return error_code( std::rename( from.c_str(), to.c_str() ) != 0 + ? errno : 0, system_category() ); + } + + BOOST_FILESYSTEM_DECL error_code + copy_file_api( const std::string & from_file_ph, + const std::string & to_file_ph, bool fail_if_exists ) + { + const std::size_t buf_sz = 32768; + boost::scoped_array buf( new char [buf_sz] ); + int infile=-1, outfile=-1; // -1 means not open + + // bug fixed: code previously did a stat() on the from_file first, but that + // introduced a gratuitous race condition; the stat() is now done after the open() + + if ( (infile = ::open( from_file_ph.c_str(), O_RDONLY )) < 0 ) + { return error_code( errno, system_category() ); } + + struct stat from_stat; + if ( ::stat( from_file_ph.c_str(), &from_stat ) != 0 ) + { + ::close(infile); + return error_code( errno, system_category() ); + } + + int oflag = O_CREAT | O_WRONLY | O_TRUNC; + if ( fail_if_exists ) + oflag |= O_EXCL; + if ( (outfile = ::open( to_file_ph.c_str(), oflag, from_stat.st_mode )) < 0 ) + { + int open_errno = errno; + BOOST_ASSERT( infile >= 0 ); + ::close( infile ); + return error_code( open_errno, system_category() ); + } + + ssize_t sz, sz_read=1, sz_write; + while ( sz_read > 0 + && (sz_read = ::read( infile, buf.get(), buf_sz )) > 0 ) + { + // Allow for partial writes - see Advanced Unix Programming (2nd Ed.), + // Marc Rochkind, Addison-Wesley, 2004, page 94 + sz_write = 0; + do + { + if ( (sz = ::write( outfile, buf.get() + sz_write, + sz_read - sz_write )) < 0 ) + { + sz_read = sz; // cause read loop termination + break; // and error to be thrown after closes + } + sz_write += sz; + } while ( sz_write < sz_read ); + } + + if ( ::close( infile) < 0 ) sz_read = -1; + if ( ::close( outfile) < 0 ) sz_read = -1; + + return error_code( sz_read < 0 ? errno : 0, system_category() ); + } + + // this code is based on Stevens and Rago, Advanced Programming in the + // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49 + error_code path_max( std::size_t & result ) + { +# ifdef PATH_MAX + static std::size_t max = PATH_MAX; +# else + static std::size_t max = 0; +# endif + if ( max == 0 ) + { + errno = 0; + long tmp = ::pathconf( "/", _PC_NAME_MAX ); + if ( tmp < 0 ) + { + if ( errno == 0 ) // indeterminate + max = 4096; // guess + else return error_code( errno, system_category() ); + } + else max = static_cast( tmp + 1 ); // relative root + } + result = max; + return ok; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_first( void *& handle, void *& buffer, + const std::string & dir, std::string & target, + file_status &, file_status & ) + { + if ( (handle = ::opendir( dir.c_str() )) == 0 ) + return error_code( errno, system_category() ); + target = std::string( "." ); // string was static but caused trouble + // when iteration called from dtor, after + // static had already been destroyed + std::size_t path_size (0); // initialization quiets gcc warning + error_code ec = path_max( path_size ); + if ( ec ) return ec; + dirent de; + buffer = std::malloc( (sizeof(dirent) - sizeof(de.d_name)) + + path_size + 1 ); // + 1 for "/0" + return ok; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_close( void *& handle, void*& buffer ) + { + std::free( buffer ); + buffer = 0; + if ( handle == 0 ) return ok; + DIR * h( static_cast(handle) ); + handle = 0; + return error_code( ::closedir( h ) == 0 ? 0 : errno, system_category() ); + } + +#if defined(__PGI) && defined(__USE_FILE_OFFSET64) +#define dirent dirent64 +#endif + + // warning: the only dirent member updated is d_name + inline int readdir_r_simulator( DIR * dirp, struct dirent * entry, + struct dirent ** result ) // *result set to 0 on end of directory + { + errno = 0; + + # if !defined(__CYGWIN__) \ + && defined(_POSIX_THREAD_SAFE_FUNCTIONS) \ + && defined(_SC_THREAD_SAFE_FUNCTIONS) \ + && (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0) \ + && (!defined(__hpux) || defined(_REENTRANT)) \ + && (!defined(_AIX) || defined(__THREAD_SAFE)) + if ( ::sysconf( _SC_THREAD_SAFE_FUNCTIONS ) >= 0 ) + { return ::readdir_r( dirp, entry, result ); } + # endif + + struct dirent * p; + *result = 0; + if ( (p = ::readdir( dirp )) == 0 ) + return errno; + std::strcpy( entry->d_name, p->d_name ); + *result = entry; + return 0; + } + + BOOST_FILESYSTEM_DECL error_code + dir_itr_increment( void *& handle, void *& buffer, + std::string & target, file_status & sf, file_status & symlink_sf ) + { + BOOST_ASSERT( buffer != 0 ); + dirent * entry( static_cast(buffer) ); + dirent * result; + int return_code; + if ( (return_code = readdir_r_simulator( static_cast(handle), + entry, &result )) != 0 ) return error_code( errno, system_category() ); + if ( result == 0 ) return dir_itr_close( handle, buffer ); + target = entry->d_name; +# ifdef BOOST_FILESYSTEM_STATUS_CACHE + if ( entry->d_type == DT_UNKNOWN ) // filesystem does not supply d_type value + { + sf = symlink_sf = fs::file_status(fs::status_unknown); + } + else // filesystem supplies d_type value + { + if ( entry->d_type == DT_DIR ) + sf = symlink_sf = fs::file_status( fs::directory_file ); + else if ( entry->d_type == DT_REG ) + sf = symlink_sf = fs::file_status( fs::regular_file ); + else if ( entry->d_type == DT_LNK ) + { + sf = fs::file_status( fs::status_unknown ); + symlink_sf = fs::file_status( fs::symlink_file ); + } + else sf = symlink_sf = fs::file_status( fs::status_unknown ); + } +# else + sf = symlink_sf = fs::file_status( fs::status_unknown ); +# endif + return ok; + } + +# endif + } // namespace detail + } // namespace filesystem2 +} // namespace boost diff --git a/external/libs/filesystem/v2/src/v2_path.cpp b/external/libs/filesystem/v2/src/v2_path.cpp new file mode 100644 index 0000000..16f6583 --- /dev/null +++ b/external/libs/filesystem/v2/src/v2_path.cpp @@ -0,0 +1,177 @@ +// path.cpp ----------------------------------------------------------------// + +// Copyright 2005 Beman Dawes + +// Distributed under the Boost 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 + +//----------------------------------------------------------------------------// + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include + +#ifndef BOOST_FILESYSTEM2_NARROW_ONLY + +#include +#include + +#include +#include +#include + +#include // for std::mbstate_t + +#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +# include +#endif + + +namespace +{ + // std::locale construction can throw (if LC_MESSAGES is wrong, for example), + // so a static at function scope is used to ensure that exceptions can be + // caught. (A previous version was at namespace scope, so initialization + // occurred before main(), preventing exceptions from being caught.) + std::locale & loc() + { +#if !defined(macintosh) && !defined(__APPLE__) && !defined(__APPLE_CC__) + // ISO C calls this "the locale-specific native environment": + static std::locale lc(""); +#else // Mac OS + // "All BSD system functions expect their string parameters to be in UTF-8 encoding + // and nothing else." + // See http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html + std::locale global_loc = std::locale(); // Mac OS doesn't support locale("") + static std::locale lc(global_loc, + new boost::filesystem::detail::utf8_codecvt_facet); +#endif + return lc; + } + + const std::codecvt *& + converter() + { + static const std::codecvt * + cvtr( + &std::use_facet > + ( loc() ) ); + return cvtr; + } + + bool locked(false); +} // unnamed namespace + +namespace boost +{ + namespace filesystem2 + { + bool wpath_traits::imbue( const std::locale & new_loc, const std::nothrow_t & ) + { + if ( locked ) return false; + locked = true; + loc() = new_loc; + converter() = &std::use_facet + >( loc() ); + return true; + } + + void wpath_traits::imbue( const std::locale & new_loc ) + { + if ( locked ) BOOST_FILESYSTEM_THROW( + wfilesystem_error( + "boost::filesystem::wpath_traits::imbue() after lockdown", + make_error_code( system::errc::not_supported ) ) ); + imbue( new_loc, std::nothrow ); + } + + //namespace detail + //{ + // BOOST_FILESYSTEM_DECL + // const char * what( const char * sys_err_what, + // const path & path1, const path & path2, std::string & target) + // { + // try + // { + // if ( target.empty() ) + // { + // target = sys_err_what; + // if ( !path1.empty() ) + // { + // target += ": \""; + // target += path1.file_string(); + // target += "\""; + // } + // if ( !path2.empty() ) + // { + // target += ", \""; + // target += path2.file_string(); + // target += "\""; + // } + // } + // return target.c_str(); + // } + // catch (...) + // { + // return sys_err_what; + // } + // } + //} + +# ifdef BOOST_POSIX_API + +// Because this is POSIX only code, we don't have to worry about ABI issues +// described in http://www.boost.org/more/separate_compilation.html + + wpath_traits::external_string_type + wpath_traits::to_external( const wpath & ph, + const internal_string_type & src ) + { + locked = true; + std::size_t work_size( converter()->max_length() * (src.size()+1) ); + boost::scoped_array work( new char[ work_size ] ); + std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports + const internal_string_type::value_type * from_next; + external_string_type::value_type * to_next; + if ( converter()->out( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + BOOST_FILESYSTEM_THROW( boost::filesystem::wfilesystem_error( + "boost::filesystem::wpath::to_external conversion error", + ph, system::error_code( system::errc::invalid_argument, system::system_category() ) ) ); + *to_next = '\0'; + return external_string_type( work.get() ); + } + + wpath_traits::internal_string_type + wpath_traits::to_internal( const external_string_type & src ) + { + locked = true; + std::size_t work_size( src.size()+1 ); + boost::scoped_array work( new wchar_t[ work_size ] ); + std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports + const external_string_type::value_type * from_next; + internal_string_type::value_type * to_next; + if ( converter()->in( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + BOOST_FILESYSTEM_THROW( boost::filesystem::wfilesystem_error( + "boost::filesystem::wpath::to_internal conversion error", + system::error_code( system::errc::invalid_argument, system::system_category() ) ) ); + *to_next = L'\0'; + return internal_string_type( work.get() ); + } +# endif // BOOST_POSIX_API + + } // namespace filesystem2 +} // namespace boost + +#endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY diff --git a/external/libs/filesystem/v2/src/v2_portability.cpp b/external/libs/filesystem/v2/src/v2_portability.cpp new file mode 100644 index 0000000..4d27543 --- /dev/null +++ b/external/libs/filesystem/v2/src/v2_portability.cpp @@ -0,0 +1,119 @@ +// portability.cpp ---------------------------------------------------------// + +// Copyright 2002-2005 Beman Dawes +// Use, modification, and distribution is subject to the Boost 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 + +//----------------------------------------------------------------------------// + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include + +namespace fs = boost::filesystem2; + +#include // SGI MIPSpro compilers need this + +# ifdef BOOST_NO_STDC_NAMESPACE + namespace std { using ::strerror; } +# endif + +//----------------------------------------------------------------------------// + +namespace +{ + const char invalid_chars[] = + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" + "<>:\"/\\|"; + // note that the terminating '\0' is part of the string - thus the size below + // is sizeof(invalid_chars) rather than sizeof(invalid_chars)-1. I + const std::string windows_invalid_chars( invalid_chars, sizeof(invalid_chars) ); + + const std::string valid_posix( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-" ); + +} // unnamed namespace + +namespace boost +{ + namespace filesystem2 + { + + // name_check functions ----------------------------------------------// + +# ifdef BOOST_WINDOWS + BOOST_FILESYSTEM_DECL bool native( const std::string & name ) + { + return windows_name( name ); + } +# else + BOOST_FILESYSTEM_DECL bool native( const std::string & name ) + { + return name.size() != 0 + && name[0] != ' ' + && name.find('/') == std::string::npos; + } +# endif + + BOOST_FILESYSTEM_DECL bool portable_posix_name( const std::string & name ) + { + return name.size() != 0 + && name.find_first_not_of( valid_posix ) == std::string::npos; + } + + BOOST_FILESYSTEM_DECL bool windows_name( const std::string & name ) + { + return name.size() != 0 + && name[0] != ' ' + && name.find_first_of( windows_invalid_chars ) == std::string::npos + && *(name.end()-1) != ' ' + && (*(name.end()-1) != '.' + || name.length() == 1 || name == ".."); + } + + BOOST_FILESYSTEM_DECL bool portable_name( const std::string & name ) + { + return + name.size() != 0 + && ( name == "." + || name == ".." + || (windows_name( name ) + && portable_posix_name( name ) + && name[0] != '.' && name[0] != '-')); + } + + BOOST_FILESYSTEM_DECL bool portable_directory_name( const std::string & name ) + { + return + name == "." + || name == ".." + || (portable_name( name ) + && name.find('.') == std::string::npos); + } + + BOOST_FILESYSTEM_DECL bool portable_file_name( const std::string & name ) + { + std::string::size_type pos; + return + portable_name( name ) + && name != "." + && name != ".." + && ( (pos = name.find( '.' )) == std::string::npos + || (name.find( '.', pos+1 ) == std::string::npos + && (pos + 5) > name.length() )) + ; + } + + } // namespace filesystem2 +} // namespace boost diff --git a/external/libs/filesystem/v2/test/Jamfile.v2 b/external/libs/filesystem/v2/test/Jamfile.v2 new file mode 100644 index 0000000..2bb8700 --- /dev/null +++ b/external/libs/filesystem/v2/test/Jamfile.v2 @@ -0,0 +1,43 @@ +# Boost Filesystem Library test Jamfile + +# (C) Copyright Beman Dawes 2002-2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt) + +project + : requirements + /boost/filesystem//boost_filesystem + msvc:on + ; + + test-suite "filesystem" : + [ run path_test.cpp + : : : static + ] + [ run path_test.cpp + : : : : path_test_dll + ] + [ run operations_test.cpp + : : : static + ] + [ run operations_test.cpp + : : : : operations_test_dll + ] + [ run fstream_test.cpp + : : : static + ] + [ run convenience_test.cpp + : : : static + ] + [ run large_file_support_test.cpp + : : : static + ] + [ run wide_test.cpp + : : : static + ] + + [ compile deprecated_test.cpp ] + [ compile ../example/mbcopy.cpp ] + [ compile ../example/mbpath.cpp ] + [ compile ../example/simple_ls.cpp ] + ; diff --git a/external/libs/filesystem/v2/test/convenience_test.cpp b/external/libs/filesystem/v2/test/convenience_test.cpp new file mode 100644 index 0000000..aa92054 --- /dev/null +++ b/external/libs/filesystem/v2/test/convenience_test.cpp @@ -0,0 +1,176 @@ +// libs/filesystem/test/convenience_test.cpp -------------------------------// + +// Copyright Beman Dawes, 2002 +// 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 + +#define BOOST_FILESYSTEM_VERSION 2 + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +namespace fs = boost::filesystem; +using fs::path; +namespace sys = boost::system; + +#include +#include + +#include +#include +#include + +#ifndef BOOST_FILESYSTEM2_NARROW_ONLY +# define BOOST_FS_IS_EMPTY fs::is_empty +# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO +#else +# define BOOST_FS_IS_EMPTY fs::_is_empty +# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO +#endif + +namespace +{ + template< typename F > + bool throws_fs_error( F func ) + { + try { func(); } + + catch ( const fs::filesystem_error & ) + { + return true; + } + return false; + } + + void create_recursive_iterator( const fs::path & ph ) + { + fs::recursive_directory_iterator it( ph ); + } +} + +// --------------------------------------------------------------------------// + +int cpp_main( int, char*[] ) +{ + +// create_directories() tests ----------------------------------------------// + + BOOST_TEST( !fs::create_directories( "" ) ); // should be harmless + BOOST_TEST( !fs::create_directories( "/" ) ); // ditto + + fs::remove_all( "xx" ); // make sure slate is blank + BOOST_TEST( !fs::exists( "xx" ) ); // reality check + + BOOST_TEST( fs::create_directories( "xx" ) ); + BOOST_TEST( fs::exists( "xx" ) ); + BOOST_TEST( fs::is_directory( "xx" ) ); + + BOOST_TEST( fs::create_directories( "xx/yy/zz" ) ); + BOOST_TEST( fs::exists( "xx" ) ); + BOOST_TEST( fs::exists( "xx/yy" ) ); + BOOST_TEST( fs::exists( "xx/yy/zz" ) ); + BOOST_TEST( fs::is_directory( "xx" ) ); + BOOST_TEST( fs::is_directory( "xx/yy" ) ); + BOOST_TEST( fs::is_directory( "xx/yy/zz" ) ); + + path is_a_file( "xx/uu" ); + { + std::ofstream f( is_a_file.external_file_string().c_str() ); + BOOST_TEST( !!f ); + } + BOOST_TEST( throws_fs_error( + boost::bind( BOOST_BND(fs::create_directories), is_a_file ) ) ); + BOOST_TEST( throws_fs_error( + boost::bind( BOOST_BND(fs::create_directories), is_a_file / "aa" ) ) ); + +// recursive_directory_iterator tests ----------------------------------------// + + sys::error_code ec; + fs::recursive_directory_iterator it( "/no-such-path", ec ); + BOOST_TEST( ec ); + BOOST_TEST( throws_fs_error( + boost::bind( create_recursive_iterator, "/no-such-path" ) ) ); + + fs::remove( "xx/uu" ); + +#ifdef BOOST_WINDOWS_API + // These tests depends on ordering of directory entries, and that's guaranteed + // on Windows but not necessarily on other operating systems + { + std::ofstream f( "xx/yya" ); + BOOST_TEST( !!f ); + } + + for ( it = fs::recursive_directory_iterator( "xx" ); + it != fs::recursive_directory_iterator(); ++it ) + { std::cout << it->path() << '\n'; } + + it = fs::recursive_directory_iterator( "xx" ); + BOOST_TEST( it->path() == "xx/yy" ); + BOOST_TEST( it.level() == 0 ); + ++it; + BOOST_TEST( it->path() == "xx/yy/zz" ); + BOOST_TEST( it.level() == 1 ); + it.pop(); + BOOST_TEST( it->path() == "xx/yya" ); + BOOST_TEST( it.level() == 0 ); + it++; + BOOST_TEST( it == fs::recursive_directory_iterator() ); + + it = fs::recursive_directory_iterator( "xx" ); + BOOST_TEST( it->path() == "xx/yy" ); + it.no_push(); + ++it; + BOOST_TEST( it->path() == "xx/yya" ); + ++it; + BOOST_TEST( it == fs::recursive_directory_iterator() ); + + fs::remove( "xx/yya" ); +#endif + + it = fs::recursive_directory_iterator( "xx/yy/zz" ); + BOOST_TEST( it == fs::recursive_directory_iterator() ); + + it = fs::recursive_directory_iterator( "xx" ); + BOOST_TEST( it->path() == "xx/yy" ); + BOOST_TEST( it.level() == 0 ); + ++it; + BOOST_TEST( it->path() == "xx/yy/zz" ); + BOOST_TEST( it.level() == 1 ); + it++; + BOOST_TEST( it == fs::recursive_directory_iterator() ); + + it = fs::recursive_directory_iterator( "xx" ); + BOOST_TEST( it->path() == "xx/yy" ); + it.no_push(); + ++it; + BOOST_TEST( it == fs::recursive_directory_iterator() ); + + it = fs::recursive_directory_iterator( "xx" ); + BOOST_TEST( it->path() == "xx/yy" ); + ++it; + it.pop(); + BOOST_TEST( it == fs::recursive_directory_iterator() ); + + + + // nothrow wrong. see imp. Make sure failed basic_directory_iterator + // ctor creates the end iterator. + + + + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v2/test/deprecated_test.cpp b/external/libs/filesystem/v2/test/deprecated_test.cpp new file mode 100644 index 0000000..246ffe6 --- /dev/null +++ b/external/libs/filesystem/v2/test/deprecated_test.cpp @@ -0,0 +1,205 @@ +// deprecated_test program --------------------------------------------------// + +// Copyright Beman Dawes 2002 +// 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 + +// This test verifies that various deprecated names still compile. This is +// important to preserve existing code that uses the old names. + +#define BOOST_FILESYSTEM_VERSION 2 + +#include +#include +#include + +namespace fs = boost::filesystem; +using boost::filesystem::path; + +#define PATH_CHECK( a, b ) check( a, b, __LINE__ ) + +namespace +{ + std::string platform( BOOST_PLATFORM ); + + void check( const fs::path & source, + const std::string & expected, int line ) + { + if ( source.string()== expected ) return; + + ++::boost::detail::test_errors(); + + std::cout << '(' << line << ") source.string(): \"" << source.string() + << "\" != expected: \"" << expected + << "\"" << std::endl; + } + + void check_normalize() + { + PATH_CHECK( path("").normalize(), "" ); + PATH_CHECK( path("/").normalize(), "/" ); + PATH_CHECK( path("//").normalize(), "//" ); + PATH_CHECK( path("///").normalize(), "/" ); + PATH_CHECK( path("f").normalize(), "f" ); + PATH_CHECK( path("foo").normalize(), "foo" ); + PATH_CHECK( path("foo/").normalize(), "foo/." ); + PATH_CHECK( path("f/").normalize(), "f/." ); + PATH_CHECK( path( "/foo" ).normalize(), "/foo" ); + PATH_CHECK( path( "foo/bar" ).normalize(), "foo/bar" ); + PATH_CHECK( path("..").normalize(), ".." ); + PATH_CHECK( path("../..").normalize(), "../.." ); + PATH_CHECK( path("/..").normalize(), "/.." ); + PATH_CHECK( path("/../..").normalize(), "/../.." ); + PATH_CHECK( path("../foo").normalize(), "../foo" ); + PATH_CHECK( path("foo/..").normalize(), "." ); + PATH_CHECK( path("foo/../").normalize(), "./." ); + PATH_CHECK( (path("foo") / "..").normalize() , "." ); + PATH_CHECK( path("foo/...").normalize(), "foo/..." ); + PATH_CHECK( path("foo/.../").normalize(), "foo/.../." ); + PATH_CHECK( path("foo/..bar").normalize(), "foo/..bar" ); + PATH_CHECK( path("../f").normalize(), "../f" ); + PATH_CHECK( path("/../f").normalize(), "/../f" ); + PATH_CHECK( path("f/..").normalize(), "." ); + PATH_CHECK( (path("f") / "..").normalize() , "." ); + PATH_CHECK( path("foo/../..").normalize(), ".." ); + PATH_CHECK( path("foo/../../").normalize(), "../." ); + PATH_CHECK( path("foo/../../..").normalize(), "../.." ); + PATH_CHECK( path("foo/../../../").normalize(), "../../." ); + PATH_CHECK( path("foo/../bar").normalize(), "bar" ); + PATH_CHECK( path("foo/../bar/").normalize(), "bar/." ); + PATH_CHECK( path("foo/bar/..").normalize(), "foo" ); + PATH_CHECK( path("foo/bar/../").normalize(), "foo/." ); + PATH_CHECK( path("foo/bar/../..").normalize(), "." ); + PATH_CHECK( path("foo/bar/../../").normalize(), "./." ); + PATH_CHECK( path("foo/bar/../blah").normalize(), "foo/blah" ); + PATH_CHECK( path("f/../b").normalize(), "b" ); + PATH_CHECK( path("f/b/..").normalize(), "f" ); + PATH_CHECK( path("f/b/../").normalize(), "f/." ); + PATH_CHECK( path("f/b/../a").normalize(), "f/a" ); + PATH_CHECK( path("foo/bar/blah/../..").normalize(), "foo" ); + PATH_CHECK( path("foo/bar/blah/../../bletch").normalize(), "foo/bletch" ); + PATH_CHECK( path( "//net" ).normalize(), "//net" ); + PATH_CHECK( path( "//net/" ).normalize(), "//net/" ); + PATH_CHECK( path( "//..net" ).normalize(), "//..net" ); + PATH_CHECK( path( "//net/.." ).normalize(), "//net/.." ); + PATH_CHECK( path( "//net/foo" ).normalize(), "//net/foo" ); + PATH_CHECK( path( "//net/foo/" ).normalize(), "//net/foo/." ); + PATH_CHECK( path( "//net/foo/.." ).normalize(), "//net/" ); + PATH_CHECK( path( "//net/foo/../" ).normalize(), "//net/." ); + + PATH_CHECK( path( "/net/foo/bar" ).normalize(), "/net/foo/bar" ); + PATH_CHECK( path( "/net/foo/bar/" ).normalize(), "/net/foo/bar/." ); + PATH_CHECK( path( "/net/foo/.." ).normalize(), "/net" ); + PATH_CHECK( path( "/net/foo/../" ).normalize(), "/net/." ); + + PATH_CHECK( path( "//net//foo//bar" ).normalize(), "//net/foo/bar" ); + PATH_CHECK( path( "//net//foo//bar//" ).normalize(), "//net/foo/bar/." ); + PATH_CHECK( path( "//net//foo//.." ).normalize(), "//net/" ); + PATH_CHECK( path( "//net//foo//..//" ).normalize(), "//net/." ); + + PATH_CHECK( path( "///net///foo///bar" ).normalize(), "/net/foo/bar" ); + PATH_CHECK( path( "///net///foo///bar///" ).normalize(), "/net/foo/bar/." ); + PATH_CHECK( path( "///net///foo///.." ).normalize(), "/net" ); + PATH_CHECK( path( "///net///foo///..///" ).normalize(), "/net/." ); + + if ( platform == "Windows" ) + { + PATH_CHECK( path( "c:.." ).normalize(), "c:.." ); + PATH_CHECK( path( "c:foo/.." ).normalize(), "c:" ); + + PATH_CHECK( path( "c:foo/../" ).normalize(), "c:." ); + + PATH_CHECK( path( "c:/foo/.." ).normalize(), "c:/" ); + PATH_CHECK( path( "c:/foo/../" ).normalize(), "c:/." ); + PATH_CHECK( path( "c:/.." ).normalize(), "c:/.." ); + PATH_CHECK( path( "c:/../" ).normalize(), "c:/../." ); + PATH_CHECK( path( "c:/../.." ).normalize(), "c:/../.." ); + PATH_CHECK( path( "c:/../../" ).normalize(), "c:/../../." ); + PATH_CHECK( path( "c:/../foo" ).normalize(), "c:/../foo" ); + PATH_CHECK( path( "c:/../foo/" ).normalize(), "c:/../foo/." ); + PATH_CHECK( path( "c:/../../foo" ).normalize(), "c:/../../foo" ); + PATH_CHECK( path( "c:/../../foo/" ).normalize(), "c:/../../foo/." ); + PATH_CHECK( path( "c:/..foo" ).normalize(), "c:/..foo" ); + } + else // POSIX + { + PATH_CHECK( path( "c:.." ).normalize(), "c:.." ); + PATH_CHECK( path( "c:foo/.." ).normalize(), "." ); + PATH_CHECK( path( "c:foo/../" ).normalize(), "./." ); + PATH_CHECK( path( "c:/foo/.." ).normalize(), "c:" ); + PATH_CHECK( path( "c:/foo/../" ).normalize(), "c:/." ); + PATH_CHECK( path( "c:/.." ).normalize(), "." ); + PATH_CHECK( path( "c:/../" ).normalize(), "./." ); + PATH_CHECK( path( "c:/../.." ).normalize(), ".." ); + PATH_CHECK( path( "c:/../../" ).normalize(), "../." ); + PATH_CHECK( path( "c:/../foo" ).normalize(), "foo" ); + PATH_CHECK( path( "c:/../foo/" ).normalize(), "foo/." ); + PATH_CHECK( path( "c:/../../foo" ).normalize(), "../foo" ); + PATH_CHECK( path( "c:/../../foo/" ).normalize(), "../foo/." ); + PATH_CHECK( path( "c:/..foo" ).normalize(), "c:/..foo" ); + } + } +} // unnamed namespace + +//----------------------------------------------------------------------------// + +int cpp_main( int /*argc*/, char * /*argv*/[] ) +{ + // The choice of platform is make at runtime rather than compile-time + // so that compile errors for all platforms will be detected even though + // only the current platform is runtime tested. + platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" ) + ? "Windows" + : "POSIX"; + std::cout << "Platform is " << platform << '\n'; + + path::default_name_check( fs::no_check ); + + fs::directory_entry de( "foo/bar" ); + + de.replace_leaf( "", fs::file_status(), fs::file_status() ); + + de.leaf(); + de.string(); + + fs::path ng( " no-way, Jose" ); + BOOST_TEST( !fs::is_regular( ng ) ); // verify deprecated name still works + BOOST_TEST( !fs::symbolic_link_exists( "nosuchfileordirectory" ) ); + + check_normalize(); + +// extension() tests ---------------------------------------------------------// + + BOOST_TEST( fs::extension("a/b") == "" ); + BOOST_TEST( fs::extension("a/b.txt") == ".txt" ); + BOOST_TEST( fs::extension("a/b.") == "." ); + BOOST_TEST( fs::extension("a.b.c") == ".c" ); + BOOST_TEST( fs::extension("a.b.c.") == "." ); + BOOST_TEST( fs::extension("") == "" ); + BOOST_TEST( fs::extension("a/") == "." ); + +// basename() tests ----------------------------------------------------------// + + BOOST_TEST( fs::basename("b") == "b" ); + BOOST_TEST( fs::basename("a/b.txt") == "b" ); + BOOST_TEST( fs::basename("a/b.") == "b" ); + BOOST_TEST( fs::basename("a.b.c") == "a.b" ); + BOOST_TEST( fs::basename("a.b.c.") == "a.b.c" ); + BOOST_TEST( fs::basename("") == "" ); + +// change_extension tests ---------------------------------------------------// + + BOOST_TEST( fs::change_extension("a.txt", ".tex").string() == "a.tex" ); + BOOST_TEST( fs::change_extension("a.", ".tex").string() == "a.tex" ); + BOOST_TEST( fs::change_extension("a", ".txt").string() == "a.txt" ); + BOOST_TEST( fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex" ); + // see the rationale in html docs for explanation why this works + BOOST_TEST( fs::change_extension("", ".png").string() == ".png" ); + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v2/test/equivalent.cpp b/external/libs/filesystem/v2/test/equivalent.cpp new file mode 100644 index 0000000..be3089a --- /dev/null +++ b/external/libs/filesystem/v2/test/equivalent.cpp @@ -0,0 +1,39 @@ +// equivalent program -------------------------------------------------------// + +// Copyright (c) 2004 Beman Dawes + +// Use, modification, and distribution is subject to the Boost 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 + +//----------------------------------------------------------------------------// + +#include +#include +#include + +int main( int argc, char * argv[] ) +{ + boost::filesystem::path::default_name_check( boost::filesystem::native ); + if ( argc != 3 ) + { + std::cout << "Usage: equivalent path1 path2\n"; + return 2; + } + + bool eq; + try + { + eq = boost::filesystem::equivalent( argv[1], argv[2] ); + } + catch ( const std::exception & ex ) + { + std::cout << ex.what() << "\n"; + return 3; + } + + std::cout << (eq ? "Paths are equivalent\n" : "Paths are not equivalent\n"); + return !eq; +} diff --git a/external/libs/filesystem/v2/test/fstream_test.cpp b/external/libs/filesystem/v2/test/fstream_test.cpp new file mode 100644 index 0000000..331ccd0 --- /dev/null +++ b/external/libs/filesystem/v2/test/fstream_test.cpp @@ -0,0 +1,184 @@ +// fstream_test.cpp --------------------------------------------------------// + +// 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 + +#define BOOST_FILESYSTEM_VERSION 2 + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include // for std::remove + +#include + +#ifndef BOOST_FILESYSTEM2_NARROW_ONLY +# include "lpath.hpp" +#endif + +namespace fs = boost::filesystem; + +#include +#ifdef BOOST_NO_STDC_NAMESPACE + namespace std { using ::remove; } +#endif + +#include +#include + +namespace +{ + bool cleanup = true; + + template< class Path > + void test( const Path & p ) + { + fs::remove( p ); +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open + { + std::cout << " in test 1\n"; + fs::filebuf fb1; + fb1.open( p, std::ios_base::out ); + BOOST_TEST( fb1.is_open() ); + } + { + std::cout << " in test 2\n"; + fs::filebuf fb2; + fb2.open( p, std::ios_base::in ); + BOOST_TEST( fb2.is_open() ); + } +# else + std::cout << "\n"; + std::cout << + "VC++6.0 does not support boost::filesystem open()\n"; +# endif + { + std::cout << " in test 3\n"; + fs::ifstream tfs( p ); + BOOST_TEST( tfs.is_open() ); + } + { + std::cout << " in test 4\n"; + fs::ifstream tfs( p / p.filename() ); // should fail + BOOST_TEST( !tfs.is_open() ); + } + { + std::cout << " in test 5\n"; + fs::ifstream tfs( p, std::ios_base::in ); + BOOST_TEST( tfs.is_open() ); + } +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open + { + std::cout << " in test 6\n"; + fs::ifstream tfs; + tfs.open( p ); + BOOST_TEST( tfs.is_open() ); + } + { + std::cout << " in test 7\n"; + fs::ifstream tfs; + tfs.open( p, std::ios_base::in ); + BOOST_TEST( tfs.is_open() ); + } +# endif + { + std::cout << " in test 8\n"; + fs::ofstream tfs( p ); + BOOST_TEST( tfs.is_open() ); + } + { + std::cout << " in test 9\n"; + fs::ofstream tfs( p, std::ios_base::out ); + BOOST_TEST( tfs.is_open() ); + } +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open + { + std::cout << " in test 10\n"; + fs::ofstream tfs; + tfs.open( p ); + BOOST_TEST( tfs.is_open() ); + } + { + std::cout << " in test 11\n"; + fs::ofstream tfs; + tfs.open( p, std::ios_base::out ); + BOOST_TEST( tfs.is_open() ); + } +# endif + { + std::cout << " in test 12\n"; + fs::fstream tfs( p ); + BOOST_TEST( tfs.is_open() ); + } + { + std::cout << " in test 13\n"; + fs::fstream tfs( p, std::ios_base::in|std::ios_base::out ); + BOOST_TEST( tfs.is_open() ); + } +# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open + { + std::cout << " in test 14\n"; + fs::fstream tfs; + tfs.open( p ); + BOOST_TEST( tfs.is_open() ); + } + { + std::cout << " in test 15\n"; + fs::fstream tfs; + tfs.open( p, std::ios_base::in|std::ios_base::out ); + BOOST_TEST( tfs.is_open() ); + } +# endif + + if ( cleanup ) + fs::remove( p ); + + } // test +} // unnamed namespace + +int cpp_main( int argc, char*[] ) +{ + if ( argc > 1 ) cleanup = false; + + // test fs::path + std::cout << "path tests:\n"; + test( fs::path( "v2_fstream_test" ) ); + +#ifndef BOOST_FILESYSTEM2_NARROW_ONLY + + // So that tests are run with known encoding, use Boost UTF-8 codecvt + std::locale global_loc = std::locale(); + std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet ); + fs::wpath_traits::imbue( loc ); + + // test fs::wpath + // x2780 is circled 1 against white background == e2 9e 80 in UTF-8 + // x2781 is circled 2 against white background == e2 9e 81 in UTF-8 + std::cout << "\nwpath tests:\n"; + test( fs::wpath( L"v2_fstream_test_\x2780" ) ); + + // test user supplied basic_path + const long lname[] = { 'f', 's', 'r', 'e', 'a', 'm', '_', 't', 'e', 's', + 't', '_', 'l', 'p', 'a', 't', 'h', 0 }; + std::cout << "\nlpath tests:\n"; + test( user::lpath( lname ) ); + +#endif + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v2/test/large_file_support_test.cpp b/external/libs/filesystem/v2/test/large_file_support_test.cpp new file mode 100644 index 0000000..8d20240 --- /dev/null +++ b/external/libs/filesystem/v2/test/large_file_support_test.cpp @@ -0,0 +1,42 @@ +// Boost large_file_support_test.cpp ---------------------------------------// + +// Copyright Beman Dawes 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/filesystem + +#define BOOST_FILESYSTEM_VERSION 2 + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +namespace fs = boost::filesystem; + +#include + +int main() +{ + if ( fs::detail::possible_large_file_size_support() ) + { + std::cout << "It appears that file sizes greater that 2 gigabytes are possible\n" + "for this configuration on this platform since the operating system\n" + "does use a large enough integer type to report large file sizes.\n\n" + "Whether or not such support is actually present depends on the OS\n"; + return 0; + } + std::cout << "The operating system is using an integer type to report file sizes\n" + "that can not represent file sizes greater that 2 gigabytes (31-bits).\n" + "Thus the Filesystem Library will not correctly deal with such large\n" + "files. If you think that this operatiing system should be able to\n" + "support large files, please report the problem to the Boost developers\n" + "mailing list.\n"; + return 1; +} diff --git a/external/libs/filesystem/v2/test/lpath.hpp b/external/libs/filesystem/v2/test/lpath.hpp new file mode 100644 index 0000000..36671fa --- /dev/null +++ b/external/libs/filesystem/v2/test/lpath.hpp @@ -0,0 +1,101 @@ +// Boost lpath.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 + +#include +#include // for std::mbstate_t +#include +#include // for std::streamoff + +namespace std +{ + // Note well: this specialization is meant only to support wide_test.cpp. + // It is not fully functional, fully correct, or efficient. + template<> struct char_traits + { + typedef long char_type; + typedef long int_type; + typedef streamoff off_type; + typedef streampos pos_type; + typedef mbstate_t state_type; + static void assign(char_type& c1, const char_type& c2){c1=c2;} + static bool eq(const char_type& c1, const char_type& c2){return c1==c2;} + static bool lt(const char_type& c1, const char_type& c2){return c1 lstring; + struct lpath_traits; + typedef boost::filesystem::basic_path lpath; + + struct lpath_traits + { + typedef lstring internal_string_type; + typedef std::string external_string_type; + + static external_string_type to_external( const lpath &, + const internal_string_type & src ) + { + external_string_type tmp; + for ( internal_string_type::const_iterator it( src.begin() ); + it != src.end(); ++it ) + { + tmp += static_cast(*it); + } + return tmp; + } + + static internal_string_type to_internal( const external_string_type & src ) + { + internal_string_type tmp; + for ( external_string_type::const_iterator it( src.begin() ); + it != src.end(); ++it ) tmp += *it; + return tmp; + } + }; + +} // namespace user + +namespace boost +{ + namespace filesystem2 + { + template<> struct is_basic_path + { static const bool value = true; }; + } +} diff --git a/external/libs/filesystem/v2/test/msvc/common.vsprops b/external/libs/filesystem/v2/test/msvc/common.vsprops new file mode 100644 index 0000000..07762e9 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/common.vsprops @@ -0,0 +1,14 @@ + + + + diff --git a/external/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj b/external/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj new file mode 100644 index 0000000..c05d0e8 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj b/external/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj new file mode 100644 index 0000000..2a46cb4 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/filesystem-v2.sln b/external/libs/filesystem/v2/test/msvc/filesystem-v2.sln new file mode 100644 index 0000000..7b731dc --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/filesystem-v2.sln @@ -0,0 +1,119 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcproj", "{F31C02C7-63A4-489C-A176-695D68E5BCA4}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcproj", "{9C8BACE4-BCA5-479C-801C-AB903DE931D1}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcproj", "{15371D22-F930-4286-9126-C3516E78CB09}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcproj", "{EAB6925F-DB89-4759-BC8E-6F1AB3176393}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcproj", "{F80D96CE-07DC-48DF-85FD-399A7266E457}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcproj", "{1AA29237-E10E-400B-8A30-4DA67FFB648C}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wide_test", "wide_test\wide_test.vcproj", "{124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_ls", "simple_ls\simple_ls.vcproj", "{FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mbcopy", "mbcopy\mbcopy.vcproj", "{80712DDD-CA0F-4177-AD0F-1392BB497902}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "large_file_support_test", "large_file_support_test\large_file_support_test.vcproj", "{49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcproj", "{EA1530CD-7058-4912-8B51-8D55A07F0A1D}" + ProjectSection(ProjectDependencies) = postProject + {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09} + {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Debug|Win32.Build.0 = Debug|Win32 + {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Release|Win32.ActiveCfg = Release|Win32 + {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Release|Win32.Build.0 = Release|Win32 + {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Debug|Win32.Build.0 = Debug|Win32 + {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Release|Win32.ActiveCfg = Release|Win32 + {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Release|Win32.Build.0 = Release|Win32 + {15371D22-F930-4286-9126-C3516E78CB09}.Debug|Win32.ActiveCfg = Debug|Win32 + {15371D22-F930-4286-9126-C3516E78CB09}.Debug|Win32.Build.0 = Debug|Win32 + {15371D22-F930-4286-9126-C3516E78CB09}.Release|Win32.ActiveCfg = Release|Win32 + {15371D22-F930-4286-9126-C3516E78CB09}.Release|Win32.Build.0 = Release|Win32 + {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Debug|Win32.ActiveCfg = Debug|Win32 + {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Debug|Win32.Build.0 = Debug|Win32 + {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Release|Win32.ActiveCfg = Release|Win32 + {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Release|Win32.Build.0 = Release|Win32 + {F80D96CE-07DC-48DF-85FD-399A7266E457}.Debug|Win32.ActiveCfg = Debug|Win32 + {F80D96CE-07DC-48DF-85FD-399A7266E457}.Debug|Win32.Build.0 = Debug|Win32 + {F80D96CE-07DC-48DF-85FD-399A7266E457}.Release|Win32.ActiveCfg = Release|Win32 + {F80D96CE-07DC-48DF-85FD-399A7266E457}.Release|Win32.Build.0 = Release|Win32 + {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Debug|Win32.ActiveCfg = Debug|Win32 + {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Debug|Win32.Build.0 = Debug|Win32 + {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Release|Win32.ActiveCfg = Release|Win32 + {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Release|Win32.Build.0 = Release|Win32 + {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Debug|Win32.ActiveCfg = Debug|Win32 + {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Debug|Win32.Build.0 = Debug|Win32 + {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Release|Win32.ActiveCfg = Release|Win32 + {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Release|Win32.Build.0 = Release|Win32 + {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Debug|Win32.ActiveCfg = Debug|Win32 + {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Debug|Win32.Build.0 = Debug|Win32 + {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Release|Win32.ActiveCfg = Release|Win32 + {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Release|Win32.Build.0 = Release|Win32 + {80712DDD-CA0F-4177-AD0F-1392BB497902}.Debug|Win32.ActiveCfg = Debug|Win32 + {80712DDD-CA0F-4177-AD0F-1392BB497902}.Debug|Win32.Build.0 = Debug|Win32 + {80712DDD-CA0F-4177-AD0F-1392BB497902}.Release|Win32.ActiveCfg = Release|Win32 + {80712DDD-CA0F-4177-AD0F-1392BB497902}.Release|Win32.Build.0 = Release|Win32 + {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Debug|Win32.ActiveCfg = Debug|Win32 + {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Debug|Win32.Build.0 = Debug|Win32 + {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Release|Win32.ActiveCfg = Release|Win32 + {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Release|Win32.Build.0 = Release|Win32 + {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Debug|Win32.Build.0 = Debug|Win32 + {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Release|Win32.ActiveCfg = Release|Win32 + {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/external/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj b/external/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj new file mode 100644 index 0000000..39ab3c0 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj b/external/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj new file mode 100644 index 0000000..d2aff8b --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj b/external/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj new file mode 100644 index 0000000..2c3202b --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj b/external/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj new file mode 100644 index 0000000..0e22c0e --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj b/external/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj new file mode 100644 index 0000000..4748370 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj b/external/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj new file mode 100644 index 0000000..ed099e9 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj b/external/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj new file mode 100644 index 0000000..ffe4342 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj b/external/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj new file mode 100644 index 0000000..19f98ff --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj b/external/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj new file mode 100644 index 0000000..7a5ccde --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj b/external/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj new file mode 100644 index 0000000..dd87db7 --- /dev/null +++ b/external/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v2/test/operations_test.cpp b/external/libs/filesystem/v2/test/operations_test.cpp new file mode 100644 index 0000000..c61f8b2 --- /dev/null +++ b/external/libs/filesystem/v2/test/operations_test.cpp @@ -0,0 +1,953 @@ +// Boost operations_test.cpp -----------------------------------------------// + +// Copyright Beman Dawes 2002. + +// Distributed under the Boost 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 + +#define BOOST_FILESYSTEM_VERSION 2 + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +namespace fs = boost::filesystem; + +#include +#include +#include + +using boost::system::error_code; +using boost::system::system_category; +using boost::system::system_error; + +#include +#include +#include +#include // for strncmp, etc. +#include +#include // for system() + +#ifndef BOOST_FILESYSTEM2_NARROW_ONLY +# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO +#else +# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO +#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 +# define BOOST_FS_IS_EMPTY fs::is_empty +#else +# define BOOST_FS_IS_EMPTY fs::_is_empty +#endif + +# ifdef BOOST_NO_STDC_NAMESPACE + namespace std { using ::asctime; using ::gmtime; using ::localtime; + using ::difftime; using ::time; using ::tm; using ::mktime; using ::system; } +# endif + +#ifdef BOOST_WINDOWS_API +# include +#endif + +#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__) + +namespace +{ + typedef int errno_t; + std::string platform( BOOST_PLATFORM ); + bool report_throws; + fs::directory_iterator end_itr; + + unsigned short language_id; // 0 except for Windows + + const char * temp_dir_name = "v2_operations_test"; + + void create_file( const fs::path & ph, const std::string & contents ) + { + std::ofstream f( ph.file_string().c_str() ); + if ( !f ) + BOOST_FILESYSTEM_THROW( fs::filesystem_error( "operations_test create_file", + ph, error_code(errno, system_category()) ) ); + if ( !contents.empty() ) f << contents; + } + + void verify_file( const fs::path & ph, const std::string & expected ) + { + std::ifstream f( ph.file_string().c_str() ); + if ( !f ) + BOOST_FILESYSTEM_THROW( fs::filesystem_error( "operations_test verify_file", + ph, error_code(errno, system_category()) ) ); + std::string contents; + f >> contents; + if ( contents != expected ) + BOOST_FILESYSTEM_THROW( fs::filesystem_error( "operations_test verify_file contents \"" + + contents + "\" != \"" + expected + "\"", ph, error_code() ) ); + } + + template< typename F > + bool throws_fs_error( F func, errno_t en, int line ) + { + try { func(); } + + catch ( const fs::filesystem_error & ex ) + { + if ( report_throws ) + { + // use the what() convenience function to display exceptions + std::cout << "\n" << ex.what() << "\n"; + } + if ( en == 0 + || en == ex.code().default_error_condition().value() ) return true; + std::cout + << "\nWarning: line " << line + << " exception reports default_error_condition().value() " << ex.code().default_error_condition().value() + << ", should be " << en + << "\n value() is " << ex.code().value() + << std::endl; + return true; + } + return false; + } + + // compile-only two argument "do-the-right-thing" tests + // verifies that all overload combinations compile without error + void do_not_call() + { + fs::path p; + std::string s; + const char * a = 0; + fs::copy_file( p, p ); + fs::copy_file( s, p ); + fs::copy_file( a, p ); + fs::copy_file( p, s ); + fs::copy_file( p, a ); + fs::copy_file( s, s ); + fs::copy_file( a, s ); + fs::copy_file( s, a ); + fs::copy_file( a, a ); + } + + void exception_tests() + { + bool exception_thrown; + exception_thrown = false; + try + { + fs::create_directory( "no-such-dir/foo/bar" ); + } + catch ( std::runtime_error x ) + { + exception_thrown = true; + if ( report_throws ) std::cout << x.what() << std::endl; + if ( platform == "Windows" && language_id == 0x0409 ) // English (United States) + // the stdcxx standard library apparently appends additional info + // to what(), so check only the initial portion: + BOOST_TEST( std::strncmp( x.what(), + "boost::filesystem::create_directory", + sizeof("boost::filesystem::create_directory")-1 ) == 0 ); + } + BOOST_TEST( exception_thrown ); + + exception_thrown = false; + try + { + fs::create_directory( "no-such-dir/foo/bar" ); + } + catch ( system_error x ) + { + exception_thrown = true; + if ( report_throws ) std::cout << x.what() << std::endl; + if ( platform == "Windows" && language_id == 0x0409 ) // English (United States) + BOOST_TEST( std::strcmp( x.what(), + "boost::filesystem::create_directory: The system cannot find the path specified" ) == 0 ); + } + BOOST_TEST( exception_thrown ); + + exception_thrown = false; + try + { + fs::create_directory( "no-such-dir/foo/bar" ); + } + catch ( fs::filesystem_error x ) + { + exception_thrown = true; + if ( report_throws ) std::cout << x.what() << std::endl; + if ( platform == "Windows" && language_id == 0x0409 ) // English (United States) + { + bool ok ( std::strcmp( x.what(), + "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 ); + BOOST_TEST( ok ); + if ( !ok ) + { + std::cout << "what returns \"" << x.what() << "\"" << std::endl; + } + } + } + BOOST_TEST( exception_thrown ); + + exception_thrown = false; + try + { + fs::create_directory( "no-such-dir/foo/bar" ); + } + catch ( const fs::filesystem_error & x ) + { + exception_thrown = true; + if ( report_throws ) std::cout << x.what() << std::endl; + if ( platform == "Windows" && language_id == 0x0409 ) // English (United States) + { + bool ok ( std::strcmp( x.what(), + "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 ); + BOOST_TEST( ok ); + if ( !ok ) + { + std::cout << "what returns \"" << x.what() << "\"" << std::endl; + } + } + } + BOOST_TEST( exception_thrown ); + } + + void bad_file_size() + { + fs::file_size( " No way, Jose" ); + } + + void bad_directory_size() + { + fs::file_size( fs::current_path() ); + } + + fs::path bad_create_directory_path; + void bad_create_directory() + { + fs::create_directory( bad_create_directory_path ); + } + + void bad_equivalent() + { + fs::equivalent( "no-such-path", "another-not-present-path" ); + } + + fs::path bad_remove_dir; + void bad_remove() + { + fs::remove( bad_remove_dir ); + } + + class renamer + { + public: + renamer( const fs::path & p1, const fs::path & p2 ) + : from(p1), to(p2) {} + void operator()() + { + fs::rename( from, to ); + } + private: + fs::path from; + fs::path to; + }; + +} // unnamed namespace + +// main ------------------------------------------------------------------------------// + +int cpp_main( int argc, char * argv[] ) +{ + if ( argc > 1 && *argv[1]=='-' && *(argv[1]+1)=='t' ) report_throws = true; + + // The choice of platform is make at runtime rather than compile-time + // so that compile errors for all platforms will be detected even though + // only the current platform is runtime tested. +# if defined( BOOST_POSIX_API ) + platform = "POSIX"; +# elif defined( BOOST_WINDOWS_API ) + platform = "Windows"; +# if !defined(__MINGW32__) && !defined(__CYGWIN__) + language_id = ::GetUserDefaultUILanguage(); +# else + language_id = 0x0409; // Assume US English +# endif +# else +# error API should always be defined. Something is wrong with boost/system/api_config.hpp +# endif + std::cout << "API is " << platform << std::endl; + + exception_tests(); + + std::cout << "\ninitial_path().string() is\n \"" + << fs::initial_path().string() + << "\"\n"; + std::cout << "\ninitial_path().file_string() is\n \"" + << fs::initial_path().file_string() + << "\"\n\n"; + BOOST_TEST( fs::initial_path().is_complete() ); + BOOST_TEST( fs::current_path().is_complete() ); + BOOST_TEST( fs::initial_path().string() + == fs::current_path().string() ); + + BOOST_TEST( fs::complete( "" ).empty() ); + BOOST_TEST( fs::complete( "/" ).string() == fs::initial_path().root_path().string() ); + BOOST_TEST( fs::complete( "foo" ).string() == fs::initial_path().string()+"/foo" ); + BOOST_TEST( fs::complete( "/foo" ).string() == fs::initial_path().root_path().string()+"foo" ); + BOOST_TEST( fs::complete( "foo", fs::path( "//net/bar" ) ).string() + == "//net/bar/foo" ); + + // predicate and status tests + BOOST_TEST( fs::exists( "/" ) ); + fs::path ng( " no-way, Jose" ); + BOOST_TEST( !fs::exists( ng ) ); + BOOST_TEST( !fs::is_directory( ng ) ); + BOOST_TEST( !fs::is_regular_file( ng ) ); + BOOST_TEST( !fs::is_symlink( ng ) ); + fs::file_status stat( fs::status( ng ) ); + BOOST_TEST( fs::status_known( stat ) ); + BOOST_TEST( !fs::exists( stat ) ); + BOOST_TEST( !fs::is_directory( stat ) ); + BOOST_TEST( !fs::is_regular_file( stat ) ); + BOOST_TEST( !fs::is_other( stat ) ); + BOOST_TEST( !fs::is_symlink( stat ) ); + stat = fs::status( "" ); + BOOST_TEST( fs::status_known( stat ) ); + BOOST_TEST( !fs::exists( stat ) ); + BOOST_TEST( !fs::is_directory( stat ) ); + BOOST_TEST( !fs::is_regular_file( stat ) ); + BOOST_TEST( !fs::is_other( stat ) ); + BOOST_TEST( !fs::is_symlink( stat ) ); + + fs::path dir( fs::initial_path() / temp_dir_name ); + + if ( fs::exists( dir ) ) + fs::remove_all( dir ); // remove residue from prior failed tests + BOOST_TEST( !fs::exists( dir ) ); + + // create a directory, then check it for consistency + // take extra care to report problems, since if this fails + // many subsequent tests will fail + try + { + fs::create_directory( dir ); + } + + catch ( const fs::filesystem_error & x ) + { + std::cout << x.what() << "\n\n" + "***** Creating directory " << dir.string() << " failed. *****\n" + "***** This is a serious error that will prevent further tests *****\n" + "***** from returning useful results. Further testing is aborted. *****\n\n"; + return 1; + } + + catch ( ... ) + { + std::cout << "\n\n" + "***** Creating directory " << dir.string() << " failed. *****\n" + "***** This is a serious error that will prevent further tests *****\n" + "***** from returning useful results. Further testing is aborted. *****\n\n"; + return 1; + } + + BOOST_TEST( fs::exists( dir ) ); + BOOST_TEST( BOOST_FS_IS_EMPTY( dir ) ); + BOOST_TEST( fs::is_directory( dir ) ); + BOOST_TEST( !fs::is_regular_file( dir ) ); + BOOST_TEST( !fs::is_other( dir ) ); + BOOST_TEST( !fs::is_symlink( dir ) ); + stat = fs::status( dir ); + BOOST_TEST( fs::exists( stat ) ); + BOOST_TEST( fs::is_directory( stat ) ); + BOOST_TEST( !fs::is_regular_file( stat ) ); + BOOST_TEST( !fs::is_other( stat ) ); + BOOST_TEST( !fs::is_symlink( stat ) ); + + // Windows only tests + if ( platform == "Windows" ) + { + BOOST_TEST( !fs::exists( fs::path( "//share-not" ) ) ); + BOOST_TEST( !fs::exists( fs::path( "//share-not/" ) ) ); + BOOST_TEST( !fs::exists( fs::path( "//share-not/foo" ) ) ); + BOOST_TEST( !fs::exists( "tools/jam/src/:sys:stat.h" ) ); // !exists() if ERROR_INVALID_NAME + BOOST_TEST( !fs::exists( ":sys:stat.h" ) ); // !exists() if ERROR_INVALID_PARAMETER + BOOST_TEST( !fs::exists( "1:/" ) ); + BOOST_TEST( dir.string().size() > 1 + && dir.string()[1] == ':' ); // verify path includes drive + + BOOST_TEST( fs::system_complete( "" ).empty() ); + BOOST_TEST( fs::system_complete( "/" ).string() + == fs::initial_path().root_path().string() ); + BOOST_TEST( fs::system_complete( "foo" ).string() + == fs::initial_path().string()+"/foo" ); + BOOST_TEST( fs::system_complete( "/foo" ).string() + == fs::initial_path().root_path().string()+"foo" ); + BOOST_TEST( fs::complete( fs::path( "c:/" ) ).string() + == "c:/" ); + BOOST_TEST( fs::complete( fs::path( "c:/foo" ) ).string() + == "c:/foo" ); + + BOOST_TEST( fs::system_complete( fs::path( fs::initial_path().root_name() ) ).string() == fs::initial_path().string() ); + BOOST_TEST( fs::system_complete( fs::path( fs::initial_path().root_name() + + "foo" ) ).string() == fs::initial_path().string()+"/foo" ); + BOOST_TEST( fs::system_complete( fs::path( "c:/" ) ).string() + == "c:/" ); + BOOST_TEST( fs::system_complete( fs::path( "c:/foo" ) ).string() + == "c:/foo" ); + BOOST_TEST( fs::system_complete( fs::path( "//share" ) ).string() + == "//share" ); + } // Windows + + else if ( platform == "POSIX" ) + { + BOOST_TEST( fs::system_complete( "" ).empty() ); + BOOST_TEST( fs::initial_path().root_path().string() == "/" ); + BOOST_TEST( fs::system_complete( "/" ).string() == "/" ); + BOOST_TEST( fs::system_complete( "foo" ).string() + == fs::initial_path().string()+"/foo" ); + BOOST_TEST( fs::system_complete( "/foo" ).string() + == fs::initial_path().root_path().string()+"foo" ); + } // POSIX + + // the bound functions should throw, so CHECK_EXCEPTION() should return true + BOOST_TEST( CHECK_EXCEPTION( bad_file_size, ENOENT ) ); + + // test path::exception members + try { fs::file_size( ng ); } // will throw + + catch ( const fs::filesystem_error & ex ) + { + BOOST_TEST( ex.path1().string() == " no-way, Jose" ); + } + // several functions give unreasonable results if uintmax_t isn't 64-bits + std::cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n'; + BOOST_TEST( sizeof( boost::uintmax_t ) >= 8 ); + + // set the current directory, then check it for consistency + fs::path original_dir = fs::current_path(); + BOOST_TEST( dir != original_dir ); + fs::current_path( dir ); + BOOST_TEST( fs::current_path() == dir ); + BOOST_TEST( fs::current_path() != original_dir ); + fs::current_path( original_dir ); + BOOST_TEST( fs::current_path() == original_dir ); + BOOST_TEST( fs::current_path() != dir ); + // make sure the overloads work + fs::current_path( dir.string().c_str() ); + BOOST_TEST( fs::current_path() == dir ); + BOOST_TEST( fs::current_path() != original_dir ); + fs::current_path( original_dir.string() ); + BOOST_TEST( fs::current_path() == original_dir ); + BOOST_TEST( fs::current_path() != dir ); + + // make some reasonable assuptions for testing purposes + fs::space_info spi( fs::space( dir ) ); + BOOST_TEST( spi.capacity > 1000000 ); + BOOST_TEST( spi.free > 1000 ); + BOOST_TEST( spi.capacity > spi.free ); + BOOST_TEST( spi.free >= spi.available ); + + // it is convenient to display space, but older VC++ versions choke +# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0 + std::cout << " capacity = " << spi.capacity << '\n'; + std::cout << " free = " << spi.free << '\n'; + std::cout << "available = " << spi.available << '\n'; +# endif + + if ( platform == "Windows" ) + BOOST_TEST( CHECK_EXCEPTION( bad_directory_size, ENOENT ) ); + else + BOOST_TEST( CHECK_EXCEPTION( bad_directory_size, 0 ) ); + BOOST_TEST( !fs::create_directory( dir ) ); + + BOOST_TEST( !fs::is_symlink( dir ) ); + BOOST_TEST( !fs::is_symlink( "nosuchfileordirectory" ) ); + + fs::path d1( dir / "d1" ); + BOOST_TEST( fs::create_directory( d1 ) ); + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( fs::is_directory( d1 ) ); + BOOST_TEST( BOOST_FS_IS_EMPTY( d1 ) ); + +// boost::function_requires< boost::InputIteratorConcept< fs::directory_iterator > >(); + + bool dir_itr_exception(false); + try { fs::directory_iterator it( "" ); } + catch ( const fs::filesystem_error & ) { dir_itr_exception = true; } + BOOST_TEST( dir_itr_exception ); + + dir_itr_exception = false; + try { fs::directory_iterator it( "nosuchdirectory" ); } + catch ( const fs::filesystem_error & ) { dir_itr_exception = true; } + BOOST_TEST( dir_itr_exception ); + + dir_itr_exception = false; + try + { + error_code ec; + fs::directory_iterator it( "nosuchdirectory", ec ); + BOOST_TEST( ec ); + BOOST_TEST( ec == fs::detail::not_found_error() ); + } + catch ( const fs::filesystem_error & ) { dir_itr_exception = true; } + BOOST_TEST( !dir_itr_exception ); + + { + // probe query function overloads + fs::directory_iterator dir_itr( dir ); + BOOST_TEST( fs::is_directory( *dir_itr ) ); + BOOST_TEST( fs::is_directory( dir_itr->status() ) ); + BOOST_TEST( fs::is_directory( fs::symlink_status(*dir_itr) ) ); + BOOST_TEST( fs::is_directory( dir_itr->symlink_status() ) ); + BOOST_TEST( dir_itr->path().filename() == "d1" ); + } + + // create a second directory named d2 + fs::path d2( dir / "d2" ); + fs::create_directory(d2 ); + BOOST_TEST( fs::exists( d2 ) ); + BOOST_TEST( fs::is_directory( d2 ) ); + + // test the basic operation of directory_iterators, and test that + // stepping one iterator doesn't affect a different iterator. + { + fs::directory_iterator dir_itr( dir ); + BOOST_TEST( fs::exists(dir_itr->status()) ); + BOOST_TEST( fs::is_directory(dir_itr->status()) ); + BOOST_TEST( !fs::is_regular_file(dir_itr->status()) ); + BOOST_TEST( !fs::is_other(dir_itr->status()) ); + BOOST_TEST( !fs::is_symlink(dir_itr->status()) ); + + fs::directory_iterator dir_itr2( dir ); + BOOST_TEST( dir_itr->path().filename() == "d1" + || dir_itr->path().filename() == "d2" ); + BOOST_TEST( dir_itr2->path().filename() == "d1" || dir_itr2->path().filename() == "d2" ); + if ( dir_itr->path().filename() == "d1" ) + { + BOOST_TEST( (++dir_itr)->path().filename() == "d2" ); + BOOST_TEST( dir_itr2->path().filename() == "d1" ); + BOOST_TEST( (++dir_itr2)->path().filename() == "d2" ); + } + else + { + BOOST_TEST( dir_itr->path().filename() == "d2" ); + BOOST_TEST( (++dir_itr)->path().filename() == "d1" ); + BOOST_TEST( (dir_itr2)->path().filename() == "d2" ); + BOOST_TEST( (++dir_itr2)->path().filename() == "d1" ); + } + BOOST_TEST( ++dir_itr == fs::directory_iterator() ); + BOOST_TEST( dir_itr2 != fs::directory_iterator() ); + BOOST_TEST( ++dir_itr2 == fs::directory_iterator() ); + } + + { // *i++ must work to meet the standard's InputIterator requirements + fs::directory_iterator dir_itr( dir ); + BOOST_TEST( dir_itr->path().filename() == "d1" + || dir_itr->path().filename() == "d2" ); + if ( dir_itr->path().filename() == "d1" ) + { + BOOST_TEST( (*dir_itr++).path().filename() == "d1" ); + BOOST_TEST( dir_itr->path().filename() == "d2" ); + } + else + { + // Check C++98 input iterator requirements + BOOST_TEST( (*dir_itr++).path().filename() == "d2" ); + // input iterator requirements in the current WP would require this check: + // BOOST_TEST( implicit_cast(*dir_itr++).filename() == "d1" ); + + BOOST_TEST( dir_itr->path().filename() == "d1" ); + } + + // test case reported in comment to SourceForge bug tracker [937606] + fs::directory_iterator it( dir ); + const fs::path p1 = *it++; + BOOST_TEST( it != fs::directory_iterator() ); + const fs::path p2 = *it++; + BOOST_TEST( p1 != p2 ); + BOOST_TEST( it == fs::directory_iterator() ); + } + + // Windows has a tricky special case when just the root-name is given, + // causing the rest of the path to default to the current directory. + // Reported as S/F bug [ 1259176 ] + if ( platform == "Windows" ) + { + fs::path root_name_path( fs::current_path().root_name() ); + fs::directory_iterator it( root_name_path ); + BOOST_TEST( it != fs::directory_iterator() ); + BOOST_TEST( fs::exists( *it ) ); + BOOST_TEST( it->path().parent_path() == root_name_path ); + bool found(false); + do + { + if ( it->path().filename() == temp_dir_name ) found = true; + } while ( ++it != fs::directory_iterator() ); + BOOST_TEST( found ); + } + + // create an empty file named "f0" + fs::path file_ph( dir / "f0"); + create_file( file_ph, "" ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( !fs::is_directory( file_ph ) ); + BOOST_TEST( fs::is_regular_file( file_ph ) ); + BOOST_TEST( BOOST_FS_IS_EMPTY( file_ph ) ); + BOOST_TEST( fs::file_size( file_ph ) == 0 ); + bad_create_directory_path = file_ph; + BOOST_TEST( CHECK_EXCEPTION( bad_create_directory, EEXIST ) ); + stat = fs::status( file_ph ); + BOOST_TEST( fs::status_known( stat ) ); + BOOST_TEST( fs::exists( stat ) ); + BOOST_TEST( !fs::is_directory( stat ) ); + BOOST_TEST( fs::is_regular_file( stat ) ); + BOOST_TEST( !fs::is_other( stat ) ); + BOOST_TEST( !fs::is_symlink( stat ) ); + + // create a file named "f1" + file_ph = dir / "f1"; + create_file( file_ph, "foobar1" ); + + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( !fs::is_directory( file_ph ) ); + BOOST_TEST( fs::is_regular_file( file_ph ) ); + BOOST_TEST( fs::file_size( file_ph ) == 7 ); + verify_file( file_ph, "foobar1" ); + + // equivalence tests + BOOST_TEST( CHECK_EXCEPTION( bad_equivalent, ENOENT ) ); + BOOST_TEST( fs::equivalent( file_ph, dir / "f1" ) ); + BOOST_TEST( fs::equivalent( dir, d1 / ".." ) ); + BOOST_TEST( !fs::equivalent( file_ph, dir ) ); + BOOST_TEST( !fs::equivalent( dir, file_ph ) ); + BOOST_TEST( !fs::equivalent( d1, d2 ) ); + BOOST_TEST( !fs::equivalent( dir, ng ) ); + BOOST_TEST( !fs::equivalent( ng, dir ) ); + BOOST_TEST( !fs::equivalent( file_ph, ng ) ); + BOOST_TEST( !fs::equivalent( ng, file_ph ) ); + + // hard link tests + fs::path from_ph( dir / "f3" ); + BOOST_TEST( !fs::exists( from_ph ) ); + BOOST_TEST( fs::exists( file_ph ) ); + bool create_hard_link_ok(true); + try { fs::create_hard_link( file_ph, from_ph ); } + catch ( const fs::filesystem_error & ex ) + { + create_hard_link_ok = false; + std::cout + << "create_hard_link() attempt failed\n" + << "filesystem_error.what() reports: " << ex.what() << '\n' + << "create_hard_link() may not be supported on this file system\n"; + } + + if ( create_hard_link_ok ) + { + std::cout << "create_hard_link(\"" << file_ph << "\", \"" + << from_ph << "\") succeeded\n"; + BOOST_TEST( fs::exists( from_ph ) ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( fs::equivalent( from_ph, file_ph ) ); + } + + error_code ec; + BOOST_TEST( fs::create_hard_link( fs::path("doesnotexist"), + fs::path("shouldnotwork"), ec ) ); + BOOST_TEST( ec ); + + // symbolic link tests + from_ph = dir / "f4"; + BOOST_TEST( !fs::exists( from_ph ) ); + BOOST_TEST( fs::exists( file_ph ) ); + bool create_symlink_ok(true); + try { fs::create_symlink( file_ph, from_ph ); } + catch ( const fs::filesystem_error & ex ) + { + create_symlink_ok = false; + std::cout + << "create_symlink() attempt failed\n" + << "filesystem_error.what() reports: " << ex.what() << '\n' + << "create_symlink() may not be supported on this file system\n"; + } + + if ( create_symlink_ok ) + { + std::cout << "create_symlink() succeeded\n"; + BOOST_TEST( fs::exists( from_ph ) ); + BOOST_TEST( fs::is_symlink( from_ph ) ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( fs::equivalent( from_ph, file_ph ) ); + stat = fs::symlink_status( from_ph ); + BOOST_TEST( fs::exists( stat ) ); + BOOST_TEST( !fs::is_directory( stat ) ); + BOOST_TEST( !fs::is_regular_file( stat ) ); + BOOST_TEST( !fs::is_other( stat ) ); + BOOST_TEST( fs::is_symlink( stat ) ); + } + + ec = error_code(); + BOOST_TEST( fs::create_symlink( "doesnotexist", "", ec ) ); + BOOST_TEST( ec ); + + // there was an inital bug in directory_iterator that caused premature + // close of an OS handle. This block will detect regression. + { + fs::directory_iterator di; + { di = fs::directory_iterator( dir ); } + BOOST_TEST( ++di != fs::directory_iterator() ); + } + + // copy_file() tests + std::cout << "begin copy_file test..." << std::endl; + fs::copy_file( file_ph, d1 / "f2" ); + std::cout << "copying complete" << std::endl; + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + BOOST_TEST( !fs::is_directory( d1 / "f2" ) ); + verify_file( d1 / "f2", "foobar1" ); + + bool copy_ex_ok = false; + try { fs::copy_file( file_ph, d1 / "f2" ); } + catch ( const fs::filesystem_error & ) { copy_ex_ok = true; } + BOOST_TEST( copy_ex_ok ); + + copy_ex_ok = false; + try { fs::copy_file( file_ph, d1 / "f2", fs::copy_option::fail_if_exists ); } + catch ( const fs::filesystem_error & ) { copy_ex_ok = true; } + BOOST_TEST( copy_ex_ok ); + + copy_ex_ok = true; + try { fs::copy_file( file_ph, d1 / "f2", fs::copy_option::overwrite_if_exists ); } + catch ( const fs::filesystem_error & ) { copy_ex_ok = false; } + BOOST_TEST( copy_ex_ok ); + + std::cout << "copy_file test complete" << std::endl; + + // rename() test case numbers refer to operations.htm#rename table + + // [case 1] make sure can't rename() a non-existent file + BOOST_TEST( !fs::exists( d1 / "f99" ) ); + BOOST_TEST( !fs::exists( d1 / "f98" ) ); + renamer n1a( d1 / "f99", d1 / "f98" ); + BOOST_TEST( CHECK_EXCEPTION( n1a, ENOENT ) ); + renamer n1b( fs::path(""), d1 / "f98" ); + BOOST_TEST( CHECK_EXCEPTION( n1b, ENOENT ) ); + + // [case 2] rename() target.empty() + renamer n2( file_ph, "" ); + BOOST_TEST( CHECK_EXCEPTION( n2, ENOENT ) ); + + // [case 3] make sure can't rename() to an existent file or directory + BOOST_TEST( fs::exists( dir / "f1" ) ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + renamer n3a( dir / "f1", d1 / "f2" ); + BOOST_TEST( CHECK_EXCEPTION( n3a, EEXIST ) ); + // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST, + // so we don't verify error type on the above test. + renamer n3b( dir, d1 ); + BOOST_TEST( CHECK_EXCEPTION( n3b, 0 ) ); + + // [case 4A] can't rename() file to a nonexistent parent directory + BOOST_TEST( !fs::is_directory( dir / "f1" ) ); + BOOST_TEST( !fs::exists( dir / "d3/f3" ) ); + renamer n4a( dir / "f1", dir / "d3/f3" ); + BOOST_TEST( CHECK_EXCEPTION( n4a, ENOENT ) ); + + // [case 4B] rename() file in same directory + BOOST_TEST( fs::exists( d1 / "f2" ) ); + BOOST_TEST( !fs::exists( d1 / "f50" ) ); + fs::rename( d1 / "f2", d1 / "f50" ); + BOOST_TEST( !fs::exists( d1 / "f2" ) ); + BOOST_TEST( fs::exists( d1 / "f50" ) ); + fs::rename( d1 / "f50", d1 / "f2" ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + BOOST_TEST( !fs::exists( d1 / "f50" ) ); + + // [case 4C] rename() file d1/f2 to d2/f3 + fs::rename( d1 / "f2", d2 / "f3" ); + BOOST_TEST( !fs::exists( d1 / "f2" ) ); + BOOST_TEST( !fs::exists( d2 / "f2" ) ); + BOOST_TEST( fs::exists( d2 / "f3" ) ); + BOOST_TEST( !fs::is_directory( d2 / "f3" ) ); + verify_file( d2 / "f3", "foobar1" ); + fs::rename( d2 / "f3", d1 / "f2" ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + + // [case 5A] rename() directory to nonexistent parent directory + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( !fs::exists( dir / "d3/d5" ) ); + BOOST_TEST( !fs::exists( dir / "d3" ) ); + renamer n5a( d1, dir / "d3/d5" ); + BOOST_TEST( CHECK_EXCEPTION( n5a, ENOENT ) ); + + // [case 5B] rename() on directory + fs::path d3( dir / "d3" ); + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + BOOST_TEST( !fs::exists( d3 ) ); + fs::rename( d1, d3 ); + BOOST_TEST( !fs::exists( d1 ) ); + BOOST_TEST( fs::exists( d3 ) ); + BOOST_TEST( fs::is_directory( d3 ) ); + BOOST_TEST( !fs::exists( d1 / "f2" ) ); + BOOST_TEST( fs::exists( d3 / "f2" ) ); + fs::rename( d3, d1 ); + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + BOOST_TEST( !fs::exists( d3 ) ); + + // [case 5C] rename() rename and move d1 to d2 / "d20" + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( !fs::exists( d2 / "d20" ) ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + fs::rename( d1, d2 / "d20" ); + BOOST_TEST( !fs::exists( d1 ) ); + BOOST_TEST( fs::exists( d2 / "d20" ) ); + BOOST_TEST( fs::exists( d2 / "d20" / "f2" ) ); + fs::rename( d2 / "d20", d1 ); + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( !fs::exists( d2 / "d20" ) ); + BOOST_TEST( fs::exists( d1 / "f2" ) ); + + // remove() file + file_ph = dir / "shortlife"; + BOOST_TEST( !fs::exists( file_ph ) ); + create_file( file_ph, "" ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( !fs::is_directory( file_ph ) ); + BOOST_TEST( fs::remove( file_ph ) ); + BOOST_TEST( !fs::exists( file_ph ) ); + BOOST_TEST( !fs::remove( "no-such-file" ) ); + BOOST_TEST( !fs::remove( "no-such-directory/no-such-file" ) ); + + // remove() directory + d1 = dir / "shortlife_dir"; + BOOST_TEST( !fs::exists( d1 ) ); + fs::create_directory( d1 ); + BOOST_TEST( fs::exists( d1 ) ); + BOOST_TEST( fs::is_directory( d1 ) ); + BOOST_TEST( BOOST_FS_IS_EMPTY( d1 ) ); + bad_remove_dir = dir; + BOOST_TEST( CHECK_EXCEPTION( bad_remove, ENOTEMPTY ) ); + BOOST_TEST( fs::remove( d1 ) ); + BOOST_TEST( !fs::exists( d1 ) ); + + if ( create_symlink_ok ) // only if symlinks supported + { + // remove() dangling symbolic link + fs::path link( "dangling_link" ); + fs::remove( link ); // remove any residue from past tests + BOOST_TEST( !fs::is_symlink( link ) ); + BOOST_TEST( !fs::exists( link ) ); + fs::create_symlink( "nowhere", link ); + BOOST_TEST( !fs::exists( link ) ); + BOOST_TEST( fs::is_symlink( link ) ); + BOOST_TEST( fs::remove( link ) ); + BOOST_TEST( !fs::is_symlink( link ) ); + + // remove() self-refering symbolic link + link = "link_to_self"; + fs::remove( link ); // remove any residue from past tests + BOOST_TEST( !fs::is_symlink( link ) ); + BOOST_TEST( !fs::exists( link ) ); + fs::create_symlink( link, link ); + BOOST_TEST( fs::remove( link ) ); + BOOST_TEST( !fs::exists( link ) ); + BOOST_TEST( !fs::is_symlink( link ) ); + + // remove() cyclic symbolic link + link = "link_to_a"; + fs::path link2( "link_to_b" ); + fs::remove( link ); // remove any residue from past tests + fs::remove( link2 ); // remove any residue from past tests + BOOST_TEST( !fs::is_symlink( link ) ); + BOOST_TEST( !fs::exists( link ) ); + fs::create_symlink( link, link2 ); + fs::create_symlink( link2, link ); + BOOST_TEST( fs::remove( link ) ); + BOOST_TEST( fs::remove( link2 ) ); + BOOST_TEST( !fs::exists( link ) ); + BOOST_TEST( !fs::exists( link2 ) ); + BOOST_TEST( !fs::is_symlink( link ) ); + + // remove() symbolic link to file + file_ph = "link_target"; + fs::remove( file_ph ); // remove any residue from past tests + BOOST_TEST( !fs::exists( file_ph ) ); + create_file( file_ph, "" ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( !fs::is_directory( file_ph ) ); + BOOST_TEST( fs::is_regular_file( file_ph ) ); + link = "non_dangling_link"; + fs::create_symlink( file_ph, link ); + BOOST_TEST( fs::exists( link ) ); + BOOST_TEST( !fs::is_directory( link ) ); + BOOST_TEST( fs::is_regular_file( link ) ); + BOOST_TEST( fs::is_symlink( link ) ); + BOOST_TEST( fs::remove( link ) ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( !fs::exists( link ) ); + BOOST_TEST( !fs::is_symlink( link ) ); + BOOST_TEST( fs::remove( file_ph ) ); + BOOST_TEST( !fs::exists( file_ph ) ); + } + + // write time tests + + file_ph = dir / "foobar2"; + create_file( file_ph, "foobar2" ); + BOOST_TEST( fs::exists( file_ph ) ); + BOOST_TEST( !fs::is_directory( file_ph ) ); + BOOST_TEST( fs::is_regular_file( file_ph ) ); + BOOST_TEST( fs::file_size( file_ph ) == 7 ); + verify_file( file_ph, "foobar2" ); + + // Some file system report last write time as local (FAT), while + // others (NTFS) report it as UTC. The C standard does not specify + // if time_t is local or UTC. + + std::time_t ft = fs::last_write_time( file_ph ); + std::cout << "\nUTC last_write_time() for a file just created is " + << std::asctime(std::gmtime(&ft)) << std::endl; + + std::tm * tmp = std::localtime( &ft ); + std::cout << "\nYear is " << tmp->tm_year << std::endl; + --tmp->tm_year; + std::cout << "Change year to " << tmp->tm_year << std::endl; + fs::last_write_time( file_ph, std::mktime( tmp ) ); + std::time_t ft2 = fs::last_write_time( file_ph ); + std::cout << "last_write_time() for the file is now " + << std::asctime(std::gmtime(&ft2)) << std::endl; + BOOST_TEST( ft != fs::last_write_time( file_ph ) ); + + + std::cout << "\nReset to current time" << std::endl; + fs::last_write_time( file_ph, ft ); + double time_diff = std::difftime( ft, fs::last_write_time( file_ph ) ); + std::cout + << "original last_write_time() - current last_write_time() is " + << time_diff << " seconds" << std::endl; + BOOST_TEST( time_diff >= -60.0 && time_diff <= 60.0 ); + + // post-test cleanup + BOOST_TEST( fs::remove_all( dir ) != 0 ); + // above was added just to simplify testing, but it ended up detecting + // a bug (failure to close an internal search handle). + BOOST_TEST( !fs::exists( dir ) ); + BOOST_TEST( fs::remove_all( dir ) == 0 ); + + return ::boost::report_errors(); +} // main + diff --git a/external/libs/filesystem/v2/test/path_test.cpp b/external/libs/filesystem/v2/test/path_test.cpp new file mode 100644 index 0000000..fb55adb --- /dev/null +++ b/external/libs/filesystem/v2/test/path_test.cpp @@ -0,0 +1,1380 @@ +// path_test program -------------------------------------------------------// + +// Copyright Beman Dawes 2002 +// 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 + +// basic_path's stem(), extension(), and replace_extension() tests are based +// on basename(), extension(), and change_extension() tests from the original +// convenience_test.cpp by Vladimir Prus. + +#define BOOST_FILESYSTEM_VERSION 2 + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fs = boost::filesystem; +using boost::filesystem::path; + + +#include +#include + +#define PATH_CHECK( a, b ) check( a, b, __LINE__ ) +#define DIR_CHECK( a, b ) check_dir( a, b, __LINE__ ) +#define CHECK_EQUAL( a,b ) check_equal( a, b, __LINE__ ) + + +namespace +{ + std::string platform( BOOST_PLATFORM ); + + void check( const fs::path & source, + const std::string & expected, int line ) + { + if ( source.string()== expected ) return; + + ++::boost::detail::test_errors(); + + std::cout << '(' << line << ") source.string(): \"" << source.string() + << "\" != expected: \"" << expected + << "\"" << std::endl; + } + + void check_dir( const fs::path & source, + const std::string & expected, int line ) + { + if ( source.directory_string()== expected ) return; + + ++::boost::detail::test_errors(); + + std::cout << '(' << line << ") source.directory_string(): \"" + << source.directory_string() + << "\" != expected: \"" << expected + << "\"" << std::endl; + } + + void check_equal( const std::string & value, + const std::string & expected, int line ) + { + if ( value == expected ) return; + + ++::boost::detail::test_errors(); + + std::cout << '(' << line << ") value: \"" << value + << "\" != expected: \"" << expected + << "\"" << std::endl; + } + + + void exception_tests() + { + const std::string str_1("string-1"); + boost::system::error_code ec( 12345, boost::system::system_category()); + try { BOOST_FILESYSTEM_THROW( fs::filesystem_error( str_1, ec ) ); } + catch ( const fs::filesystem_error & ex ) + { + //std::cout << ex.what() << "*" << std::endl; + //BOOST_TEST( std::strcmp( ex.what(), + // "string-1: Unknown error" ) == 0 ); + BOOST_TEST( ex.code() == ec ); + } + + try { BOOST_FILESYSTEM_THROW( fs::filesystem_error( str_1, "p1", "p2", ec ) ); } + catch ( const fs::filesystem_error & ex ) + { + //std::cout << ex.what() << "*" << std::endl; + //BOOST_TEST( std::strcmp( ex.what(), + // "string-1: Unknown error: \"p1\", \"p2\"" ) == 0 ); + BOOST_TEST( ex.code() == ec ); + BOOST_TEST( ex.path1().string() == "p1" ); + BOOST_TEST( ex.path2().string() == "p2" ); + } + } + + + // name_function_tests ---------------------------------------------------// + + void name_function_tests() + { + std::cout << "name_function_tests..." << std::endl; + + BOOST_TEST( fs::portable_posix_name( std::string( "x" ) ) ); + BOOST_TEST( fs::windows_name( std::string( "x" ) ) ); + BOOST_TEST( fs::portable_name( std::string( "x" ) ) ); + BOOST_TEST( fs::portable_directory_name( std::string( "x" ) ) ); + BOOST_TEST( fs::portable_file_name( std::string( "x" ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( "." ) ) ); + BOOST_TEST( fs::windows_name( std::string( "." ) ) ); + BOOST_TEST( fs::portable_name( std::string( "." ) ) ); + BOOST_TEST( fs::portable_directory_name( std::string( "." ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( "." ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( ".." ) ) ); + BOOST_TEST( fs::windows_name( std::string( ".." ) ) ); + BOOST_TEST( fs::portable_name( std::string( ".." ) ) ); + BOOST_TEST( fs::portable_directory_name( std::string( ".." ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( ".." ) ) ); + + BOOST_TEST( !fs::native( std::string( "" ) ) ); + BOOST_TEST( !fs::portable_posix_name( std::string( "" ) ) ); + BOOST_TEST( !fs::windows_name( std::string( "" ) ) ); + BOOST_TEST( !fs::portable_name( std::string( "" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( "" ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( "" ) ) ); + + BOOST_TEST( !fs::native( std::string( " " ) ) ); + BOOST_TEST( !fs::portable_posix_name( std::string( " " ) ) ); + BOOST_TEST( !fs::windows_name( std::string( " " ) ) ); + BOOST_TEST( !fs::portable_name( std::string( " " ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( " " ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( " " ) ) ); + + BOOST_TEST( !fs::portable_posix_name( std::string( ":" ) ) ); + BOOST_TEST( !fs::windows_name( std::string( ":" ) ) ); + BOOST_TEST( !fs::portable_name( std::string( ":" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( ":" ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( ":" ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( "-" ) ) ); + BOOST_TEST( fs::windows_name( std::string( "-" ) ) ); + BOOST_TEST( !fs::portable_name( std::string( "-" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( "-" ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( "-" ) ) ); + + BOOST_TEST( !fs::portable_posix_name( std::string( "foo bar" ) ) ); + BOOST_TEST( fs::windows_name( std::string( "foo bar" ) ) ); + BOOST_TEST( !fs::windows_name( std::string( " bar" ) ) ); + BOOST_TEST( !fs::windows_name( std::string( "foo " ) ) ); + BOOST_TEST( !fs::portable_name( std::string( "foo bar" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( "foo bar" ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( "foo bar" ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( "foo.bar" ) ) ); + BOOST_TEST( fs::windows_name( std::string( "foo.bar" ) ) ); + BOOST_TEST( fs::portable_name( std::string( "foo.bar" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( "foo.bar" ) ) ); + BOOST_TEST( fs::portable_file_name( std::string( "foo.bar" ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( "foo.barf" ) ) ); + BOOST_TEST( fs::windows_name( std::string( "foo.barf" ) ) ); + BOOST_TEST( fs::portable_name( std::string( "foo.barf" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( "foo.barf" ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( "foo.barf" ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( ".foo" ) ) ); + BOOST_TEST( fs::windows_name( std::string( ".foo" ) ) ); + BOOST_TEST( !fs::portable_name( std::string( ".foo" ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( ".foo" ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( ".foo" ) ) ); + + BOOST_TEST( fs::portable_posix_name( std::string( "foo." ) ) ); + BOOST_TEST( !fs::windows_name( std::string( "foo." ) ) ); + BOOST_TEST( !fs::portable_name( std::string( "foo." ) ) ); + BOOST_TEST( !fs::portable_directory_name( std::string( "foo." ) ) ); + BOOST_TEST( !fs::portable_file_name( std::string( "foo." ) ) ); + } + +} // unnamed namespace + +int cpp_main( int, char* [] ) +{ + // The choice of platform is make at runtime rather than compile-time + // so that compile errors for all platforms will be detected even though + // only the current platform is runtime tested. + platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" ) + ? "Windows" + : "POSIX"; + std::cout << "Platform is " << platform << '\n'; + + path p1( "fe/fi/fo/fum" ); + path p2( p1 ); + path p3; + BOOST_TEST( p1.string() != p3.string() ); + + // check each overload + BOOST_TEST( p1 != p3 ); + BOOST_TEST( p1 != p3.string() ); + BOOST_TEST( p1 != p3.string().c_str() ); + BOOST_TEST( p1.string() != p3 ); + BOOST_TEST( p1.string().c_str() != p3 ); + + p3 = p2; + BOOST_TEST( p1.string() == p3.string() ); + + // check each overload + BOOST_TEST( p1 == p3 ); + BOOST_TEST( p1 == p3.string() ); + BOOST_TEST( p1 == p3.string().c_str() ); + BOOST_TEST( p1.string() == p3 ); + BOOST_TEST( p1.string().c_str() == p3 ); + + path p4( "foobar" ); + BOOST_TEST( p4.string() == "foobar" ); + p4 = p4; // self-assignment + BOOST_TEST( p4.string() == "foobar" ); + + if ( platform == "Windows" ) + { + path p10 ("c:\\file"); + path p11 ("c:/file"); + // check each overload + BOOST_TEST( p10.string() == p11.string() ); + BOOST_TEST( p10 == p11 ); + BOOST_TEST( p10 == p11.string() ); + BOOST_TEST( p10 == p11.string().c_str() ); + BOOST_TEST( p10.string() == p11 ); + BOOST_TEST( p10.string().c_str() == p11 ); + BOOST_TEST( p10 == "c:\\file" ); + BOOST_TEST( p10 == "c:/file" ); + BOOST_TEST( p11 == "c:\\file" ); + BOOST_TEST( p11 == "c:/file" ); + BOOST_TEST( "c:\\file" == p10 ); + BOOST_TEST( "c:/file" == p10 ); + BOOST_TEST( "c:\\file" == p11 ); + BOOST_TEST( "c:/file" == p11 ); + } + + exception_tests(); + name_function_tests(); + + // These verify various overloads don't cause compiler errors + + fs::exists( p1 ); + fs::exists( "foo" ); + fs::exists( std::string( "foo" ) ); + + fs::exists( p1 / path( "foo" ) ); + fs::exists( p1 / "foo" ); + fs::exists( p1 / std::string( "foo" ) ); + + fs::exists( "foo" / p1 ); + fs::exists( std::string( "foo" ) / p1 ); + + p4 /= path( "foo" ); + p4 /= "foo"; + p4 /= std::string( "foo" ); + + path p5; + std::string s1( "//:somestring" ); + + // verify deprecated names still available + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + + p1.branch_path(); + p1.leaf(); + path p_remove_leaf; + p_remove_leaf.remove_leaf(); + +# endif + + +# ifndef BOOST_NO_MEMBER_TEMPLATES + + // check the path member templates + p5.assign( s1.begin(), s1.end() ); + + PATH_CHECK( p5, "somestring" ); + p5 = s1; + PATH_CHECK( p5, "somestring" ); + + BOOST_TEST( p4.string() == path( p4.string().begin(), p4.string().end() ).string() ); + + char c0 = 'a'; + p5.assign( &c0, &c0 ); + PATH_CHECK( p5, "" ); + p5 /= ""; + PATH_CHECK( p5, "" ); + p5 /= "foo/bar"; + PATH_CHECK( p5, "foo/bar" ); + p5.append( &c0, &c0 ); + PATH_CHECK( p5, "foo/bar" ); + p5 /= ""; + PATH_CHECK( p5, "foo/bar" ); + char bf[]= "bar/foo"; + p5.assign( bf, bf + sizeof(bf) ); + PATH_CHECK( p5, bf ); + p5.append( bf, bf + sizeof(bf) ); + PATH_CHECK( p5, "bar/foo/bar/foo" ); + + // this code, courtesy of David Whetstone, detected a now fixed bug that + // derefereced the end iterator (assuming debug build with checked itors) + std::vector v1; + p5.assign( v1.begin(), v1.end() ); + std::string s2( v1.begin(), v1.end() ); + PATH_CHECK( p5, s2 ); + p5.assign( s1.begin(), s1.begin() + 1 ); + PATH_CHECK( p5, "/" ); + +# endif + path clear_path( "foo" ); + + BOOST_TEST( !clear_path.empty() ); + clear_path.clear(); + BOOST_TEST( clear_path.empty() ); + + BOOST_TEST( p1 != p4 ); + BOOST_TEST( p1.string() == p2.string() ); + BOOST_TEST( p1.string() == p3.string() ); + BOOST_TEST( path( "foo" ).filename() == "foo" ); + BOOST_TEST( path( "foo" ).parent_path().string() == "" ); + BOOST_TEST( p1.filename() == "fum" ); + BOOST_TEST( p1.parent_path().string() == "fe/fi/fo" ); + BOOST_TEST( path( "" ).empty() == true ); + BOOST_TEST( path( "foo" ).empty() == false ); + + PATH_CHECK( "", "" ); + + PATH_CHECK( "foo", "foo" ); + PATH_CHECK( "f", "f" ); + + PATH_CHECK( "foo/", "foo/" ); + PATH_CHECK( "f/", "f/" ); + PATH_CHECK( "foo/..", "foo/.." ); + PATH_CHECK( "foo/../", "foo/../" ); + PATH_CHECK( "foo/bar/../..", "foo/bar/../.." ); + PATH_CHECK( "foo/bar/../../", "foo/bar/../../" ); + PATH_CHECK( path("") / "foo", "foo" ); + PATH_CHECK( path("") / "foo/", "foo/" ); + PATH_CHECK( path("foo") / "", "foo" ); + PATH_CHECK( path( "/" ), "/" ); + PATH_CHECK( path( "/" ) / "", "/" ); + PATH_CHECK( path( "/f" ), "/f" ); + + PATH_CHECK( "/foo", "/foo" ); + PATH_CHECK( path("") / "/foo", "/foo" ); + PATH_CHECK( path("/foo") / "", "/foo" ); + + if ( platform == "Windows" ) + { + PATH_CHECK( path("c:") / "foo", "c:foo" ); + PATH_CHECK( path("c:") / "/foo", "c:/foo" ); + } + + if ( platform == "Windows" ) + { + PATH_CHECK( path("c:") / "foo", "c:foo" ); + PATH_CHECK( path("c:") / "/foo", "c:/foo" ); + } + + PATH_CHECK( "foo/bar", "foo/bar" ); + PATH_CHECK( path("foo") / path("bar"), "foo/bar" ); // path arg + PATH_CHECK( path("foo") / "bar", "foo/bar" ); // const char * arg + PATH_CHECK( path("foo") / path("woo/bar").filename(), "foo/bar" ); // const std::string & arg + PATH_CHECK( "foo" / path("bar"), "foo/bar" ); + + PATH_CHECK( "a/b", "a/b" ); // probe for length effects + PATH_CHECK( path("a") / "b", "a/b" ); + + PATH_CHECK( "..", ".." ); + PATH_CHECK( path("..") / "", ".." ); + PATH_CHECK( path("") / "..", ".." ); + + PATH_CHECK( "../..", "../.." ); + PATH_CHECK( path("..") / ".." , "../.." ); + + PATH_CHECK( "/..", "/.." ); + PATH_CHECK( path("/") / ".." , "/.." ); + + PATH_CHECK( "/../..", "/../.." ); + PATH_CHECK( path("/..") / ".." , "/../.." ); + + PATH_CHECK( "../foo", "../foo" ); + PATH_CHECK( path("..") / "foo" , "../foo" ); + + PATH_CHECK( "foo/..", "foo/.." ); + PATH_CHECK( path("foo") / ".." , "foo/.." ); + PATH_CHECK( path( "foo/..bar"), "foo/..bar" ); + + PATH_CHECK( "../f", "../f" ); + PATH_CHECK( path("..") / "f" , "../f" ); + + PATH_CHECK( "/../f", "/../f" ); + PATH_CHECK( path("/..") / "f" , "/../f" ); + + PATH_CHECK( "f/..", "f/.." ); + PATH_CHECK( path("f") / ".." , "f/.." ); + + PATH_CHECK( "foo/../..", "foo/../.." ); + PATH_CHECK( path("foo") / ".." / ".." , "foo/../.." ); + + PATH_CHECK( "foo/../../..", "foo/../../.." ); + PATH_CHECK( path("foo") / ".." / ".." / ".." , "foo/../../.." ); + + PATH_CHECK( "foo/../bar", "foo/../bar" ); + PATH_CHECK( path("foo") / ".." / "bar" , "foo/../bar" ); + + PATH_CHECK( "foo/bar/..", "foo/bar/.." ); + PATH_CHECK( path("foo") / "bar" / ".." , "foo/bar/.." ); + + PATH_CHECK( "foo/bar/../..", "foo/bar/../.." ); + PATH_CHECK( path("foo") / "bar" / ".." / "..", "foo/bar/../.." ); + + PATH_CHECK( "foo/bar/../blah", "foo/bar/../blah" ); + PATH_CHECK( path("foo") / "bar" / ".." / "blah", "foo/bar/../blah" ); + + PATH_CHECK( "f/../b", "f/../b" ); + PATH_CHECK( path("f") / ".." / "b" , "f/../b" ); + + PATH_CHECK( "f/b/..", "f/b/.." ); + PATH_CHECK( path("f") / "b" / ".." , "f/b/.." ); + + PATH_CHECK( "f/b/../a", "f/b/../a" ); + PATH_CHECK( path("f") / "b" / ".." / "a", "f/b/../a" ); + + PATH_CHECK( "foo/bar/blah/../..", "foo/bar/blah/../.." ); + PATH_CHECK( path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../.." ); + + PATH_CHECK( "foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch" ); + PATH_CHECK( path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch" ); + + PATH_CHECK( "...", "..." ); + PATH_CHECK( "....", "...." ); + PATH_CHECK( "foo/...", "foo/..." ); + PATH_CHECK( "abc.", "abc." ); + PATH_CHECK( "abc..", "abc.." ); + PATH_CHECK( "foo/abc.", "foo/abc." ); + PATH_CHECK( "foo/abc..", "foo/abc.." ); + + PATH_CHECK( path(".abc"), ".abc" ); + PATH_CHECK( "a.c", "a.c" ); + PATH_CHECK( path("..abc"), "..abc" ); + PATH_CHECK( "a..c", "a..c" ); + PATH_CHECK( path("foo/.abc"), "foo/.abc" ); + PATH_CHECK( "foo/a.c", "foo/a.c" ); + PATH_CHECK( path("foo/..abc"), "foo/..abc" ); + PATH_CHECK( "foo/a..c", "foo/a..c" ); + + PATH_CHECK( ".", "." ); + PATH_CHECK( path("") / ".", "." ); + PATH_CHECK( "./foo", "./foo" ); + PATH_CHECK( path(".") / "foo", "./foo" ); + PATH_CHECK( "./..", "./.." ); + PATH_CHECK( path(".") / "..", "./.." ); + PATH_CHECK( "./../foo", "./../foo" ); + PATH_CHECK( "foo/.", "foo/." ); + PATH_CHECK( path("foo") / ".", "foo/." ); + PATH_CHECK( "../.", "../." ); + PATH_CHECK( path("..") / ".", "../." ); + PATH_CHECK( "./.", "./." ); + PATH_CHECK( path(".") / ".", "./." ); + PATH_CHECK( "././.", "././." ); + PATH_CHECK( path(".") / "." / ".", "././." ); + PATH_CHECK( "./foo/.", "./foo/." ); + PATH_CHECK( path(".") / "foo" / ".", "./foo/." ); + PATH_CHECK( "foo/./bar", "foo/./bar" ); + PATH_CHECK( path("foo") / "." / "bar", "foo/./bar" ); + PATH_CHECK( "foo/./.", "foo/./." ); + PATH_CHECK( path("foo") / "." / ".", "foo/./." ); + PATH_CHECK( "foo/./..", "foo/./.." ); + PATH_CHECK( path("foo") / "." / "..", "foo/./.." ); + PATH_CHECK( "foo/./../bar", "foo/./../bar" ); + PATH_CHECK( "foo/../.", "foo/../." ); + PATH_CHECK( path(".") / "." / "..", "././.." ); + PATH_CHECK( "././..", "././.." ); + PATH_CHECK( path(".") / "." / "..", "././.." ); + PATH_CHECK( "./../.", "./../." ); + PATH_CHECK( path(".") / ".." / ".", "./../." ); + PATH_CHECK( ".././.", ".././." ); + PATH_CHECK( path("..") / "." / ".", ".././." ); + + // iterator tests + + path itr_ck = ""; + path::const_iterator itr = itr_ck.begin(); + BOOST_TEST( itr == itr_ck.end() ); + + itr_ck = "/"; + itr = itr_ck.begin(); + BOOST_TEST( *itr == std::string( "/" ) ); + BOOST_TEST( ++itr == itr_ck.end() ); + BOOST_TEST( *--itr == std::string( "/" ) ); + + itr_ck = "foo"; + BOOST_TEST( *itr_ck.begin() == std::string( "foo" ) ); + BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) ); + BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() ); + + itr_ck = path( "/foo" ); + BOOST_TEST( *itr_ck.begin() == std::string( "/" ) ); + BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "foo" ) ); + BOOST_TEST( boost::next(boost::next( itr_ck.begin() )) == itr_ck.end() ); + BOOST_TEST( boost::next( itr_ck.begin() ) == boost::prior( itr_ck.end() ) ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) ); + BOOST_TEST( *boost::prior(boost::prior( itr_ck.end() )) == std::string( "/" ) ); + BOOST_TEST( boost::prior(boost::prior( itr_ck.end() )) == itr_ck.begin() ); + + itr_ck = "/foo/bar"; + itr = itr_ck.begin(); + BOOST_TEST( *itr == std::string( "/" ) ); + BOOST_TEST( *++itr == std::string( "foo" ) ); + BOOST_TEST( *++itr == std::string( "bar" ) ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "bar" ); + CHECK_EQUAL( *--itr, "foo" ); + CHECK_EQUAL( *--itr, "/" ); + + itr_ck = "../f"; // previously failed due to short name bug + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, ".." ); + CHECK_EQUAL( *++itr, "f" ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "f" ); + CHECK_EQUAL( *--itr, ".." ); + + // POSIX says treat "/foo/bar/" as "/foo/bar/." + itr_ck = "/foo/bar/"; + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, "/" ); + CHECK_EQUAL( *++itr, "foo" ); + CHECK_EQUAL( *++itr, "bar" ); + CHECK_EQUAL( *++itr, "." ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "." ); + CHECK_EQUAL( *--itr, "bar" ); + CHECK_EQUAL( *--itr, "foo" ); + CHECK_EQUAL( *--itr, "/" ); + + // POSIX says treat "/f/b/" as "/f/b/." + itr_ck = "/f/b/"; + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, "/" ); + CHECK_EQUAL( *++itr, "f" ); + CHECK_EQUAL( *++itr, "b" ); + CHECK_EQUAL( *++itr, "." ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "." ); + CHECK_EQUAL( *--itr, "b" ); + CHECK_EQUAL( *--itr, "f" ); + CHECK_EQUAL( *--itr, "/" ); + + itr_ck = "//net"; + itr = itr_ck.begin(); + // two leading slashes are permitted by POSIX (as implementation defined), + // while for Windows it is always well defined (as a network name) + CHECK_EQUAL( *itr, "//net" ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "//net" ); + + itr_ck = "//net/"; + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, "//net" ); + CHECK_EQUAL( *++itr, "/" ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "/" ); + CHECK_EQUAL( *--itr, "//net" ); + + itr_ck = "//foo///bar///"; + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, "//foo" ); + CHECK_EQUAL( *++itr, "/" ); + CHECK_EQUAL( *++itr, "bar" ); + CHECK_EQUAL( *++itr, "." ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "." ); + CHECK_EQUAL( *--itr, "bar" ); + CHECK_EQUAL( *--itr, "/" ); + CHECK_EQUAL( *--itr, "//foo" ); + + itr_ck = "///foo///bar///"; + itr = itr_ck.begin(); + // three or more leading slashes are to be treated as a single slash + CHECK_EQUAL( *itr, "/" ); + CHECK_EQUAL( *++itr, "foo" ); + CHECK_EQUAL( *++itr, "bar" ); + CHECK_EQUAL( *++itr, "." ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "." ); + CHECK_EQUAL( *--itr, "bar" ); + CHECK_EQUAL( *--itr, "foo" ); + CHECK_EQUAL( *--itr, "/" ); + + if ( platform == "Windows" ) + { + itr_ck = "c:/"; + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, "c:" ); + CHECK_EQUAL( *++itr, "/" ); + BOOST_TEST( ++itr == itr_ck.end() ); + CHECK_EQUAL( *--itr, "/" ); + CHECK_EQUAL( *--itr, "c:" ); + + itr_ck = "c:/foo"; + itr = itr_ck.begin(); + BOOST_TEST( *itr == std::string( "c:" ) ); + BOOST_TEST( *++itr == std::string( "/" ) ); + BOOST_TEST( *++itr == std::string( "foo" ) ); + BOOST_TEST( ++itr == itr_ck.end() ); + BOOST_TEST( *--itr == std::string( "foo" ) ); + BOOST_TEST( *--itr == std::string( "/" ) ); + BOOST_TEST( *--itr == std::string( "c:" ) ); + + itr_ck = "c:foo"; + itr = itr_ck.begin(); + BOOST_TEST( *itr == std::string( "c:" ) ); + BOOST_TEST( *++itr == std::string( "foo" ) ); + BOOST_TEST( ++itr == itr_ck.end() ); + BOOST_TEST( *--itr == std::string( "foo" ) ); + BOOST_TEST( *--itr == std::string( "c:" ) ); + + itr_ck = "c:foo/"; + itr = itr_ck.begin(); + BOOST_TEST( *itr == std::string( "c:" ) ); + BOOST_TEST( *++itr == std::string( "foo" ) ); + BOOST_TEST( *++itr == std::string( "." ) ); + BOOST_TEST( ++itr == itr_ck.end() ); + BOOST_TEST( *--itr == std::string( "." ) ); + BOOST_TEST( *--itr == std::string( "foo" ) ); + BOOST_TEST( *--itr == std::string( "c:" ) ); + } + else + { + itr_ck = "///"; + itr = itr_ck.begin(); + CHECK_EQUAL( *itr, "/" ); + BOOST_TEST( ++itr == itr_ck.end() ); + } + + path p; + + p = ""; + BOOST_TEST( p.relative_path().string() == "" ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == "" ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( !p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = "/"; + BOOST_TEST( p.relative_path().string() == "" ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == "/" ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "/" ); + BOOST_TEST( p.root_path().string() == "/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + if ( platform == "POSIX" ) + BOOST_TEST( p.is_complete() ); + else + BOOST_TEST( !p.is_complete() ); + + p = "//"; + CHECK_EQUAL( p.relative_path().string(), "" ); + CHECK_EQUAL( p.parent_path().string(), "" ); + CHECK_EQUAL( p.filename(), "//" ); + CHECK_EQUAL( p.root_name(), "//" ); + CHECK_EQUAL( p.root_directory(), "" ); + CHECK_EQUAL( p.root_path().string(), "//" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + + p = "///"; + CHECK_EQUAL( p.relative_path().string(), "" ); + CHECK_EQUAL( p.parent_path().string(), "" ); + CHECK_EQUAL( p.filename(), "/" ); + CHECK_EQUAL( p.root_name(), "" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + if ( platform == "POSIX" ) + BOOST_TEST( p.is_complete() ); + else + BOOST_TEST( !p.is_complete() ); + + p = "."; + BOOST_TEST( p.relative_path().string() == "." ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == "." ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = ".."; + BOOST_TEST( p.relative_path().string() == ".." ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == ".." ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = "foo"; + BOOST_TEST( p.relative_path().string() == "foo" ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == "foo" ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = "/foo"; + CHECK_EQUAL( p.relative_path().string(), "foo" ); + CHECK_EQUAL( p.parent_path().string(), "/" ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + if ( platform == "POSIX" ) + BOOST_TEST( p.is_complete() ); + else + BOOST_TEST( !p.is_complete() ); + + p = "/foo/"; + CHECK_EQUAL( p.relative_path().string(), "foo/" ); + CHECK_EQUAL( p.parent_path().string(), "/foo" ); + CHECK_EQUAL( p.filename(), "." ); + CHECK_EQUAL( p.root_name(), "" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + if ( platform == "POSIX" ) + BOOST_TEST( p.is_complete() ); + else + BOOST_TEST( !p.is_complete() ); + + p = "///foo"; + CHECK_EQUAL( p.relative_path().string(), "foo" ); + CHECK_EQUAL( p.parent_path().string(), "/" ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + if ( platform == "POSIX" ) + BOOST_TEST( p.is_complete() ); + else + BOOST_TEST( !p.is_complete() ); + + p = "foo/bar"; + BOOST_TEST( p.relative_path().string() == "foo/bar" ); + BOOST_TEST( p.parent_path().string() == "foo" ); + BOOST_TEST( p.filename() == "bar" ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = "../foo"; + BOOST_TEST( p.relative_path().string() == "../foo" ); + BOOST_TEST( p.parent_path().string() == ".." ); + BOOST_TEST( p.filename() == "foo" ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = "..///foo"; + CHECK_EQUAL( p.relative_path().string(), "..///foo" ); + CHECK_EQUAL( p.parent_path().string(), ".." ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "" ); + CHECK_EQUAL( p.root_directory(), "" ); + CHECK_EQUAL( p.root_path().string(), "" ); + BOOST_TEST( !p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = "/foo/bar"; + BOOST_TEST( p.relative_path().string() == "foo/bar" ); + BOOST_TEST( p.parent_path().string() == "/foo" ); + BOOST_TEST( p.filename() == "bar" ); + BOOST_TEST( p.root_name() == "" ); + BOOST_TEST( p.root_directory() == "/" ); + BOOST_TEST( p.root_path().string() == "/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( !p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + if ( platform == "POSIX" ) + BOOST_TEST( p.is_complete() ); + else + BOOST_TEST( !p.is_complete() ); + + // Both POSIX and Windows allow two leading slashs + // (POSIX meaning is implementation defined) + PATH_CHECK( path( "//resource" ), "//resource" ); + PATH_CHECK( path( "//resource/" ), "//resource/" ); + PATH_CHECK( path( "//resource/foo" ), "//resource/foo" ); + + p = path( "//net" ); + CHECK_EQUAL( p.string(), "//net" ); + CHECK_EQUAL( p.relative_path().string(), "" ); + CHECK_EQUAL( p.parent_path().string(), "" ); + CHECK_EQUAL( p.filename(), "//net" ); + CHECK_EQUAL( p.root_name(), "//net" ); + CHECK_EQUAL( p.root_directory(), "" ); + CHECK_EQUAL( p.root_path().string(), "//net" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = path( "//net/" ); + BOOST_TEST( p.relative_path().string() == "" ); + BOOST_TEST( p.parent_path().string() == "//net" ); + BOOST_TEST( p.filename() == "/" ); + BOOST_TEST( p.root_name() == "//net" ); + BOOST_TEST( p.root_directory() == "/" ); + BOOST_TEST( p.root_path().string() == "//net/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + p = path( "//net/foo" ); + BOOST_TEST( p.relative_path().string() == "foo" ); + BOOST_TEST( p.parent_path().string() == "//net/" ); + BOOST_TEST( p.filename() == "foo" ); + BOOST_TEST( p.root_name() == "//net" ); + BOOST_TEST( p.root_directory() == "/" ); + BOOST_TEST( p.root_path().string() == "//net/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + p = path( "//net///foo" ); + CHECK_EQUAL( p.relative_path().string(), "foo" ); + CHECK_EQUAL( p.parent_path().string(), "//net/" ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "//net" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "//net/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + if ( platform == "Windows" ) + { + DIR_CHECK( path( "/foo/bar/" ), "\\foo\\bar\\" ); + DIR_CHECK( path( "//foo//bar//" ), "\\\\foo\\bar\\\\" ); + DIR_CHECK( path( "///foo///bar///" ), "\\foo\\\\\\bar\\\\\\" ); + + DIR_CHECK( path( "\\/foo\\/bar\\/" ), "\\\\foo\\bar\\\\" ); + DIR_CHECK( path( "\\//foo\\//bar\\//" ), "\\foo\\\\\\bar\\\\\\" ); + + + DIR_CHECK( path( "\\foo\\bar\\" ), "\\foo\\bar\\" ); + DIR_CHECK( path( "\\\\foo\\\\bar\\\\" ), "\\\\foo\\bar\\\\" ); + DIR_CHECK( path( "\\\\\\foo\\\\\\bar\\\\\\" ), "\\foo\\\\\\bar\\\\\\" ); + + PATH_CHECK( path( "\\" ), "/" ); + PATH_CHECK( path( "\\f" ), "/f" ); + PATH_CHECK( path( "\\foo" ), "/foo" ); + PATH_CHECK( path( "foo\\bar" ), "foo/bar" ); + PATH_CHECK( path( "foo bar" ), "foo bar" ); + PATH_CHECK( path( "c:" ), "c:" ); + PATH_CHECK( path( "c:/" ), "c:/" ); + PATH_CHECK( path( "c:." ), "c:." ); + PATH_CHECK( path( "c:./foo" ), "c:./foo" ); + PATH_CHECK( path( "c:.\\foo" ), "c:./foo" ); + PATH_CHECK( path( "c:.." ), "c:.." ); + PATH_CHECK( path( "c:/." ), "c:/." ); + PATH_CHECK( path( "c:/.." ), "c:/.." ); + PATH_CHECK( path( "c:/../" ), "c:/../" ); + PATH_CHECK( path( "c:\\..\\" ), "c:/../" ); + PATH_CHECK( path( "c:/../.." ), "c:/../.." ); + PATH_CHECK( path( "c:/../foo" ), "c:/../foo" ); + PATH_CHECK( path( "c:\\..\\foo" ), "c:/../foo" ); + PATH_CHECK( path( "c:../foo" ), "c:../foo" ); + PATH_CHECK( path( "c:..\\foo" ), "c:../foo" ); + PATH_CHECK( path( "c:/../../foo" ), "c:/../../foo" ); + PATH_CHECK( path( "c:\\..\\..\\foo" ), "c:/../../foo" ); + PATH_CHECK( path( "c:foo/.." ), "c:foo/.." ); + PATH_CHECK( path( "c:/foo/.." ), "c:/foo/.." ); + PATH_CHECK( path( "c:/..foo" ), "c:/..foo" ); + PATH_CHECK( path( "c:foo" ), "c:foo" ); + PATH_CHECK( path( "c:/foo" ), "c:/foo" ); + PATH_CHECK( path( "\\\\netname" ), "//netname" ); + PATH_CHECK( path( "\\\\netname\\" ), "//netname/" ); + PATH_CHECK( path( "\\\\netname\\foo" ), "//netname/foo" ); + PATH_CHECK( path( "c:/foo" ), "c:/foo" ); + PATH_CHECK( path( "prn:" ), "prn:" ); + + p = path( "c:" ); + BOOST_TEST( p.relative_path().string() == "" ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == "c:" ); + BOOST_TEST( p.root_name() == "c:" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "c:" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = path( "c:foo" ); + BOOST_TEST( p.relative_path().string() == "foo" ); + BOOST_TEST( p.parent_path().string() == "c:" ); + BOOST_TEST( p.filename() == "foo" ); + BOOST_TEST( p.root_name() == "c:" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "c:" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = path( "c:/" ); + BOOST_TEST( p.relative_path().string() == "" ); + BOOST_TEST( p.parent_path().string() == "c:" ); + BOOST_TEST( p.filename() == "/" ); + BOOST_TEST( p.root_name() == "c:" ); + BOOST_TEST( p.root_directory() == "/" ); + BOOST_TEST( p.root_path().string() == "c:/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + p = path( "c:.." ); + BOOST_TEST( p.relative_path().string() == ".." ); + BOOST_TEST( p.parent_path().string() == "c:" ); + BOOST_TEST( p.filename() == ".." ); + BOOST_TEST( p.root_name() == "c:" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "c:" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = path( "c:/foo" ); + CHECK_EQUAL( p.relative_path().string(), "foo" ); + CHECK_EQUAL( p.parent_path().string(), "c:/" ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "c:" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "c:/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + p = path( "c://foo" ); + CHECK_EQUAL( p.relative_path().string(), "foo" ); + CHECK_EQUAL( p.parent_path().string(), "c:/" ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "c:" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "c:/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + p = path( "c:\\foo\\bar" ); + CHECK_EQUAL( p.relative_path().string(), "foo/bar" ); + CHECK_EQUAL( p.parent_path().string(), "c:/foo" ); + CHECK_EQUAL( p.filename(), "bar" ); + CHECK_EQUAL( p.root_name(), "c:" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "c:/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + p = path( "prn:" ); + BOOST_TEST( p.relative_path().string() == "" ); + BOOST_TEST( p.parent_path().string() == "" ); + BOOST_TEST( p.filename() == "prn:" ); + BOOST_TEST( p.root_name() == "prn:" ); + BOOST_TEST( p.root_directory() == "" ); + BOOST_TEST( p.root_path().string() == "prn:" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( !p.has_root_directory() ); + BOOST_TEST( !p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( !p.has_parent_path() ); + BOOST_TEST( !p.is_complete() ); + + p = path( "\\\\net\\\\\\foo" ); + CHECK_EQUAL( p.relative_path().string(), "foo" ); + CHECK_EQUAL( p.parent_path().string(), "//net/" ); + CHECK_EQUAL( p.filename(), "foo" ); + CHECK_EQUAL( p.root_name(), "//net" ); + CHECK_EQUAL( p.root_directory(), "/" ); + CHECK_EQUAL( p.root_path().string(), "//net/" ); + BOOST_TEST( p.has_root_path() ); + BOOST_TEST( p.has_root_name() ); + BOOST_TEST( p.has_root_directory() ); + BOOST_TEST( p.has_relative_path() ); + BOOST_TEST( p.has_filename() ); + BOOST_TEST( p.has_parent_path() ); + BOOST_TEST( p.is_complete() ); + + itr_ck = path( "c:" ); + BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) ); + BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() ); + BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "c:" ) ); + + itr_ck = path( "c:/" ); + BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) ); + BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "/" ) ); + BOOST_TEST( boost::next( boost::next( itr_ck.begin() )) == itr_ck.end() ); + BOOST_TEST( boost::prior( boost::prior( itr_ck.end() )) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "/" ) ); + BOOST_TEST( *boost::prior( boost::prior( itr_ck.end() )) == std::string( "c:" ) ); + + itr_ck = path( "c:foo" ); + BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) ); + BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "foo" ) ); + BOOST_TEST( boost::next(boost::next( itr_ck.begin() )) == itr_ck.end() ); + BOOST_TEST( boost::prior(boost::prior( itr_ck.end() )) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) ); + BOOST_TEST( *boost::prior(boost::prior( itr_ck.end() )) == std::string( "c:" ) ); + + itr_ck = path( "c:/foo" ); + BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) ); + BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "/" ) ); + BOOST_TEST( *boost::next( boost::next( itr_ck.begin() )) == std::string( "foo" ) ); + BOOST_TEST( boost::next( boost::next( boost::next( itr_ck.begin() ))) == itr_ck.end() ); + BOOST_TEST( boost::prior( boost::prior( boost::prior( itr_ck.end() ))) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) ); + BOOST_TEST( *boost::prior( boost::prior( itr_ck.end() )) == std::string( "/" ) ); + BOOST_TEST( *boost::prior( boost::prior( boost::prior( itr_ck.end() ))) == std::string( "c:" ) ); + + itr_ck = path( "//net" ); + BOOST_TEST( *itr_ck.begin() == std::string( "//net" ) ); + BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() ); + BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "//net" ) ); + + itr_ck = path( "//net/" ); + CHECK_EQUAL( *itr_ck.begin(), "//net" ); + CHECK_EQUAL( *boost::next( itr_ck.begin() ), "/" ); + BOOST_TEST( boost::next(boost::next( itr_ck.begin() )) == itr_ck.end() ); + BOOST_TEST( boost::prior(boost::prior( itr_ck.end() )) == itr_ck.begin() ); + CHECK_EQUAL( *boost::prior( itr_ck.end() ), "/" ); + CHECK_EQUAL( *boost::prior(boost::prior( itr_ck.end() )), "//net" ); + + itr_ck = path( "//net/foo" ); + BOOST_TEST( *itr_ck.begin() == std::string( "//net" ) ); + BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "/" ) ); + BOOST_TEST( *boost::next(boost::next( itr_ck.begin() )) == std::string( "foo" ) ); + BOOST_TEST( boost::next(boost::next(boost::next( itr_ck.begin() ))) == itr_ck.end() ); + BOOST_TEST( boost::prior(boost::prior(boost::prior( itr_ck.end() ))) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) ); + BOOST_TEST( *boost::prior(boost::prior( itr_ck.end() )) == std::string( "/" ) ); + BOOST_TEST( *boost::prior(boost::prior(boost::prior( itr_ck.end() ))) == std::string( "//net" ) ); + + itr_ck = path( "prn:" ); + BOOST_TEST( *itr_ck.begin() == std::string( "prn:" ) ); + BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() ); + BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() ); + BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "prn:" ) ); + } // Windows + + else + { // POSIX + DIR_CHECK( path( "/foo/bar/" ), "/foo/bar/" ); + DIR_CHECK( path( "//foo//bar//" ), "//foo//bar//" ); + DIR_CHECK( path( "///foo///bar///" ), "///foo///bar///" ); + + p = path( "/usr/local/bin:/usr/bin:/bin" ); + BOOST_TEST( p.file_string() == "/usr/local/bin:/usr/bin:/bin" ); + } // POSIX + + // test non-member functions, particularly operator overloads + + path e, e2; + std::string es, es2; + char ecs[] = ""; + char ecs2[] = ""; + + char acs[] = "a"; + std::string as(acs); + path a( as ); + + char acs2[] = "a"; + std::string as2(acs2); + path a2( as2 ); + + char bcs[] = "b"; + std::string bs(bcs); + path b( bs ); + + // swap + a.swap( b ); + BOOST_TEST( a.string() == "b" ); + BOOST_TEST( b.string() == "a" ); + fs::swap( a, b ); + BOOST_TEST( a.string() == "a" ); + BOOST_TEST( b.string() == "b" ); + + // probe operator / + BOOST_TEST( (b / a).string() == "b/a" ); + BOOST_TEST( (bs / a).string() == "b/a" ); + BOOST_TEST( (bcs / a).string() == "b/a" ); + BOOST_TEST( (b / as).string() == "b/a" ); + BOOST_TEST( (b / acs).string() == "b/a" ); + + // probe operator < + BOOST_TEST( !(e < e2) ); + BOOST_TEST( !(es < e2) ); + BOOST_TEST( !(ecs < e2) ); + BOOST_TEST( !(e < es2) ); + BOOST_TEST( !(e < ecs2) ); + + BOOST_TEST( e < a ); + BOOST_TEST( es < a ); + BOOST_TEST( ecs < a ); + BOOST_TEST( e < as ); + BOOST_TEST( e < acs ); + + BOOST_TEST( a < b ); + BOOST_TEST( as < b ); + BOOST_TEST( acs < b ); + BOOST_TEST( a < bs ); + BOOST_TEST( a < bcs ); + + BOOST_TEST( !(a < a2) ); + BOOST_TEST( !(as < a2) ); + BOOST_TEST( !(acs < a2) ); + BOOST_TEST( !(a < as2) ); + BOOST_TEST( !(a < acs2) ); + + // make sure basic_path overloads don't conflict with std::string overloads + + BOOST_TEST( !(as < as) ); + BOOST_TEST( !(as < acs) ); + BOOST_TEST( !(acs < as) ); + + // reality check character set is as expected + BOOST_TEST( std::string("a.b") < std::string("a/b") ); + // verify compare is actually lexicographical + BOOST_TEST( path("a/b") < path("a.b") ); + + // make sure the derivative operators also work + BOOST_TEST( a == a2 ); + BOOST_TEST( as == a2 ); + BOOST_TEST( acs == a2 ); + BOOST_TEST( a == as2 ); + BOOST_TEST( a == acs2 ); + + BOOST_TEST( a != b ); + BOOST_TEST( as != b ); + BOOST_TEST( acs != b ); + BOOST_TEST( a != bs ); + BOOST_TEST( a != bcs ); + + BOOST_TEST( b > a ); + BOOST_TEST( b > as ); + BOOST_TEST( b > acs ); + BOOST_TEST( bs > a); + BOOST_TEST( bcs > a); + + BOOST_TEST( !(a2 > a) ); + BOOST_TEST( !(a2 > as) ); + BOOST_TEST( !(a2 > acs) ); + BOOST_TEST( !(as2 > a) ); + BOOST_TEST( !(acs2 > a) ); + + BOOST_TEST( a <= b ); + BOOST_TEST( as <= b ); + BOOST_TEST( acs <= b ); + BOOST_TEST( a <= bs ); + BOOST_TEST( a <= bcs ); + + BOOST_TEST( a <= a2 ); + BOOST_TEST( as <= a2 ); + BOOST_TEST( acs <= a2 ); + BOOST_TEST( a <= as2 ); + BOOST_TEST( a <= acs2 ); + + BOOST_TEST( b >= a ); + BOOST_TEST( bs >= a ); + BOOST_TEST( bcs >= a ); + BOOST_TEST( b >= as ); + BOOST_TEST( b >= acs ); + + BOOST_TEST( a2 >= a ); + BOOST_TEST( as2 >= a ); + BOOST_TEST( acs2 >= a ); + BOOST_TEST( a2 >= as ); + BOOST_TEST( a2 >= acs ); + +// extension() tests + + BOOST_TEST( path("a/b").extension() == "" ); + BOOST_TEST( path("a.b/c").extension() == "" ); + BOOST_TEST( path("a/b.txt").extension() == ".txt" ); + BOOST_TEST( path("a/b.").extension() == "." ); + BOOST_TEST( path("a.b.c").extension() == ".c" ); + BOOST_TEST( path("a.b.c.").extension() == "." ); + BOOST_TEST( path("").extension() == "" ); + BOOST_TEST( path("a/").extension() == "." ); + +// stem() tests + + BOOST_TEST( path("b").stem() == "b" ); + BOOST_TEST( path("a/b.txt").stem() == "b" ); + BOOST_TEST( path("a/b.").stem() == "b" ); + BOOST_TEST( path("a.b.c").stem() == "a.b" ); + BOOST_TEST( path("a.b.c.").stem() == "a.b.c" ); + BOOST_TEST( path("").stem() == "" ); + +// replace_extension() tests + + BOOST_TEST( path("a.txt").replace_extension("").string() == "a" ); + BOOST_TEST( path("a.txt").replace_extension(".").string() == "a." ); + BOOST_TEST( path("a.txt").replace_extension(".tex").string() == "a.tex" ); + BOOST_TEST( path("a.txt").replace_extension("tex").string() == "a.tex" ); + BOOST_TEST( path("a.").replace_extension(".tex").string() == "a.tex" ); + BOOST_TEST( path("a.").replace_extension("tex").string() == "a.tex" ); + BOOST_TEST( path("a").replace_extension(".txt").string() == "a.txt" ); + BOOST_TEST( path("a").replace_extension("txt").string() == "a.txt" ); + BOOST_TEST( path("a.b.txt" ).replace_extension(".tex").string() == "a.b.tex" ); + BOOST_TEST( path("a.b.txt" ).replace_extension("tex").string() == "a.b.tex" ); + // see the rationale in html docs for explanation why this works + BOOST_TEST( path("").replace_extension(".png").string() == ".png" ); + BOOST_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702 + + // inserter and extractor tests +# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // bypass VC++ 7.0 and earlier + std::cout << "\nInserter and extractor test..."; + std::stringstream ss; + ss << fs::path( "foo bar" ) << std::endl; // ensure space in path roundtrips + fs::path round_trip; + ss >> round_trip; + BOOST_TEST( round_trip.string() == "foo bar" ); + std::cout << round_trip.string() << "..." << round_trip << " complete\n"; +# endif + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v2/test/wide_test.cpp b/external/libs/filesystem/v2/test/wide_test.cpp new file mode 100644 index 0000000..1d1b7b0 --- /dev/null +++ b/external/libs/filesystem/v2/test/wide_test.cpp @@ -0,0 +1,169 @@ +// Boost wide_test.cpp -----------------------------------------------------// + +// 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 + +#define BOOST_FILESYSTEM_VERSION 2 + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +# ifdef BOOST_FILESYSTEM2_NARROW_ONLY +# error This compiler or standard library does not support wide-character strings or paths +# endif + +#include +#include +#include +#include +#include + +#include + +namespace fs = boost::filesystem; + +#include +#include +#include +#include +#include + +#include "lpath.hpp" + +namespace +{ + bool cleanup = true; + + template< class Path > + void create_file( const Path & ph, const std::string & contents ) + { + // TODO: why missing symbol error on Darwin +# ifndef __APPLE__ + fs::ofstream f( ph ); +# else + std::ofstream f( ph.external_file_string().c_str() ); +# endif + if ( !f ) + BOOST_FILESYSTEM_THROW( fs::basic_filesystem_error( "wide_test create_file", + ph, + boost::system::error_code( errno, boost::system::generic_category() ) ) ); + if ( !contents.empty() ) f << contents; + } + + template< class Path > + void test( const Path & dir, const Path & file, const Path & dot ) + { + Path tmp; + tmp = file; + BOOST_TEST( tmp == file ); + tmp = file.string(); + BOOST_TEST( tmp == file ); + tmp = file.string().c_str(); + BOOST_TEST( tmp == file ); + fs::initial_path(); + fs::current_path(); + fs::remove( dir / file ); + fs::remove( dir ); + BOOST_TEST( !fs::exists( dir / file ) ); + BOOST_TEST( !fs::exists( dir ) ); + BOOST_TEST( fs::create_directory( dir ) ); + BOOST_TEST( fs::exists( dir ) ); + BOOST_TEST( fs::is_directory( dir ) ); + BOOST_TEST( fs::is_empty( dir ) ); + create_file( dir / file, "wide_test file contents" ); + BOOST_TEST( fs::exists( dir / file ) ); + BOOST_TEST( !fs::is_directory( dir / file ) ); + BOOST_TEST( !fs::is_empty( dir / file ) ); + BOOST_TEST( fs::file_size( dir / file ) == 23 || fs::file_size( dir / file ) == 24 ); + BOOST_TEST( fs::equivalent( dir / file, dot / dir / file ) ); + BOOST_TEST( fs::last_write_time( dir / file ) ); + typedef fs::basic_directory_iterator it_t; + int count(0); + for ( it_t it( dir ); it != it_t(); ++it ) + { + BOOST_TEST( it->path() == dir / file ); + BOOST_TEST( !fs::is_empty( it->path() ) ); + ++count; + } + BOOST_TEST( count == 1 ); + if ( cleanup ) + { + fs::remove( dir / file ); + fs::remove( dir ); + } + } + + // test boost::detail::utf8_codecvt_facet - even though it is not used by + // Boost.Filesystem on Windows, early detection of problems is worthwhile. + std::string to_external( const std::wstring & src ) + { + fs::detail::utf8_codecvt_facet convertor; + std::size_t work_size( convertor.max_length() * (src.size()+1) ); + boost::scoped_array work( new char[ work_size ] ); + std::mbstate_t state; + const wchar_t * from_next; + char * to_next; + if ( convertor.out( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + boost::throw_exception( std::runtime_error("to_external conversion error") ); + *to_next = '\0'; + return std::string( work.get() ); + } + +} // unnamed namespace + +// main ------------------------------------------------------------------------------// + +int cpp_main( int argc, char * /*argv*/[] ) +{ + + if ( argc > 1 ) cleanup = false; + + // So that tests are run with known encoding, use Boost UTF-8 codecvt + std::locale global_loc = std::locale(); + std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet ); + fs::wpath_traits::imbue( loc ); + + std::string s( to_external( L"\x2780" ) ); + for (std::size_t i = 0; i < s.size(); ++i ) + std::cout << std::hex << int( static_cast(s[i]) ) << " "; + std::cout << std::dec << std::endl; + BOOST_TEST( to_external( L"\x2780" ).size() == 3 ); + BOOST_TEST( to_external( L"\x2780" ) == "\xE2\x9E\x80" ); + + // test fs::path + std::cout << "begin path test..." << std::endl; + test( fs::path( "foo" ), fs::path( "bar" ), fs::path( "." ) ); + std::cout << "complete\n\n"; + + // test fs::wpath + // x2780 is circled 1 against white background == e2 9e 80 in UTF-8 + // x2781 is circled 2 against white background == e2 9e 81 in UTF-8 + std::cout << "begin wpath test..." << std::endl; + test( fs::wpath( L"\x2780" ), fs::wpath( L"\x2781" ), fs::wpath( L"." ) ); + std::cout << "complete\n\n"; + + // test user supplied basic_path + const long dir[] = { 'b', 'o', 'o', 0 }; + const long file[] = { 'f', 'a', 'r', 0 }; + const long dot[] = { '.', 0 }; + std::cout << "begin lpath test..." << std::endl; + test( ::user::lpath( dir ), ::user::lpath( file ), ::user::lpath( dot ) ); + std::cout << "complete\n\n"; + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/build/Jamfile.v2 b/external/libs/filesystem/v3/build/Jamfile.v2 new file mode 100644 index 0000000..c35cbbb --- /dev/null +++ b/external/libs/filesystem/v3/build/Jamfile.v2 @@ -0,0 +1,32 @@ +# Boost Filesystem Library Build Jamfile + +# (C) Copyright Beman Dawes 2002-2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt) + + +# See library home page at http://www.boost.org/libs/filesystem + +project boost/filesystem + : source-location ../src + : usage-requirements # pass these requirement to dependents (i.e. users) + shared:BOOST_FILESYSTEM_DYN_LINK=1 + ; + +SOURCES = + operations path path_traits portability unique_path utf8_codecvt_facet windows_file_codecvt codecvt_error_category ; + +lib boost_filesystem + : $(SOURCES).cpp ../../system/build//boost_system + : shared:BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's + : + : # Boost.Filesystem uses some of Boost.System functions in inlined/templated + # functions, so clients that use Boost.Filesystem will have direct references + # to Boost.System symbols. On Windows, Darwin, and some other platforms, this + # means those clients have to be directly linked to Boost.System. For static + # linking this happens anyway, but for shared we need to make it happen. Since + # doing so is harmless even when not needed, we do it for all platforms. + shared:../../system/build//boost_system + ; + +boost-install boost_filesystem ; \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/Jamfile.v2 b/external/libs/filesystem/v3/doc/Jamfile.v2 new file mode 100644 index 0000000..4de58f5 --- /dev/null +++ b/external/libs/filesystem/v3/doc/Jamfile.v2 @@ -0,0 +1,19 @@ +# Boost Filesystem Library Example Jamfile + +# Copyright Beman Dawes 2010 + +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +# Library home page: http://www.boost.org/libs/filesystem + +project + : requirements + /boost/filesystem//boost_filesystem + /boost/system//boost_system + msvc:on + static + ; + +exe path_table : path_table.cpp ; +install path_table-copy : path_table : . ; \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/POSIX_filename_encoding.txt b/external/libs/filesystem/v3/doc/POSIX_filename_encoding.txt new file mode 100644 index 0000000..14c45c0 --- /dev/null +++ b/external/libs/filesystem/v3/doc/POSIX_filename_encoding.txt @@ -0,0 +1,55 @@ +http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html + +"The POSIX standard mandates that the filename encoding is the encoding implied by the current LC_CTYPE locale category." + +------- + +http://mail.nl.linux.org/linux-utf8/2001-02/msg00103.html + +From: Markus Kuhn + +Tom Tromey wrote on 2001-02-05 00:36 UTC: +> Kai> IMAO, a *real* filesystem should use some encoding of ISO 10646 - +> Kai> UTF-8, UTF-16, or UTF-32 are all viable options. The same should +> Kai> be true for the kernel filename interfaces. +> +> I like this, but what should I do right now? + +The POSIX kernel file system interface is engraved into stone and +extremely unlikely to change. File names are arbitrary binary strings, +with only the '/' and '\0' bytes having any special semantics. You can +use arbitrary coded character sets on it as long as they do not +introduce '/' and '\0' bytes spuriously. Writers and readers have to +somehow agree on what encoding to use and the only really practical way +is to use the same encoding on all systems that share files. Eventually, +everyone will be using UTF-8 for file names on POSIX systems. Right now, +I would recommend users to use only ASCII for filenames, as this is +already UTF-8 and therefore simplifies migration. Using the ISO 8859, +JIS, etc. filenames should soon be considered deprecated practice. + +> I work on libgcj, the runtime component of gcj, the Java front end to +> GCC. In libgcj of course we use UCS-2 everywhere, since that is what +> Java does. Currently, for Unixy systems, we assume that all file +> names are UTF-8. + +The best solution is to assume that the file names are in the +locale-specific multi-byte encoding. Simply use mbrtowc and wcrtomb to +convert between Unicode and the locale-dependent multi-byte encoding +used in file names and text files if the ISO C 99 symbol +__STDC_ISO_10646__ is defined (which guarantees that wchar_t = UCS). On +Linux, this has been the case since glibc 2.2. + +> (Actually, we do something notably worse, which is +> assume that file names are Java-style UTF-8, with the weird encoding +> for \u0000.) + +\u0000 = NUL was never a character allowed in filenames under POSIX. +Raise an exception if someone tries to use it in a filename. Problem +solved. + +I never understood, why Java found it necessary to introduce two +distinct ASCII NUL characters. + +------ + +Interesting idea. Use iconv to create shift-jis or other mbcs test cases. diff --git a/external/libs/filesystem/v3/doc/deprecated.html b/external/libs/filesystem/v3/doc/deprecated.html new file mode 100644 index 0000000..19df50c --- /dev/null +++ b/external/libs/filesystem/v3/doc/deprecated.html @@ -0,0 +1,385 @@ + + + + + + + +Filesystem Deprecated Features + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Deprecated Features +
    + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    Deprecated names and features

    +

    As the library evolves over time, names sometimes +change or old features are removed to make way for new features. To ease transition, Boost.Filesystem deprecates +the old names and features, but by default continues to provide many of them. +The deprecated names and other workarounds can be suppressed by defining macro +BOOST_FILESYSTEM_NO_DEPRECATED, and this is recommended for all new code.

    +

    In the table, ✔ indicates a synonym or other +workaround is provided unless +BOOST_FILESYSTEM_NO_DEPRECATED is defined.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Component or location +

    Old name, now deprecated

    + ✔ +

    New name

    class pathbranch_path()parent_path()
    + class path + canonize() +   + Function removed
    + class path + default_name_check() + ✔ + Function removed
    + class path + default_name_check(name_check) + ✔ + Function removed
    + class path + default_name_check_writable() + ✔ + Function removed
    class pathdirectory_string()string
    class pathexternal_directory_string()native()
    class pathexternal_file_string()native()
    class pathfile_string()string()
    class pathhas_branch_path()has_parent_path()
    class pathhas_leaf()has_filename()
    class pathis_complere()is_absolute()
    class pathleaf()filename()
    + class path + native_directory_string() + ✔ + string()
    + class path + native_file_string() + ✔ + string()
    + class path + normalize() + ✔ + Function removed
    + class path + path(const string_type& str, name_check) + ✔ + Function removed. Workaround ignores name_check + argument.
    + class path + path(const string_type::value_type* s,  name_check) + ✔ + Function removed. Workaround ignores name_check + argument.
    + class path +

    remove_leaf()

    + ✔ +

    remove_filename()

    + path.hpp + template<class String, class Traits>
    +  class basic_path;
    +   + Class template basic_path is replaced by class path. + No workaround for an explicitly coded basic_path is provided, + but see the next row - path.
    + path.hpp + typedef basic_path<std::string, path_traits> path + ✔ + class path
    + path.hpp + typedef basic_path<std::wstring, wpath_traits> wpath + ✔ + Removed; use class path instead. Workaround provides + typedef path wpath
    + operations.hpp + initial_path() + ✔ + Function removed
    + operations.hpp +

    template <class Path>
    + Path complete(const Path& p,
    + const Path& base=
    +   initial_path<Path>())

    + ✔ +

    path absolute(const path& p, const path& base=
    +  current_path())

    + operations.hpp + is_regular(file_status f) + ✔ +

    + is_regular_file(file_status f)

    + operations.hpp + symbolic_link_exists(const path& ph) +   + Function removed
    + class directory_entry + filename() + ✔ + Function removed, use path().filename() instead.
    + class directory_entry + leaf() + ✔ + Function removed, use path().filename() instead.
    + class directory_entry + string() + ✔ + Function removed, use path().string() instead.
    + Macro definitions + BOOST_WINDOW_API +   + No longer supported; API selection is always automatic.
    + Macro definitions + BOOST_POSIX_API +   + No longer supported; API selection is always automatic.
    + Macro definitions + BOOST_WINDOW_PATH +   + No longer supported; native path format selection is always automatic.
    + Macro definitions + BOOST_POSIX_PATH +   + No longer supported; native path format selection is always automatic.
    + +

    Deprecation rationale

    +

    initial_path function

    +

    Full implementation of initial_path() would require +support from the C++ runtime startup code, and that doesn't seem likely to +happen. Depending on the user to call initial_path() at the +beginning of main() is too error prone.  An equivalent +function can trivially be provided by a user.

    + +
    +

    Revised +20 February, 2011

    + +

    © Copyright Beman Dawes, 2002-2005, 2010

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/design.htm b/external/libs/filesystem/v3/doc/design.htm new file mode 100644 index 0000000..17ac7d6 --- /dev/null +++ b/external/libs/filesystem/v3/doc/design.htm @@ -0,0 +1,353 @@ + + + + + + + +Boost Filesystem Library Design + + + + + +

    +Filesystem +Library Design

    + +

    Introduction
    +Requirements
    +Realities
    +Rationale
    +Abandoned_Designs
    +References

    + +

    Introduction

    + +

    The primary motivation for beginning work on the Filesystem Library was +frustration with Boost administrative tools.  Scripts were written in +Python, Perl, Bash, and Windows command languages.  There was no single +scripting language familiar and acceptable to all Boost administrators. Yet they +were all skilled C++ programmers - why couldn't C++ be used as the scripting +language?

    + +

    The key feature C++ lacked for script-like applications was the ability to +perform portable filesystem operations on directories and their contents. The +Filesystem Library was developed to fill that void.

    + +

    The intent is not to compete with traditional scripting languages, but to +provide a solution for situations where C++ is already the language +of choice..

    + +

    Requirements

    +
      +
    • Be able to write portable script-style filesystem operations in modern + C++.
      +
      + Rationale: This is a common programming need. It is both an + embarrassment and a hardship that this is not possible with either the current + C++ or Boost libraries.  The need is particularly acute + when C++ is the only toolset allowed in the tool chain.  File system + operations are provided by many languages used on multiple platforms, + such as Perl and Python, as well as by many platform specific scripting + languages. All operating systems provide some form of API for filesystem + operations, and the POSIX bindings are increasingly available even on + operating systems not normally associated with POSIX, such as the Mac, z/OS, + or OS/390.
    • +
    • Work within the realities described below.
      +
      + Rationale: This isn't a research project. The need is for something that works on + today's platforms, including some of the embedded operating systems + with limited file systems. Because of the emphasis on portability, such a + library would be much more useful if standardized. That means being able to + work with a much wider range of platforms that just Unix or Windows and their + clones.
    • +
    • Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications + and use of global variables. If a dangerous feature is provided, identify it as such.
      +
      + Rationale: Normally this would be covered by "the usual Boost requirements...", + but it is mentioned explicitly because the equivalent native platform and + scripting language interfaces often depend on all-too-easy-to-ignore error + notifications and global variables like "current + working directory".
    • +
    • Structure the library so that it is still useful even if some functionality + does not map well onto a given platform or directory tree. Particularly, much + useful functionality should be portable even to flat +(non-hierarchical) filesystems.
      +
      + Rationale: Much functionality which does not + require a hierarchical directory structure is still useful on flat-structure + filesystems.  There are many systems, particularly embedded systems, + where even very limited functionality is still useful.
    • +
    +
      +
    • Interface smoothly with current C++ Standard Library input/output + facilities.  For example, paths should be + easy to use in std::basic_fstream constructors.
      +
      + Rationale: One of the most common uses of file system functionality is to + manipulate paths for eventual use in input/output operations.  + Thus the need to interface smoothly with standard library I/O.
    • +
    • Suitable for eventual standardization. The implication of this requirement + is that the interface be close to minimal, and that great care be take + regarding portability.
      +
      + Rationale: The lack of file system operations is a serious hole + in the current standard, with no other known candidates to fill that hole. + Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for + standardization.
    • +
    • The usual Boost requirements and + guidelines apply.
    • +
    • Encourage, but do not require, portability in path names.
      +
      + Rationale: For paths which originate from user input it is unreasonable to + require portable path syntax.
    • +
    • Avoid giving the illusion of portability where portability in fact does not + exist.
      +
      + Rationale: Leaving important behavior unspecified or "implementation defined" does a + great disservice to programmers using a library because it makes it appear + that code relying on the behavior is portable, when in fact there is nothing + portable about it. The only case where such under-specification is acceptable is when both users and implementors know from + other sources exactly what behavior is required, yet for some reason it isn't + possible to specify it exactly.
    • +
    +

    Realities

    +
      +
    • Some operating systems have a single directory tree root, others have + multiple roots.
    • +
    • Some file systems provide both a long and short form of filenames.
    • +
    • Some file systems have different syntax for file paths and directory + paths.
    • +
    • Some file systems have different rules for valid file names and valid + directory names.
    • +
    • Some file systems (ISO-9660, level 1, for example) use very restricted + (so-called 8.3) file names.
    • +
    • Some operating systems allow file systems with different + characteristics to be "mounted" within a directory tree.  Thus a + ISO-9660 or Windows + file system may end up as a sub-tree of a POSIX directory tree.
    • +
    • Wide-character versions of directory and file operations are available on some operating + systems, and not available on others.
    • +
    • There is no law that says directory hierarchies have to be specified in + terms of left-to-right decent from the root.
    • +
    • Some file systems have a concept of file "version number" or "generation + number".  Some don't.
    • +
    • Not all operating systems use single character separators in path names.  Some use + paired notations. A typical fully-specified OpenVMS filename + might look something like this:
      +
      +    DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5
      +

      + The general OpenVMS format is:
      +
      +     + Device:[directories.dot.separated]filename.extension;version_number
    • +
    • For common file systems, determining if two descriptors are for same + entity is extremely difficult or impossible.  For example, the concept of + equality can be different for each portion of a path - some portions may be + case or locale sensitive, others not. Case sensitivity is a property of the + pathname itself, and not the platform. Determining collating sequence is even + worse.
    • +
    • Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the + filesystem.  That may well include computers on the other side of the + world or in orbit around the world. This implies that file system operations + may fail in unexpected ways. For example:
      +
      +      assert( exists("foo") == exists("foo") ); + // may fail!
      +     assert( is_directory("foo") == is_directory("foo"); + // may fail!
      +

      + In the first example, the file may have been deleted between calls to + exists().  In the second example, the file may have been deleted and then + replaced by a directory of the same name between the calls to is_directory().
    • +
    • Even though an application may be portable, it still will have to traffic + in system specific paths occasionally; user provided input is a common + example.
    • +
    • Symbolic links cause canonical and + normal form of some paths to represent different files or directories. For + example, given the directory hierarchy /a/b/c, with a symbolic + link in /a named x  pointing to b/c, + then under POSIX Pathname Resolution rules a path of "/a/x/.." + should resolve to "/a/b". If "/a/x/.." were first + normalized to "/a", it would resolve incorrectly. (Case supplied + by Walter Landry.)
    • +
    + +

    Rationale

    + +

    The Requirements and +Realities above drove much of the C++ interface design.  In particular, +the desire to make script-like code straightforward caused a great deal of +effort to go into ensuring that apparently simple expressions like exists( "foo" +) work as expected.

    + +

    See the FAQ for the rationale behind many detailed +design decisions.

    + +

    Several key insights went into the path class design:

    +
      +
    • Decoupling of the input formats, internal conceptual (vector<string> + or other sequence) + model, and output formats.
    • +
    • Providing two input formats (generic and O/S specific) broke a major + design deadlock.
    • +
    • Providing several output formats solved another set of previously + intractable problems.
    • +
    • Several non-obvious functions (particularly decomposition and composition) + are required to support portable code. (Peter Dimov, Thomas Witt, Glen + Knowles, others.)
    • +
    + +

    Error checking was a particularly difficult area. One key insight was that +with file and directory names, portability isn't a universal truth.  +Rather, the programmer must think out the question "What operating systems do I +want this path to be portable to?"  By providing support for several +answers to that question, the Filesystem Library alerts programmers of the need +to ask it in the first place.

    +

    Abandoned Designs

    +

    operations.hpp

    +

    Dietmar Kühl's original dir_it design and implementation supported +wide-character file and directory names. It was abandoned after extensive +discussions among Library Working Group members failed to identify portable +semantics for wide-character names on systems not providing native support. See +FAQ.

    +

    Previous iterations of the interface design used explicitly named functions providing a +large number of convenience operations, with no compile-time or run-time +options. There were so many function names that they were very confusing to use, +and the interface was much larger. Any benefits seemed theoretical rather than +real.

    +

    Designs based on compile time (rather than runtime) flag and option selection +(via policy, enum, or int template parameters) became so complicated that they +were abandoned, often after investing quite a bit of time and effort. The need +to qualify attribute or option names with namespaces, even aliases, made use in +template parameters ugly; that wasn't fully appreciated until actually writing +real code.

    +

    Yet another set of convenience functions ( for example, remove with +permissive, prune, recurse, and other options, plus predicate, and possibly +other, filtering features) were abandoned because the details became both +complex and contentious.

    + +

    What is left is a toolkit of low-level operations from which the user can +create more complex convenience operations, plus a very small number of +convenience functions which were found to be useful enough to justify inclusion.

    + +

    path.hpp

    + +

    There were so many abandoned path designs, I've lost track. Policy-based +class templates in several flavors, constructor supplied runtime policies, +operation specific runtime policies, they were all considered, often +implemented, and ultimately abandoned as far too complicated for any small +benefits observed.

    + +

    Additional design considerations apply to Internationalization.

    + +

    error checking

    + +

    A number of designs for the error checking machinery were abandoned, some +after experiments with implementations. Totally automatic error checking was +attempted in particular. But automatic error checking tended to make the overall +library design much more complicated.

    + +

    Some designs associated error checking mechanisms with paths.  Some with +operations functions.  A policy-based error checking template design was +partially implemented, then abandoned as too complicated for everyday +script-like programs.

    + +

    The final design, which depends partially on explicit error checking function +calls,  is much simpler and straightforward, although it does depend to +some extent on programmer discipline.  But it should allow programmers who +are concerned about portability to be reasonably sure that their programs will +work correctly on their choice of target systems.

    + +

    References

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [IBM-01]IBM Corporation, z/OS V1R3.0 C/C++ Run-Time +Library Reference, SA22-7821-02, 2001, + + www-1.ibm.com/servers/eserver/zseries/zos/bkserv/
    [ISO-9660]International Standards Organization, 1988
    [Kuhn]UTF-8 and Unicode FAQ for Unix/Linux, + + www.cl.cam.ac.uk/~mgk25/unicode.html
    [MSDN] Microsoft Platform SDK for Windows, Storage Start +Page, + + msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp
    [POSIX-01]IEEE Std 1003.1-2001, ISO/IEC 9945:2002, and The Open Group Base Specifications, Issue 6. Also known as The + Single Unix® Specification, Version 3. + Available from each of the organizations involved in its creation. For + example, read online or download from + + www.unix.org/single_unix_specification/. The ISO JTC1/SC22/WG15 - POSIX +homepage is + www.open-std.org/jtc1/sc22/WG15/
    [URI]RFC-2396, Uniform Resource Identifiers (URI): Generic +Syntax, + www.ietf.org/rfc/rfc2396.txt
    [UTF-16]Wikipedia, UTF-16, + + en.wikipedia.org/wiki/UTF-16
    [Wulf-Shaw-73]William Wulf, Mary Shaw, Global +Variable Considered Harmful, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34
    + +
    +

    Revised +18 February, 2010

    + +

    © Copyright Beman Dawes, 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 +www.boost.org/LICENSE_1_0.txt)

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/do_list.html b/external/libs/filesystem/v3/doc/do_list.html new file mode 100644 index 0000000..6558803 --- /dev/null +++ b/external/libs/filesystem/v3/doc/do_list.html @@ -0,0 +1,146 @@ + + + + + + + +Do List + + + + + +

    Boost Filesystem Do List
    +24 June 2010

    + +

    Beta 1 comments

    +
      +
    • + +

      Zach Laine:

    • +
    +
    +
    The descriptions for portable_name() and portable_directory_name()
    +appear to be at odds.
    +
    +portable_name() : ... && (name is "." or "..", and the first character
    +not a period or hyphen)
    +
    +portable_directory_name(): ... && (name is "." or ".."  or contains no periods)
    +
    +Should portable_name() be "... && (name is "." or "..", or contains no
    +periods) && (first character not a hyphen)"?  Maybe I'm missing
    +something?
    +
    +
      +
    • +

      Scott McMurray - treat as Wish List:

    • +
    +
    +
    - uncomplete(p, base)
    +
    +My pet request.  It may be useful to simplify other functions as well,
    +since there's no current way to go from an absolute path to a relative
    +one, meaning that most functions need to handle relative ones even
    +when that might not be natural.  With this functionality,
    +preconditions requiring absolute paths would be less onerous.
    +
    +   Precondition: p.is_absolute() && base.is_absolute()
    +
    +   Effects: Extracts a path, rp, from p relative to base such that
    +canonical(p) == complete(rp, base).  Any ".." path elements in rp form
    +a prefix.
    +
    +   Returns: The extracted path.
    +
    +   Postconditions: For the returned path, rp, rp.is_relative() ==
    +(p.root_name() == b.root_name()).
    +
    +[Notes: This function simplifies paths by omitting context.  It is
    +particularly useful for serializing paths such that it can be usefully
    +moved between hosts where the context may be different, such as inside
    +source control trees.  It can also be helpful for display to users,
    +such as in shells where paths are often shown relative to $HOME.
    +
    +In the presence of symlinks, the result of this function may differ
    +between implementations, as some may expand symlinks that others may
    +not.  The simplest implementation uses canonical to expand both p and
    +base, then removes the common prefix and prepends the requisite ".."
    +elements.  Smarter implementations will avoid expanding symlinks
    +unnecessarily.  No implementation is expected to discover new symlinks
    +to return paths with fewer elements.]
    +
    +

    Docs

    +
      +
    • Reorganize files - delete examples that no longer apply.
    • +
    • Should minimal.css be changed to used relative font sizes? See + http://www.w3schools.com/CSS/pr_font_font-size.asp\
    • +
    • Document behavior of path::replace_extension has change WRT argument w/o a + dot.
    • +
    • Document leading //: no longer treated specially. + But is that really correct?
    • +
    • Behavior of root_path() has been changed. Change + needs to be propagated to trunk?
    • +
    • Regenerate path decomposition table.
    • +
    + +

    Code

    +

    All

    +
      +
    • Move semantics.
    • +
    • Use BOOST_DELETED, BOOST_DEFAULTED, where + appropriate.
    • +
    • Other C++0x features.
    • +
    +

    Class path

    +
      +
    • Windows, POSIX, conversions for char16_t, char32_t for C++0x compilers.
    • +
    • Add Windows Alternate Data Stream test cases. See http://en.wikipedia.org/wiki/NTFS + Features.
    • +
    • Add test case: relational operators on paths differing only in trailing + separator. Rationale?
    • +
    • Provide the name check functions for more character types? Templatize? + take a path argument?
    • +
    • Add codepage 936/950/etc test cases.
    • +
    • Should UDT's be supported?
    • +
    • Should path iteration to a separator result in:
      + -- the actual separator used
      + -- the preferred separator
      + -- the generic separator <-- makes it easier to write portable code
      + -- a dot
    • +
    +

    Operations

    +
      +
    • Would complete(), system_complete() be clearer if renamed absolute(), + absolute_system() (or absolute_native())?
    • +
    • Review all operations.cpp code for race conditions similar to #2925. Fix + or document.
    • +
    • Enable all BOOST_FILESYSTEM_NO_DEPRECATED code.
    • +
    • rename and remove names are problems. If users says "using + namespace boost::filesystem"
      + and some header included stdio, there is just too much chance of silent error.
    • +
    • create_directories error handling needs work.
    • +
    • Fold convenience.hpp into operations.hpp
    • +
    • Two argument recursive_directory_iterator ctor isn't recognizing throws(). + Would it be better to fold into a single two argument ctor with default?
    • +
    • Add the push_directory class from tools/release/required_files.cpp
    • +
    + +

    Miscellaneous

    +
      +
    • Regular classes need hash functions.
    • +
    + +
    +

    © Copyright Beman Dawes, 2010

    +

    Distributed under the Boost Software License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/faq.htm b/external/libs/filesystem/v3/doc/faq.htm new file mode 100644 index 0000000..781098c --- /dev/null +++ b/external/libs/filesystem/v3/doc/faq.htm @@ -0,0 +1,147 @@ + + + + + + + +Filesystem FAQ + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem FAQ +
    + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    +Frequently Asked Questions

    +

    General questions

    +

    Why not support a concept of specific kinds of file systems, such as posix_file_system or windows_file_system.

    +

    Portability is one of the most important requirements for the +library. Features specific to a particular operating system or file system +can always be accessed by using the operating system's API.

    + +

    +Class path questions

    +

    Why base the generic pathname format on POSIX?

    +

    POSIX is an ISO Standard. It is the basis for the most familiar +pathname formats, +not just for POSIX-based operating systems but also for Windows and the +URL portion of URI's. It is ubiquitous and +familiar.  On many systems, it is very easy to implement because it is +either the native operating system format (Unix and Windows) or via a +operating system supplied +POSIX library (z/OS, OS/390, and many more.)

    +

    Why not use a full URI (Universal Resource Identifier) based path?

    +

    URI's would promise more than the Filesystem Library can actually deliver, +since URI's extend far beyond what most operating systems consider a file or a +directory.  Thus for the primary "portable script-style file system +operations" requirement of the Filesystem Library, full URI's appear to be over-specification.

    +

    Why isn't path a base class with derived directory_path and +file_path classes?

    +

    Why bother?  The behavior of all three classes is essentially identical. +Several early versions did require users to identify each path as a file or +directory path, and this seemed to increase coding errors and decrease code +readability. There was no apparent upside benefit.

    +

    Why do path decomposition functions yielding a single element return a +path rather than a string?

    +

    Interface simplicity. If they returned strings, flavors would be needed for +string, wstring, u16string, +u32string, and generic strings.

    +

    Why don't path member functions have overloads with error_code& arguments?

    +

    They have not been requested by users; the need for error reporting via +error_code seems limited to operations failures rather than path failures.

    +

    Operations function questions

    +

    Why not supply a 'handle' type, and let the file and directory operations +traffic in it?

    +

    It isn't clear there is any feasible way to meet the "portable script-style +file system operations" requirement with such a system. File systems exist where operations are usually performed on + some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where +trafficking in paths isn't always natural.   

    +

    The case for the "handle" (opaque data type to identify a file) +style may be strongest for directory iterator value type.  (See Jesse Jones' Jan 28, +2002, Boost postings). However, as class path has evolved, it seems sufficient +even as the directory iterator value type.

    +

    Why are the operations functions so low-level?

    +

    To provide a toolkit from which higher-level functionality can be created.

    +

    An +extended attempt to add convenience functions on top of, or as a replacement +for, the low-level functionality failed because there is no widely acceptable +set of simple semantics for most convenience functions considered.  +Attempts to provide alternate semantics via either run-time options or +compile-time polices became overly complicated in relation to the value +delivered, or became contentious.  OTOH, the specific functionality needed for several trial +applications was very easy for the user to construct from the lower-level +toolkit functions.  See Failed +Attempts.

    +

    Isn't it inconsistent then to provide a few convenience functions?

    +

    Yes, but experience with both this library, POSIX, and Windows, indicates +the utility of certain convenience functions, and that it is possible to provide +simple, yet widely acceptable, semantics for them. For example, remove_all().

    +

    Why are there directory_iterator overloads for operations.hpp +predicate functions? Isn't two ways to do the same thing poor design?

    +

    Yes, two ways to do the same thing is often a poor design practice. But the +iterator versions are often much more efficient. Calling status() during +iteration over a directory containing 15,000 files took 6 seconds for the path +overload, and 1 second for the iterator overload, for tests on a freshly booted +machine. Times were .90 seconds and .30 seconds, for tests after prior use of +the directory. This performance gain is large enough to justify deviating from +preferred design practices. Neither overload alone meets all needs.

    +

    Why are the operations functions so picky about errors?

    +

    Safety. The default is to be safe rather than sorry. This is particularly +important given the reality that on many computer systems files and directories +are globally shared resources, and thus subject to +race conditions.

    +

    Why are attributes accessed via named functions rather than property maps?

    +

    For commonly used attributes (existence, directory or file, emptiness), +simple syntax and guaranteed presence outweigh other considerations. Because +access to many other attributes is inherently system dependent, +property maps are viewed as the best hope for access and modification, but it is +better design to provide such functionality in a separate library. (Historical +note: even the apparently simple attribute "read-only" turned out to be so +system depend as to be disqualified as a "guaranteed presence" operation.)

    +

    Why isn't automatic name portability error detection provided?

    +

    A number (at least six) of designs for name validity error +detection were evaluated, including at least four complete implementations.  +While the details for rejection differed, all of the more powerful name validity checking +designs distorted other +otherwise simple aspects of the library. Even the simple name checking provided +in prior library versions was a constant source of user complaints. While name checking can be helpful, it +isn't important enough to justify added a lot of additional complexity.

    +

    Why are paths sometimes manipulated by member functions and sometimes by +non-member functions?

    +

    The design rule is that purely lexical operations are supplied as class +path member +functions, while operations performed by the operating system are provided as +free functions.

    +
    +

    Revised +20 February, 2011

    +

    © Copyright Beman Dawes, 2002

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/index.htm b/external/libs/filesystem/v3/doc/index.htm new file mode 100644 index 0000000..44e2eb4 --- /dev/null +++ b/external/libs/filesystem/v3/doc/index.htm @@ -0,0 +1,495 @@ + + + + + + + +Filesystem Home + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Library
    + Version 3
    +
    + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + + + + + + + + +
    + Contents
    + Introduction
    + Documentation
    + Using the library
    + Coding guidelines
    + Cautions
    + Headers
    + Example programs
    + Implementation
    + Macros
    + Building the object-library
    + Notes for Cygwin users
    + Version history
    +  with acknowledgements
    + +
    +
    + + + + +
    +

    This is the home page for Version 3 of the Filesystem library.

    +

    Version 3 is a major revision with many new and improved + features. It may, however, break some user code written for Version 2.

    +

    To ease the transition, Boost releases 1.44 through 1.47 + will supply both V2 and V3. Version 2 + is the default version for Boost release 1.44 + and 1.45. Version 3 will be the default starting with release 1.46.

    +

    Define macro BOOST_FILESYSTEM_VERSION as 3 to use + Version 3. This will be the default for release 1.46 and later.

    +

    Define macro BOOST_FILESYSTEM_VERSION as 2 to use + Version 2. This is the default for release 1.44 and 1.45.

    +

    You may define the BOOST_FILESYSTEM_VERSION macro:

    +
      +
    • +

      On the build command line; the exact format depends on + your compiler or IDE

      +
    • +
    • +

      In your code, before including any filesystem header, + #define BOOST_FILESYSTEM_VERSION n

      +
    • +
    • +

      #define BOOST_FILESYSTEM_VERSION n in boost/config/user.hpp. + Note that this approach applies to all uses of Boost.Filesystem.

      +
    • +
    +

    Existing code should be moved to Version 3 as soon as + convenient. New code should be written for Version 3.

    +

    Version 2 is deprecated, and will not be included in Boost + releases 1.48 and later.

    +

    Building the library

    +

    By default, the Boost build system creates libraries that + support both version 2 and version 3. To support only a single version, + include --disable-filesystem2 or --disable-filesystem3 + on the bjam command line.

    +
    +
    +
    + +

    Introduction

    +

    The Boost.Filesystem library provides facilities to manipulate files and directories, +and the paths that identify them.

    + +

    The features of the library include:

    + +
      +
    • A modern C++ interface, highly compatible with the C++ standard + library.
    • +
    +
    +
    + +

    Many users say the interface is their primary motivation for using +Boost.Filesystem. They like its use of familiar idioms based on standard library +containers, iterators, and algorithms. They like having errors reported by +throwing exceptions.

    + +
    +
    +
      +
    • Portability between operating systems.
        +
      • At the C++ syntax level, it is convenient to learn and use one interface + regardless of the operating system.
      • +
      • At the semantic level, behavior of code is reasonably portable across + operating systems.
      • +
      • Dual generic or native path format support encourages program + portability, yet still allows communication with users in system specific + formats.
      • +
      +
    • +
    • Error handling and reporting via C++ exceptions (the default) or error + codes.
        +
      • C++ exceptions are the preferred error reporting mechanism for most + applications. The exception thrown includes the detailed error code + information important for diagnosing the exact cause of file system errors.
      • +
      • Error reporting via error code allows user code that provides detailed + error recovery to avoid becoming so littered with try-catch blocks as to be + unmaintainable.
      • +
      +
    • +
    • Suitable for a broad spectrum of applications, ranging from simple + script-like operations to extremely complex production code.
        +
      • At the simple script-like end of the spectrum, the intent is not to + compete with Python, Perl, or shell languages, but rather to provide + filesystem operations when C++ is already the language of choice.
      • +
      • Finer grained control over operations and error handling is available to + support more complex applications or other cases where throwing exceptions + isn't desired.
      • +
      +
    • +
    + +

    A proposal, + +N1975, to include Boost.Filesystem in Technical Report 2 has been accepted +by the C++ Standards Committee. That proposal was based on version 2 of +Boost.Filesystem; presumably the final TR2 form will be based on version 3.

    + +

    Documentation

    + +

    Tutorial - A gentle introduction to +the library, with example programs provided for you to experiment with.

    + +

    Reference - Formal documentation in the +style of the C++ standard for +every component of the library.

    + +

    FAQ - Frequently asked questions.

    + +

    Portability Guide - Help for those +concerned with writing code to run on multiple operating systems.

    + +

    Deprecated Features - Identifies +deprecated features and their replacements.

    + +

    Version 3 Introduction - Aimed at users of prior +Boost.Filesystem versions.

    + +

    Version 3 Design - Historical document +from the start of the Version 3 design process.

    + +

    Original Design - Historical document from +the start of the Version 1 design process.

    + +

    Do List - Boost.Filesystem development work +in the pipeline.

    + +

    Using the library

    +

    Boost.Filesystem is implemented as a separately compiled library, so you must install +binaries in a location that can be found by your linker. If you followed the +Boost Getting Started instructions, that's already been done for you.

    +

    Coding guidelines

    +

    For new code, defining BOOST_FILESYSTEM_NO_DEPRECATED before +including filesystem headers is strongly recommended. This prevents inadvertent +use of old features, particularly legacy function names, that have been replaced +and are going to go away in the future.

    +

    Cautions

    +

    After reading the tutorial you can dive right into simple, +script-like programs using the Filesystem Library! Before doing any serious +work, however, there a few cautions to be aware of:

    +

    Effects and Postconditions not guaranteed in the presence of race-conditions

    +

    Filesystem function specifications follow the C++ Standard Library form, specifying behavior in terms of +effects and postconditions. If +a race-condition exists, a function's +postconditions may no longer be true by the time the function returns to the +caller.

    +
    +

    Explanation: The state of files and directories is often +globally shared, and thus may be changed unexpectedly by other threads, +processes, or even other computers having network access to the filesystem. As an +example of the difficulties this can cause, note that the following asserts +may fail:

    +
    +

    assert( exists( "foo" ) == exists( "foo" ) );  // +(1)
    +
    +remove_all( "foo" );
    +assert( !exists( "foo" ) );  // (2)
    +
    +assert( is_directory( "foo" ) == is_directory( "foo" ) ); // +(3)

    +
    +

    (1) will fail if a non-existent "foo" comes into existence, or an +existent "foo" is removed, between the first and second call to exists(). +This could happen if, during the execution of the example code, another thread, +process, or computer is also performing operations in the same directory.

    +

    (2) will fail if between the call to remove_all() and the call to +exists() a new file or directory named "foo" is created by another +thread, process, or computer.

    +

    (3) will fail if another thread, process, or computer removes an +existing file "foo" and then creates a directory named "foo", between the +example code's two calls to is_directory().

    +
    +

    May throw exceptions

    +

    Unless otherwise specified, Boost.Filesystem functions throw +basic_filesystem_error +exceptions if they cannot successfully complete their operational +specifications. Also, implementations may use C++ Standard Library functions, +which may throw std::bad_alloc. These exceptions may be thrown even +though the error condition leading to the exception is not explicitly specified +in the function's "Throws" paragraph.

    +

    All exceptions thrown by the Filesystem +Library are implemented by calling +boost::throw_exception(). Thus exact behavior may differ depending on +BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.

    +

    Non-throwing versions are provided of several functions that are often used +in contexts where error codes may be the preferred way to report an error.

    + +

    Headers

    + +

    The Boost.Filesystem library provides several headers:

    + +
      +
    • Header <boost/filesystem.hpp> + provides access to all features of the library, except file streams.
    • +
    • Header <boost/filesystem/fstream.hpp> + inherits the same components as the C++ Standard + Library's fstream header, but files are identified by const path& + arguments rather that const char* arguments.
    • +
    +

    Example programs

    +

    See the tutorial for example programs.

    +

    Other examples

    +

    The programs used to generate the Boost regression test status tables use the +Filesystem Library extensively.  See:

    + +

    Implementation

    +

    The current implementation supports operating systems which provide +the POSIX or Windows API's.

    +

    The library is in regular use on Apple OS X, HP-UX, IBM AIX, Linux, +Microsoft Windows, SGI IRIX, and Sun Solaris operating systems using a variety +of compilers.

    +

    Macros

    +

    Users may defined the following macros if desired. Sensible defaults are +provided, so users can ignore these macros unless they have special needs.

    + + + + + + + + + + + + + + + + + + + + + +
    Macro NameDefaultEffect if defined
    BOOST_FILESYSTEM_NO_DEPRECATEDNot defined.Deprecated features are excluded from headers.
    BOOST_FILESYSTEM_DYN_LINKDefined if BOOST_ALL_DYN_LINK is defined, + otherwise not defined.The Boost.Filesystem library is dynamically linked. If not defined, + static linking is assumed.
    BOOST_FILESYSTEM_NO_LIBDefined if BOOST_ALL_NO_LIB is defined, + otherwise not defined.Boost.Filesystem library does not use the Boost auto-link + facility.
    +

    User-defined BOOST_POSIX_API and BOOST_WINDOWS_API macros are no longer +supported.

    +

    Building the object-library

    +

    The object-library will be built automatically if you are using the Boost +build system. See +Getting Started. It can also be +built manually using a Jamfile +supplied in directory libs/filesystem/build, or the user can construct an IDE +project or make file which includes the object-library source files.

    +

    The object-library source files are +supplied in directory libs/filesystem/src. These source files implement the +library for POSIX or Windows compatible operating systems; no implementation is +supplied for other operating systems. Note that many operating systems not +normally thought of as POSIX systems, such as mainframe legacy +operating systems or embedded operating systems, support POSIX compatible file +systems and so will work with the Filesystem Library.

    +

    The object-library can be built for static or dynamic (shared/dll) linking. +This is controlled by the BOOST_ALL_DYN_LINK or BOOST_FILESYSTEM_DYN_LINK +macros. See the Separate +Compilation page for a description of the techniques used.

    +

    Note for Cygwin users

    +

    Cygwin version 1.7 or later is +required because only versions of GCC with wide character strings are supported.

    + +

    The library's implementation code treats Cygwin as a Windows platform, and +thus uses the Windows API and uses Windows path syntax as the native path +syntax.

    + +

    Version history

    + +

    Version 3

    + +

    Boost 1.??.0 - ???, 2010 - Internationalization via single class path. +More uniform error handling.

    + +

    Peter Dimov suggested use of a single path class rather than a basic_path +class template. That idea was the basis for the Version 3 redesign.

    + +

    Thanks for comments from Robert Stewart, Zach Laine, Peter Dimov, Gregory +Peele, Scott McMurray, John Bytheway, Jeff Flinn, Jeffery Bosboom.

    + +

    Version 2

    + +

    Boost 1.34.0 - May, 2007 - Internationalization via basic_path +template.

    + +

    So many people have contributed comments and bug reports that it isn't any +longer possible to acknowledge them individually. That said, Peter Dimov and Rob +Stewart need to be specially thanked for their many constructive criticisms and +suggestions. Terence +Wilson and Chris Frey contributed timing programs which helped illuminate +performance issues.

    + +

    Version 1

    + +

    Boost 1.30.0 - March, 2003 - Initial official Boost release.

    + +

    The Filesystem Library was designed and implemented by Beman Dawes. The +original directory_iterator and filesystem_error classes were +based on prior work from Dietmar Kuehl, as modified by Jan Langer. Thomas Witt +was a particular help in later stages of initial development. Peter Dimov and +Rob Stewart made many useful suggestions and comments over a long period of +time. Howard Hinnant helped with internationalization issues.

    + +

    Key design requirements and +design realities were developed during +extensive discussions on the Boost mailing list, followed by comments on the +initial implementation. Numerous helpful comments were then received during the +Formal Review.

    Participants included +Aaron Brashears, +Alan Bellingham, +Aleksey Gurtovoy, +Alex Rosenberg, +Alisdair Meredith, +Andy Glew, +Anthony Williams, +Baptiste Lepilleur, +Beman Dawes, +Bill Kempf, +Bill Seymour, +Carl Daniel, +Chris Little, +Chuck Allison, +Craig Henderson, +Dan Nuffer, +Dan'l Miller, +Daniel Frey, +Darin Adler, +David Abrahams, +David Held, +Davlet Panech, +Dietmar Kuehl, +Douglas Gregor, +Dylan Nicholson, +Ed Brey, +Eric Jensen, +Eric Woodruff, +Fedder Skovgaard, +Gary Powell, +Gennaro Prota, +Geoff Leyland, +George Heintzelman, +Giovanni Bajo, +Glen Knowles, +Hillel Sims, +Howard Hinnant, +Jaap Suter, +James Dennett, +Jan Langer, +Jani Kajala, +Jason Stewart, +Jeff Garland, +Jens Maurer, +Jesse Jones, +Jim Hyslop, +Joel de Guzman, +Joel Young, +John Levon, +John Maddock, +John Williston, +Jonathan Caves, +Jonathan Biggar, +Jurko, +Justus Schwartz, +Keith Burton, +Ken Hagen, +Kostya Altukhov, +Mark Rodgers, +Martin Schuerch, +Matt Austern, +Matthias Troyer, +Mattias Flodin, +Michiel Salters, +Mickael Pointier, +Misha Bergal, +Neal Becker, +Noel Yap, +Parksie, +Patrick Hartling, Pavel Vozenilek, +Pete Becker, +Peter Dimov, +Rainer Deyke, +Rene Rivera, +Rob Lievaart, +Rob Stewart, +Ron Garcia, +Ross Smith, +Sashan, +Steve Robbins, +Thomas Witt, +Tom Harris, +Toon Knapen, +Victor Wagner, +Vincent Finn, +Vladimir Prus, and +Yitzhak Sapir + +

    A lengthy discussion on the C++ committee's library reflector illuminated the "illusion +of portability" problem, particularly in postings by PJ Plauger and Pete Becker.

    + +

    Walter Landry provided much help illuminating symbolic link use cases for +version 1.31.0. 

    + +
    +

    Revised +20 February, 2011

    + +

    © Copyright Beman Dawes, 2002-2005

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/path_table.cpp b/external/libs/filesystem/v3/doc/path_table.cpp new file mode 100644 index 0000000..cb811ca --- /dev/null +++ b/external/libs/filesystem/v3/doc/path_table.cpp @@ -0,0 +1,260 @@ +// Generate an HTML table showing path decomposition ---------------------------------// + +// Copyright Beman Dawes 2005. + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// See http://www.boost.org/libs/filesystem for documentation. + +// For purposes of generating the table, support both POSIX and Windows paths + +#include "boost/filesystem.hpp" +#include +#include + +using boost::filesystem::path; +using std::string; +using std::cout; + +namespace +{ + std::ifstream infile; + std::ofstream posix_outfile; + std::ifstream posix_infile; + std::ofstream outfile; + + bool posix; + + const string empty_string; + + struct column_base + { + virtual string heading() const = 0; + virtual string cell_value( const path & p ) const = 0; + }; + + struct c0 : public column_base + { + string heading() const { return string("string()"); } + string cell_value( const path & p ) const { return p.string(); } + } o0; + + struct c1 : public column_base + { + string heading() const { return string("generic_
    string()
    "); } + string cell_value( const path & p ) const { return p.generic_string(); } + } o1; + + struct c2 : public column_base + { + string heading() const { return string("Iteration
    over
    Elements"); } + string cell_value( const path & p ) const + { + string s; + for( path::iterator i(p.begin()); i != p.end(); ++i ) + { + if ( i != p.begin() ) s += ','; + s += (*i).string(); + } + return s; + } + } o2; + + struct c3 : public column_base + { + string heading() const { return string("root_
    path()
    "); } + string cell_value( const path & p ) const { return p.root_path().string(); } + } o3; + + struct c4 : public column_base + { + string heading() const { return string("root_
    name()
    "); } + string cell_value( const path & p ) const { return p.root_name().string(); } + } o4; + + struct c5 : public column_base + { + string heading() const { return string("root_
    directory()
    "); } + string cell_value( const path & p ) const { return p.root_directory().string(); } + } o5; + + struct c6 : public column_base + { + string heading() const { return string("relative_
    path()
    "); } + string cell_value( const path & p ) const { return p.relative_path().string(); } + } o6; + + struct c7 : public column_base + { + string heading() const { return string("parent_
    path()
    "); } + string cell_value( const path & p ) const { return p.parent_path().string(); } + } o7; + + struct c8 : public column_base + { + string heading() const { return string("filename()"); } + string cell_value( const path & p ) const { return p.filename().string(); } + } o8; + + const column_base * column[] = { &o2, &o0, &o1, &o3, &o4, &o5, &o6, &o7, &o8 }; + + // do_cell ---------------------------------------------------------------// + + void do_cell( const string & test_case, int i ) + { + string temp = column[i]->cell_value(path(test_case)); + string value; + outfile << ""; + if (temp.empty()) + value = "empty"; + else + value = string("") + temp + ""; + + if (posix) + posix_outfile << value << '\n'; + else + { + std::getline(posix_infile, temp); + if (value != temp) // POSIX and Windows differ + { + value.insert(0, "
    "); + value.insert(0, temp); + value.insert(0, ""); + value += ""; + } + outfile << value; + } + outfile << "\n"; + } + +// do_row ------------------------------------------------------------------// + + void do_row( const string & test_case ) + { + outfile << "\n"; + + if (test_case.empty()) + outfile << "empty\n"; + else + outfile << "" << test_case << "\n"; + + for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i ) + { + do_cell( test_case, i ); + } + + outfile << "\n"; + } + +// do_table ----------------------------------------------------------------// + + void do_table() + { + outfile << + "

    Path Decomposition Table

    \n" + "

    Shaded entries indicate cases where POSIX and Windows\n" + "implementations yield different results. The top value is the\n" + "POSIX result and the bottom value is the Windows result.\n" + "\n" + "

    \n" + ; + + // generate the column headings + + outfile << "

    \n"; + + for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i ) + { + outfile << "\n"; + } + + outfile << "\n"; + + // generate a row for each input line + + string test_case; + while ( std::getline( infile, test_case ) ) + { + if (!test_case.empty() && *--test_case.end() == '\r') + test_case.erase(test_case.size()-1); + if (test_case.empty() || test_case[0] != '#') + do_row( test_case ); + } + + outfile << "
    Constructor
    argument
    " << column[i]->heading() << "
    \n"; + } + +} // unnamed namespace + +// main ------------------------------------------------------------------------------// + +#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE +#include + +int cpp_main( int argc, char * argv[] ) // note name! +{ + if ( argc != 5 ) + { + std::cerr << + "Usage: path_table \"POSIX\"|\"Windows\" input-file posix-file output-file\n" + "Run on POSIX first, then on Windows\n" + " \"POSIX\" causes POSIX results to be saved in posix-file;\n" + " \"Windows\" causes POSIX results read from posix-file\n" + " input-file contains the paths to appear in the table.\n" + " posix-file will be used for POSIX results\n" + " output-file will contain the generated HTML.\n" + ; + return 1; + } + + infile.open( argv[2] ); + if ( !infile ) + { + std::cerr << "Could not open input file: " << argv[2] << std::endl; + return 1; + } + + if (string(argv[1]) == "POSIX") + { + posix = true; + posix_outfile.open( argv[3] ); + if ( !posix_outfile ) + { + std::cerr << "Could not open POSIX output file: " << argv[3] << std::endl; + return 1; + } + } + else + { + posix = false; + posix_infile.open( argv[3] ); + if ( !posix_infile ) + { + std::cerr << "Could not open POSIX input file: " << argv[3] << std::endl; + return 1; + } + } + + outfile.open( argv[4] ); + if ( !outfile ) + { + std::cerr << "Could not open output file: " << argv[2] << std::endl; + return 1; + } + + outfile << "\n" + "\n" + "Path Decomposition Table\n" + "\n" + "\n" + ; + + do_table(); + + outfile << "\n" + "\n" + ; + + return 0; +} diff --git a/external/libs/filesystem/v3/doc/path_table.txt b/external/libs/filesystem/v3/doc/path_table.txt new file mode 100644 index 0000000..40809c6 --- /dev/null +++ b/external/libs/filesystem/v3/doc/path_table.txt @@ -0,0 +1,50 @@ +# Paths for the reference.html Path Decomposition Table +# +# This is the input file for path_table, which generates the actual html +# +# Copyright Beman Dawes 2010 +# +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt +# +# Note that an empty line is treated as input rather than as a comment + +. +.. +foo +/ +/foo +foo/ +/foo/ +foo/bar +/foo/bar +//net +//net/foo +///foo/// +///foo///bar +/. +./ +/.. +../ +foo/. +foo/.. +foo/./ +foo/./bar +foo/.. +foo/../ +foo/../bar +c: +c:/ +c:foo +c:/foo +c:foo/ +c:/foo/ +c:/foo/bar +prn: +c:\ +c:foo +c:\foo +c:foo\ +c:\foo\ +c:\foo/ +c:/foo\bar diff --git a/external/libs/filesystem/v3/doc/portability_guide.htm b/external/libs/filesystem/v3/doc/portability_guide.htm new file mode 100644 index 0000000..458e5dc --- /dev/null +++ b/external/libs/filesystem/v3/doc/portability_guide.htm @@ -0,0 +1,241 @@ + + + + + + + +Portability Guide + + + + + +

    +Path +Name Portability +Guide

    + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    +Introduction
    +name_check functions
    +File and directory name recommendations

    +

    Introduction

    +

    Like any other C++ program which performs I/O operations, there is no +guarantee that a program using Boost.Filesystem will be portable between +operating systems. Critical aspects of I/O such as how the operating system +interprets paths are unspecified by the C and C++ Standards.

    +

    It is not possible to know if a file or directory name will be +valid (and thus portable) for an unknown operating system. There is always the possibility that an operating system could use +names which are unusual (numbers less than 4096, for example) or very +limited in size (maximum of six character names, for example). In other words, +portability is never absolute; it is always relative to specific operating +systems or +file systems.

    +

    It is possible, however, to know in advance if a directory or file name is likely to be valid for a particular +operating system. It is also possible to construct names which are +likely to be portable to a large number of modern and legacy operating systems.

    + +

    Almost all modern operating systems support multiple file systems. At the +minimum, they support a native file system plus a CD-ROM file system (Generally +ISO-9669, often with Juliet extensions).

    + +

    Each file system +may have its own naming rules. For example, modern versions of Windows support NTFS, FAT, FAT32, and ISO-9660 file systems, among others, and the naming rules +for those file systems differ. Each file system may also have +differing rules for overall path validity, such as a maximum length or number of +sub-directories. Some legacy systems have different rules for directory names +versus regular file names.

    + +

    As a result, Boost.Filesystem's name_check functions +cannot guarantee directory and file name portability. Rather, they are intended to +give the programmer a "fighting chance" to achieve portability by early +detection of common naming problems.

    + +

    name_check functions

    + +

    A name_check function +returns true if its argument is valid as a directory and regular file name for a +particular operating or file system. A number of these functions are provided.

    + +

    The portable_name function is of particular +interest because it has been carefully designed to provide wide +portability yet not overly restrict expressiveness.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Library Supplied name_check Functions
    FunctionDescription
    portable_posix_name(const + std::string& name)Returns: true if !name.empty() && name contains only the characters + specified in Portable Filename Character Set rules as defined in by + POSIX (www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html).
    + The allowed characters are 0-9, a-z, A-Z, + '.', '_', and '-'.

    Use: + applications which must be portable to any POSIX system.

    windows_name(const + std::string& name)Returns:  true if !name.empty() && name contains + only the characters specified by the Windows platform SDK as valid + regardless of the file system && (name is "." or + ".."  or does not end with a trailing space or period).  + The allowed characters are anything except 0x0-0x1F, '<', + '>', ':', '"', '/', + '\', and '|'.

    + Use: applications which must be portable to Windows.

    +

    Note: Reserved device names are not valid as file names, but are + not being detected because they are still valid as a path. Specifically, + CON, PRN, AUX, CLOCK$, NUL, COM[1-9], LPT[1-9], and these names followed by + an extension (for example, NUL.tx7).

    portable_name(const + std::string& name)Returns:  windows_name(name) && portable_posix_name(name) + && (name is "." or "..", and the first character not a period or hyphen).

    Use: applications which must be portable to a wide variety of + modern operating systems, large and small, and to some legacy O/S's. The + first character not a period or hyphen restriction is a requirement of + several older operating systems.

    + portable_directory_name(const std::string& name)Returns: portable_name(name) && (name is "." + or ".."  or contains no periods).

    Use: applications + which must be portable to a wide variety of platforms, including OpenVMS.

    + portable_file_name(const std::string& name)Returns: portable_name(name) && any period is followed by one to three additional + non-period characters.

    Use: + applications which must be portable to a wide variety of platforms, + including OpenVMS and other systems which have a concept of "file extension" + but limit its length.

    native(const + std::string& name)Returns: Implementation defined. Returns + true for names considered valid by the operating system's native file + systems.

    Note: May return true for some names not considered valid + by the operating system under all conditions (particularly on operating systems which support + multiple file systems.)

    + +

    File and directory name recommendations

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    RecommendationRationale
    Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and + underscore.

    Use any of the "portable_" + name check functions to enforce this recommendation.

    These are the characters specified by the POSIX standard for portable directory and + file names, and are also valid for Windows, Mac, and many other modern file systems.
    Do not use a period or hyphen as the first + character of a name. Do not use period as the last character of a name.

    + Use portable_name, + portable_directory_name, or + portable_file_name to enforce this + recommendation.

    Some operating systems treat have special rules for the + first character of names. POSIX, for example. Windows does not permit period + as the last character.
    Do not use periods in directory names.

    Use + portable_directory_name to enforce + this recommendation.

    Requirement for ISO-9660 without Juliet extensions, OpenVMS filesystem, and other legacy systems.
    Do not use more that one period in a file name, and limit + the portion after the period to three characters.

    Use + portable_file_name to enforce this + recommendation.

    Requirement for ISO-9660 level 1, OpenVMS filesystem, and + other legacy systems.
    Do not assume names are case sensitive. For example, do not expected a directory to be + able to hold separate elements named "Foo" and "foo". Some file systems are case insensitive.  For example, Windows + NTFS is case preserving in the way it stores names, but case insensitive in + searching for names (unless running under the POSIX sub-system, it which + case it does case sensitive searches).
    Do not assume names are case insensitive.  For example, do not expect a file + created with the name of "Foo" to be opened successfully with the name of "foo".Some file systems are case sensitive.  For example, POSIX.
    Don't use hyphens in names.ISO-9660 level 1, and possibly some legacy systems, do not permit + hyphens.
    Limit the length of the string returned by path::string() to + 255 characters.  + Note that ISO 9660 has an explicit directory tree depth limit of 8, although + this depth limit is removed by the Juliet extensions.Some operating systems place limits on the total path length.  For example, + Windows 2000 limits paths to 260 characters total length.
    Limit the length of any one name in a path.  Pick the specific limit according to + the operating systems and or file systems you wish portability to:
    +    Not a concern::  POSIX, Windows, MAC OS X.
    +    31 characters: Classic Mac OS
    +   8 characters + period + 3 characters: ISO 9660 level 1
    +   32 characters: ISO 9660 level 2 and 3
    +   128 characters (64 if Unicode): ISO 9660 with Juliet extensions
    Limiting name length can markedly reduce the expressiveness of file names, yet placing + only very high limits on lengths inhibits widest portability.
    + +
    +

    Revised +20 February, 2011

    + +

    © 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 +www.boost.org/LICENSE_1_0.txt)

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/reference.html b/external/libs/filesystem/v3/doc/reference.html new file mode 100644 index 0000000..f700275 --- /dev/null +++ b/external/libs/filesystem/v3/doc/reference.html @@ -0,0 +1,3672 @@ + + + + + + + +Filesystem V3 Reference + + + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Library
    +
    + Version 3
    + + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    Reference Documentation

    + +

    Table of Contents

    + + + + + + + +
    Introduction
    + Definitions
    + Conformance
    + + Header <boost/filesystem.hpp> synopsis
    + Error reporting
    + Class path
    +    path conversions
    +    path + conversions to native format
    +    path + conversions to generic format
    +    path + encoding conversions
    +    path requirements
    +     path constructors
    +    path assignments
    +    path appends
    +    path modifiers
    +    path native + format observers
    +    path generic + format observers
    +    path decomposition
    +    path query
    +    path iterators
    +    path deprecated functions
    +    path non-member functions
    +    path inserters and extractors
    +  Class filesystem_error
    +    filesystem_error + constructors
    +    filesystem_error path1
    +    filesystem_error path2
    +    filesystem_error + what
    + Enum file_type
    + Enum perms
    + Class + file_status
    +    + + file_status constructors
    +    file_status-modifiers observers
    +    file_status-observers modifiers
    +Class directory_entry
    +    +directory_entry constructors
    +    directory_entry observers
    +    directory_entry modifiers
    +Class directory_iterator
    +    directory_iterator + members
    +Class recursive_directory_iterator
    + + Operational functions
    +      absolute
    +     canonical
    +     copy
    +     copy_directory
    +     copy_file
    +     copy_symlink
    +     create_directories
    +     create_directory
    +     create_hard_link
    +     create_symlink
    +     current_path
    +     exists
    +     equivalent
    +     file_size
    +     hard_link_count
    +      initial_path
    +     is_directory
    +     is_empty
    +      is_other
    +     is_regular_file
    +     is_symlink
    +     last_write_time
    +     permissions
    +     read_symlink
    +     remove
    +     remove_all
    +     rename
    +     resize_file
    +     space
    +     status
    +     status_known
    +     symlink_status
    +     system_complete
    +     temp_directory_path
    +    
    unique_path
    + File streams
    +Path decomposition table
    + Warning: Long paths on Windows and the + extended-length \\?\ prefix
    +Acknowledgements
    +References
    + +

    Introduction

    + +

    This reference documentation describes components that C++ programs may use +to perform operations involving file systems, including paths, regular files, +and directories.

    +

    Definitions

    +

    The following definitions shall apply throughout this reference documentation:

    +

    File: An object that can be written to, or read from, or both. A file +has certain attributes, including type. Common types of files include regular files +and directories. Other types of files, such as symbolic links, may be supported by the +implementation.

    +

    File system: A collection of files and certain of their attributes.

    +

    Filename: The name of a file. Slash and +0x00 +characters are not permitted. Implementations may define additional +characters or specific names that are not permitted. Filenames .  +and ..  have special meaning. Implementations may define +additional filenames that have special meaning.

    +
    +

    [Note: Most operating systems prohibit the ASCII control characters + (0x00-0x1F) in filenames.

    +

    Windows prohibits the characters 0x00-0x1F, ", + *, :, <, >, ?, + \, /, and | --end note]

    +
    +

    Path: A sequence of elements that identify +the location of a file within a filesystem. The elements are the root-nameopt, +root-directoryopt, and an optional sequence of filenames. [Note: +A pathname is the concrete representation of a path. --end note]

    +

    Absolute path: A path that +unambiguously +identifies the location of a file within a filesystem without reference to an +additional starting location. The format is implementation defined.

    +
    +

    [Note: For POSIX-like implementations, including Unix + variants, Linux, and Mac OS X, only paths + that begin with a slash are absolute paths.

    +

    For Windows-like implementations, including + Cygwin and + MinGW, only paths that begin with a drive + specifier followed by a slash, or begin with two slashes, are absolute paths. --end + note]

    +
    +

    Relative path: A path that only +unambiguously +identifies the location of a file within a filesystem when resolved relative to +a starting location. The format is implementation defined. [Note: +Paths "." and ".." are considered to be relative paths. --end note]

    +

    Canonical path: An absolute path that has +no elements which are symbolic links, and no dot or dot dot elements.

    +

    Pathname: A character string that represents a +path. Pathnames are formatted according to the generic pathname format or the +implementation defined +native pathname format.

    +

    Generic pathname format:

    +
    +

    pathname:
    +            root-nameopt +root-directoryopt relative-pathopt

    +

    root-name:
    +            +implementation-defined

    +
    +
    +

    [Note: Most POSIX and Windows based operating system define a name +beginning with two slashes (or backslashes, for Windows) as a root-name +identifying network locations. Windows defines a single letter followed by a +":" as a root-name identifying a disc drive. --end note]

    +
    +
    +

    root-directory:
    +            +directory-separator

    +

    relative-path:
    +            +filename
    +            relative-path +directory-separator
    +            relative-path +directory-separator filename

    +

    filename:
    +            name
    +           
    "."
    +           
    +".."

    +

    directory-separator:
    +            "/"
    +      "/"
    directory-separator

    +

    Multiple successive directory-separator characters are considered to +be the same as one directory-separator character. The filename +"." is considered to be a reference to the current directory. The +filename ".." is considered to be a reference to the current +directory. Specific filenames may have special meaning for a particular +operating system.

    +
    +

    Native pathname format:  +An implementation defined format. [Note: For POSIX-like operating +systems, the native format is the same as the generic format. For Windows, the +native format is similar to the generic format, but the directory-separator +characters can be either slashes or backslashes. --end note]

    +

    Link: A directory entry object that associates a +filename with a file. On some file systems, several directory entries can +associate names with the same file.

    +

    Hard link: A link to an existing file. Some +file systems support multiple hard links to a file. If the last hard link to a +file is removed, the file itself is removed.

    +
    +

    [Note: A hard link can be thought of as a shared-ownership smart +pointer to a file. -- end note]

    +
    +

    Symbolic link: A type of file with the +property that when the file is encountered during pathname resolution, a string +stored by the file is used to modify the pathname resolution.

    +
    +

    [Note: A symbolic link can be thought of as a raw pointer to a file. +If the file pointed to does not exist, the symbolic link is said to be a +"dangling" symbolic link. -- end note]

    +
    +

    Race condition: The condition that occurs +when multiple threads, processes, or computers interleave access and +modification of +the same object within a file system.

    +

    Dot, Dot Dot: Synonyms for the filenames "." +and "..", respectively. The dot filename names the current +directory. The dot dot filename names the parent directory.

    +

    Conformance

    +

    Behavior is sometimes specified by reference to ISO/IEC 9945:2003, +POSIX. How such behavior is actually implemented is unspecified.

    +
    +

    [Note: This constitutes an "as if" rule for implementation of +operating system dependent behavior. Presumably implementations will usually call native +operating system API's. --end note]

    +
    +

    Implementations are encouraged, but not required, to support such behavior + +as it is defined by POSIX. Implementations shall document any +behavior that differs from the POSIX defined behavior. Implementations that do not support exact POSIX behavior are +encouraged to provide behavior as close to POSIX behavior as is reasonable given the +limitations of actual operating systems and file systems. If an implementation cannot provide any +reasonable behavior, the implementation shall report an error in an +implementation-defined manner.

    +
    +

    [Note: Such errors might be reported by an #error directive, a +static_assert, a filesystem_error exception, a special +return value, or some other manner. --end note]

    +
    +

    Implementations are not required to provide behavior that is not supported by +a particular file system.

    +
    +

    [Example: The +FAT file system used by some memory cards, camera memory, and floppy discs +does not support hard links, symlinks, and many other features of more capable +file systems. Implementations are only required to support the FAT features +supported by the host operating system. -- end example]

    +
    +

    Specific operating systems such as OpenMVS, +UNIX, and Windows are mentioned only for purposes of illustration or to +give guidance to users and implementers. No slight to other operating systems is implied +or intended. When unlikely to cause confusion, the term POSIX is +sometimes used to refer to "POSIX-compliant operating systems".

    +

    The behavior of functions described in this +reference +may not be achieved in +the presence of race conditions. No diagnostic is required.

    +

    If the possibility of race conditions would make it unreliable for a program to +test for a precondition before calling a function described in this clause, +Requires is not specified for the condition. Instead, the condition is +specified as a Throws condition.

    +
    +

    [Note: As a design practice, preconditions are not specified when it +is unreasonable for a program to detect them prior to calling the function. +-- end note]

    +
    +

    Header <boost/filesystem.hpp> synopsis

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class path;
    +
    +      void swap(path& lhs, path& rhs);
    +      bool lexicographical_compare(path::iterator first1, path::iterator last1,
    +                                   path::iterator first2, path::iterator last2);
    +      std::size_t hash_value(const path& p);
    +
    +      bool operator==(const path& lhs, const path& rhs);
    +      bool operator!=(const path& lhs, const path& rhs);
    +      bool operator< (const path& lhs, const path& rhs);
    +      bool operator<=(const path& lhs, const path& rhs);
    +      bool operator> (const path& lhs, const path& rhs);
    +      bool operator>=(const path& lhs, const path& rhs);
    +
    +      path operator/ (const path& lhs, const path& rhs);
    +
    +      std::ostream&  operator<<( std::ostream& os, const path& p );
    +      std::wostream& operator<<( std::wostream& os, const path& p );
    +      std::istream&  operator>>( std::istream& is, path& p );
    +      std::wistream& operator>>( std::wistream& is, path& p )
    +
    +      class filesystem_error;      
    +      class directory_entry;
    +
    +      class directory_iterator;
    +
    +      class recursive_directory_iterator;
    +
    +      enum file_type
    +      {
    +        status_error, file_not_found, regular_file, directory_file,
    +        symlink_file, block_file, character_file, fifo_file, socket_file,
    +        type_unknown
    +      };
    +  
    +      enum perms
    +      {
    +        no_perms,
    +        owner_read, owner_write, owner_exe, owner_all,
    +        group_read, group_write, group_exe, group_all,
    +        others_read, others_write, others_exe, others_all, all_all,
    +        set_uid_on_exe, set_gid_on_exe, sticky_bit,
    +        perms_mask, perms_not_known,
    +        add_perms, remove_perms, symlink_perms
    +      };
    +
    +      class file_status;
    +
    +      struct space_info  // returned by space function
    +      {
    +        uintmax_t capacity;
    +        uintmax_t free; 
    +        uintmax_t available; // free space available to a non-privileged process
    +      };
    +
    +      BOOST_SCOPED_ENUM_START(copy_option)
    +      {
    +        none
    +        fail_if_exists = none,
    +        overwrite_if_exists
    +      };
    +      BOOST_SCOPED_ENUM_END
    +
    +      BOOST_SCOPED_ENUM_START(symlink_option)
    +      {
    +        none
    +        no_recurse = none,
    +        recurse
    +      };
    +      BOOST_SCOPED_ENUM_END
    +
    +      // operational functions
    +
    +      path         absolute(const path& p, const path& base=current_path());
    +
    +      path         canonical(const path& p, const path& base = current_path());
    +      path         canonical(const path& p, system::error_code& ec);
    +      path         canonical(const path& p, const path& base, system::error_code& ec);
    +
    +      void         copy(const path& from, const path& to);
    +      void         copy(const path& from, const path& to, system::error_code& ec);
    +
    +      void         copy_directory(const path& from, const path& to);
    +      void         copy_directory(const path& from, const path& to, system::error_code& ec);
    +
    +      void         copy_file(const path& from, const path& to);
    +      void         copy_file(const path& from, const path& to, system::error_code& ec);
    +      void         copy_file(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option);
    +      void         copy_file(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option,
    +                             system::error_code& ec);
    +
    +      void         copy_symlink(const path& existing_symlink, const path& new_symlink);
    +      void         copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
    +
    +      bool         create_directories(const path& p);
    +      bool         create_directories(const path& p, system::error_code& ec);
    +
    +      bool         create_directory(const path& p);
    +      bool         create_directory(const path& p, system::error_code& ec);
    +
    +      void         create_directory_symlink(const path& to, const path& new_symlink);
    +      void         create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +      void         create_hard_link(const path& to, const path& new_hard_link);
    +      void         create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
    +
    +      void         create_symlink(const path& to, const path& new_symlink);
    +      void         create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +      path         current_path();
    +      path         current_path(system::error_code& ec);
    +      void         current_path(const path& p);
    +      void         current_path(const path& p, system::error_code& ec);
    +
    +      bool         exists(file_status s);
    +      bool         exists(const path& p);
    +      bool         exists(const path& p, system::error_code& ec);
    +
    +      bool         equivalent(const path& p1, const path& p2);
    +      bool         equivalent(const path& p1, const path& p2, system::error_code& ec);
    +
    +      uintmax_t    file_size(const path& p);
    +      uintmax_t    file_size(const path& p, system::error_code& ec);
    +      uintmax_t    hard_link_count(const path& p);
    +      uintmax_t    hard_link_count(const path& p, system::error_code& ec);
    +
    +      const path&  initial_path();
    +      const path&  initial_path(system::error_code& ec);
    +
    +      bool         is_directory(file_status s);
    +      bool         is_directory(const path& p);
    +      bool         is_directory(const path& p, system::error_code& ec);
    +
    +      bool         is_empty(const path& p);
    +      bool         is_empty(const path& p, system::error_code& ec);
    +
    +      bool         is_other(file_status s);
    +      bool         is_other(const path& p,);
    +      bool         is_other(const path& p, system::error_code& ec);
    +
    +      bool         is_regular_file(file_status s); 
    +      bool         is_regular_file(const path& p);
    +      bool         is_regular_file(const path& p, system::error_code& ec);
    +
    +      bool         is_symlink(file_status s);
    +      bool         is_symlink(const path& p);
    +      bool         is_symlink(const path& p, system::error_code& ec);
    +
    +      std::time_t  last_write_time(const path& p);
    +      std::time_t  last_write_time(const path& p, system::error_code& ec);
    +      void         last_write_time(const path& p, const std::time_t new_time);
    +      void         last_write_time(const path& p, const std::time_t new_time, system::error_code& ec);
    +
    +      path         read_symlink(const path& p);
    +      path         read_symlink(const path& p, system::error_code& ec);
    +
    +      bool         remove(const path& p);
    +      bool         remove(const path& p, system::error_code& ec);
    +
    +      uintmax_t    remove_all(const path& p);
    +      uintmax_t    remove_all(const path& p, system::error_code& ec);
    +
    +      void         rename(const path& from, const path& to);
    +      void         rename(const path& from, const path& to, system::error_code& ec);
    +
    +      void         resize_file(const path& p, uintmax_t size);
    +      void         resize_file(const path& p, uintmax_t size, system::error_code& ec);
    +
    +      space_info   space(const path& p);
    +      space_info   space(const path& p, system::error_code& ec);
    +      file_status  status(const path& p);
    +      file_status  status(const path& p, system::error_code& ec);
    +
    +      bool         status_known(file_status s);
    +
    +      file_status  symlink_status(const path& p);
    +      file_status  symlink_status(const path& p, system::error_code& ec);
    +
    +      path         system_complete(const path& p);
    +      path         system_complete(const path& p, system::error_code& ec);
    +
    +      path         temp_directory_path();
    +      path         temp_directory_path(system::error_code& ec);
    +
    +      path         unique_path(const path& model="%%%%-%%%%-%%%%-%%%%");
    +      path         unique_path(const path& model, system::error_code& ec);
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    Error reporting

    +

    Filesystem library functions often provide two overloads, one that +throws an exception to report file system errors, and another that sets an +error_code.

    +
    +

    [Note: This supports two common use cases:

    +
      +
    • Uses where file system +errors are truly exceptional and indicate a serious failure. Throwing an + exception is the most appropriate response. This is the preferred default for + most everyday programming.
    • +
    • Uses where file system system errors are routine and do not necessarily represent + failure. Returning an error code is the most appropriate response. This allows + application specific error handling, including simply ignoring the error.
    • +
    +

    --end note]

    +
    +

    Functions not having an argument of type +system::error_code& +report errors as follows, unless otherwise specified:

    +
      +
    • When a call by the + implementation to an operating system or other underlying API results in an + error that prevents the function from meeting its specifications, an exception + of type +filesystem_error is thrown.
    • +
    • Failure to allocate storage is reported by throwing an exception as described in the C++ standard, + 17.6.4.10 [res.on.exception.handling].
    • +
    • Destructors throw nothing.
    • +
    +

    Functions having an argument of type +system::error_code& report errors as follows, unless otherwise + specified:

    +
      +
    • If a call by the + implementation to an operating system or other underlying API results in an + error that prevents the function from meeting its specifications, the +system::error_code& argument is set as + appropriate appropriate for the specific error. Otherwise, clear() + is called on the +system::error_code& argument.
    • +
    • Failure to allocate storage is reported by + throwing an exception as described in the C++ standard, + 17.6.4.10 [res.on.exception.handling].
    • +
    +

    Class path

    +

    An object of class path represents a path, +and contains a pathname Such an object is concerned only with the lexical and syntactic aspects +of a path. The path does not necessarily exist in external storage, and the +pathname is not necessarily valid for the current operating +system or for a particular file system.

    +
    +

    [Example: A long path name on Windows +is an example of an innocuous appearing path that is not actually valid. -- +end example]

    +
    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class path
    +      {
    +      public:
    +        typedef see below                                    value_type;  // char for POSIX, wchar_t for Windows
    +        typedef std::basic_string<value_type>                string_type;
    +        typedef std::codecvt<wchar_t, char, std::mbstate_t>  codecvt_type;
    +
    +        // constructors and destructor
    +        path();
    +        path(const path& p);
    +
    +        template <class Source>
    +          path(Source const& source, const codecvt_type& cvt=codecvt());
    +
    +        template <class InputIterator>
    +          path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +       ~path();
    +
    +        // assignments
    +        path& operator=(const path& p);
    +
    +        template <class Source>
    +          path& operator=(Source const& source);
    +
    +        template <class Source>
    +          path& assign(Source const& source, const codecvt_type& cvt)
    +
    +        template <class InputIterator>
    +          path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +        // appends
    +        path& operator/=(const path& p);
    +
    +        template <class Source>
    +          path& operator/=(Source const& source);
    +
    +        template <class Source>
    +          path& append(Source const& source, const codecvt_type& cvt);
    +
    +        template <class InputIterator>
    +          path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +        // modifiers
    +        void  clear();
    +        path& make_absolute(const path& base);
    +        path& make_preferred();  // POSIX: no effect. Windows: convert slashes to backslashes
    +        path& remove_filename();
    +        path& replace_extension(const path& new_extension = path());
    +        void  swap(path& rhs);
    +
    +        // native format observers
    +        const string_type&  native() const;  // native format, encoding
    +        const value_type*   c_str() const;   // native().c_str()
    +
    +        template <class String>
    +        String string(const codecvt_type& cvt=codecvt()) const;                // native format
    +
    +        const string        string(const codecvt_type& cvt=codecvt()) const;   // native format
    +        const wstring       wstring(const codecvt_type& cvt=codecvt()) const;  // ditto
    +        const u16string     u16string() const;                                 // ditto
    +        const u32string     u32string() const;                                 // ditto
    +
    +        // generic format observers
    +        template <class String>
    +        String generic_string() const;
    +
    +        const string        generic_string(const codecvt_type& cvt=codecvt()) const;   // generic format
    +        const wstring       generic_wstring(const codecvt_type& cvt=codecvt()) const;  // ditto
    +        const u16string     generic_u16string() const;                                 // ditto
    +        const u32string     generic_u32string() const;                                 // ditto
    +
    +        // decomposition
    +        path  root_name() const;
    +        path  root_directory() const;
    +        path  root_path() const;
    +        path  relative_path() const;
    +        path  parent_path() const;
    +        path  filename() const;
    +        path  stem() const;
    +        path  extension() const;
    +
    +        // query
    +        bool empty() const;
    +        bool has_root_name() const;
    +        bool has_root_directory() const;
    +        bool has_root_path() const;
    +        bool has_relative_path() const;
    +        bool has_parent_path() const;
    +        bool has_filename() const;
    +        bool has_stem() const;
    +        bool has_extension() const;
    +        bool is_absolute() const;
    +        bool is_relative() const;
    +
    +        // iterators
    +        class iterator;
    +        typedef iterator const_iterator;
    +
    +        iterator begin() const;
    +        iterator end() const;
    +        
    +        // encoding conversion
    +        static std::locale imbue( const std::locale& loc );
    +        static const codecvt_type & codecvt();
    +
    +      private:
    +        string_type pathname;  // exposition only
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    value_type is an implementation-defined +typedef for the +character type used by the operating system to represent pathnames.

    +

    Member functions described as returning const string, +const wstring, const u16string, or const u32string are permitted to return const string&, const +wstring&, const u16string&, or const u32string&, +respectively.

    +
    +

    [Note: This allows implementations to avoid unnecessary copies when no +conversion is required. +Return-by-value is specified as +const to ensure programs won't break if moved to a return-by-reference +implementation. -- +end note]

    +
    +

    path Conversions

    +

    path Conversions to +native format

    +

    Member function arguments that take character sequences representing paths +may use the generic pathname format or +the native pathname format. If such an +argument uses the generic format, an implementation defined conversion to native format is performed +during the processing of the argument.

    +
    +

    [Note: No conversion occurs on POSIX and Windows since they have +native formats that conform to the generic format. --end note]

    +

    [Rationale: There is no unambiguous way for an implementation to +always be able distinguish between native format and generic format arguments. +This is by design as it simplifies use. Should an implementation encounter an +operating system where disambiguation is required, an implementation defined +native format prefix can be introduced to identify the native format. -- end +rationale]

    +
    + + + + + +
    + Class path does not currently map invalid characters in + filenames to valid characters. In the future we might add something like + this:
    +

    When converting filenames to the native operating system format, +implementations are encouraged, but not required, to convert otherwise invalid +characters or character sequences to valid characters or character sequences. +Such conversions are implementation-defined.

    +
    +

    [Note: Filename conversion allows much wider portability of both +programs and filenames that would otherwise be possible.

    +

    Implementations are encouraged to base conversion on existing standards or +practice. Examples include the Uniform Resource Locator escape syntax of a percent sign ('%') +followed by two hex digits representing the character value. On +OpenVMS, which does not allow percent signs in filenames, a dollar sign ('$') +followed by two hex digits is the existing practice, as is converting lowercase +letters to uppercase. -- end note.]

    +
    +
    +
    + +

    If the native format requires +paths for regular files to be formatted differently from paths for directories, the +path shall be treated as a directory path if last element is a separator, +otherwise it shall be treated as a regular file path.

    + +
    + +

    [Note: The above paragraph does not apply to POSIX and Windows since +they use the same format +for both regular file and directory pathnames. --end note]

    + +

    [Example: +On OpenVMS, a path +constructed from "/cats/jane" would considered a regular file +path, and have a native format of "[CATS]JANE", while a +path constructed from "/cats/jane/" would be considered a +directory path, and have a native format of "[CATS.JANE]". +--end example]

    + +
    +

    path Conversions +to generic format

    +

    Generic format observer +functions return strings formatted according to the +generic pathname format. The conversion +from generic to native formats is implementation defined.

    +
    +

    [Note: For POSIX, no conversion is performed. For Windows, backslashes are converted to +forward slashes. -- end note]

    +
    +

    path Encoding conversions

    +

    If the value type of member function arguments that are character sequences +representing paths is not value_type, +and no cvt argument is supplied, conversion to value_type +occurs using an imbued locale. This imbued locale is initialized with a +codecvt facet appropriate for the operating system.

    +
    +

    For Apple OS X implementations, path::value_type +is char. The default imbued locale provides a UTF-8 codecvt +facet. [Rationale: "All BSD system functions expect their string +parameters to be in UTF-8 encoding and nothing else." See + +Apple docs. -- end rationale]

    +

    For Windows-like implementations, including +MinGW, path::value_type is +wchar_t. The default imbued locale provides a codecvt facet +that invokes Windows MultiByteToWideChar or +WideCharToMultiByte API with a codepage of CP_THREAD_ACP +if Windows AreFileApisANSI()is true, otherwise codepage +CP_OEMCP. [Rationale: this is the current behavior of C and C++ +programs that perform file operations using narrow character string to identify +paths. Changing this in the Filesystem library would be too surprising, +particularly where user input is involved. -- end rationale]

    +

    For all other implementations, including Linux, path::value_type +is char. The default imbued locale is std::locale(""). +[Rationale: ISO C specifies this as "the locale-specific native +environment", while POSIX says it "Specifies an implementation-defined native +environment." -- end rationale]

    +
    +

    path Requirements

    +

    Template parameters named InputIterator +are required meet the +requirements for a C++ standard library RandomIterator +compliant iterator. The iterator's value type is required to be char, + wchar_t, char16_t, or char32_t.

    +

    Template parameters named Source are required to be one of:

    +
      +
    • A container with a value type of char, + wchar_t, char16_t, or char32_t.
    • +
    • An iterator for a null terminated byte-string. The value type is required + to be char, wchar_t, char16_t, or + char32_t.
    • +
    • A C-array. The value type is required to be char, + wchar_t, char16_t, or char32_t.
    • +
    • A boost::filesystem::directory_entry.
    • +
    + +

    +path constructors

    +
    path();
    +
    +

    Postcondition: empty().

    +
    +
    template <class Source>
    +  path(Source const& source, const codecvt_type& cvt=codecvt());
    +
    template <class InputIterator>
    +  path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +

    Effects: Stores the contents [begin,end) + or source in pathname. If the contents are in the + generic format and the generic format is unacceptable to the operating + system's API, they are converted to the native format. [Note: For + POSIX and Windows implementations, the generic format is already + acceptable as a native format, so no generic to native conversion is + performed. --end note]

    +

    + Remarks: If the value type of  [begin,end) + or source is not value_type, conversion is performed + by cvt.

    +
    +

    +path assignments

    +
    template <class Source>
    +  path& operator=(Source const& source);
    +
    template <class Source>
    +  path& assign(Source const& source, const codecvt_type& cvt);
    +
    template <class InputIterator>
    +  path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +

    Effects: Stores the contents [begin,end) + or source in pathname. If the contents are in the + generic format, they are converted to the native format. [Note: For + POSIX and Windows based implementations, the generic format is already + acceptable as a native format, so no generic to native conversion is + performed. --end note]

    +

    + Returns: *this

    +

    + Remarks: If the value type of  [begin,end) + or source is not value_type, conversion is performed + by cvt.

    +
    +

    path appends

    +

    The append operations use operator/= to denote their semantic + effect of appending the platform's preferred directory separator when needed. The + preferred + directory separator is implementation-defined.

    +
    +

    [Note: For POSIX-like implementations, including + Unix variants, Linux, and Mac OS X, the preferred directory separator is a + single forward slash.

    +

    For Windows-like implementations, including + Cygwin and + MinGW, the preferred directory + separator is a single backslash.--end note]

    +
    +
    path& operator/=(const path& p);
    +
    +

    Effects:

    +
    + Appends the preferred directory separator to the contained pathname, unless:
      +
    • an added separator + would be redundant, or
    • +
    • would change an relative path to an absolute path, or
    • +
    • p.empty(), or
    • +
    • *p.native().cbegin() is a directory separator.
    • +
    +

    Appends p.native() to pathname.

    +
    +

    Returns: *this

    +
    +
    template <class Source>
    +  path& operator/=(Source const & source);
    +
    template <class Source>
    +  path& append(Source const & source, const codecvt_type& cvt);
    +
    template <class InputIterator>
    +  path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +

    Effects:

    +
    +

    Appends a native directory separator to the contained pathname, unless:

    +
      +
    • an added separator + would be redundant, or
    • +
    • would change an relative path to an absoute path, or
    • +
    • p.empty(), or
    • +
    • *p.native().cbegin() is a separator.
    • +
    +

    Appends the contents [begin,end) + or source to pathname. If the contents are in the + generic format, they are converted to the native format. [Note: For + POSIX and Windows based implementations, the generic format is already + acceptable as a native format, so no generic to native conversion is + performed. --end note]

    +
    +

    Remarks: If the value type of  [begin,end) + or source is not value_type, conversion is performed + by cvt.

    +

    Returns: *this

    +
    + +

    +path modifiers

    +
    void clear();
    +
    +

    Postcondition: this->empty() is true.

    +
    +
    path& make_preferred();
    +
    +

    Effects: The contained pathname is converted to the preferred native + format. [Note: On Windows, the effect is to replace slashes with + backslashes. On POSIX, there is no effect. -- end note]

    +

    Returns: *this

    +
    + +
    path& remove_filename();
    +
    +

    Returns: As if, *this = parent_path();

    +

    [Note: This function is needed to efficiently implement + directory_iterator. It is exposed to allow additional uses. The actual + implementation may be much more efficient than *this = parent_path()  -- end + note]

    +
    +
    path& replace_extension(const path& new_extension = path());
    +
    +

    Postcondition: extension() == replacement, + where replacement is new_extension if + new_extension.empty() || new_extension[0] == the dot character, + otherwise replacement is the dot character followed by + new_extension.

    +

    Returns: *this

    +
    +
    void swap(path& rhs);
    +
    +

    Effects: + Swaps the contents of the two paths.

    +

    Throws: + nothing.

    +

    Complexity: + constant time.

    +
    + +

    path +native format observers

    +

    The string returned by all native format observers is in the +native pathname format.

    +
    const string_type&  native() const;
    +
    +

    Returns: pathname.

    +

    Throws: nothing.

    +
    +
    const value_type* c_str() const;
    +
    +

    Returns: pathname.c_str().

    +

    Throws: nothing.

    +
    +
    template <class String>
    +String string(const codecvt_type& cvt=codecvt()) const;
    +
    +

    Returns: pathname.

    +

    Remarks: If string_type is a different type than +String, conversion is performed by cvt.

    +
    +
    const string string(const codecvt_type& cvt=codecvt()) const;
    +const wstring wstring(const codecvt_type& cvt=codecvt()) const;
    +const u16string u16string() const;
    +const u32wstring u32wstring() const; 
    +
    +

    Returns: pathname.

    +

    Remarks: If string_type is a different type than +function's return type, conversion is performed by cvt.

    +

    If string_type is the same type as the +function's return type, the function is permitted to return by const& +rather than const value. [Note: For POSIX, this occurs for +string(), for Windows, wstring(). --end note]

    +
    + +

    path +generic format observers

    +

    The string returned by all generic format observers is in the +generic pathname format.

    +

    [Note: For POSIX, no conversion occurs, since the native format and +generic format are the same. For Windows, backslashes are converted to slashes +--end note]

    +
    template <class String>
    +String generic_string(const codecvt_type& cvt=codecvt()) const;
    +
    +

    Returns: pathname.

    +

    Remarks: If string_type is a different type than +String, conversion is performed by +cvt.

    +
    +
    const string generic_string(const codecvt_type& cvt=codecvt()) const;
    +const wstring generic_wstring(const codecvt_type& cvt=codecvt()) const;
    +const u16string generic_u16string() const;
    +const u32wstring generic_u32wstring() const; 
    +
    +

    Returns: pathname.

    +

    Remarks:  If string_type is a different type than +function's return type, conversion is performed by cvt.

    +

    If string_type is of the same type as the +function's return type, and the generic format is the same as the native format, +the function is permitted to return by const& rather than +const value. [Note: For POSIX, this occurs for string(). +It never occurs for Windows, because backslashes must be converted to slashes. +--end note]

    +
    + +

    path +decomposition

    +

    See the +Path decomposition table for examples +for values returned by decomposition functions. The +Tutorial may also be +helpful.

    +
    path root_name() const;
    +
    +

    Returns: root-name, if pathname includes +root-name, otherwise path().

    +
    +
    path root_directory() const;
    +
    +

    Returns: root-directory, if pathname includes +root-directory, otherwise path().

    +

    If root-directory is composed of slash name, slash is +excluded from the returned string.

    +
    +
    path root_path() const;
    +
    +

    Returns: root_name() / root_directory()

    +
    +
    path relative_path() const;
    +
    +

    Returns: A path composed from pathname, if +!empty(), beginning +with the first filename after root-path. Otherwise, path().

    +
    +
    path parent_path() const;
    +
    +

    Returns: (empty() || begin() == --end()) ? path() : pp, where + pp is constructed as if by + starting with an empty path and successively applying + operator/= for each element in the range begin(), + --end().

    +
    +
    path filename() const;
    +
    +

    Returns: empty() ? path() : *--end()

    +

    [Example:

    +
    +
    std::cout << path("/foo/bar.txt").filename(); // outputs "bar.txt"
    +
    +

    --end example]

    +
    +
    path stem(const path& p) const;
    +
    +

    Returns: if p.filename()contains a dot but does not + consist solely of one or to two dots, returns + the substring of p.filename() starting at its beginning and + ending at the last dot (the dot is not included). Otherwise, + returns + p.filename().

    +

    [Example:

    +
    +
    std::cout << path("/foo/bar.txt").stem(); // outputs "bar"
    +path p = "foo.bar.baz.tar";
    +for (; !p.extension().empty(); p = p.stem())
    +  std::cout << p.extension() << '\n';
    +  // outputs: .tar
    +  //          .baz
    +  //          .bar
    +
    +

    --end example]

    +
    +
    path extension(const path& p) const;
    +
    +

    Returns: if p.filename() contains a dot but does not + consist solely of one or to two dots, returns + the substring of p.filename() starting at the rightmost dot + and ending at the path's end. Otherwise, returns an empty path + object.

    +

    Remarks: Implementations are permitted but not required to define additional + behavior for file systems which append additional elements to extensions, such + as alternate data streams or partitioned dataset names.

    +

    [Example:

    +
    +
    std::cout << path("/foo/bar.txt").extension(); // outputs ".txt"
    +
    +

    --end example]

    +

    [Note: The dot is included in the return value so that + it is possible to distinguish between no extension and an empty extension. See + + http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744 for more + extensive rationale.  -- end note]

    +
    +

    path query

    +
    bool empty() const;
    +
    +

    Returns: m_pathname.empty().

    +
    +
    bool has_root_path() const;
    +
    +

    Returns: !root_path().empty()

    +
    +
    bool has_root_name() const;
    +
    +

    Returns: !root_name().empty()

    +
    +
    bool has_root_directory() const;
    +
    +

    Returns: !root_directory().empty()

    +
    +
    bool has_relative_path() const;
    +
    +

    Returns: !relative_path().empty()

    +
    +
    bool has_parent_path() const;
    +
    +

    Returns: !parent_path().empty()

    +
    +
    bool has_filename() const;
    +
    +

    Returns: !filename().empty()

    +
    +
    bool has_stem() const;
    +
    +

    Returns: !stem().empty()

    +
    +
    bool has_extension() const;
    +
    +

    Returns: !extension().empty()

    +
    +
    bool is_absolute() const;
    +
    +

    Returns: true + if the elements of root_path() uniquely identify a directory, else false.

    +

    [Note: On POSIX, + path("/foo").is_absolute() returns true. On Windows, + path("/foo").is_absolute() returns false. --end note]

    +
    +
    bool is_relative() const;
    +
    +

    Returns: !is_absolute().

    +
    +

    +path iterators

    +

    A path::iterator is a constant iterator satisfying all +the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional +iterators [lib.bidirectional.iterators]). Its value_type is +path.

    +

    Calling any non-const member function of a path object + invalidates all iterators referring to elements of that object.

    +

    The forward traversal order is as follows:

    +
      +
    • The root-name element, if present.
    • +
    • The root-directory element, if present.
    • +
    • Each successive filename element, if present.
    • +
    • Dot, if one or more trailing non-root slash + characters are present.
    • +
    +

    The backward traversal order is the reverse of forward traversal.

    +
    iterator begin() const;
    +
    +

    Returns: An iterator for the first present element in the traversal + list above. If no elements are present, the end iterator.

    +
    +
    iterator end() const;
    +
    +

    Returns: The end iterator.

    +
    +

    path encoding conversion

    +
    static std::locale imbue(const std::locale& loc);
    +
    +

    Effects: Stores loc as the default locale for all + objects of type path.

    +

    Returns: The previous default locale for all objects of type + path.

    +
    +
    static const codecvt_type& codecvt();
    +
    +

    Returns: The codecvt facet for the default locale for + all objects of type path.

    +
    +

    path deprecated functions

    +

    Several member functions from previous versions of class path +have been deprecated, either because they have been renamed or because the +functionality is no longer desirable or has become obsolete.

    +

    Deprecated functions available by default; will be suppressed if +BOOST_FILESYSTEM_NO_DEPRECATED is defined:

    +
    +
    path&  remove_leaf()           { return remove_filename(); }
    +path   leaf() const            { return filename(); }
    +path   branch_path() const     { return parent_path(); }
    +bool   has_leaf() const        { return !m_path.empty(); }
    +bool   has_branch_path() const { return !parent_path().empty(); }
    +
    +

    Deprecated functions not available by default; will be supplied if +BOOST_FILESYSTEM_DEPRECATED is defined:

    +
    +
    const std::string  file_string() const               { return native_string(); }
    +const std::string  directory_string() const          { return native_string(); }
    +const std::string  native_file_string() const        { return native_string(); }
    +const std::string  native_directory_string() const   { return native_string(); }
    +const string_type  external_file_string() const      { return native(); }
    +const string_type  external_directory_string() const { return native(); }
    +
    +

    path +non-member functions

    +
    void swap( path& lhs, path& rhs )
    +
    +

    Effects: + lhs.swap(rhs).

    +
    +
    bool lexicographical_compare(path::iterator first1, path::iterator last1,
    +                             path::iterator first2, path::iterator last2)
    +
    +

    Returns: true if the sequence of native() + strings for the elements defined by the range [first1,last1) is + lexicographically less than the sequence of native() strings for + the elements defined by the range [first2,last2). Returns + false otherwise.

    +

    Remarks: If two sequences have the same number of elements and their + corresponding elements are equivalent, then neither sequence is + lexicographically less than the other. If one sequence is a prefix of the + other, then the shorter sequence is lexicographically less than the longer + sequence. Otherwise, the lexicographical comparison of the sequences yields + the same result as the comparison of the first corresponding pair of elements + that are not equivalent.

    +
      for ( ; first1 != last1 && first2 != last2 ; ++first1, ++first2) {
    +    if (first1->native() < first2->native()) return true;
    +    if (first2->native() < first1->native()) return false;
    +  }
    +  return first1 == last1 && first2 != last2;
    +

    [Note: A path aware lexicographical_compare + is provided to avoid infinite recursion in std::lexicographical_compare + due to the path iterator's value type itself being path. + --end note]

    +
    +
    std::size_t hash_value (const path& p);
    +
    +

    Returns: A hash value for the path p. If + for two paths, p1 == p2 then + hash_value(p1) == hash_value(p2).

    +

    This allows paths to be used with + Boost.Hash.

    +
    +
    bool operator< (const path& lhs, const path& rhs);
    +
    +

    Returns: return lexicographical_compare(lhs.begin(), lhs.end(), + rhs.begin(), rhs.end()).

    +
    +
    bool operator<=(const path& lhs, const path& rhs);
    +
    +

    Returns: !(rhs < lhs).

    +
    +
    bool operator> (const path& lhs, const path& rhs);
    +
    +

    Returns: rhs < lhs.

    +
    +
    bool operator>=(const path& lhs, const path& rhs);
    +
    +

    Returns: !(lhs < rhs).

    +
    +
    bool operator==(const path& lhs, const path& rhs);
    +
    +

    Returns: !(lhs < rhs) && !(rhs < lhs).

    +

    [Note: Actual implementations may use an equivalent, but more + efficient, algorithm. --end note]

    +

    [Note: Path equality and path + equivalence have different semantics.

    +

    Equality is determined by the path + non-member operator==, which considers the two path's lexical + representations only. Thus path("foo") == "bar" is never + true.

    +

    Equivalence is determined by the equivalent() + non-member function, which determines if two paths resolve to the same file system entity. + Thus equivalent("foo", "bar") will be true + when both paths resolve to the same file.

    +

    Programmers wishing to determine if two paths are "the same" must decide if + "the same" means "the same representation" or "resolve to the same actual + file", and choose the appropriate function accordingly. + -- end note]

    +
    +
    bool operator!=(const path& lhs, const path& rhs);
    +
    +

    Returns: !(lhs == rhs).

    +
    +
    path operator/ (const path& lhs, const path& rhs);
    +
    +

    Returns: path(lhs) /= rhs.

    +
    +

    path inserter + and extractor

    +

    The inserter and extractor delimit the string with double-quotes (") +to ensure that paths with embedded spaces will round trip correctly. Ampersand (&) +is used as an escape character, so the path can itself contain double quotes.

    +
    template <class Char, class Traits>
    +std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os,
    +                                             const path& p)
    +
    +
    +

    Effects:  + os << + boost::io::quoted(p.string<std::basic_string<Char>>(), static_cast<Char>('&'));

    +

    Returns: + os

    +
    +
    template <class Char, class Traits>
    +inline std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is,
    +                                                    path& p)
    +
    +
    +

    Effects:  +  std::basic_string<Char> str;
    +        is >> + boost::io::quoted(str, + static_cast<Char>('&'));
    +        p = str;

    +

    Returns: + is

    +
    +

    Class filesystem_error

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class basic_filesystem_error : public system_error
    +      {
    +      public:
    +        filesystem_error();
    +        filesystem_error(const filesystem_error&);
    +        filesystem_error(const std::string& what_arg,
    +          system::error_code ec);
    +        filesystem_error(const std::string& what_arg,
    +          const path& p1, system::error_code ec);
    +        filesystem_error(const std::string& what_arg,
    +          const path& p1, const path& p2, system::error_code ec);
    +
    +        filesystem_error& filesystem_error(const filesystem_error&);
    +       ~filesystem_error();
    +
    +        filesystem_error& operator=(const filesystem_error&);
    +
    +        const path& path1() const;
    +        const path& path2() const;
    +
    +        const char * what() const;
    +      };
    +    } // namespace filesystem
    +  } // namespace boost
    +

    The class template basic_filesystem_error defines the type of +objects thrown as exceptions to report file system errors from functions described in this +clause.

    +

    filesystem_error members

    +
    filesystem_error(const std::string& what_arg, error_code ec);
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + what_arg.c_str()
    code()ec
    path1().empty()true
    path2().empty()true
    +
    +
    filesystem_error(const std::string& what_arg, const path_type& p1, error_code ec);
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + what_arg.c_str()
    code()ec
    path1()Reference to stored copy of + p1
    path2().empty()true
    +
    +
    filesystem_error(const std::string& what_arg, const path_type& p1, const path_type& p2, error_code ec);
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + + what_arg.c_str()
    code()ec
    path1()Reference to stored copy of + p1
    path2()Reference to stored copy of + p2
    +
    +
    const path& path1() const;
    +
    +

    Returns: Reference to copy of p1 stored by the + constructor, or, if none, an empty path.

    +
    +
    const path& path2() const;
    +
    +

    Returns: Reference to copy of p2 stored by the + constructor, or, if none, an empty path.

    +
    +
    const char* what() const;
    +
    +

    Returns: A string containing runtime_error::what(). The exact format is unspecified. + Implementations are encouraged but not required to include + path1.native_string()if not empty, path2.native_string()if + not empty, and system_error::what() strings in the returned + string.

    +
    +

    Enum file_type

    +

    This enum specifies constants uses to identify file types.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Constant NameMeaning
    status_errorAn error occurred while trying to obtain the status of the file. The + file simply not being found is not considered a status error. +
    file_not_foundThe file could not be found
    regular_fileRegular file
    directory_fileDirectory file
    symlink_fileSymbolic link file
    block_fileBlock special file
    character_fileCharacter special file
    fifo_fileFIFO or pipe file
    socket_fileSocket file
    type_unknownThe file exists, but it is of a system specific type not covered by any + of the above cases.
    +

    Enum perms

    +

    This enum specifies bitmask constants uses to identify file +permissions. The POSIX standard specifies actual values, and those values have +been adopted here because they are very familiar and ingrained for many POSIX +users.

    +
    +

    Caution: Operating systems do not always support permissions as described in +the table.

    +

    There is much variation in the meaning of +sticky_bit; do not use it unless you understand what it means for +your operating system.

    +

    There is much variation in how operating systems treat symlinks. See +symlink_perms.

    +

    Windows: All permissions except write are currently ignored. There is only a +single write permission; setting write permission for owner, group, or others +sets write permission for all, and removing write permission for owner, group, +or others removes write permission for all.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameValue
    + (octal)
    POSIX
    + macro
    Definition or notes
    +

    no_perms

    0There are no permissions set for the file. Note: file_not_found is + no_perms rather than perms_not_known
    owner_read0400 S_IRUSR Read permission, owner
    owner_write0200 S_IWUSR Write permission, owner
    owner_exe0100 S_IXUSR Execute/search permission, owner
    owner_all0700 S_IRWXU Read, write, execute/search by owner; owner_read | owner_write | owner_exe
    group_read040 S_IRGRP Read permission, group
    group_write020 S_IWGRP Write permission, group
    group_exe010 S_IXGRP Execute/search permission, group
    group_all070 S_IRWXG Read, write, execute/search by group; group_read | group_write | + group_exe
    others_read04 S_IROTH Read permission, others
    others_write02 S_IWOTH Write permission, others
    others_exe01 S_IXOTH Execute/search permission, others
    others_all07 S_IRWXORead, write, execute/search by others; others_read | others_write | others_exe
    all_all0777 owner_all | group_all | others_all
    set_uid_on_exe04000 S_ISUID Set-user-ID on execution
    set_gid_on_exe02000 S_ISGID Set-group-ID on execution
    sticky_bit 01000 S_ISVTX Meaning varies; see http:en.wikipedia.org/wiki/Sticky_bit
    perms_mask07777  all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit
    perms_not_known0xFFFF + The permissions are not known, such as when a file_status object + is created without specifying the permissions
    +

    add_perms

    0x1000 +

    permissions() adds the argument permission bits to the + file's current bits

    remove_perms0x2000 + permissions() removes the argument permission bits from the + file's current bits
    symlink_perms0x4000 + On POSIX permissions() resolves symlinks unless symlink_perms + is specified. + Meaningless on Windows as permissions() never resolves symlinks. + Meaningless on Mac OS X and some other BSD systems as permissions() + always resolves symlinks. Get over it.
    +

    Class file_status

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class file_status
    +      {
    +      public:
    +
    +        // constructors
    +        file_status() noexcept;
    +        explicit file_status(file_type ft, perms prms = perms_not_known) noexcept;
    +
    +        // compiler generated
    +        file_status(const file_status&) noexcept;
    +        file_status& operator=(const file_status&) noexcept;
    +       ~file_status() noexcept;
    +
    +        // observers
    +        file_type  type() const noexcept;
    +        perms      permissions() const noexcept;
    +
    +        // modifiers
    +        void       type(file_type ft) noexcept;
    +        void       permissions(perms prms) noexcept;
    +      };
    +    } // namespace filesystem
    +  } // namespace boost
    +

    An object of type file_status stores information about the type +and permissions of a file.

    +

    file_status +constructors

    +
    explicit file_status() noexcept;
    +
    +

    Postconditions: type() == status_error, + permissions() == perms_not_known.

    +
    +
    explicit file_status(file_type ft, perms prms = perms_not_known) noexcept;
    +
    +

    Postconditions: type() == ft, permissions() == + prms.

    +
    +

    file_status + observers

    +
    file_type type() const noexcept;
    +
    +

    Returns: The value of type() specified by the + postconditions of the most recent call to a constructor, operator=, or + type(file_type) function.

    +
    +
    perms permissions() const noexcept;
    +
    +

    Returns: The value of permissions() specified by the + postconditions of the most recent call to a constructor, operator=, or + permissions(perms) function.

    +
    +

    file_status modifiers

    +
    void type(file_type ft) noexcept;
    +
    +

    Postconditions: type() == ft.

    +
    +
    void permissions(perms prms) noexcept;
    +
    +

    Postconditions: permissions() == prms.

    +
    +

    Class directory_entry

    +
    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class directory_entry
    +      {
    +      public:
    +
    +        // constructors and destructor
    +        directory_entry();
    +        directory_entry(const directory_entry&);
    +        explicit directory_entry(const path_type& p, file_status st=file_status(),
    +          file_status symlink_st=file_status());
    +       ~directory_entry(); 
    +
    +        // modifiers
    +        directory_entry& operator=(const directory_entry&);
    +        void assign(const path_type& p, file_status st=file_status(),
    +          file_status symlink_st=file_status());
    +        void replace_filename(const path& p, file_status st=file_status(),
    +          file_status symlink_st=file_status());
    +
    +        // observers
    +        const path&  path() const;
    +        file_status  status() const;
    +        file_status  status(system::error_code& ec) const;
    +        file_status  symlink_status() const;
    +        file_status  symlink_status(system::error_code& ec) const;
    +
    +        bool operator< (const directory_entry& rhs);
    +        bool operator==(const directory_entry& rhs); 
    +        bool operator!=(const directory_entry& rhs); 
    +        bool operator< (const directory_entry& rhs);
    +        bool operator<=(const directory_entry& rhs);
    +        bool operator> (const directory_entry& rhs);
    +        bool operator>=(const directory_entry& rhs);
    +      private:
    +        path_type            m_path;           // for exposition only
    +        mutable file_status  m_status;         // for exposition only; stat()-like
    +        mutable file_status  m_symlink_status; // for exposition only; lstat()-like
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +
    +

    A directory_entry object stores a path object, +a file_status object for non-symbolic link status, and a +file_status object for symbolic link status. The file_status +objects act as value caches.

    +
    +

    [Note: Because status()on a pathname may be a very expensive operation, +some operating systems provide status information as a byproduct of directory +iteration. Caching such status information can result is significant time savings. Cached and +non-cached results may differ in the presence of race conditions. -- end note]

    +

    Actual cold-boot timing of iteration over +a directory with 15,047 entries was six seconds for non-cached status queries +versus one second for cached status queries. Windows XP, 3.0 GHz processor, with +a moderately fast hard-drive. Similar speedups are expected on Linux and BSD-derived +systems that provide status as a by-product of directory iteration.

    +
    +

    directory_entry constructors

    +
    directory_entry();
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path().empty()true
    status()file_status()
    symlink_status()file_status()
    +
    +
    explicit directory_entry(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()p
    status()st
    symlink_status()symlink_st
    +
    +

    directory_entry modifiers

    +
    void assign(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()p
    status()st
    symlink_status()symlink_st
    +
    +
    void replace_filename(const path& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()path().branch() / s
    status()st
    symlink_status()symlink_st
    +
    +

    directory_entry observers

    +
    const path& path() const;
    +
    +

    Returns: m_path

    +
    +
    file_status status() const;
    +file_status status(system::error_code& ec) const;
    +
    +

    Effects: +As if,

    +
    +
    if ( !status_known( m_status ) )
    +{
    +  if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
    +    { m_status = m_symlink_status; }
    +  else { m_status = status(m_path[, ec]); }
    +}
    +
    +

    Returns: m_status

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    file_status  symlink_status() const;
    +file_status  symlink_status(system::error_code& ec) const;
    +
    +

    + Effects: +As if,

    +
    +
    if ( !status_known( m_symlink_status ) )
    +{
    +  m_symlink_status = symlink_status(m_path[, ec]);
    +}
    +
    +

    Returns: + m_symlink_status

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    bool operator==(const directory_entry& rhs);
    +
    +

    Returns: m_path == + rhs.m_path.

    +
    +
    bool operator!=(const directory_entry& rhs);
    +
    +

    Returns: m_path != + rhs.m_path.

    +
    +
    bool operator< (const directory_entry& rhs);
    +
    +

    Returns: m_path < + rhs.m_path.

    +
    +
    bool operator<=(const directory_entry& rhs);
    +
    +

    Returns: m_path <= + rhs.m_path.

    +
    +
    bool operator> (const directory_entry& rhs);
    +
    +

    Returns: m_path > + rhs.m_path.

    +
    +
    bool operator>=(const directory_entry& rhs);
    +
    +

    Returns: m_path >= + rhs.m_path.

    +
    +

    Class directory_iterator

    +

    Objects of type directory_iterator provide standard library +compliant iteration over the contents of a directory. Also see class +recursive_directory_iterator.

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class directory_iterator
    +        : public boost::iterator_facade< directory_iterator,
    +                                         directory_entry,
    +                                         boost::single_pass_traversal_tag >
    +      {
    +      public:
    +        // member functions
    +
    +        directory_iterator();  // creates the "end" iterator
    +        directory_iterator(const directory_iterator&);
    +        explicit directory_iterator(const path& p);
    +        directory_iterator(const path& p, system::error_code& ec);
    +       ~directory_iterator();
    +
    +        directory_iterator& operator=(const directory_iterator&);
    +
    +        directory_iterator& operator++();
    +        directory_iterator& increment(system::error_code& ec);
    +
    +        // other members as required by
    +        //  C++ Std, 24.1.1 Input iterators [input.iterators]
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    +

    directory_iterator satisfies the requirements of an +input iterator (C++ Std, 24.2.1, Input iterators [input.iterators]).

    +

    A directory_iterator reads successive elements from the directory for +which it was constructed, as if by calling POSIX + +readdir_r(). After a directory_iterator is constructed, and every time +operator++ is called, +it reads a directory element and stores information about it in a object of type +directory_entry. +operator++ is not equality preserving; that is, i == j does not imply that +++i == ++j.

    +
    +

    [Note: The practical consequence of not preserving equality is that directory iterators +can only be used for single-pass algorithms. --end note]

    +
    +

    If the end of the directory elements is reached, the iterator becomes equal to +the end iterator value. The constructor directory_iterator() +with no arguments always constructs an end iterator object, which is the only +legitimate iterator to be used for the end condition. The result of +operator* on an end iterator is not defined. For any other iterator value +a const directory_entry& is returned. The result of +operator-> on an end iterator is not defined. For any other iterator value a const directory_entry* is +returned.

    +

    Two end iterators are always equal. An end iterator is not equal to a non-end +iterator.

    +
    +

    The above wording is based on the +Standard Library's istream_iterator wording.

    +
    +

    The result of calling the path() member of the +directory_entry object obtained by dereferencing a +directory_iterator is a reference to a path +object composed of the directory argument from which the iterator was +constructed with filename of the directory entry appended as if by +operator/=.

    +

    Directory iteration shall not yield directory entries for the current (dot) +and parent (dot dot) directories.

    +

    The order of directory entries obtained by dereferencing successive +increments of a directory_iterator is unspecified.

    +
    +

    [Note: Programs performing directory iteration may wish to test if the +path obtained by dereferencing a directory iterator actually exists. It could be +a +symbolic link to a non-existent file. Programs recursively +walking directory trees for purposes of removing and renaming entries may wish +to avoid following symbolic links.

    +

    If a file is removed from or added to a directory after the +construction of a directory_iterator for the directory, it is +unspecified whether or not subsequent incrementing of the iterator will ever +result in an iterator whose value is the removed or added directory entry. See +POSIX + +readdir_r(). +--end note]

    +
    +

    directory_iterator members

    + +

    directory_iterator();

    + +
    + +

    Effects: Constructs the end iterator.

    + +

    Throws: Nothing.

    + +
    + +
    explicit directory_iterator(const path& p);
    +directory_iterator(const path& p, system::error_code& ec);
    +
    + +

    Effects: Constructs a iterator representing the first +entry in the directory p resolves to, if any; otherwise, the end iterator.

    + +

    Throws: As specified in + + Error reporting.

    + +

    [Note: To iterate over the current directory, use +directory_iterator(".") rather than directory_iterator(""). +-- end note]

    +
    +
    directory_iterator& operator++();
    +directory_iterator& increment(system::error_code& ec);
    +
    + +

    Effects: As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators]

    + +

    Returns: *this.

    + +

    Throws: As specified in + + Error reporting.

    + +
    +

    Class recursive_directory_iterator

    +

    Objects of type recursive_directory_iterator provide standard library +compliant iteration over the contents of a directory, including recursion into +its sub-directories.

    +
      namespace boost
    +  {
    +    namespace filesystem
    +    {
    +      class recursive_directory_iterator :
    +        public iterator<input_iterator_tag, directory_entry>
    +      {
    +      public:
    +
    +        // constructors and destructor
    +        recursive_directory_iterator();
    +        recursive_directory_iterator(const recursive_directory_iterator&);
    +        explicit recursive_directory_iterator(const path& p,
    +          BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none);
    +        recursive_directory_iterator(const path& p,
    +          BOOST_SCOPED_ENUM(symlink_option) opt, system::error_code& ec);
    +        recursive_directory_iterator(const path& p, system::error_code& ec);
    +       ~recursive_directory_iterator();
    +
    +        // observers
    +        int level() const;
    +        bool no_push_pending() const;
    +
    +        // modifiers
    +        recursive_directory_iterator& operator=(const recursive_directory_iterator&);
    +
    +        recursive_directory_iterator& operator++();
    +        recursive_directory_iterator& increment(system::error_code& ec);
    +
    +        void pop();
    +        void no_push(bool value=true);
    +
    +        // other members as required by
    +        //  C++ Std, 24.1.2 Input iterators [input.iterators]
    +
    +      private:
    +        // actual data members will probably be stored in a shared pimpl object,
    +        // or some similar mechanism, to achieve the required input iterator copy semantics
    +        int  m_level;                                 // for exposition only
    +        bool m_no_push;                               // for exposition only
    +        BOOST_SCOPED_ENUM(symlink_option) m_options;  // for exposition only
    +      };
    +
    +    } // namespace filesystem
    +  } // namespace boost
    + +

    The behavior of a recursive_directory_iterator is the same +as a directory_iterator unless otherwise specified.

    +
      +
    • Incrementing a recursive_directory_iterator pointing to a + directory causes that directory itself to be iterated ovee, as specified by + the operator++ and increment functions.
    • +
    • When a recursive_directory_iterator reaches the end of the directory currently being iterated + over, or when pop() is called, m_level is + decremented, and iteration of the parent directory continues.
    • +
    +
    recursive_directory_iterator();
    +
    + +

    Effects: Constructs the end iterator.

    + +

    Throws: Nothing.

    + +
    + +
    explicit recursive_directory_iterator(const path& p, BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none);
    +recursive_directory_iterator(const path& p, BOOST_SCOPED_ENUM(symlink_option) opt, system::error_code& ec);
    +recursive_directory_iterator(const path& p, system::error_code& ec);
    +
    + +

    Effects:  Constructs a iterator representing the first +entry in the directory p resolves to, if any; otherwise, the end iterator.

    + +

    Postcondition: Unless the end iterator was constructed, +level() == 0 && no_push_pending() == false && m_options == opt. +For the signature without a symlink_option argument, opt +is assumed to be symlink_option::none.

    + +

    Throws: As specified in + + Error reporting.

    + +

    [Note: To iterate over the current directory, use recursive_directory_iterator(".") rather than +recursive_directory_iterator(""). +-- end note]

    + +

    [Note: By default, recursive_directory_iterator does not +follow directory symlinks. To follow directory symlinks, specify opt +as symlink_option::recurse +-- end note]

    +
    +
    int level() const;
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Returns: m_level.

    +

    Throws: Nothing.

    +
    +
    bool no_push_pending() const;
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Returns: m_no_push.

    +

    Throws: Nothing.

    +
    +
    recursive_directory_iterator& operator++();
    +recursive_directory_iterator& increment(system::error_code& ec);
    +
    + +

    Effects: As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators], +except:

    + +
      +
    • + +

      if !no_push_pending() && is_directory(this->status()) +&& (!is_symlink(this->symlink_status()) || (m_options +& symlink_option::recurse) != 0) then  m_level +is incremented and directory (*this)->path() is recursively iterated into.

      + +
    • +
    • if there are no more directory entries at this level then m_level +is decremented and iteration of the parent directory resumes.
    • +
    + +

    Postcondition: no_push_pending() == false.

    + +

    Returns: *this.

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    void pop();
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Effects: If level() == 0, set *this to recursive_directory_iterator(). + Otherwise, --m_level, cease iteration of the directory currently being + iterated over, and continue iteration over the parent directory.

    +

    Throws: Nothing.

    +
    +
    void no_push(bool value=true);
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Postcondition: no_push_pending() == value.

    +

    Throws: Nothing.

    +

    [Note: no_push() is used to prevent + unwanted recursion into a directory. --end note]

    +
    +

    Operational functions

    +

    Operational functions query or modify files, including directories, in external +storage.

    +

    Operational functions access a file by resolving an +object of class path to a particular file in a file hierarchy. The +path is resolved as if by the POSIX + +Pathname Resolution mechanism.

    +

    [Note: Because hardware failures, network failures, +race conditions, and many +other kinds of errors occur frequently in file system operations, users should be aware +that any filesystem operational function, no matter how apparently innocuous, may encounter +an error. See Error reporting. -- end note]

    +

    Operational function specifications

    +
    path absolute(const path& p, const path& base=current_path());
    +
    +

    Returns: A absolute path composed according to the + following table

    + + + + + + + + + + + + + + + + +
     p.has_root_directory()!p.has_root_directory()
    p.has_root_name()return preturn p.root_name() / + absolute(base).root_directory()
    + / absolute(base).relative_path() / p.relative_path()
    !p.has_root_name()return absolute(base).root_name()
    + / p
    return absolute(base) / p
    +

    [Note: For the returned path, rp, + rp.is_absolute() is true. -- end note]

    +

    Throws: If base.is_absolute() is true, throws only if + memory allocation fails.

    +
    +
    path canonical(const path& p, const path& base = current_path());
    +path canonical(const path& p, system::error_code& ec);
    +path canonical(const path& p, const path& base, system::error_code& ec);
    +
    +

    Overview: Converts p, which must exist, to an absolute +path that has no symbolic link, dot, +or dot-dot elements.

    +

    Returns: A canonical path that refers to +the same file system object as absolute(p,base). For the overload +without a base argument, base is current_path().

    +

    Throws:  As specified in + + Error reporting.

    + +

    Remarks: !exists(p) is an error.

    + +

    [Note: Canonical pathnames allow security checking of a path (eg. + does this path live in /home/goodguy or /home/badguy?)  -- end note]

    + +
    +
    void copy(const path& from, const path& to);
    +void copy(const path& from, const path& to, system::error_code& ec);
    +
    +

    Effects: As if

    + +
    +
    file_status s(symlink_status(from[, ec]));
    +if(is_symlink(s))
    +  copy_symlink(from, to[, ec]);
    +else if(is_directory(s))
    +  copy_directory(from, to[, ec]);
    +else if(is_regular_file(s))
    +  copy_file(from, to, copy_option::fail_if_exists[, ec]);
    +else
    + Report error as specified in Error reporting.
    +
    +

    Throws: As specified in + + Error reporting.

    + +
    +
    void copy_directory(const path& from, const path& to);
    +void copy_directory(const path& from, const path& to, system::error_code& ec);
    +
    +

    Effects:

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    void copy_file(const path& from, const path& to);
    +void copy_file(const path& from, const path& to, system::error_code& ec);
    +
    +

    Effects: copy_file(from, to, + copy_option::fail_if_exists[, ec]).

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    void copy_file(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option);
    +void copy_file(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec);
    +
    +

    Effects: If option == copy_option::fail_if_exists + && exists(to), an error is reported. Otherwise, the contents and attributes of the file from + resolves to are copied to the file to resolves to.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void copy_symlink(const path& existing_symlink, const path& new_symlink);
    +void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
    +
    +

    Effects: create_symlink(read_symlink(existing_symlink[, ec]), + new_symlink[, ec]).

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    bool create_directories(const path& p);
    +bool create_directories(const path& p, system::error_code& ec);
    +
    +

    Requires: p.empty() ||
    + forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )
    +

    +

    Postcondition: is_directory(p)

    +

    Returns: The value of !exists(p) prior to the + establishment of the postcondition.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    bool create_directory(const path& p);
    +bool create_directory(const path& p, system::error_code& ec);
    +
    +

    Effects: Attempts to create the directory p resolves to, + as if by POSIX + mkdir() with a second argument of S_IRWXU|S_IRWXG|S_IRWXO.

    +

    Postcondition: is_directory(p)

    +

    Returns: true if a new directory was created, otherwise + false.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void create_directory_symlink(const path& to, const path& new_symlink);
    +void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +

    Effects: + Establishes the postcondition, as if by + POSIX + + + symlink().

    +

    + Postcondition: new_symlink resolves to a symbolic link file that + contains an unspecified representation of to.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: + Some operating systems, such as Windows, require symlink creation to + identify that the link is to a directory. Portable code should use + create_directory_symlink() to create directory symlinks rather than + create_symlink() -- end note]

    +

    [Note: + Some operating systems do not support symbolic links at all or support + them only for regular files. Windows prior to Vista, for example, did not + support symbolic links. + Some file systems do not + support + symbolic links regardless of the operating system - the FAT system used on floppy discs, memory cards and flash + drives, + for example. Thus symbolic links should only be used if these situations are + not concerns, or if workarounds are provided. -- end note]

    +
    +
    void create_hard_link(const path& to, const path& new_hard_link);
    +void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
    +
    +

    Effects: Establishes the postcondition, as if by + POSIX + + + link().

    +

    Postcondition:

    +
      +
    •  exists(to) && + exists(new_hard_link) && equivalent(to, + + new_hard_link)
    • +
    • The contents of the file or directory + to resolves to are unchanged.
    • +
    +

    Throws: As specified in + + Error reporting.

    +

    [Note: + Some operating systems do not support hard links at all or support + them only for regular files. Some file systems do not support hard + links regardless of the operating system - the FAT system used on floppy + discs, memory cards and flash drives, for example. Some file systems limit the + number of links per file. Thus hard links should only be used if these + situations are not concerns, or if workarounds are provided. -- end note]

    +
    +
    void create_symlink(const path& to, const path& new_symlink);
    +void create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +

    Effects: + Establishes the postcondition, as if by + POSIX + + + symlink().

    +

    + Postcondition: new_symlink resolves to a symbolic link file that + contains an unspecified representation of to.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: + Some operating systems do not support symbolic links at all or support + them only for regular files. Windows prior to Vista, for example, did not + support symbolic links. + Some file systems do not + support + symbolic links regardless of the operating system - the FAT system used on floppy discs, memory cards and flash + drives, + for example. Thus symbolic links should only be used if these situations are + not concerns, or if workarounds are provided. -- end note]

    +
    +
    path current_path();
    +path current_path(system::error_code& ec);
    +
    +

    Returns: The current working directory path, as if by POSIX + + + getcwd(). is_absolute() is true for the returned path.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: The + current_path() name was chosen to emphasize that the return is a + path, not just a single directory name.

    +

    The current path as returned by many operating systems is a dangerous + global variable. It may be changed unexpectedly by a third-party or system + library functions, or by another thread.  -- end note]

    +
    +
    void current_path(const path& p);
    +void current_path(const path& p, system::error_code& ec);
    +
    +

    Effects: + Establishes the postcondition, as if by + POSIX + + + chdir().

    +

    Postcondition: equivalent(p, current_path()).

    +

    Throws: As specified in + +Error reporting.

    +

    [Note: The current path for many operating systems is a dangerous + global state. It may be changed unexpectedly by a third-party or system + library functions, or by another thread.  -- end note]

    +
    +
    bool exists(file_status s);
    +
    +

    Returns: + status_known(s) && s.type() != file_not_found

    +

    Throws: Nothing.

    +
    +
    bool exists(const path& p);
    +bool exists(const path& p, system::error_code& ec);
    +
    +

    Returns: exists(status(p)) or exists(status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws +nothing.

    +
    +
    bool equivalent(const path& p1, const path& p2);
    +bool equivalent(const path& p1, const path& p2, system::error_code& ec);
    +
    +

    Effects: Determines file_status s1 + and s2, as if by status(p1) and  status(p2), + respectively.

    +

    Returns: true, if sf1 == + sf2 and p1 and p2 resolve to the same file + system entity, else false.

    +
    +

    Two paths are considered to resolve to the same + file system entity if two candidate entities reside on the same device at the + same location. This is determined as if by the values of the POSIX + + + stat structure, obtained as if by + + stat() for the two paths, having equal st_dev values + and equal st_ino values.

    +

    [Note: POSIX requires that "st_dev + must be unique within a Local Area Network". Conservative POSIX + implementations may also wish to check for equal st_size and + st_mtime values. Windows implementations may use + GetFileInformationByHandle() as a surrogate for stat(), + and consider "same" to be equal values for dwVolumeSerialNumber, + nFileIndexHigh, nFileIndexLow, nFileSizeHigh, + nFileSizeLow, ftLastWriteTime.dwLowDateTime, and + ftLastWriteTime.dwHighDateTime. -- end note]

    +
    +

    Throws: filesystem_error + if (!exists(s1) && !exists(s2)) || (is_other(s1) && is_other(s2)), + otherwise as specified in + + Error reporting.

    +
    +
    +
    uintmax_t file_size(const path& p);
    +uintmax_t file_size(const path& p, system::error_code& ec);
    +
    +
    +

    + Remarks: +

    +

    Returns: If exists(p) && is_regular_file(p), the size + in bytes + of the file p resolves to, determined as if by the value of + the POSIX + stat structure member st_size + obtained as if by POSIX + stat(). + Otherwise, static_cast<uintmax_t>(-1).

    +

    Throws: As specified in + + Error reporting.

    +
    +
    uintmax_t hard_link_count(const path& p);
    +uintmax_t hard_link_count(const path& p, system::error_code& ec);
    +
    + +

    Returns: The number of hard links for p.

    +

    Throws: As specified in + + Error reporting.

    + +
    + +
    const path& initial_path();
    +const path& initial_path(system::error_code& ec);
    +
    +

    Returns: + current_path() as of the first call to initial_path().

    +

    [Note: + initial_path() is not thread safe, and may return an undesirable result + if called subsequent to a change to the current directory. These problems can + be avoided by calling initial_path() immediately on entry to + main().  --end note]

    +

    Throws: For the first call, as specified in + + Error reporting. Subsequent calls throw nothing.

    +
    +
    bool is_directory(file_status s);
    +
    +

    Returns: + s.type() == directory_file

    +

    Throws: Nothing.

    +
    +
    bool is_directory(const path& p);
    +bool is_directory(const path& p, system::error_code& ec);
    +
    +

    Returns: is_directory(status(p)) or is_directory(status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws +nothing.

    +
    +
    bool is_empty(const path& p);
    +bool is_empty(const path& p, system::error_code& ec);
    +
    +

    Effects: Determines file_status s, as if by + status(p, ec).

    +

    Returns: is_directory(s)
    +         ? + directory_iterator(p) == directory_iterator()
    +         : file_size(p) == 0;

    +
    +
    bool is_regular_file(file_status s);
    +
    +

    Returns: + s.type() == regular_file

    +

    Throws: Nothing.

    +
    +
    bool is_regular_file(const path& p);
    +
    +

    Returns: is_regular_file(status(p)).

    +

    Throws: filesystem_error + if status(p) would throw filesystem_error.

    +
    +
    bool is_regular_file(const path& p, system::error_code& ec);
    +
    +

    Effects: Sets ec as if by status(p, ec). [Note: + status_error, + file_not_found + and + type_unknown + cases set ec + to error values. To distinguish between cases, call the + status + function directly. -- end + note]

    +

    Returns: is_regular_file(status(p, ec)).

    +

    Throws: Nothing.

    +
    +
    bool is_other(file_status s);
    +
    +

    Returns: + return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)

    +

    Throws: Nothing.

    +
    +
    bool is_other(const path& p);
    +bool is_other(const path& p, system::error_code& ec);
    +
    +

    Returns: is_other(status(p)) or is_other(status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws + nothing.

    +
    +
    bool is_symlink(file_status s);
    +
    +

    Returns: + s.type() == symlink_file

    +

    Throws: Nothing.

    +
    +
    bool is_symlink(const path& p);
    +bool is_symlink(const path& p, system::error_code& ec);
    +
    +

    Returns: is_symlink(symlink_status(p)) or is_symlink(symlink_status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws + nothing.

    +
    +
    std::time_t last_write_time(const path& p);
    +std::time_t last_write_time(const path& p, system::error_code& ec);
    +
    +

    Returns: The time of last data modification of p, determined as if by the + value of the POSIX + stat structure member st_mtime  obtained + as if by POSIX + stat().

    +
    +
    void last_write_time(const path& p, const std::time_t new_time);
    +void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec);
    +
    +

    Effects: Sets the time of last data modification of the file + resolved to by p + to new_time, as if by POSIX + stat() + followed by POSIX + + utime().

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: A postcondition of last_write_time(p) == + new_time is not specified since it might not hold for file systems + with coarse time granularity. -- end note]

    +
    +
    void permissions(const path& p, perms prms);
    +void permissions(const path& p, perms prms, system::error_code& ec);
    +
    +

    Applies an operating system set of permissions to a file. See + perms for specifics.
    +
    + Requires:
    !((prms & add_perms) && (prms & remove_perms)).

    +

    Effects: Applies the effective permissions bits from + prms to the file p resolves to, as if by POSIX + + + fchmodat(). The effective permission bits are determined as + specified by the following table.

    + + + + + + + + + + + + + + + + + +
    bits present in prmsEffective bits applied
    Neither add_perms nor remove_permsprms & perms_mask
    add_perms +

    current_status.permissions() | (prms & perms_mask) +

    remove_permscurrent_status.permissions() & ~(prms & perms_mask)
    +

    [Note: Conceptually permissions are viewed as bits, but the actual + implementation by a file system may use some other mechanism. -- end note]

    +
    +
    path read_symlink(const path& p);
    +path read_symlink(const path& p, system::error_code& ec);
    +
    +

    Returns:  If p resolves to a symbolic + link, a path object containing the contents of that symbolic + link. Otherwise an empty path object.

    +

    Throws: As specified in + + Error reporting. [Note: It is an error if p does not + resolve to a symbolic link. -- end note]

    +
    +
    bool remove(const path& p);
    +bool remove(const path& p, system::error_code& ec);
    +
    +

    Effects:  If exists(symlink_status(p,ec)), it is + removed + as if by POSIX + remove().

    +
    +

    [Note: A symbolic link is itself removed, rather than the file it + resolves to being removed. -- end note]

    +
    +

    Postcondition: !exists(symlink_status(p)).

    +

    Returns:  false if p did not exist in the first + place, otherwise true.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    uintmax_t remove_all(const path& p);
    +uintmax_t remove_all(const path& p, system::error_code& ec);
    +
    +

    Effects:  Recursively deletes the contents of p if it exists, + then deletes file p itself, + as if by POSIX + remove().

    +
    +

    [Note: A symbolic link is itself removed, rather than the file it + resolves to being removed. -- end note]

    +
    +

    Postcondition: !exists(p)

    +

    Returns: The number of files removed.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void rename(const path& old_p, const path& new_p);
    +void rename(const path& old_p, const path& new_p, system::error_code& ec);
    +
    +

    Effects: Renames old_p to new_p, as if by + POSIX + + rename().

    +
    +

    [Note: If old_p and new_p resolve to the + same existing file, no action is taken. Otherwise, if new_p resolves to an + existing non-directory file, it is removed, while if new_p resolves to an + existing directory, it is removed if empty on POSIX but is an error on Windows. A symbolic link is itself renamed, rather than + the file it resolves to being renamed. -- end note]

    +
    +

    Throws: As specified in + + Error reporting.

    +
    +
    void resize_file(const path& p, uintmax_t new_size);
    +void resize_file(const path& p, uintmax_t new_size, system::error_code& ec);
    +
    +

    Postcondition: file_size() == new_size.

    +

    Throws: As specified in + +Error reporting.

    +

    Remarks: Achieves its postconditions as if by + POSIX + + truncate().

    +
    +
    space_info space(const path& p);
    +space_info space(const path& p, system::error_code& ec);
    +
    +

    Returns: An object of type + space_info. The value of the space_info object is determined as if by + using POSIX + + statvfs() to obtain a POSIX struct + + statvfs, and then multiplying its f_blocks, + f_bfree, and f_bavail members by its f_frsize + member, and assigning the results to the capacity, free, + and available members respectively. Any members for which the + value cannot be determined shall be set to -1.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    file_status status(const path& p);
    +
    +

    Effects: As if:

    +
    +
    system::error_code ec;
    +file_status result = status(p, ec);
    +if (result == status_error)
    +  throw filesystem_error(implementation-supplied-message, p, ec);
    +return result;
    +
    +

    Returns: See above.

    +

    Throws: filesystem_error. +[Note: result values of + file_status(file_not_found)and + file_status(type_unknown) are not considered failures and do not + cause an exception to be +thrown. -- end note]

    +
    +
    file_status status(const path& p, system::error_code& ec);
    +
    +

    Effects:

    +
    +

    If possible, determines the attributes + of the file + p resolves to, as if by POSIX + stat().

    + If, during attribute determination, the underlying file system API reports + an error, sets ec to indicate the specific error reported. + Otherwise, ec.clear().
    +

    [Note: This allows users to inspect the specifics of underlying + API errors even when the value returned by status() is not + file_status(status_error)--end note]

    +
    +
    +

    Returns:

    +
    +

    If ec != error_code():

    +
      +
    • If the specific error indicates that p cannot be resolved + because some element of the path does not exist, return + file_status(file_not_found). [Note: POSIX errors that + indicate this are ENOENT or ENOTDIR. Windows equivalents + include ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, ERROR_INVALID_NAME, + ERROR_INVALID_PARAMETER, ERROR_BAD_PATHNAME, and ERROR_BAD_NETPATH. -- + end note]
    • +
    • Otherwise, if the specific error indicates that p can be resolved + but the attributes cannot be determined, return + file_status(type_unknown). [Note: For example, Windows + ERROR_SHARING_VIOLATION errors. For POSIX, the case never arises. -- end + note]
    • +
    • Otherwise, return + file_status(status_error).
    • +
    +
    +

    [Note: These semantics distinguish between + p being known not to exist, + p existing but not being able to determine its attributes, + and there being an error that prevents even knowing if + p exists. These + distinctions are important to some use cases. --end note]

    +
    +

    Otherwise,

    +
      +
    • If the attributes indicate a regular file, as if by POSIX S_ISREG(), + return + file_status(regular_file). [Note: +regular_file implies appropriate <fstream> operations + would succeed, assuming no hardware, permission, access, or race condition + errors. Lack of +regular_file does not necessarily imply <fstream> operations would +fail on a directory. +-- end note]
    • +
    • Otherwise, if the attributes indicate a directory, as if by POSIX + S_ISDIR(), + return + file_status(directory_file). [Note: directory_file implies +directory_iterator(p)would succeed. +-- end note]
    • +
    • Otherwise, if the attributes indicate a block special file, as if by POSIX + S_ISBLK(), + return + file_status(block_file).
    • +
    • Otherwise, if the attributes indicate a character special file, as if by POSIX + S_ISCHR(), + return + file_status(character_file).
    • +
    • Otherwise, if the attributes indicate a fifo or pipe file, as if by POSIX + S_ISFIFO(), + return + file_status(fifo_file).
    • +
    • Otherwise, if the attributes indicate a socket, as if by POSIX + S_ISSOCK(), + return + file_status(socket_file).
    • +
    • Otherwise, return + file_status(type_unknown).
    • +
    +
    +

    Throws: Nothing.

    +

    Remarks: If a symbolic link is encountered during pathname + resolution, + pathname resolution continues using the contents of the symbolic link.

    +
    +
    bool status_known(file_status s);
    +
    +

    Returns: + s.type() != status_error

    +

    Throws: Nothing.

    +
    +
    file_status symlink_status(const path& p);
    +file_status symlink_status(const path& p, system::error_code& ec);
    +
    +

    Effects:  Same as status(), above, + except that the attributes + of + p are determined as if by POSIX + + lstat().

    +
    +
    +

    Returns: Same as status(), above, except + that if the attributes indicate a symbolic link, as if by POSIX + + S_ISLNK(), return file_status(symlink_file).

    +

    Throws: Nothing.

    +

    Remarks: Pathname resolution terminates if p names a symbolic link.

    +
    +
    path system_complete(const path& p);
    +path system_complete(const path& p, system::error_code& ec);
    +
    +

    Effects: Composes an absolute path from p, using the + same rules used by the operating system to resolve a path passed as the + filename argument to standard library open functions.

    +

    Returns: The composed path.

    +

    Postcondition: For the returned path, rp, + rp.is_absolute() is true.

    +

    [Note: For POSIX, system_complete(p) has the same semantics as + complete(p, current_path()).

    +

    For Windows, system_complete(p) has the + same semantics as complete(ph, current_path()) if + p.is_absolute() || !p.has_root_name() or p and base have the same + root_name(). + Otherwise it acts like complete(p, kinky), where kinky + is the current directory for the p.root_name() drive. This will + be the current directory of that drive the last time it was set, and thus may + be residue left over from a prior program run by the command + processor! Although these semantics are often useful, they are also very + error-prone.

    +

    See + complete() note for usage suggestions. -- end note]

    +
    +
    path temp_directory_path();
    +path temp_directory_path(system::error_code& ec);
    +
    +

    Returns: A directory path suitable for temporary files under the + conventions of the operating system. The specifics of how this path is + determined are implementation defined. An error shall be reported if !exists(p) + || !is_directory(p), where p is the path to be returned.

    +

    POSIX: The path supplied by the first environment variable found in the + list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, "/tmp".

    +

    Windows: The path reported by the Windows GetTempPath API function.

    +

    Throws: As specified in + Error reporting.

    +

    [Note: The temp_directory_path() name was chosen to emphasize that the return is a + path, not just a single directory name.  -- end note]

    +
    +
    path unique_path(const path& model="%%%%-%%%%-%%%%-%%%%");
    +path unique_path(const path& model, system::error_code& ec);
    +
    +

    The unique_path function generates a path name suitable for + creating temporary files, including directories. The name is based + on a model that uses the percent sign character to specify replacement by a + random hexadecimal digit. [Note: The more bits of randomness in the + generated path name, the less likelihood of prior existence or being guessed. + Each replacement hexadecimal digit in the model adds four bits of randomness. + The default model thus provides 64 bits of randomness. This is sufficient for + most applications. --end note]

    +

    Returns: A path identical to model, except that each + occurrence of a percent sign character is replaced by a random hexadecimal + digit character in the range 0-9, a-f.

    +

    Throws: As specified in + + Error reporting.

    +

    Remarks: Implementations are encouraged to obtain the required + randomness via a + + cryptographically secure pseudo-random number generator, such as one + provided by the operating system. [Note: Such generators may block + until sufficient entropy develops. --end note]

    +
    +

    File streams - +<boost/filesystem/fstream.hpp>

    +

    Replacements are provided for the file stream classes from the C++ standard +library's <fstream> header. These replacement classes +publicly inherit from the standard library classes. In the Boost.Filesystem +version, constructors and open functions take const path& arguments +instead of +const char* arguments. There are no other differences in syntax or +semantics.

    +
    namespace boost
    +{
    +  namespace filesystem
    +  {
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_filebuf : public std::basic_filebuf<charT,traits>
    +    {
    +    public:
    +      basic_filebuf<charT,traits>*
    +        open(const path& p, std::ios_base::openmode mode);
    +    };
    +
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_ifstream : public std::basic_ifstream<charT,traits>
    +    {
    +    public:
    +      explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in)
    +      void open(const path& p, std::ios_base::openmode mode=std::ios_base::in);
    +    };
    +
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_ofstream : public std::basic_ofstream<charT,traits>
    +    {
    +    public:
    +      explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out);
    +      void open(const path& p, std::ios_base::openmode mode=std::ios_base::out);
    +    };
    +
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_fstream : public std::basic_fstream<charT,traits>
    +    {
    +    public:
    +      explicit basic_fstream(const path& p,
    +        std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
    +      void open(const path& p,
    +        std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
    +    };
    +
    +    typedef basic_filebuf<char> filebuf;
    +    typedef basic_ifstream<char> ifstream;
    +    typedef basic_ofstream<char> ofstream;
    +    typedef basic_fstream<char> fstream;
    +
    +    typedef basic_filebuf<wchar_t> wfilebuf;
    +    typedef basic_ifstream<wchar_t> wifstream;
    +    typedef basic_fstream<wchar_t> wfstream;
    +    typedef basic_ofstream<wchar_t> wofstream;
    +    
    +  } // namespace filesystem
    +} // namespace boost
    +

    Path decomposition table

    +

    The table is generated by a program compiled with the Boost implementation.

    +

    Shaded entries indicate cases where POSIX and Windows +implementations yield different results. The top value is the +POSIX result and the bottom value is the Windows result.
    + +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Constructor
    argument
    Iteration
    over
    Elements
    string()generic_
    string()
    root_
    path()
    root_
    name()
    root_
    directory()
    relative_
    path()
    parent_
    path()
    filename()
    emptyemptyemptyemptyemptyemptyemptyemptyemptyempty
    ....emptyemptyempty.empty.
    ........emptyemptyempty..empty..
    foofoofoofooemptyemptyemptyfooemptyfoo
    /////empty/emptyempty/
    /foo/,foo/foo/foo/empty/foo/foo
    foo/foo,.foo/foo/emptyemptyemptyfoo/foo.
    /foo//,foo,./foo//foo//empty/foo//foo.
    foo/barfoo,barfoo/barfoo/baremptyemptyemptyfoo/barfoobar
    /foo/bar/,foo,bar/foo/bar/foo/bar/empty/foo/bar/foobar
    //net//net//net//net//net//netemptyemptyempty//net
    //net/foo//net,/,foo//net/foo//net/foo//net///net/foo//net/foo
    ///foo////,foo,.///foo//////foo////empty/foo//////foo.
    ///foo///bar/,foo,bar///foo///bar///foo///bar/empty/foo///bar///foobar
    /./,./././empty/./.
    ./.,.././emptyemptyempty./..
    /../,../../../empty/../..
    ../..,.../../emptyemptyempty../...
    foo/.foo,.foo/.foo/.emptyemptyemptyfoo/.foo.
    foo/..foo,..foo/..foo/..emptyemptyemptyfoo/..foo..
    foo/./foo,.,.foo/./foo/./emptyemptyemptyfoo/./foo/..
    foo/./barfoo,.,barfoo/./barfoo/./baremptyemptyemptyfoo/./barfoo/.bar
    foo/..foo,..foo/..foo/..emptyemptyemptyfoo/..foo..
    foo/../foo,..,.foo/../foo/../emptyemptyemptyfoo/../foo/...
    foo/../barfoo,..,barfoo/../barfoo/../baremptyemptyemptyfoo/../barfoo/..bar
    c:c:c:c:empty
    c:
    empty
    c:
    emptyc:
    empty
    emptyc:
    c:/c:,.
    c:,/
    c:/c:/empty
    c:/
    empty
    c:
    empty
    /
    c:/
    empty
    c:.
    /
    c:fooc:foo
    c:,foo
    c:fooc:fooempty
    c:
    empty
    c:
    emptyc:foo
    foo
    empty
    c:
    c:foo
    foo
    c:/fooc:,foo
    c:,/,foo
    c:/fooc:/fooempty
    c:/
    empty
    c:
    empty
    /
    c:/foo
    foo
    c:
    c:/
    foo
    c:foo/c:foo,.
    c:,foo,.
    c:foo/c:foo/empty
    c:
    empty
    c:
    emptyc:foo/
    foo/
    c:foo.
    c:/foo/c:,foo,.
    c:,/,foo,.
    c:/foo/c:/foo/empty
    c:/
    empty
    c:
    empty
    /
    c:/foo/
    foo/
    c:/foo.
    c:/foo/barc:,foo,bar
    c:,/,foo,bar
    c:/foo/barc:/foo/barempty
    c:/
    empty
    c:
    empty
    /
    c:/foo/bar
    foo/bar
    c:/foobar
    prn:prn:prn:prn:empty
    prn:
    empty
    prn:
    emptyprn:
    empty
    emptyprn:
    c:\c:\
    c:,/
    c:\c:\
    c:/
    empty
    c:\
    empty
    c:
    empty
    \
    c:\
    empty
    empty
    c:
    c:\
    \
    c:fooc:foo
    c:,foo
    c:fooc:fooempty
    c:
    empty
    c:
    emptyc:foo
    foo
    empty
    c:
    c:foo
    foo
    c:\fooc:\foo
    c:,/,foo
    c:\fooc:\foo
    c:/foo
    empty
    c:\
    empty
    c:
    empty
    \
    c:\foo
    foo
    empty
    c:\
    c:\foo
    foo
    c:foo\c:foo\
    c:,foo,.
    c:foo\c:foo\
    c:foo/
    empty
    c:
    empty
    c:
    emptyc:foo\
    foo\
    empty
    c:foo
    c:foo\
    .
    c:\foo\c:\foo\
    c:,/,foo,.
    c:\foo\c:\foo\
    c:/foo/
    empty
    c:\
    empty
    c:
    empty
    \
    c:\foo\
    foo\
    empty
    c:\foo
    c:\foo\
    .
    c:\foo/c:\foo,.
    c:,/,foo,.
    c:\foo/c:\foo/
    c:/foo/
    empty
    c:\
    empty
    c:
    empty
    \
    c:\foo/
    foo/
    c:\foo.
    c:/foo\barc:,foo\bar
    c:,/,foo,bar
    c:/foo\barc:/foo\bar
    c:/foo/bar
    empty
    c:/
    empty
    c:
    empty
    /
    c:/foo\bar
    foo\bar
    c:
    c:/foo
    foo\bar
    bar
    +

    Warning: Long paths on Windows and the +extended-length \\?\ prefix

    +

    The Microsoft Windows "Maximum Path Length Limitation" specifies:

    +
    +

    In the Windows API (with some exceptions ...), the maximum length for a path +is MAX_PATH, which is defined as 260 characters.

    +

    The Windows API has many functions that also have Unicode versions to permit +an extended-length path for a maximum total path length of 32,767 characters. +... To specify an extended-length path, use the "\\?\" prefix. For +example, "\\?\D:\very long path".  +[C++ string literals require backslashes be doubled, of course.]

    +
    +

    Because most Boost.Filesystem operational functions just pass the contents of +a class path object to the Windows API, they do work with the extended-length +prefixes. But some won't work, because to the limitations imposed by Windows. +Read the following cautions carefully!

    +

    Cautions for paths with extended-length prefixes

    +
      +
    • Individual components of a path are still are limited to whatever is + supported for the particular filesystem, commonly 255 characters.
    • +
    • Only backslashes only are acceptable as directory separators. Slashes are + not treated as separators.
    • +
    • All paths must be absolute - relative paths are not allowed.
    • +
    • Once an absolute path grows beyond 260 characters, it is essentially + poisoned and all operations must use extended-length prefixes. So even a + simple operation like create_directory("a") will fail if the + absolute path of the resulting directory would exceed 260 characters.
    • +
    • Certain Boost.Filesystem functions that decompose their argument path and + then work on individual relative directories or files will not work properly + with extended-length prefix paths.
    • +
    +

    Acknowledgements

    +

    This Filesystem Library is dedicated to my wife, Sonda, who provided the +support necessary to see both a trial implementation and the proposal itself +through to completion. She gave me the strength to continue after a difficult +year of cancer treatment in the middle of it all.

    +

    Many people contributed technical comments, ideas, and suggestions to the +Boost Filesystem Library. See + +http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements.

    +

    Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas +Witt were particularly helpful in refining the library.

    +

    The create_directories, extension, basename, and replace_extension functions +were developed by Vladimir Prus. The temp_directory_path function was +contributed by Jeff Flinn. David Svoboda suggested the canonical function and +provided psuedo-code.

    +

    Howard Hinnant and John Maddock reviewed a draft of the version 2 proposal, and +identified a number of mistakes or weaknesses, resulting in a more polished +final document.

    +

    Peter Dimov suggested a single class path, with member templates to adapt to +multiple string types. His idea became the basis for the version 3 path design.

    +

     

    +

    References

    + + + + + + + + + +
    [ISO-POSIX]ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group + Base Specifications, Issue 6. Also known as The Single Unix® + Specification, Version 3. Available from each of the organizations involved + in its creation. For example, read online or download from + + www.unix.org/single_unix_specification/. The ISO JTC1/SC22/WG15 - + POSIX homepage is + www.open-std.org/jtc1/sc22/WG15/
    [Abrahams]Dave Abrahams, Error and Exception Handling, + + www.boost.org/more/error_handling.html
    +
    +

    © Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011

    +

    Distributed under the Boost Software License, Version 1.0. See + +www.boost.org/LICENSE_1_0.txt

    +

    Revised +31 October 2011

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/release_history.html b/external/libs/filesystem/v3/doc/release_history.html new file mode 100644 index 0000000..daff220 --- /dev/null +++ b/external/libs/filesystem/v3/doc/release_history.html @@ -0,0 +1,125 @@ + + + + + + + +Filesystem Release History + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Release History +
    + + + + + +
    Boost Home    + Library Home    Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    1.49.0

    +
      +
    • Fix #3714, + Added test cases and fixes for class path errors when assignment or append + used self or portion of self as source.
    • +
    • Fix #4889, + #6320, Locale codecvt_facet not thread safe on Windows. Move + Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX + except OS X uses local static initialization (IE lazy) to ensure exceptions + are catchable if environmental variables are misconfigured and to avoid use of + locale("") if not actually used.
    • +
    • Fix #5652, + recursive_directory_iterator fails on cyclic symbolic links. Thanks to Daniel + Aarno for the patch.
    • +
    • Fix #5653, + recursive_directory_iterator(error_code) can still throw filesystem_error.
    • +
    • Fix #5900, directory_iterator + access violation on Windows if error is thrown. Thanks to Andreas Eckleder for the patch.
    • +
    • Fix #5900 + comment 2, a bug in director_iterator construction with error_code argument that + caused increment to be called without the ec argument being passed.
    • +
    • Fix #5989 by cleaning up test suite path_test.cpp code even + though the ticket itself was not a defect, and clarifying docs; iteration over a path yields + generic format.
    • +
    • Fix #5592, Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP.
    • +
    • Operations function fixes for PGI compiler, thanks to Noel Belcourt.
    • +
    • Relax permissions test to reflect reality, particularly on the Sandia test + platforms.
    • +
    + +

    1.48.0

    +
      +
    • Added operational function canonical(), + suggested by David Svoboda, who also provided pseudo-code.
    • +
    • Added hash_value() function for + paths. (Daniel James)
    • +
    • Fix path inserter problem (#5764) + reported for QNX6.3.2 host (gcc-3.3.5)
    • +
    • Fix problem of locale("") exception being thrown before main() starts on + poorly configured (e.g. LANG="bad name") POSIX systems. Resolves the most + serious aspect of tickets + #4688, + #5100, + #5289.
    • +
    + +

    1.47.0

    +
      +
    • Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example. + Useful both as an example and to explore how Boost.Filesystem treats various + status errors.  Run "bjam" (NOT "bjam install") in the example directory + to install in example/bin.
    • +
    + +

    1.46.1

    + +
      +
    • Fix fstream problem for STLPort masquerading as Dinkumware (#5217).
    • +
    + +

    1.46.0

    +
      +
    • Version 3 of the library is now the default.
    • +
    • IBM vacpp: Workaround for compiler bug affecting iterator_facade. (#4912)
    • +
    • Verify, clarify, document that <boost/config/user.hpp> can be used to + specify BOOST_FILESYSTEM_VERSION. (#4891)
    • +
    • Replaced C-style assert with BOOST_ASSERT.
    • +
    • Undeprecated unique_path(). Instead, add a note mentioning the workaround + for lack of thread safety and possible change to cwd. unique_path() is just + too convenient to deprecate!
    • +
    • Cleared several GCC warnings.
    • +
    • Changed V2 code to use BOOST_THROW_EXCEPTION.
    • +
    • Windows: Fix status() to report non-symlink reparse point correctly.
    • +
    • Add symlink_option to recursive_directory_iterator, + allowing control over recursion into directory symlinks. Note that the default + is changed to not recurse into directory symlinks.
    • +
    • Reference documentation cleanup, including + fixing missing and broken links, and adding missing functions.
    • +
    • Miscellaneous implementation code cleanup.
    • +
    +
    +

    Revised +24 January, 2012

    +

    © Copyright Beman Dawes, 2011

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/src/README b/external/libs/filesystem/v3/doc/src/README new file mode 100644 index 0000000..7b2433e --- /dev/null +++ b/external/libs/filesystem/v3/doc/src/README @@ -0,0 +1,14 @@ +This directory contains the source files used to generate the Filesystem library +reference documentation and the TR2 filesystem proposal. The generated HTML files +contain much common material that would be difficult to keep in sync if maintained +as separate files. + +Generation is performed by the Minimal Macro Processor, available from +https://github.com/Beman/mmp + +------------ + +Copyright Beman Dawes 2012 + +Distributed under the Boost Software Licence Version 1.0. +See http://www.boost.org/LICENSE_1_0.txt diff --git a/external/libs/filesystem/v3/doc/src/boost_snippets.html b/external/libs/filesystem/v3/doc/src/boost_snippets.html new file mode 100644 index 0000000..16851aa --- /dev/null +++ b/external/libs/filesystem/v3/doc/src/boost_snippets.html @@ -0,0 +1,124 @@ + + + + + + +New Page 1 + + + +$id frontmatter= + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Library
    +
    + Version 3
    + + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    Reference Documentation

    + +$endid + +$id wording_prefix= +

    Introduction

    + +

    This reference documentation describes components that C++ programs may use +to perform operations involving file systems, including paths, regular files, +and directories.

    +$endid + +$id wording_suffix= +

    File streams - +<boost/filesystem/fstream.hpp>

    +

    Replacements are provided for the file stream classes from the C++ standard +library's <fstream> header. These replacement classes +publicly inherit from the standard library classes. In the Boost.Filesystem +version, constructors and open functions take const path& arguments +instead of +const char* arguments. There are no other differences in syntax or +semantics.

    +
    $NAMESPACE_BEGIN;
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_filebuf : public std::basic_filebuf<charT,traits>
    +    {
    +    public:
    +      basic_filebuf<charT,traits>*
    +        open(const path& p, std::ios_base::openmode mode);
    +    };
    +
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_ifstream : public std::basic_ifstream<charT,traits>
    +    {
    +    public:
    +      explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in)
    +      void open(const path& p, std::ios_base::openmode mode=std::ios_base::in);
    +    };
    +
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_ofstream : public std::basic_ofstream<charT,traits>
    +    {
    +    public:
    +      explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out);
    +      void open(const path& p, std::ios_base::openmode mode=std::ios_base::out);
    +    };
    +
    +    template < class charT, class traits = std::char_traits<charT> >
    +    class basic_fstream : public std::basic_fstream<charT,traits>
    +    {
    +    public:
    +      explicit basic_fstream(const path& p,
    +        std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
    +      void open(const path& p,
    +        std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
    +    };
    +
    +    typedef basic_filebuf<char> filebuf;
    +    typedef basic_ifstream<char> ifstream;
    +    typedef basic_ofstream<char> ofstream;
    +    typedef basic_fstream<char> fstream;
    +
    +    typedef basic_filebuf<wchar_t> wfilebuf;
    +    typedef basic_ifstream<wchar_t> wifstream;
    +    typedef basic_fstream<wchar_t> wfstream;
    +    typedef basic_ofstream<wchar_t> wofstream;
    +    
    +$NAMESPACE_END;
    + +$endid + +$id backmatter=> +

    © Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011

    +

    Distributed under the Boost Software License, Version 1.0. See + +www.boost.org/LICENSE_1_0.txt

    +

    Revised +13 January 2012

    + +$endid + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/src/build.bat b/external/libs/filesystem/v3/doc/src/build.bat new file mode 100644 index 0000000..c787591 --- /dev/null +++ b/external/libs/filesystem/v3/doc/src/build.bat @@ -0,0 +1,5 @@ +@echo off +del tr2.html >nul +mmp TARGET=TR2 source.html tr2.html +del reference.html >nul +mmp TARGET=BOOST source.html reference.html diff --git a/external/libs/filesystem/v3/doc/src/source.html b/external/libs/filesystem/v3/doc/src/source.html new file mode 100644 index 0000000..9f8dd78 --- /dev/null +++ b/external/libs/filesystem/v3/doc/src/source.html @@ -0,0 +1,3562 @@ + + + + + + + + +$if $TARGET; == BOOST + Filesystem V3 Reference + $def WHAT "reference documentation" + $def SNIPPET_FILE "boost_snippets.html" + $def HEADER "boost/filesystem.hpp" + $def NAMESPACE boost + $def SUBNAMESPACE filesystem + $def NAMESPACE_BEGIN "namespace boost +{ + namespace filesystem + {" + $def NAMESPACE_END " } // namespace filesystem +} // namespace boost" +$else + Filesystem TR2 Proposal + $def WHAT "Clause" + $def SNIPPET_FILE "tr2_snippets.html" + $def HEADER "files" + $def NAMESPACE std + $def SUBNAMESPACE files + $def NAMESPACE_BEGIN "namespace std { namespace tr2 { namespace files { +" + $def NAMESPACE_END "} } } // namespaces std::tr2::files" +$endif + + + + + +$snippet frontmatter "$SNIPPET_FILE;" + +

    Table of Contents

    + + + + + + + +
    Introduction
    + Definitions
    + Conformance
    + + Header <$HEADER;> synopsis
    + Error reporting
    + Class path
    +    path conversions
    +    path + conversions to native format
    +    path + conversions to generic format
    +    path + encoding conversions
    +    path requirements
    +     path constructors
    +    path assignments
    +    path appends
    +    path modifiers
    +    path native + format observers
    +    path generic + format observers
    +    path decomposition
    +    path query
    +    path iterators
    +    path deprecated functions
    +    path non-member functions
    +    path inserters and extractors
    +  Class filesystem_error
    +    filesystem_error + constructors
    +    filesystem_error path1
    +    filesystem_error path2
    +    filesystem_error + what
    + Enum file_type
    + Enum perms
    + Class + file_status
    +    + + file_status constructors
    +    file_status-modifiers observers
    +    file_status-observers modifiers
    +Class directory_entry
    +    +directory_entry constructors
    +    directory_entry observers
    +    directory_entry modifiers
    +Class directory_iterator
    +    directory_iterator + members
    +Class recursive_directory_iterator
    + + Operational functions
    +      absolute
    +     canonical
    +     copy
    +     copy_directory
    +     copy_file
    +     copy_symlink
    +     create_directories
    +     create_directory
    +     create_hard_link
    +     create_symlink
    +     current_path
    +     exists
    +     equivalent
    +     file_size
    +     hard_link_count
    +      initial_path
    +     is_directory
    +     is_empty
    +      is_other
    +     is_regular_file
    +     is_symlink
    +     last_write_time
    +     permissions
    +     read_symlink
    +     remove
    +     remove_all
    +     rename
    +     resize_file
    +     space
    +     status
    +     status_known
    +     symlink_status
    +     system_complete
    +     temp_directory_path
    +    
    unique_path
    + File streams
    +Path decomposition table
    + Warning: Long paths on Windows and the + extended-length \\?\ prefix
    +Acknowledgements
    +References
    + +$snippet wording_prefix "$SNIPPET_FILE;" + +

    This $WHAT; describes components that perform operations on file systems and +their components, such as paths, regular files, and directories.

    +

    Operating systems such as MAC OS, UNIX, and Windows are +mentioned in this $WHAT; for purposes of illustration or to give guidance to +implementers. No slight to other operating systems is implied or intended.

    +

    Footnote 3: MAC OS® is a registered trademark +of Apple Inc.

    +

    Footnote 4: Windows® is a registered +trademark of Microsoft Corporation.

    + +

    Conformance

    +

    Behavior is sometimes specified by reference to ISO/IEC 9945:2003, +POSIX. How such behavior is actually implemented is unspecified.

    +
    +

    [Note: This constitutes an "as if" rule for implementation of +operating system dependent behavior. Presumably implementations will usually call native +operating system API's. --end note]

    +
    +

    Implementations are encouraged, but not required, to support such behavior + +as it is defined by POSIX. Implementations shall document any +behavior that differs from the POSIX defined behavior. Implementations that do not support exact POSIX behavior are +encouraged to provide behavior as close to POSIX behavior as is reasonable given the +limitations of actual operating systems and file systems. If an implementation cannot provide any +reasonable behavior, the implementation shall report an error in an +implementation-defined manner.

    +
    +

    [Note: Such errors might be reported by an #error directive, a +static_assert, a filesystem_error exception, a special +return value, or some other manner. --end note]

    +
    +

    Implementations are not required to provide behavior that is not supported by +a particular file system.

    +
    +

    [Example: The +FAT file system used by some memory cards, camera memory, and floppy discs +does not support hard links, symlinks, and many other features of more capable +file systems. Implementations are only required to support the FAT features +supported by the host operating system. -- end example]

    +
    +

    Specific operating systems such as OpenVMS, +UNIX, and Windows are mentioned only for purposes of illustration or to +give guidance to users and implementers. No slight to other operating systems is implied +or intended. When unlikely to cause confusion, the term POSIX is +sometimes used to refer to "POSIX-compliant operating systems".

    +

    The behavior of functions described in this +reference +may differ from their specification in +the presence of file system races. No diagnostic is required.

    +

    If the possibility of a file system race would make it unreliable for a program to +test for a precondition before calling a function described in this $WHAT;, +Requires is not specified for the condition. Instead, the condition is +specified as a Throws condition.

    +
    +

    [Note: As a design practice, preconditions are not specified when it +is unreasonable for a program to detect them prior to calling the function. +-- end note]

    +
    +

    Definitions

    +

    The following definitions shall apply throughout this reference documentation:

    +

    File: An object that can be written to, or read from, or both. A file +has certain attributes, including type. File types include regular files +and directories. Other types of files, such as symbolic links, may be supported by the +implementation.

    +

    File system: A collection of files and certain of their attributes.

    +

    Filename: The name of a file. Slash and +0x00 +characters are not permitted. Implementations may define additional +characters or specific names that are not permitted. Filenames .  +and ..  have special meaning. Implementations may define +additional filenames that have special meaning.

    +
    +

    [Note: Most operating systems prohibit the ASCII control characters + (0x00-0x1F) in filenames.

    +

    Windows prohibits the characters 0x00-0x1F, ", + *, :, <, >, ?, + \, /, and | --end note]

    +
    +

    Path: A sequence of elements that identify +the location of a file within a filesystem. The elements are the root-nameopt, +root-directoryopt, and an optional sequence of filenames. [Note: +A pathname is the concrete representation of a path. --end note]

    +

    Absolute path: A path that +unambiguously +identifies the location of a file within a file system without reference to an +additional starting location. The format is implementation defined.

    +
    +

    [Note: For POSIX-like implementations, including Unix + variants, Linux, and Mac OS X, only paths + that begin with a slash are absolute paths.

    +

    For Windows-like implementations, including + Cygwin and + MinGW, only paths that begin with a drive + specifier followed by a slash, or begin with two slashes, are absolute paths. --end + note]

    +
    +

    Relative path: A path that only +unambiguously +identifies the location of a file within a filesystem when resolved relative to +a starting location. The format is implementation defined. [Note: +Paths "." and ".." are considered to be relative paths. --end note]

    +

    Canonical path: An absolute path that has +no elements which are symbolic links, and no dot or dot dot elements.

    +

    Pathname: A character string that represents a +path. Pathnames are formatted according to the generic pathname format or an implementation defined +native pathname format.

    +

    Generic pathname format:

    +
    +

    pathname:
    +            root-nameopt +root-directoryopt relative-pathopt

    +

    root-name:
    +            +implementation-defined

    +
    +
    +

    [Note: Most POSIX and Windows based operating systems define a name +beginning with two slashes (or backslashes, for Windows) as a root-name +identifying network locations. Windows defines a single letter followed by a +":" as a root-name identifying a disc drive. --end note]

    +
    +
    +

    root-directory:
    +            +directory-separator

    +

    relative-path:
    +            +filename
    +            relative-path +directory-separator
    +            relative-path +directory-separator filename

    +

    filename:
    +            name
    +           
    "."
    +           
    +".."

    +

    directory-separator:
    +            "/"
    +      "/"
    directory-separator

    +

    Multiple successive directory-separator characters are considered to +be the same as one directory-separator character. The filename +"." is considered to be a reference to the current directory. The +filename ".." is considered to be a reference to the current +directory. Specific filenames may have special meaning for a particular +operating system.

    +
    +

    Native pathname format:  +An implementation defined format. [Note: For POSIX-like operating +systems, the native format is the same as the generic format. For Windows, the +native format is similar to the generic format, but the directory-separator +characters can be either slashes or backslashes. --end note]

    +

    Link: A directory entry object that associates a +filename with a file. On some file systems, several directory entries can +associate names with the same file.

    +

    Hard link: A link to an existing file. Some +file systems support multiple hard links to a file. If the last hard link to a +file is removed, the file itself is removed.

    +
    +

    [Note: A hard link can be thought of as a shared-ownership smart +pointer to a file. -- end note]

    +
    +

    Symbolic link: A type of file with the +property that when the file is encountered during pathname resolution, a string +stored by the file is used to modify the pathname resolution.

    +
    +

    [Note: A symbolic link can be thought of as a raw pointer to a file. +If the file pointed to does not exist, the symbolic link is said to be a +"dangling" symbolic link. -- end note]

    +
    +

    File system race: The condition that occurs +when multiple threads, processes, or computers interleave access and +modification of +the same object within a file system.

    +

    Dot, Dot Dot: Synonyms for the filenames "." +and "..", respectively. The dot filename names the current +directory. The dot dot filename names the parent directory.

    +

    Header <$HEADER;> synopsis

    +
    $NAMESPACE_BEGIN;
    +    class path;
    +
    +    void swap(path& lhs, path& rhs);
    +    bool lexicographical_compare(path::iterator first1, path::iterator last1,
    +                                 path::iterator first2, path::iterator last2);
    +    std::size_t hash_value(const path& p);
    +
    +    bool operator==(const path& lhs, const path& rhs);
    +    bool operator!=(const path& lhs, const path& rhs);
    +    bool operator< (const path& lhs, const path& rhs);
    +    bool operator<=(const path& lhs, const path& rhs);
    +    bool operator> (const path& lhs, const path& rhs);
    +    bool operator>=(const path& lhs, const path& rhs);
    +
    +    path operator/ (const path& lhs, const path& rhs);
    +
    +    std::ostream&  operator<<( std::ostream& os, const path& p );
    +    std::wostream& operator<<( std::wostream& os, const path& p );
    +    std::istream&  operator>>( std::istream& is, path& p );
    +    std::wistream& operator>>( std::wistream& is, path& p )
    +
    +    class filesystem_error;      
    +    class directory_entry;
    +
    +    class directory_iterator;
    +
    +    class recursive_directory_iterator;
    +
    +    enum file_type
    +    {
    +      status_error, file_not_found, regular_file, directory_file,
    +      symlink_file, block_file, character_file, fifo_file, socket_file,
    +      type_unknown
    +    };
    +
    +    enum perms
    +    {
    +      no_perms,
    +      owner_read, owner_write, owner_exe, owner_all,
    +      group_read, group_write, group_exe, group_all,
    +      others_read, others_write, others_exe, others_all, all_all,
    +      set_uid_on_exe, set_gid_on_exe, sticky_bit,
    +      perms_mask, perms_not_known,
    +      add_perms, remove_perms, symlink_perms
    +    };
    +
    +    class file_status;
    +
    +    struct space_info  // returned by space function
    +    {
    +      uintmax_t capacity;
    +      uintmax_t free; 
    +      uintmax_t available; // free space available to a non-privileged process
    +    };
    +
    +    enum class copy_option
    +    {
    +      none
    +      fail_if_exists = none,
    +      overwrite_if_exists
    +    };
    +
    +    enum class symlink_option
    +    {
    +      none
    +      no_recurse = none,
    +      recurse
    +    };
    +
    +    // operational functions
    +
    +    path         absolute(const path& p, const path& base=current_path());
    +
    +    path         canonical(const path& p, const path& base = current_path());
    +    path         canonical(const path& p, system::error_code& ec);
    +    path         canonical(const path& p, const path& base, system::error_code& ec);
    +
    +    void         copy(const path& from, const path& to);
    +    void         copy(const path& from, const path& to, system::error_code& ec);
    +
    +    void         copy_directory(const path& from, const path& to);
    +    void         copy_directory(const path& from, const path& to, system::error_code& ec);
    +
    +    void         copy_file(const path& from, const path& to);
    +    void         copy_file(const path& from, const path& to, system::error_code& ec);
    +    void         copy_file(const path& from, const path& to, copy_option option);
    +    void         copy_file(const path& from, const path& to, copy_option option,
    +                           system::error_code& ec);
    +
    +    void         copy_symlink(const path& existing_symlink, const path& new_symlink);
    +    void         copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
    +
    +    bool         create_directories(const path& p);
    +    bool         create_directories(const path& p, system::error_code& ec);
    +
    +    bool         create_directory(const path& p);
    +    bool         create_directory(const path& p, system::error_code& ec);
    +
    +    void         create_directory_symlink(const path& to, const path& new_symlink);
    +    void         create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +    void         create_hard_link(const path& to, const path& new_hard_link);
    +    void         create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
    +
    +    void         create_symlink(const path& to, const path& new_symlink);
    +    void         create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +    path         current_path();
    +    path         current_path(system::error_code& ec);
    +    void         current_path(const path& p);
    +    void         current_path(const path& p, system::error_code& ec);
    +
    +    bool         exists(file_status s) noexcept;
    +    bool         exists(const path& p);
    +    bool         exists(const path& p, system::error_code& ec) noexcept;
    +
    +    bool         equivalent(const path& p1, const path& p2);
    +    bool         equivalent(const path& p1, const path& p2, system::error_code& ec);
    +
    +    uintmax_t    file_size(const path& p);
    +    uintmax_t    file_size(const path& p, system::error_code& ec);
    +
    +    uintmax_t    hard_link_count(const path& p);
    +    uintmax_t    hard_link_count(const path& p, system::error_code& ec);
    +
    +    const path&  initial_path();
    +    const path&  initial_path(system::error_code& ec);
    +
    +    bool         is_directory(file_status s) noexcept;
    +    bool         is_directory(const path& p);
    +    bool         is_directory(const path& p, system::error_code& ec) noexcept;
    +
    +    bool         is_empty(const path& p);
    +    bool         is_empty(const path& p, system::error_code& ec);
    +
    +    bool         is_other(file_status s) noexcept;
    +    bool         is_other(const path& p,);
    +    bool         is_other(const path& p, system::error_code& ec) noexcept;
    +
    +    bool         is_regular_file(file_status s) noexcept; 
    +    bool         is_regular_file(const path& p);
    +    bool         is_regular_file(const path& p, system::error_code& ec) noexcept;
    +
    +    bool         is_symlink(file_status s noexcept);
    +    bool         is_symlink(const path& p);
    +    bool         is_symlink(const path& p, system::error_code& ec) noexcept;
    +
    +    std::time_t  last_write_time(const path& p);
    +    std::time_t  last_write_time(const path& p, system::error_code& ec);
    +    void         last_write_time(const path& p, const std::time_t new_time);
    +    void         last_write_time(const path& p, const std::time_t new_time, system::error_code& ec);
    +
    +    path         read_symlink(const path& p);
    +    path         read_symlink(const path& p, system::error_code& ec);
    +
    +    bool         remove(const path& p);
    +    bool         remove(const path& p, system::error_code& ec);
    +
    +    uintmax_t    remove_all(const path& p);
    +    uintmax_t    remove_all(const path& p, system::error_code& ec);
    +
    +    void         rename(const path& from, const path& to);
    +    void         rename(const path& from, const path& to, system::error_code& ec);
    +
    +    void         resize_file(const path& p, uintmax_t size);
    +    void         resize_file(const path& p, uintmax_t size, system::error_code& ec);
    +
    +    space_info   space(const path& p);
    +    space_info   space(const path& p, system::error_code& ec);
    +
    +    file_status  status(const path& p);
    +    file_status  status(const path& p, system::error_code& ec) noexcept;
    +
    +    bool         status_known(file_status s) noexcept;
    +
    +    file_status  symlink_status(const path& p);
    +    file_status  symlink_status(const path& p, system::error_code& ec) noexcept;
    +
    +    path         system_complete(const path& p);
    +    path         system_complete(const path& p, system::error_code& ec);
    +
    +    path         temp_directory_path();
    +    path         temp_directory_path(system::error_code& ec);
    +
    +    path         unique_path(const path& model="%%%%-%%%%-%%%%-%%%%");
    +    path         unique_path(const path& model, system::error_code& ec);
    +
    +$NAMESPACE_END;
    +

    Error reporting

    +

    Filesystem library functions often provide two overloads, one that +throws an exception to report file system errors, and another that sets an +error_code.

    +
    +

    [Note: This supports two common use cases:

    +
      +
    • Uses where file system +errors are truly exceptional and indicate a serious failure. Throwing an + exception is the most appropriate response. This is the preferred default for + most everyday programming.
    • +
    • Uses where file system system errors are routine and do not necessarily represent + failure. Returning an error code is the most appropriate response. This allows + application specific error handling, including simply ignoring the error.
    • +
    +

    --end note]

    +
    +

    Functions not having an argument of type +system::error_code& +report errors as follows, unless otherwise specified:

    +
      +
    • When a call by the + implementation to an operating system or other underlying API results in an + error that prevents the function from meeting its specifications, an exception + of type +filesystem_error is thrown.
    • +
    • Failure to allocate storage is reported by throwing an exception as described in the C++ standard, + 17.6.4.10 [res.on.exception.handling].
    • +
    • Destructors throw nothing.
    • +
    +

    Functions having an argument of type +system::error_code& report errors as follows, unless otherwise + specified:

    +
      +
    • If a call by the + implementation to an operating system or other underlying API results in an + error that prevents the function from meeting its specifications, the +system::error_code& argument is set as + appropriate appropriate for the specific error. Otherwise, clear() + is called on the +system::error_code& argument.
    • +
    • Failure to allocate storage is reported by + throwing an exception as described in the C++ standard, + 17.6.4.10 [res.on.exception.handling].
    • +
    +

    Class path

    +

    An object of class path represents a path, +and contains a pathname Such an object is concerned only with the lexical and syntactic aspects +of a path. The path does not necessarily exist in external storage, and the +pathname is not necessarily valid for the current operating +system or for a particular file system.

    +
    +

    [Example: A long path name on Windows +is an example of an innocuous appearing path that is not actually valid. -- +end example]

    +
    +
    $NAMESPACE_BEGIN;
    +      class path
    +      {
    +      public:
    +        typedef see below                                    value_type;  // char for POSIX, wchar_t for Windows
    +        typedef std::basic_string<value_type>                string_type;
    +        typedef std::codecvt<wchar_t, char, std::mbstate_t>  codecvt_type;
    +
    +        // constructors and destructor
    +        path();
    +        path(const path& p);
    +        path(path&& p) noexcept;
    +
    +        template <class Source>
    +          path(Source const& source, const codecvt_type& cvt=codecvt());
    +
    +        template <class InputIterator>
    +          path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +       ~path();
    +
    +        // assignments
    +        path& operator=(const path& p);
    +        path& operator=(path&& p) noexcept;
    +
    +        template <class Source>
    +          path& operator=(Source const& source);
    +
    +        template <class Source>
    +          path& assign(Source const& source, const codecvt_type& cvt)
    +
    +        template <class InputIterator>
    +          path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +        // appends
    +        path& operator/=(const path& p);
    +
    +        template <class Source>
    +          path& operator/=(Source const& source);
    +
    +        template <class Source>
    +          path& append(Source const& source, const codecvt_type& cvt);
    +
    +        template <class InputIterator>
    +          path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +        // modifiers
    +        void  clear();
    +        path& make_absolute(const path& base);
    +        path& make_preferred();  // POSIX: no effect. Windows: convert slashes to backslashes
    +        path& remove_filename();
    +        path& replace_extension(const path& new_extension = path());
    +        void  swap(path& rhs);
    +
    +        // native format observers
    +        const string_type&  native() const noexcept;  // native format, encoding
    +        const value_type*   c_str() const noexcept;   // native().c_str()
    +
    +        template <class String>
    +        String string(const codecvt_type& cvt=codecvt()) const;                // native format
    +
    +        const string        string(const codecvt_type& cvt=codecvt()) const;   // native format
    +        const wstring       wstring(const codecvt_type& cvt=codecvt()) const;  // ditto
    +        const u16string     u16string() const;                                 // ditto
    +        const u32string     u32string() const;                                 // ditto
    +
    +        // generic format observers
    +        template <class String>
    +        String generic_string() const;
    +
    +        const string        generic_string(const codecvt_type& cvt=codecvt()) const;   // generic format
    +        const wstring       generic_wstring(const codecvt_type& cvt=codecvt()) const;  // ditto
    +        const u16string     generic_u16string() const;                                 // ditto
    +        const u32string     generic_u32string() const;                                 // ditto
    +
    +        // decomposition
    +        path  root_name() const;
    +        path  root_directory() const;
    +        path  root_path() const;
    +        path  relative_path() const;
    +        path  parent_path() const;
    +        path  filename() const;
    +        path  stem() const;
    +        path  extension() const;
    +
    +        // query
    +        bool empty() const;
    +        bool has_root_name() const;
    +        bool has_root_directory() const;
    +        bool has_root_path() const;
    +        bool has_relative_path() const;
    +        bool has_parent_path() const;
    +        bool has_filename() const;
    +        bool has_stem() const;
    +        bool has_extension() const;
    +        bool is_absolute() const;
    +        bool is_relative() const;
    +
    +        // iterators
    +        class iterator;
    +        typedef iterator const_iterator;
    +
    +        iterator begin() const;
    +        iterator end() const;
    +        
    +        // encoding conversion
    +        static std::locale imbue( const std::locale& loc );
    +        static const codecvt_type & codecvt();
    +
    +      private:
    +        string_type pathname;  // exposition only
    +      };
    +
    +$NAMESPACE_END;
    +

    value_type is an implementation-defined +typedef for the +character type used by the operating system to represent pathnames.

    +

    Member functions described as returning const string, +const wstring, const u16string, or const u32string are permitted to return const string&, const +wstring&, const u16string&, or const u32string&, +respectively.

    +
    +

    [Note: This allows implementations to avoid unnecessary copies when no +conversion is required. +Return-by-value is specified as +const to ensure programs won't break if moved to a return-by-reference +implementation. -- +end note]

    +
    +

    path Conversions

    +

    path Conversions to +native format

    +

    Member function arguments that take character sequences representing paths +may use the generic pathname format or +the native pathname format. If such an +argument uses the generic format, an implementation defined conversion to native format is performed +during the processing of the argument.

    +
    +

    [Note: No conversion occurs on POSIX and Windows since they have +native formats that conform to the generic format. --end note]

    +

    [Rationale: There is no unambiguous way for an implementation to +always be able distinguish between native format and generic format arguments. +This is by design as it simplifies use. Should an implementation encounter an +operating system where disambiguation is required, an implementation defined +native format prefix can be introduced to identify the native format. -- end +rationale]

    +
    + + + + + +
    + Class path does not currently map invalid characters in + filenames to valid characters. In the future we might add something like + this:
    +

    When converting filenames to the native operating system format, +implementations are encouraged, but not required, to convert otherwise invalid +characters or character sequences to valid characters or character sequences. +Such conversions are implementation-defined.

    +
    +

    [Note: Filename conversion allows much wider portability of both +programs and filenames that would otherwise be possible.

    +

    Implementations are encouraged to base conversion on existing standards or +practice. Examples include the Uniform Resource Locator escape syntax of a percent sign ('%') +followed by two hex digits representing the character value. On +OpenVMS, which does not allow percent signs in filenames, a dollar sign ('$') +followed by two hex digits is the existing practice, as is converting lowercase +letters to uppercase. -- end note.]

    +
    +
    +
    + +

    If the native format requires +paths for regular files to be formatted differently from paths for directories, the +path shall be treated as a directory path if last element is a separator, +otherwise it shall be treated as a regular file path.

    + +
    + +

    [Note: The above paragraph does not apply to POSIX and Windows since +they use the same format +for both regular file and directory pathnames. --end note]

    + +

    [Example: +On OpenVMS, a path +constructed from "/cats/jane" would considered a regular file +path, and have a native format of "[CATS]JANE", while a +path constructed from "/cats/jane/" would be considered a +directory path, and have a native format of "[CATS.JANE]". +--end example]

    + +
    +

    path Conversions +to generic format

    +

    Generic format observer +functions return strings formatted according to the +generic pathname format. The conversion +from generic to native formats is implementation defined.

    +
    +

    [Note: For POSIX, no conversion is performed. For Windows, backslashes are converted to +forward slashes. -- end note]

    +
    +

    path Encoding conversions

    +

    If the value type of member function arguments that are character sequences +representing paths is not value_type, +and no cvt argument is supplied, conversion to value_type +occurs using an imbued locale. This imbued locale is initialized with a +codecvt facet appropriate for the operating system.

    +
    +

    For Apple OS X implementations, path::value_type +is char. The default imbued locale provides a UTF-8 codecvt +facet. [Rationale: "All BSD system functions expect their string +parameters to be in UTF-8 encoding and nothing else." See + +Apple docs. -- end rationale]

    +

    For Windows-like implementations, including +MinGW, path::value_type is +wchar_t. The default imbued locale provides a codecvt facet +that invokes Windows MultiByteToWideChar or +WideCharToMultiByte API with a codepage of CP_THREAD_ACP +if Windows AreFileApisANSI()is true, otherwise codepage +CP_OEMCP. [Rationale: this is the current behavior of C and C++ +programs that perform file operations using narrow character string to identify +paths. Changing this in the Filesystem library would be too surprising, +particularly where user input is involved. -- end rationale]

    +

    For all other implementations, including Linux, path::value_type +is char. The default imbued locale is std::locale(""). +[Rationale: ISO C specifies this as "the locale-specific native +environment", while POSIX says it "Specifies an implementation-defined native +environment." -- end rationale]

    +
    +

    path Requirements

    +

    Template parameters named InputIterator +are required meet the +requirements for a C++ standard library RandomIterator +compliant iterator. The iterator's value type is required to be char, + wchar_t, char16_t, or char32_t.

    +

    Template parameters named Source are required to be one of:

    +
      +
    • A container with a value type of char, + wchar_t, char16_t, or char32_t.
    • +
    • An iterator for a null terminated byte-string. The value type is required + to be char, wchar_t, char16_t, or + char32_t.
    • +
    • A C-array. The value type is required to be char, + wchar_t, char16_t, or char32_t.
    • +
    • A boost::filesystem::directory_entry.
    • +
    + +

    +path constructors

    +
    path();
    +
    +

    Postcondition: empty().

    +
    +
    template <class Source>
    +  path(Source const& source, const codecvt_type& cvt=codecvt());
    +
    template <class InputIterator>
    +  path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +

    Effects: Stores the contents [begin,end) + or source in pathname. If the contents are in the + generic format and the generic format is unacceptable to the operating + system's API, they are converted to the native format. [Note: For + POSIX and Windows implementations, the generic format is already + acceptable as a native format, so no generic to native conversion is + performed. --end note]

    +

    + Remarks: If the value type of  [begin,end) + or source is not value_type, conversion is performed + by cvt.

    +
    +

    +path assignments

    +
    template <class Source>
    +  path& operator=(Source const& source);
    +
    template <class Source>
    +  path& assign(Source const& source, const codecvt_type& cvt);
    +
    template <class InputIterator>
    +  path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +

    Effects: Stores the contents [begin,end) + or source in pathname. If the contents are in the + generic format, they are converted to the native format. [Note: For + POSIX and Windows based implementations, the generic format is already + acceptable as a native format, so no generic to native conversion is + performed. --end note]

    +

    + Returns: *this

    +

    + Remarks: If the value type of  [begin,end) + or source is not value_type, conversion is performed + by cvt.

    +
    +

    path appends

    +

    The append operations use operator/= to denote their semantic + effect of appending the platform's preferred directory separator when needed. The + preferred + directory separator is implementation-defined.

    +
    +

    [Note: For POSIX-like implementations, including + Unix variants, Linux, and Mac OS X, the preferred directory separator is a + single forward slash.

    +

    For Windows-like implementations, including + Cygwin and + MinGW, the preferred directory + separator is a single backslash.--end note]

    +
    +
    path& operator/=(const path& p);
    +
    +

    Effects:

    +
    + Appends the preferred directory separator to the contained pathname, unless:
      +
    • an added separator + would be redundant, or
    • +
    • would change an relative path to an absolute path, or
    • +
    • p.empty(), or
    • +
    • *p.native().cbegin() is a directory separator.
    • +
    +

    Appends p.native() to pathname.

    +
    +

    Returns: *this

    +
    +
    template <class Source>
    +  path& operator/=(Source const & source);
    +
    template <class Source>
    +  path& append(Source const & source, const codecvt_type& cvt);
    +
    template <class InputIterator>
    +  path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());
    +
    +

    Effects:

    +
    +

    Appends a native directory separator to the contained pathname, unless:

    +
      +
    • an added separator + would be redundant, or
    • +
    • would change an relative path to an absoute path, or
    • +
    • p.empty(), or
    • +
    • *p.native().cbegin() is a separator.
    • +
    +

    Appends the contents [begin,end) + or source to pathname. If the contents are in the + generic format, they are converted to the native format. [Note: For + POSIX and Windows based implementations, the generic format is already + acceptable as a native format, so no generic to native conversion is + performed. --end note]

    +
    +

    Remarks: If the value type of  [begin,end) + or source is not value_type, conversion is performed + by cvt.

    +

    Returns: *this

    +
    + +

    +path modifiers

    +
    void clear();
    +
    +

    Postcondition: this->empty() is true.

    +
    +
    path& make_preferred();
    +
    +

    Effects: The contained pathname is converted to the preferred native + format. [Note: On Windows, the effect is to replace slashes with + backslashes. On POSIX, there is no effect. -- end note]

    +

    Returns: *this

    +
    + +
    path& remove_filename();
    +
    +

    Returns: As if, *this = parent_path();

    +

    [Note: This function is needed to efficiently implement + directory_iterator. It is exposed to allow additional uses. The actual + implementation may be much more efficient than *this = parent_path()  -- end + note]

    +
    +
    path& replace_extension(const path& new_extension = path());
    +
    +

    Postcondition: extension() == replacement, + where replacement is new_extension if + new_extension.empty() || new_extension[0] == the dot character, + otherwise replacement is the dot character followed by + new_extension.

    +

    Returns: *this

    +
    +
    void swap(path& rhs) noexcept;
    +
    +

    Effects: + Swaps the contents of the two paths.

    +

    Complexity: + constant time.

    +
    + +

    path +native format observers

    +

    The string returned by all native format observers is in the +native pathname format.

    +
    const string_type&  native() const noexcept;
    +
    +

    Returns: pathname.

    +
    +
    const value_type* c_str() const noexcept;
    +
    +

    Returns: pathname.c_str().

    +
    +
    template <class String>
    +String string(const codecvt_type& cvt=codecvt()) const;
    +
    +

    Returns: pathname.

    +

    Remarks: If string_type is a different type than +String, conversion is performed by cvt.

    +
    +
    const string string(const codecvt_type& cvt=codecvt()) const;
    +const wstring wstring(const codecvt_type& cvt=codecvt()) const;
    +const u16string u16string() const;
    +const u32wstring u32wstring() const; 
    +
    +

    Returns: pathname.

    +

    Remarks: If string_type is a different type than +function's return type, conversion is performed by cvt.

    +

    If string_type is the same type as the +function's return type, the function is permitted to return by const& +rather than const value. [Note: For POSIX, this occurs for +string(), for Windows, wstring(). --end note]

    +
    + +

    path +generic format observers

    +

    The string returned by all generic format observers is in the +generic pathname format.

    +

    [Note: For POSIX, no conversion occurs, since the native format and +generic format are the same. For Windows, backslashes are converted to slashes +--end note]

    +
    template <class String>
    +String generic_string(const codecvt_type& cvt=codecvt()) const;
    +
    +

    Returns: pathname.

    +

    Remarks: If string_type is a different type than +String, conversion is performed by +cvt.

    +
    +
    const string generic_string(const codecvt_type& cvt=codecvt()) const;
    +const wstring generic_wstring(const codecvt_type& cvt=codecvt()) const;
    +const u16string generic_u16string() const;
    +const u32wstring generic_u32wstring() const; 
    +
    +

    Returns: pathname.

    +

    Remarks:  If string_type is a different type than +function's return type, conversion is performed by cvt.

    +

    If string_type is of the same type as the +function's return type, and the generic format is the same as the native format, +the function is permitted to return by const& rather than +const value. [Note: For POSIX, this occurs for string(). +It never occurs for Windows, because backslashes must be converted to slashes. +--end note]

    +
    + +

    path +decomposition

    +

    See the +Path decomposition table for examples +for values returned by decomposition functions. The +Tutorial may also be +helpful.

    +
    path root_name() const;
    +
    +

    Returns: root-name, if pathname includes +root-name, otherwise path().

    +
    +
    path root_directory() const;
    +
    +

    Returns: root-directory, if pathname includes +root-directory, otherwise path().

    +

    If root-directory is composed of slash name, slash is +excluded from the returned string.

    +
    +
    path root_path() const;
    +
    +

    Returns: root_name() / root_directory()

    +
    +
    path relative_path() const;
    +
    +

    Returns: A path composed from pathname, if +!empty(), beginning +with the first filename after root-path. Otherwise, path().

    +
    +
    path parent_path() const;
    +
    +

    Returns: (empty() || begin() == --end()) ? path() : pp, where + pp is constructed as if by + starting with an empty path and successively applying + operator/= for each element in the range begin(), + --end().

    +
    +
    path filename() const;
    +
    +

    Returns: empty() ? path() : *--end()

    +

    [Example:

    +
    +
    std::cout << path("/foo/bar.txt").filename(); // outputs "bar.txt"
    +
    +

    --end example]

    +
    +
    path stem(const path& p) const;
    +
    +

    Returns: if p.filename()contains a dot but does not + consist solely of one or to two dots, returns + the substring of p.filename() starting at its beginning and + ending at the last dot (the dot is not included). Otherwise, + returns + p.filename().

    +

    [Example:

    +
    +
    std::cout << path("/foo/bar.txt").stem(); // outputs "bar"
    +path p = "foo.bar.baz.tar";
    +for (; !p.extension().empty(); p = p.stem())
    +  std::cout << p.extension() << '\n';
    +  // outputs: .tar
    +  //          .baz
    +  //          .bar
    +
    +

    --end example]

    +
    +
    path extension(const path& p) const;
    +
    +

    Returns: if p.filename() contains a dot but does not + consist solely of one or to two dots, returns + the substring of p.filename() starting at the rightmost dot + and ending at the path's end. Otherwise, returns an empty path + object.

    +

    Remarks: Implementations are permitted but not required to define additional + behavior for file systems which append additional elements to extensions, such + as alternate data streams or partitioned dataset names.

    +

    [Example:

    +
    +
    std::cout << path("/foo/bar.txt").extension(); // outputs ".txt"
    +
    +

    --end example]

    +

    [Note: The dot is included in the return value so that + it is possible to distinguish between no extension and an empty extension. See + + http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744 for more + extensive rationale.  -- end note]

    +
    +

    path query

    +
    bool empty() const;
    +
    +

    Returns: m_pathname.empty().

    +
    +
    bool has_root_path() const;
    +
    +

    Returns: !root_path().empty()

    +
    +
    bool has_root_name() const;
    +
    +

    Returns: !root_name().empty()

    +
    +
    bool has_root_directory() const;
    +
    +

    Returns: !root_directory().empty()

    +
    +
    bool has_relative_path() const;
    +
    +

    Returns: !relative_path().empty()

    +
    +
    bool has_parent_path() const;
    +
    +

    Returns: !parent_path().empty()

    +
    +
    bool has_filename() const;
    +
    +

    Returns: !filename().empty()

    +
    +
    bool has_stem() const;
    +
    +

    Returns: !stem().empty()

    +
    +
    bool has_extension() const;
    +
    +

    Returns: !extension().empty()

    +
    +
    bool is_absolute() const;
    +
    +

    Returns: true + if the elements of root_path() uniquely identify a directory, else false.

    +

    [Note: On POSIX, + path("/foo").is_absolute() returns true. On Windows, + path("/foo").is_absolute() returns false. --end note]

    +
    +
    bool is_relative() const;
    +
    +

    Returns: !is_absolute().

    +
    +

    +path iterators

    +

    A path::iterator is a constant iterator satisfying all +the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional +iterators [lib.bidirectional.iterators]). Its value_type is +path.

    +

    Calling any non-const member function of a path object + invalidates all iterators referring to elements of that object.

    +

    The forward traversal order is as follows:

    +
      +
    • The root-name element, if present.
    • +
    • The root-directory element, if present.
    • +
    • Each successive filename element, if present.
    • +
    • Dot, if one or more trailing non-root slash + characters are present.
    • +
    +

    The backward traversal order is the reverse of forward traversal.

    +
    iterator begin() const;
    +
    +

    Returns: An iterator for the first present element in the traversal + list above. If no elements are present, the end iterator.

    +
    +
    iterator end() const;
    +
    +

    Returns: The end iterator.

    +
    +

    path encoding conversion

    +
    static std::locale imbue(const std::locale& loc);
    +
    +

    Effects: Stores loc as the default locale for all + objects of type path.

    +

    Returns: The previous default locale for all objects of type + path.

    +
    +
    static const codecvt_type& codecvt();
    +
    +

    Returns: The codecvt facet for the default locale for + all objects of type path.

    +
    + +$if $TARGET; == BOOST +

    path deprecated functions

    +

    Several member functions from previous versions of class path +have been deprecated, either because they have been renamed or because the +functionality is no longer desirable or has become obsolete.

    +

    Deprecated functions available by default; will be suppressed if +BOOST_FILESYSTEM_NO_DEPRECATED is defined:

    +
    +
    path&  remove_leaf()           { return remove_filename(); }
    +path   leaf() const            { return filename(); }
    +path   branch_path() const     { return parent_path(); }
    +bool   has_leaf() const        { return !m_path.empty(); }
    +bool   has_branch_path() const { return !parent_path().empty(); }
    +
    +

    Deprecated functions not available by default; will be supplied if +BOOST_FILESYSTEM_DEPRECATED is defined:

    +
    +
    const std::string  file_string() const               { return native_string(); }
    +const std::string  directory_string() const          { return native_string(); }
    +const std::string  native_file_string() const        { return native_string(); }
    +const std::string  native_directory_string() const   { return native_string(); }
    +const string_type  external_file_string() const      { return native(); }
    +const string_type  external_directory_string() const { return native(); }
    +
    + +$endif + +

    path +non-member functions

    +
    void swap( path& lhs, path& rhs )
    +
    +

    Effects: + lhs.swap(rhs).

    +
    +
    bool lexicographical_compare(path::iterator first1, path::iterator last1,
    +                             path::iterator first2, path::iterator last2)
    +
    +

    Returns: true if the sequence of native() + strings for the elements defined by the range [first1,last1) is + lexicographically less than the sequence of native() strings for + the elements defined by the range [first2,last2). Returns + false otherwise.

    +

    Remarks: If two sequences have the same number of elements and their + corresponding elements are equivalent, then neither sequence is + lexicographically less than the other. If one sequence is a prefix of the + other, then the shorter sequence is lexicographically less than the longer + sequence. Otherwise, the lexicographical comparison of the sequences yields + the same result as the comparison of the first corresponding pair of elements + that are not equivalent.

    +
      for ( ; first1 != last1 && first2 != last2 ; ++first1, ++first2) {
    +    if (first1->native() < first2->native()) return true;
    +    if (first2->native() < first1->native()) return false;
    +  }
    +  return first1 == last1 && first2 != last2;
    +

    [Note: A path aware lexicographical_compare + is provided to avoid infinite recursion in std::lexicographical_compare + due to the path iterator's value type itself being path. + --end note]

    +
    +
    std::size_t hash_value (const path& p);
    +
    +

    Returns: A hash value for the path p. If + for two paths, p1 == p2 then + hash_value(p1) == hash_value(p2).

    +

    This allows paths to be used with + Boost.Hash.

    +
    +
    bool operator< (const path& lhs, const path& rhs);
    +
    +

    Returns: return lexicographical_compare(lhs.begin(), lhs.end(), + rhs.begin(), rhs.end()).

    +
    +
    bool operator<=(const path& lhs, const path& rhs);
    +
    +

    Returns: !(rhs < lhs).

    +
    +
    bool operator> (const path& lhs, const path& rhs);
    +
    +

    Returns: rhs < lhs.

    +
    +
    bool operator>=(const path& lhs, const path& rhs);
    +
    +

    Returns: !(lhs < rhs).

    +
    +
    bool operator==(const path& lhs, const path& rhs);
    +
    +

    Returns: !(lhs < rhs) && !(rhs < lhs).

    +

    [Note: Actual implementations may use an equivalent, but more + efficient, algorithm. --end note]

    +

    [Note: Path equality and path + equivalence have different semantics.

    +

    Equality is determined by the path + non-member operator==, which considers the two path's lexical + representations only. Thus path("foo") == "bar" is never + true.

    +

    Equivalence is determined by the equivalent() + non-member function, which determines if two paths resolve to the same file system entity. + Thus equivalent("foo", "bar") will be true + when both paths resolve to the same file.

    +

    Programmers wishing to determine if two paths are "the same" must decide if + "the same" means "the same representation" or "resolve to the same actual + file", and choose the appropriate function accordingly. + -- end note]

    +
    +
    bool operator!=(const path& lhs, const path& rhs);
    +
    +

    Returns: !(lhs == rhs).

    +
    +
    path operator/ (const path& lhs, const path& rhs);
    +
    +

    Returns: path(lhs) /= rhs.

    +
    +

    path inserter + and extractor

    +

    The inserter and extractor delimit the string with double-quotes (") +to ensure that paths with embedded spaces will round trip correctly. Ampersand (&) +is used as an escape character, so the path can itself contain double quotes.

    +
    template <class Char, class Traits>
    +std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os,
    +                                             const path& p)
    +
    +
    +

    Effects:  + os << + boost::io::quoted(p.string<std::basic_string<Char>>(), static_cast<Char>('&'));

    +

    Returns: + os

    +
    +
    template <class Char, class Traits>
    +inline std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is,
    +                                                    path& p)
    +
    +
    +

    Effects:  +  std::basic_string<Char> str;
    +        is >> + boost::io::quoted(str, + static_cast<Char>('&'));
    +        p = str;

    +

    Returns: + is

    +
    +

    Class filesystem_error

    +
    $NAMESPACE_BEGIN;
    +      class basic_filesystem_error : public system_error
    +      {
    +      public:
    +        filesystem_error();
    +        filesystem_error(const filesystem_error&);
    +        filesystem_error(const std::string& what_arg,
    +          system::error_code ec);
    +        filesystem_error(const std::string& what_arg,
    +          const path& p1, system::error_code ec);
    +        filesystem_error(const std::string& what_arg,
    +          const path& p1, const path& p2, system::error_code ec);
    +
    +        filesystem_error& filesystem_error(const filesystem_error&);
    +       ~filesystem_error();
    +
    +        filesystem_error& operator=(const filesystem_error&);
    +
    +        const path& path1() const;
    +        const path& path2() const;
    +
    +        const char * what() const;
    +      };
    +$NAMESPACE_END;
    +

    The class template basic_filesystem_error defines the type of +objects thrown as exceptions to report file system errors from functions described in this +$WHAT;.

    +

    filesystem_error members

    +
    filesystem_error(const std::string& what_arg, error_code ec);
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + what_arg.c_str()
    code()ec
    path1().empty()true
    path2().empty()true
    +
    +
    filesystem_error(const std::string& what_arg, const path_type& p1, error_code ec);
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + what_arg.c_str()
    code()ec
    path1()Reference to stored copy of + p1
    path2().empty()true
    +
    +
    filesystem_error(const std::string& what_arg, const path_type& p1, const path_type& p2, error_code ec);
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + + + + + +
    ExpressionValue
    + runtime_error::what() + + what_arg.c_str()
    code()ec
    path1()Reference to stored copy of + p1
    path2()Reference to stored copy of + p2
    +
    +
    const path& path1() const;
    +
    +

    Returns: Reference to copy of p1 stored by the + constructor, or, if none, an empty path.

    +
    +
    const path& path2() const;
    +
    +

    Returns: Reference to copy of p2 stored by the + constructor, or, if none, an empty path.

    +
    +
    const char* what() const;
    +
    +

    Returns: A string containing runtime_error::what(). The exact format is unspecified. + Implementations are encouraged but not required to include + path1.native_string()if not empty, path2.native_string()if + not empty, and system_error::what() strings in the returned + string.

    +
    +

    Enum file_type

    +

    This enum specifies constants uses to identify file types.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Constant NameMeaning
    status_errorAn error occurred while trying to obtain the status of the file. The + file simply not being found is not considered a status error. +
    file_not_foundThe file could not be found
    regular_fileRegular file
    directory_fileDirectory file
    symlink_fileSymbolic link file
    block_fileBlock special file
    character_fileCharacter special file
    fifo_fileFIFO or pipe file
    socket_fileSocket file
    type_unknownThe file exists, but it is of a system specific type not covered by any + of the above cases.
    +

    Enum perms

    +

    This enum specifies bitmask constants uses to identify file +permissions. The POSIX standard specifies actual values, and those values have +been adopted here because they are very familiar and ingrained for many POSIX +users.

    +
    +

    Caution: Operating systems do not always support permissions as described in +the table.

    +

    There is much variation in the meaning of +sticky_bit; do not use it unless you understand what it means for +your operating system.

    +

    There is much variation in how operating systems treat symlinks. See +symlink_perms.

    +

    Windows: All permissions except write are currently ignored. There is only a +single write permission; setting write permission for owner, group, or others +sets write permission for all, and removing write permission for owner, group, +or others removes write permission for all.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameValue
    + (octal)
    POSIX
    + macro
    Definition or notes
    +

    no_perms

    0There are no permissions set for the file. Note: file_not_found is + no_perms rather than perms_not_known
    owner_read0400 S_IRUSR Read permission, owner
    owner_write0200 S_IWUSR Write permission, owner
    owner_exe0100 S_IXUSR Execute/search permission, owner
    owner_all0700 S_IRWXU Read, write, execute/search by owner; owner_read | owner_write | owner_exe
    group_read040 S_IRGRP Read permission, group
    group_write020 S_IWGRP Write permission, group
    group_exe010 S_IXGRP Execute/search permission, group
    group_all070 S_IRWXG Read, write, execute/search by group; group_read | group_write | + group_exe
    others_read04 S_IROTH Read permission, others
    others_write02 S_IWOTH Write permission, others
    others_exe01 S_IXOTH Execute/search permission, others
    others_all07 S_IRWXORead, write, execute/search by others; others_read | others_write | others_exe
    all_all0777 owner_all | group_all | others_all
    set_uid_on_exe04000 S_ISUID Set-user-ID on execution
    set_gid_on_exe02000 S_ISGID Set-group-ID on execution
    sticky_bit 01000 S_ISVTX Meaning varies; see http:en.wikipedia.org/wiki/Sticky_bit
    perms_mask07777  all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit
    perms_not_known0xFFFF + The permissions are not known, such as when a file_status object + is created without specifying the permissions
    +

    add_perms

    0x1000 +

    permissions() adds the argument permission bits to the + file's current bits

    remove_perms0x2000 + permissions() removes the argument permission bits from the + file's current bits
    symlink_perms0x4000 + On POSIX permissions() resolves symlinks unless symlink_perms + is specified. + Meaningless on Windows as permissions() never resolves symlinks. + Meaningless on Mac OS X and some other BSD systems as permissions() + always resolves symlinks. Get over it.
    +

    Class file_status

    +
    $NAMESPACE_BEGIN;
    +      class file_status
    +      {
    +      public:
    +
    +        // constructors
    +        file_status() noexcept;
    +        explicit file_status(file_type ft, perms prms = perms_not_known) noexcept;
    +
    +        // compiler generated
    +        file_status(const file_status&) noexcept;
    +        file_status& operator=(const file_status&) noexcept;
    +       ~file_status() noexcept;
    +
    +        // observers
    +        file_type  type() const noexcept;
    +        perms      permissions() const noexcept;
    +
    +        // modifiers
    +        void       type(file_type ft) noexcept;
    +        void       permissions(perms prms) noexcept;
    +      };
    +$NAMESPACE_END;
    +

    An object of type file_status stores information about the type +and permissions of a file.

    +

    file_status +constructors

    +
    explicit file_status() noexcept;
    +
    +

    Postconditions: type() == status_error, + permissions() == perms_not_known.

    +
    +
    explicit file_status(file_type ft, perms prms = perms_not_known) noexcept;
    +
    +

    Postconditions: type() == ft, permissions() == + prms.

    +
    +

    file_status + observers

    +
    file_type type() const noexcept;
    +
    +

    Returns: The value of type() specified by the + postconditions of the most recent call to a constructor, operator=, or + type(file_type) function.

    +
    +
    perms permissions() const noexcept;
    +
    +

    Returns: The value of permissions() specified by the + postconditions of the most recent call to a constructor, operator=, or + permissions(perms) function.

    +
    +

    file_status modifiers

    +
    void type(file_type ft) noexcept;
    +
    +

    Postconditions: type() == ft.

    +
    +
    void permissions(perms prms) noexcept;
    +
    +

    Postconditions: permissions() == prms.

    +
    +

    Class directory_entry

    +
    +
    $NAMESPACE_BEGIN;
    +      class directory_entry
    +      {
    +      public:
    +
    +        // constructors and destructor
    +        directory_entry();
    +        directory_entry(const directory_entry&);
    +        explicit directory_entry(const path_type& p, file_status st=file_status(),
    +          file_status symlink_st=file_status());
    +       ~directory_entry(); 
    +
    +        // modifiers
    +        directory_entry& operator=(const directory_entry&);
    +        void assign(const path_type& p, file_status st=file_status(),
    +          file_status symlink_st=file_status());
    +        void replace_filename(const path& p, file_status st=file_status(),
    +          file_status symlink_st=file_status());
    +
    +        // observers
    +        const path&  path() const;
    +        file_status  status() const;
    +        file_status  status(system::error_code& ec) const;
    +        file_status  symlink_status() const;
    +        file_status  symlink_status(system::error_code& ec) const;
    +
    +        bool operator< (const directory_entry& rhs);
    +        bool operator==(const directory_entry& rhs); 
    +        bool operator!=(const directory_entry& rhs); 
    +        bool operator< (const directory_entry& rhs);
    +        bool operator<=(const directory_entry& rhs);
    +        bool operator> (const directory_entry& rhs);
    +        bool operator>=(const directory_entry& rhs);
    +      private:
    +        path_type            m_path;           // for exposition only
    +        mutable file_status  m_status;         // for exposition only; stat()-like
    +        mutable file_status  m_symlink_status; // for exposition only; lstat()-like
    +      };
    +
    +$NAMESPACE_END;
    +
    +

    A directory_entry object stores a path object, +a file_status object for non-symbolic link status, and a +file_status object for symbolic link status. The file_status +objects act as value caches.

    +
    +

    [Note: Because status()on a pathname may be a very expensive operation, +some operating systems provide status information as a byproduct of directory +iteration. Caching such status information can result is significant time savings. Cached and +non-cached results may differ in the presence of file system races. -- end note]

    +

    Actual cold-boot timing of iteration over +a directory with 15,047 entries was six seconds for non-cached status queries +versus one second for cached status queries. Windows XP, 3.0 GHz processor, with +a moderately fast hard-drive. Similar speedups are expected on Linux and BSD-derived +systems that provide status as a by-product of directory iteration.

    +
    +

    directory_entry constructors

    +
    directory_entry();
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path().empty()true
    status()file_status()
    symlink_status()file_status()
    +
    +
    explicit directory_entry(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()p
    status()st
    symlink_status()symlink_st
    +
    +

    directory_entry modifiers

    +
    void assign(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()p
    status()st
    symlink_status()symlink_st
    +
    +
    void replace_filename(const path& p, file_status st=file_status(), file_status symlink_st=file_status());
    +
    +

    Postcondition:

    + + + + + + + + + + + + + + + + + +
    ExpressionValue
    path()path().branch() / s
    status()st
    symlink_status()symlink_st
    +
    +

    directory_entry observers

    +
    const path& path() const;
    +
    +

    Returns: m_path

    +
    +
    file_status status() const;
    +file_status status(system::error_code& ec) const;
    +
    +

    Effects: +As if,

    +
    +
    if ( !status_known( m_status ) )
    +{
    +  if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
    +    { m_status = m_symlink_status; }
    +  else { m_status = status(m_path[, ec]); }
    +}
    +
    +

    Returns: m_status

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    file_status  symlink_status() const;
    +file_status  symlink_status(system::error_code& ec) const;
    +
    +

    + Effects: +As if,

    +
    +
    if ( !status_known( m_symlink_status ) )
    +{
    +  m_symlink_status = symlink_status(m_path[, ec]);
    +}
    +
    +

    Returns: + m_symlink_status

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    bool operator==(const directory_entry& rhs);
    +
    +

    Returns: m_path == + rhs.m_path.

    +
    +
    bool operator!=(const directory_entry& rhs);
    +
    +

    Returns: m_path != + rhs.m_path.

    +
    +
    bool operator< (const directory_entry& rhs);
    +
    +

    Returns: m_path < + rhs.m_path.

    +
    +
    bool operator<=(const directory_entry& rhs);
    +
    +

    Returns: m_path <= + rhs.m_path.

    +
    +
    bool operator> (const directory_entry& rhs);
    +
    +

    Returns: m_path > + rhs.m_path.

    +
    +
    bool operator>=(const directory_entry& rhs);
    +
    +

    Returns: m_path >= + rhs.m_path.

    +
    +

    Class directory_iterator

    +

    Objects of type directory_iterator provide standard library +compliant iteration over the contents of a directory. Also see class +recursive_directory_iterator.

    +
    $NAMESPACE_BEGIN;
    +      class directory_iterator
    +      {
    +      public:
    +        // member functions
    +
    +        directory_iterator() noexcept;  // creates the "end" iterator
    +        directory_iterator(const directory_iterator&);
    +        explicit directory_iterator(const path& p);
    +        directory_iterator(const path& p, system::error_code& ec);
    +       ~directory_iterator();
    +
    +        directory_iterator& operator=(const directory_iterator&);
    +
    +        directory_iterator& operator++();
    +        directory_iterator& increment(system::error_code& ec);
    +
    +        // other members as required by
    +        //  C++ Std, 24.1.1 Input iterators [input.iterators]
    +      };
    +
    +$NAMESPACE_END;
    +

    directory_iterator satisfies the requirements of an +input iterator (C++ Std, 24.2.1, Input iterators [input.iterators]).

    +

    A directory_iterator reads successive elements from the directory for +which it was constructed, as if by calling POSIX + +readdir_r(). After a directory_iterator is constructed, and every time +operator++ is called, +it reads a directory element and stores information about it in a object of type +directory_entry. +operator++ is not equality preserving; that is, i == j does not imply that +++i == ++j.

    +
    +

    [Note: The practical consequence of not preserving equality is that directory iterators +can only be used for single-pass algorithms. --end note]

    +
    +

    If the end of the directory elements is reached, the iterator becomes equal to +the end iterator value. The constructor directory_iterator() +with no arguments always constructs an end iterator object, which is the only +legitimate iterator to be used for the end condition. The result of +operator* on an end iterator is not defined. For any other iterator value +a const directory_entry& is returned. The result of +operator-> on an end iterator is not defined. For any other iterator value a const directory_entry* is +returned.

    +

    Two end iterators are always equal. An end iterator is not equal to a non-end +iterator.

    +
    +

    The above wording is based on the +Standard Library's istream_iterator wording.

    +
    +

    The result of calling the path() member of the +directory_entry object obtained by dereferencing a +directory_iterator is a reference to a path +object composed of the directory argument from which the iterator was +constructed with filename of the directory entry appended as if by +operator/=.

    +

    Directory iteration shall not yield directory entries for the current (dot) +and parent (dot dot) directories.

    +

    The order of directory entries obtained by dereferencing successive +increments of a directory_iterator is unspecified.

    +
    +

    [Note: Programs performing directory iteration may wish to test if the +path obtained by dereferencing a directory iterator actually exists. It could be +a +symbolic link to a non-existent file. Programs recursively +walking directory trees for purposes of removing and renaming entries may wish +to avoid following symbolic links.

    +

    If a file is removed from or added to a directory after the +construction of a directory_iterator for the directory, it is +unspecified whether or not subsequent incrementing of the iterator will ever +result in an iterator whose value is the removed or added directory entry. See +POSIX + +readdir_r(). +--end note]

    +
    +

    directory_iterator members

    + +

    directory_iterator() +noexcept;

    + +
    + +

    Effects: Constructs the end iterator.

    + +
    + +
    explicit directory_iterator(const path& p);
    +directory_iterator(const path& p, system::error_code& ec);
    +
    + +

    Effects: Constructs a iterator representing the first +entry in the directory p resolves to, if any; otherwise, the end iterator.

    + +

    Throws: As specified in + + Error reporting.

    + +

    [Note: To iterate over the current directory, use +directory_iterator(".") rather than directory_iterator(""). +-- end note]

    +
    +
    directory_iterator& operator++();
    +directory_iterator& increment(system::error_code& ec);
    +
    + +

    Effects: As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators]

    + +

    Returns: *this.

    + +

    Throws: As specified in + + Error reporting.

    + +
    +

    Class recursive_directory_iterator

    +

    Objects of type recursive_directory_iterator provide standard library +compliant iteration over the contents of a directory, including recursion into +its sub-directories.

    +
    $NAMESPACE_BEGIN;
    +      class recursive_directory_iterator :
    +        public iterator<input_iterator_tag, directory_entry>
    +      {
    +      public:
    +
    +        // constructors and destructor
    +        recursive_directory_iterator() noexcept;
    +        recursive_directory_iterator(const recursive_directory_iterator&);
    +        explicit recursive_directory_iterator(const path& p,
    +          symlink_option opt = symlink_option::none);
    +        recursive_directory_iterator(const path& p,
    +          symlink_option opt, system::error_code& ec);
    +        recursive_directory_iterator(const path& p, system::error_code& ec);
    +       ~recursive_directory_iterator();
    +
    +        // observers
    +        int level() const noexcept;
    +        bool no_push_pending() const noexcept;
    +
    +        // modifiers
    +        recursive_directory_iterator& operator=(const recursive_directory_iterator&);
    +
    +        recursive_directory_iterator& operator++();
    +        recursive_directory_iterator& increment(system::error_code& ec);
    +
    +        void pop();
    +        void no_push(bool value=true);
    +
    +        // other members as required by
    +        //  C++ Std, Input iterators [input.iterators]
    +
    +      private:
    +        // actual data members will probably be stored in a shared object,
    +        // or some similar mechanism, to achieve the required input iterator
    +        // copy semantics
    +        int            m_level;    // for exposition only
    +        bool           m_no_push;  // for exposition only
    +        symlink_option m_options;  // for exposition only
    +      };
    +
    +$NAMESPACE_END;
    + +

    The behavior of a recursive_directory_iterator is the same +as a directory_iterator unless otherwise specified.

    +
      +
    • Incrementing a recursive_directory_iterator pointing to a + directory causes that directory itself to be iterated ovee, as specified by + the operator++ and increment functions.
    • +
    • When a recursive_directory_iterator reaches the end of the directory currently being iterated + over, or when pop() is called, m_level is + decremented, and iteration of the parent directory continues.
    • +
    +
    recursive_directory_iterator() noexcept;
    +
    + +

    Effects: Constructs the end iterator.

    + +
    + +
    explicit recursive_directory_iterator(const path& p, symlink_option opt = symlink_option::none);
    +recursive_directory_iterator(const path& p, symlink_option opt, system::error_code& ec);
    +recursive_directory_iterator(const path& p, system::error_code& ec);
    +
    + +

    Effects:  Constructs a iterator representing the first +entry in the directory p resolves to, if any; otherwise, the end iterator.

    + +

    Postcondition: Unless the end iterator was constructed, +level() == 0 && no_push_pending() == false && m_options == opt. +For the signature without a symlink_option argument, opt +is assumed to be symlink_option::none.

    + +

    Throws: As specified in + + Error reporting.

    + +

    [Note: To iterate over the current directory, use recursive_directory_iterator(".") rather than +recursive_directory_iterator(""). +-- end note]

    + +

    [Note: By default, recursive_directory_iterator does not +follow directory symlinks. To follow directory symlinks, specify opt +as symlink_option::recurse +-- end note]

    +
    +
    int level() const noexcept;
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Returns: m_level.

    +
    +
    bool no_push_pending() const noexcept;
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Returns: m_no_push.

    +
    +
    recursive_directory_iterator& operator++();
    +recursive_directory_iterator& increment(system::error_code& ec);
    +
    + +

    Effects: As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators], +except:

    + +
      +
    • + +

      if !no_push_pending() && is_directory(this->status()) +&& (!is_symlink(this->symlink_status()) || (m_options +& symlink_option::recurse) != 0) then  m_level +is incremented and directory (*this)->path() is recursively iterated into.

      + +
    • +
    • if there are no more directory entries at this level then m_level +is decremented and iteration of the parent directory resumes.
    • +
    + +

    Postcondition: no_push_pending() == false.

    + +

    Returns: *this.

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    void pop();
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Effects: If level() == 0, set *this to recursive_directory_iterator(). + Otherwise, --m_level, cease iteration of the directory currently being + iterated over, and continue iteration over the parent directory.

    +
    +
    void no_push(bool value=true);
    +
    +

    Requires: *this != recursive_directory_iterator().

    +

    Postcondition: no_push_pending() == value.

    +

    [Note: no_push() is used to prevent + unwanted recursion into a directory. --end note]

    +
    +

    Operational functions

    +

    Operational functions query or modify files, including directories, in external +storage.

    +

    Operational functions access a file by resolving an +object of class path to a particular file in a file hierarchy. The +path is resolved as if by the POSIX + +Pathname Resolution mechanism.

    +

    [Note: Because hardware failures, network failures, +file system races, and many +other kinds of errors occur frequently in file system operations, users should be aware +that any filesystem operational function, no matter how apparently innocuous, may encounter +an error. See Error reporting. -- end note]

    +

    Operational function specifications

    +
    path absolute(const path& p, const path& base=current_path());
    +
    +

    Returns: A absolute path composed according to the + following table

    + + + + + + + + + + + + + + + + +
     p.has_root_directory()!p.has_root_directory()
    p.has_root_name()return preturn p.root_name() / + absolute(base).root_directory()
    + / absolute(base).relative_path() / p.relative_path()
    !p.has_root_name()return absolute(base).root_name()
    + / p
    return absolute(base) / p
    +

    [Note: For the returned path, rp, + rp.is_absolute() is true. -- end note]

    +

    Throws: If base.is_absolute() is true, throws only if + memory allocation fails.

    +
    +
    path canonical(const path& p, const path& base = current_path());
    +path canonical(const path& p, system::error_code& ec);
    +path canonical(const path& p, const path& base, system::error_code& ec);
    +
    +

    Overview: Converts p, which must exist, to an absolute +path that has no symbolic link, dot, +or dot-dot elements.

    +

    Returns: A canonical path that refers to +the same file system object as absolute(p,base). For the overload +without a base argument, base is current_path().

    +

    Throws:  As specified in + + Error reporting.

    + +

    Remarks: !exists(p) is an error.

    + +

    [Note: Canonical pathnames allow security checking of a path (eg. + does this path live in /home/goodguy or /home/badguy?)  -- end note]

    + +
    +
    void copy(const path& from, const path& to);
    +void copy(const path& from, const path& to, system::error_code& ec);
    +
    +

    Effects: As if

    + +
    +
    file_status s(symlink_status(from[, ec]));
    +if(is_symlink(s))
    +  copy_symlink(from, to[, ec]);
    +else if(is_directory(s))
    +  copy_directory(from, to[, ec]);
    +else if(is_regular_file(s))
    +  copy_file(from, to, copy_option::fail_if_exists[, ec]);
    +else
    + Report error as specified in Error reporting.
    +
    +

    Throws: As specified in + + Error reporting.

    + +
    +
    void copy_directory(const path& from, const path& to);
    +void copy_directory(const path& from, const path& to, system::error_code& ec);
    +
    +

    Effects:

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    void copy_file(const path& from, const path& to);
    +void copy_file(const path& from, const path& to, system::error_code& ec);
    +
    +

    Effects: copy_file(from, to, + copy_option::fail_if_exists[, ec]).

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    void copy_file(const path& from, const path& to, copy_option option);
    +void copy_file(const path& from, const path& to, copy_option option, system::error_code& ec);
    +
    +

    Effects: If option == copy_option::fail_if_exists + && exists(to), an error is reported. Otherwise, the contents and attributes of the file from + resolves to are copied to the file to resolves to.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void copy_symlink(const path& existing_symlink, const path& new_symlink);
    +void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
    +
    +

    Effects: create_symlink(read_symlink(existing_symlink[, ec]), + new_symlink[, ec]).

    + +

    Throws: As specified in + + Error reporting.

    + +
    +
    bool create_directories(const path& p);
    +bool create_directories(const path& p, system::error_code& ec);
    +
    +

    Requires: p.empty() ||
    + forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )
    +

    +

    Postcondition: is_directory(p)

    +

    Returns: The value of !exists(p) prior to the + establishment of the postcondition.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    bool create_directory(const path& p);
    +bool create_directory(const path& p, system::error_code& ec);
    +
    +

    Effects: Attempts to create the directory p resolves to, + as if by POSIX + mkdir() with a second argument of S_IRWXU|S_IRWXG|S_IRWXO.

    +

    Postcondition: is_directory(p)

    +

    Returns: true if a new directory was created, otherwise + false.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void create_directory_symlink(const path& to, const path& new_symlink);
    +void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +

    Effects: + Establishes the postcondition, as if by + POSIX + + + symlink().

    +

    + Postcondition: new_symlink resolves to a symbolic link file that + contains an unspecified representation of to.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: + Some operating systems, such as Windows, require symlink creation to + identify that the link is to a directory. Portable code should use + create_directory_symlink() to create directory symlinks rather than + create_symlink() -- end note]

    +

    [Note: + Some operating systems do not support symbolic links at all or support + them only for regular files. + Some file systems do not + support + symbolic links regardless of the operating system - the FAT file system used on + memory cards and flash drives, for example. -- end note]

    +
    +
    void create_hard_link(const path& to, const path& new_hard_link);
    +void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
    +
    +

    Effects: Establishes the postcondition, as if by + POSIX + + + link().

    +

    Postcondition:

    +
      +
    •  exists(to) && + exists(new_hard_link) && equivalent(to, + + new_hard_link)
    • +
    • The contents of the file or directory + to resolves to are unchanged.
    • +
    +

    Throws: As specified in + + Error reporting.

    +

    [Note: + Some operating systems do not support hard links at all or support + them only for regular files. Some file systems do not support hard + links regardless of the operating system - the FAT file system used on memory + cards and flash drives, for example. Some file systems limit the number of + links per file. -- end note]

    +
    +
    void create_symlink(const path& to, const path& new_symlink);
    +void create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
    +
    +

    Effects: + Establishes the postcondition, as if by + POSIX + + + symlink().

    +

    + Postcondition: new_symlink resolves to a symbolic link file that + contains an unspecified representation of to.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: + Some operating systems do not support symbolic links at all or support + them only for regular files. + Some file systems do not + support + symbolic links regardless of the operating system - the FAT system used on + memory cards and flash drives, for example. -- end note]

    +
    +
    path current_path();
    +path current_path(system::error_code& ec);
    +
    +

    Returns: The current working directory path, as if by POSIX + + + getcwd(). is_absolute() is true for the returned path.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: The + current_path() name was chosen to emphasize that the return is a + path, not just a single directory name.

    +

    The current path as returned by many operating systems is a dangerous + global variable. It may be changed unexpectedly by a third-party or system + library functions, or by another thread.  -- end note]

    +
    +
    void current_path(const path& p);
    +void current_path(const path& p, system::error_code& ec);
    +
    +

    Effects: + Establishes the postcondition, as if by + POSIX + + + chdir().

    +

    Postcondition: equivalent(p, current_path()).

    +

    Throws: As specified in + +Error reporting.

    +

    [Note: The current path for many operating systems is a dangerous + global state. It may be changed unexpectedly by a third-party or system + library functions, or by another thread.  -- end note]

    +
    +
    bool exists(file_status s) noexcept;
    +
    +

    Returns: + status_known(s) && s.type() != file_not_found

    +
    +
    bool exists(const path& p);
    +bool exists(const path& p, system::error_code& ec) noexcept;
    +
    +

    Returns: exists(status(p)) or exists(status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws +nothing.

    +
    +
    bool equivalent(const path& p1, const path& p2);
    +bool equivalent(const path& p1, const path& p2, system::error_code& ec);
    +
    +

    Effects: Determines file_status s1 + and s2, as if by status(p1) and  status(p2), + respectively.

    +

    Returns: true, if sf1 == + sf2 and p1 and p2 resolve to the same file + system entity, else false.

    +
    +

    Two paths are considered to resolve to the same + file system entity if two candidate entities reside on the same device at the + same location. This is determined as if by the values of the POSIX + + + stat structure, obtained as if by + + stat() for the two paths, having equal st_dev values + and equal st_ino values.

    +

    [Note: POSIX requires that "st_dev + must be unique within a Local Area Network". Conservative POSIX + implementations may also wish to check for equal st_size and + st_mtime values. Windows implementations may use + GetFileInformationByHandle() as a surrogate for stat(), + and consider "same" to be equal values for dwVolumeSerialNumber, + nFileIndexHigh, nFileIndexLow, nFileSizeHigh, + nFileSizeLow, ftLastWriteTime.dwLowDateTime, and + ftLastWriteTime.dwHighDateTime. -- end note]

    +
    +

    Throws: filesystem_error + if (!exists(s1) && !exists(s2)) || (is_other(s1) && is_other(s2)), + otherwise as specified in + + Error reporting.

    +
    +
    +
    uintmax_t file_size(const path& p);
    +uintmax_t file_size(const path& p, system::error_code& ec);
    +
    +
    +

    Returns: If exists(p) && is_regular_file(p), the size + in bytes + of the file p resolves to, determined as if by the value of + the POSIX + stat structure member st_size + obtained as if by POSIX + stat(). + Otherwise, static_cast<uintmax_t>(-1).

    +

    Throws: As specified in + + Error reporting.

    +
    +
    uintmax_t hard_link_count(const path& p);
    +uintmax_t hard_link_count(const path& p, system::error_code& ec);
    +
    + +

    Returns: The number of hard links for p.

    +

    Throws: As specified in + + Error reporting.

    + +
    + +
    const path& initial_path();
    +const path& initial_path(system::error_code& ec);
    +
    +

    Returns: + current_path() as of the first call to initial_path().

    +

    [Note: + initial_path() is not thread safe, and may return an undesirable result + if called subsequent to a change to the current directory. These problems can + be avoided by calling initial_path() immediately on entry to + main().  --end note]

    +

    Throws: For the first call, as specified in + + Error reporting. Subsequent calls throw nothing.

    +
    +
    bool is_directory(file_status s) noexcept;
    +
    +

    Returns: + s.type() == directory_file

    +
    +
    bool is_directory(const path& p);
    +bool is_directory(const path& p, system::error_code& ec) noexcept;
    +
    +

    Returns: is_directory(status(p)) or is_directory(status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws +nothing.

    +
    +
    bool is_empty(const path& p);
    +bool is_empty(const path& p, system::error_code& ec);
    +
    +

    Effects: Determines file_status s, as if by + status(p, ec).

    +

    Returns: is_directory(s)
    +         ? + directory_iterator(p) == directory_iterator()
    +         : file_size(p) == 0;

    +
    +
    bool is_regular_file(file_status s) noexcept;
    +
    +

    Returns: + s.type() == regular_file

    +
    +
    bool is_regular_file(const path& p);
    +
    +

    Returns: is_regular_file(status(p)).

    +

    Throws: filesystem_error + if status(p) would throw filesystem_error.

    +
    +
    bool is_regular_file(const path& p, system::error_code& ec) noexcept;
    +
    +

    Effects: Sets ec as if by status(p, ec). [Note: + status_error, + file_not_found + and + type_unknown + cases set ec + to error values. To distinguish between cases, call the + status + function directly. -- end + note]

    +

    Returns: is_regular_file(status(p, ec)).

    +
    +
    bool is_other(file_status s) noexcept;
    +
    +

    Returns: + return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)

    +
    +
    bool is_other(const path& p);
    +bool is_other(const path& p, system::error_code& ec) noexcept;
    +
    +

    Returns: is_other(status(p)) or is_other(status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws + nothing.

    +
    +
    bool is_symlink(file_status s) noexcept;
    +
    +

    Returns: + s.type() == symlink_file

    +
    +
    bool is_symlink(const path& p);
    +bool is_symlink(const path& p, system::error_code& ec) noexcept;
    +
    +

    Returns: is_symlink(symlink_status(p)) or is_symlink(symlink_status(p, ec)), + respectively.

    +

    Throws: filesystem_error; overload with error_code& throws + nothing.

    +
    +
    std::time_t last_write_time(const path& p);
    +std::time_t last_write_time(const path& p, system::error_code& ec);
    +
    +

    Returns: The time of last data modification of p, determined as if by the + value of the POSIX + stat structure member st_mtime  obtained + as if by POSIX + stat().

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void last_write_time(const path& p, const std::time_t new_time);
    +void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec);
    +
    +

    Effects: Sets the time of last data modification of the file + resolved to by p + to new_time, as if by POSIX + stat() + followed by POSIX + + utime().

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: A postcondition of last_write_time(p) == + new_time is not specified since it might not hold for file systems + with coarse time granularity. -- end note]

    +
    +
    void permissions(const path& p, perms prms);
    +void permissions(const path& p, perms prms, system::error_code& ec);
    +
    +

    + Requires: !((prms & add_perms) && (prms & remove_perms)).

    +

    Effects: Applies the effective permissions bits from + prms to the file p resolves to, as if by POSIX + + + fchmodat(). The effective permission bits are determined as + specified by the following table.

    + + + + + + + + + + + + + + + + + +
    bits present in prmsEffective bits applied
    Neither add_perms nor remove_permsprms & perms_mask
    add_perms +

    status(p).permissions() | (prms & + perms_mask) +

    remove_permsstatus(p).permissions() & ~(prms & + perms_mask) +
    +

    [Note: Conceptually permissions are viewed as bits, but the actual + implementation may use some other mechanism. -- end note]

    +

    Throws: As specified in + + Error reporting.

    +
    +
    path read_symlink(const path& p);
    +path read_symlink(const path& p, system::error_code& ec);
    +
    +

    Returns:  If p resolves to a symbolic + link, a path object containing the contents of that symbolic + link. Otherwise an empty path object.

    +

    Throws: As specified in + + Error reporting. [Note: It is an error if p does not + resolve to a symbolic link. -- end note]

    +
    +
    bool remove(const path& p);
    +bool remove(const path& p, system::error_code& ec);
    +
    +

    Effects:  If exists(symlink_status(p,ec)), it is + removed + as if by POSIX + remove().

    +
    +

    [Note: A symbolic link is itself removed, rather than the file it + resolves to being removed. -- end note]

    +
    +

    Postcondition: !exists(symlink_status(p)).

    +

    Returns:  false if p did not exist in the first + place, otherwise true.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    uintmax_t remove_all(const path& p);
    +uintmax_t remove_all(const path& p, system::error_code& ec);
    +
    +

    Effects:  Recursively deletes the contents of p if it exists, + then deletes file p itself, + as if by POSIX + remove().

    +
    +

    [Note: A symbolic link is itself removed, rather than the file it + resolves to being removed. -- end note]

    +
    +

    Postcondition: !exists(p)

    +

    Returns: The number of files removed.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    void rename(const path& old_p, const path& new_p);
    +void rename(const path& old_p, const path& new_p, system::error_code& ec);
    +
    +

    Effects: Renames old_p to new_p, as if by + POSIX + + rename().

    +
    +

    [Note: If old_p and new_p resolve to the + same existing file, no action is taken. Otherwise, if new_p resolves to an + existing non-directory file, it is removed, while if new_p resolves to an + existing directory, it is removed if empty on POSIX but is an error on Windows. A symbolic link is itself renamed, rather than + the file it resolves to being renamed. -- end note]

    +
    +

    Throws: As specified in + + Error reporting.

    +
    +
    void resize_file(const path& p, uintmax_t new_size);
    +void resize_file(const path& p, uintmax_t new_size, system::error_code& ec);
    +
    +

    Postcondition: file_size() == new_size.

    +

    Throws: As specified in + +Error reporting.

    +

    Remarks: Achieves its postconditions as if by + POSIX + + truncate().

    +
    +
    space_info space(const path& p);
    +space_info space(const path& p, system::error_code& ec);
    +
    +

    Returns: An object of type + space_info. The value of the space_info object is determined as if by + using POSIX + + statvfs() to obtain a POSIX struct + + statvfs, and then multiplying its f_blocks, + f_bfree, and f_bavail members by its f_frsize + member, and assigning the results to the capacity, free, + and available members respectively. Any members for which the + value cannot be determined shall be set to -1.

    +

    Throws: As specified in + + Error reporting.

    +
    +
    file_status status(const path& p);
    +
    +

    Effects: As if:

    +
    +
    system::error_code ec;
    +file_status result = status(p, ec);
    +if (result == status_error)
    +  throw filesystem_error(implementation-supplied-message, p, ec);
    +return result;
    +
    +

    Returns: See above.

    +

    Throws: filesystem_error. +[Note: result values of + file_status(file_not_found)and + file_status(type_unknown) are not considered failures and do not + cause an exception to be +thrown. -- end note]

    +
    +
    file_status status(const path& p, system::error_code& ec) noexcept;
    +
    +

    Effects:

    +
    +

    If possible, determines the attributes + of the file + p resolves to, as if by POSIX + stat().

    + If, during attribute determination, the underlying file system API reports + an error, sets ec to indicate the specific error reported. + Otherwise, ec.clear().
    +

    [Note: This allows users to inspect the specifics of underlying + API errors even when the value returned by status() is not + file_status(status_error)--end note]

    +
    +
    +

    Returns:

    +
    +

    If ec != error_code():

    +
      +
    • If the specific error indicates that p cannot be resolved + because some element of the path does not exist, return + file_status(file_not_found). [Note: POSIX errors that + indicate this are ENOENT or ENOTDIR. Windows equivalents + include ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, ERROR_INVALID_NAME, + ERROR_INVALID_PARAMETER, ERROR_BAD_PATHNAME, and ERROR_BAD_NETPATH. -- + end note]
    • +
    • Otherwise, if the specific error indicates that p can be resolved + but the attributes cannot be determined, return + file_status(type_unknown). [Note: For example, Windows + ERROR_SHARING_VIOLATION errors. For POSIX, the case never arises. -- end + note]
    • +
    • Otherwise, return + file_status(status_error).
    • +
    +
    +

    [Note: These semantics distinguish between + p being known not to exist, + p existing but not being able to determine its attributes, + and there being an error that prevents even knowing if + p exists. These + distinctions are important to some use cases. --end note]

    +
    +

    Otherwise,

    +
      +
    • If the attributes indicate a regular file, as if by POSIX S_ISREG(), + return + file_status(regular_file). [Note: +regular_file implies appropriate <fstream> operations + would succeed, assuming no hardware, permission, access, or file system + race + errors. Lack of +regular_file does not necessarily imply <fstream> operations would +fail on a directory. +-- end note]
    • +
    • Otherwise, if the attributes indicate a directory, as if by POSIX + S_ISDIR(), + return + file_status(directory_file). [Note: directory_file implies +directory_iterator(p)would succeed. +-- end note]
    • +
    • Otherwise, if the attributes indicate a block special file, as if by POSIX + S_ISBLK(), + return + file_status(block_file).
    • +
    • Otherwise, if the attributes indicate a character special file, as if by POSIX + S_ISCHR(), + return + file_status(character_file).
    • +
    • Otherwise, if the attributes indicate a fifo or pipe file, as if by POSIX + S_ISFIFO(), + return + file_status(fifo_file).
    • +
    • Otherwise, if the attributes indicate a socket, as if by POSIX + S_ISSOCK(), + return + file_status(socket_file).
    • +
    • Otherwise, return + file_status(type_unknown).
    • +
    +
    +

    Remarks: If a symbolic link is encountered during pathname + resolution, + pathname resolution continues using the contents of the symbolic link.

    +
    +
    bool status_known(file_status s) noexcept;
    +
    +

    Returns: + s.type() != status_error

    +
    +
    file_status symlink_status(const path& p);
    +file_status symlink_status(const path& p, system::error_code& ec) noexcept;
    +
    +

    Effects:  Same as status(), above, + except that the attributes + of + p are determined as if by POSIX + + lstat().

    +
    +
    +

    Returns: Same as status(), above, except + that if the attributes indicate a symbolic link, as if by POSIX + + S_ISLNK(), return file_status(symlink_file).

    +

    Remarks: Pathname resolution terminates if p names a symbolic link.

    +

    Throws: filesystem_error; overload with error_code& throws + nothing.

    +
    +
    path system_complete(const path& p);
    +path system_complete(const path& p, system::error_code& ec);
    +
    +

    Effects: Composes an absolute path from p, using the + same rules used by the operating system to resolve a path passed as the + filename argument to standard library open functions.

    +

    Returns: The composed path.

    +

    Postcondition: For the returned path, rp, + rp.is_absolute() is true.

    +

    Throws: As specified in + + Error reporting.

    +

    [Note: For POSIX, system_complete(p) has the same semantics as + complete(p, current_path()).

    +

    For Windows, system_complete(p) has the + same semantics as complete(ph, current_path()) if + p.is_absolute() || !p.has_root_name() or p and base have the same + root_name(). + Otherwise it acts like complete(p, kinky), where kinky + is the current directory for the p.root_name() drive. This will + be the current directory of that drive the last time it was set, and thus may + be residue left over from a prior program run by the command + processor! Although these semantics are often useful, they are also very + error-prone.

    +

    See + complete() note for usage suggestions. -- end note]

    +
    +
    path temp_directory_path();
    +path temp_directory_path(system::error_code& ec);
    +
    +

    Returns: A directory path suitable for temporary files under the + conventions of the operating system. The specifics of how this path is + determined are implementation defined. An error shall be reported if !exists(p) + || !is_directory(p), where p is the path to be returned.

    +

    POSIX: The path supplied by the first environment variable found in the + list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, "/tmp".

    +

    Windows: The path reported by the Windows GetTempPath API function.

    +

    Throws: As specified in + Error reporting.

    +

    [Note: The temp_directory_path() name was chosen to emphasize that the return is a + path, not just a single directory name.  -- end note]

    +
    +
    path unique_path(const path& model="%%%%-%%%%-%%%%-%%%%");
    +path unique_path(const path& model, system::error_code& ec);
    +
    +

    The unique_path function generates a path name suitable for + creating temporary files, including directories. The name is based + on a model that uses the percent sign character to specify replacement by a + random hexadecimal digit. [Note: The more bits of randomness in the + generated path name, the less likelihood of prior existence or being guessed. + Each replacement hexadecimal digit in the model adds four bits of randomness. + The default model thus provides 64 bits of randomness. This is sufficient for + most applications. --end note]

    +

    Returns: A path identical to model, except that each + occurrence of a percent sign character is replaced by a random hexadecimal + digit character in the range 0-9, a-f.

    +

    Throws: As specified in + + Error reporting.

    +

    Remarks: Implementations are encouraged to obtain the required + randomness via a + + cryptographically secure pseudo-random number generator, such as one + provided by the operating system. [Note: Such generators may block + until sufficient entropy develops. --end note]

    +
    +$snippet wording_suffix "$SNIPPET_FILE;" + +

    Path decomposition table

    +

    The table is generated by a program compiled with the Boost implementation.

    +

    Shaded entries indicate cases where POSIX and Windows +implementations yield different results. The top value is the +POSIX result and the bottom value is the Windows result.
    + +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Constructor
    argument
    Iteration
    over
    Elements
    string()generic_
    string()
    root_
    path()
    root_
    name()
    root_
    directory()
    relative_
    path()
    parent_
    path()
    filename()
    emptyemptyemptyemptyemptyemptyemptyemptyemptyempty
    ....emptyemptyempty.empty.
    ........emptyemptyempty..empty..
    foofoofoofooemptyemptyemptyfooemptyfoo
    /////empty/emptyempty/
    /foo/,foo/foo/foo/empty/foo/foo
    foo/foo,.foo/foo/emptyemptyemptyfoo/foo.
    /foo//,foo,./foo//foo//empty/foo//foo.
    foo/barfoo,barfoo/barfoo/baremptyemptyemptyfoo/barfoobar
    /foo/bar/,foo,bar/foo/bar/foo/bar/empty/foo/bar/foobar
    //net//net//net//net//net//netemptyemptyempty//net
    //net/foo//net,/,foo//net/foo//net/foo//net///net/foo//net/foo
    ///foo////,foo,.///foo//////foo////empty/foo//////foo.
    ///foo///bar/,foo,bar///foo///bar///foo///bar/empty/foo///bar///foobar
    /./,./././empty/./.
    ./.,.././emptyemptyempty./..
    /../,../../../empty/../..
    ../..,.../../emptyemptyempty../...
    foo/.foo,.foo/.foo/.emptyemptyemptyfoo/.foo.
    foo/..foo,..foo/..foo/..emptyemptyemptyfoo/..foo..
    foo/./foo,.,.foo/./foo/./emptyemptyemptyfoo/./foo/..
    foo/./barfoo,.,barfoo/./barfoo/./baremptyemptyemptyfoo/./barfoo/.bar
    foo/..foo,..foo/..foo/..emptyemptyemptyfoo/..foo..
    foo/../foo,..,.foo/../foo/../emptyemptyemptyfoo/../foo/...
    foo/../barfoo,..,barfoo/../barfoo/../baremptyemptyemptyfoo/../barfoo/..bar
    c:c:c:c:empty
    c:
    empty
    c:
    emptyc:
    empty
    emptyc:
    c:/c:,.
    c:,/
    c:/c:/empty
    c:/
    empty
    c:
    empty
    /
    c:/
    empty
    c:.
    /
    c:fooc:foo
    c:,foo
    c:fooc:fooempty
    c:
    empty
    c:
    emptyc:foo
    foo
    empty
    c:
    c:foo
    foo
    c:/fooc:,foo
    c:,/,foo
    c:/fooc:/fooempty
    c:/
    empty
    c:
    empty
    /
    c:/foo
    foo
    c:
    c:/
    foo
    c:foo/c:foo,.
    c:,foo,.
    c:foo/c:foo/empty
    c:
    empty
    c:
    emptyc:foo/
    foo/
    c:foo.
    c:/foo/c:,foo,.
    c:,/,foo,.
    c:/foo/c:/foo/empty
    c:/
    empty
    c:
    empty
    /
    c:/foo/
    foo/
    c:/foo.
    c:/foo/barc:,foo,bar
    c:,/,foo,bar
    c:/foo/barc:/foo/barempty
    c:/
    empty
    c:
    empty
    /
    c:/foo/bar
    foo/bar
    c:/foobar
    prn:prn:prn:prn:empty
    prn:
    empty
    prn:
    emptyprn:
    empty
    emptyprn:
    c:\c:\
    c:,/
    c:\c:\
    c:/
    empty
    c:\
    empty
    c:
    empty
    \
    c:\
    empty
    empty
    c:
    c:\
    \
    c:fooc:foo
    c:,foo
    c:fooc:fooempty
    c:
    empty
    c:
    emptyc:foo
    foo
    empty
    c:
    c:foo
    foo
    c:\fooc:\foo
    c:,/,foo
    c:\fooc:\foo
    c:/foo
    empty
    c:\
    empty
    c:
    empty
    \
    c:\foo
    foo
    empty
    c:\
    c:\foo
    foo
    c:foo\c:foo\
    c:,foo,.
    c:foo\c:foo\
    c:foo/
    empty
    c:
    empty
    c:
    emptyc:foo\
    foo\
    empty
    c:foo
    c:foo\
    .
    c:\foo\c:\foo\
    c:,/,foo,.
    c:\foo\c:\foo\
    c:/foo/
    empty
    c:\
    empty
    c:
    empty
    \
    c:\foo\
    foo\
    empty
    c:\foo
    c:\foo\
    .
    c:\foo/c:\foo,.
    c:,/,foo,.
    c:\foo/c:\foo/
    c:/foo/
    empty
    c:\
    empty
    c:
    empty
    \
    c:\foo/
    foo/
    c:\foo.
    c:/foo\barc:,foo\bar
    c:,/,foo,bar
    c:/foo\barc:/foo\bar
    c:/foo/bar
    empty
    c:/
    empty
    c:
    empty
    /
    c:/foo\bar
    foo\bar
    c:
    c:/foo
    foo\bar
    bar
    +

    Warning: Long paths on Windows and the +extended-length \\?\ prefix

    +

    The Microsoft Windows "Maximum Path Length Limitation" specifies:

    +
    +

    In the Windows API (with some exceptions ...), the maximum length for a path +is MAX_PATH, which is defined as 260 characters.

    +

    The Windows API has many functions that also have Unicode versions to permit +an extended-length path for a maximum total path length of 32,767 characters. +... To specify an extended-length path, use the "\\?\" prefix. For +example, "\\?\D:\very long path".  +[C++ string literals require backslashes be doubled, of course.]

    +
    +

    Because most Boost.Filesystem operational functions just pass the contents of +a class path object to the Windows API, they do work with the extended-length +prefixes. But some won't work, because to the limitations imposed by Windows. +Read the following cautions carefully!

    +

    Cautions for paths with extended-length prefixes

    +
      +
    • Individual components of a path are still are limited to whatever is + supported for the particular filesystem, commonly 255 characters.
    • +
    • Only backslashes only are acceptable as directory separators. Slashes are + not treated as separators.
    • +
    • All paths must be absolute - relative paths are not allowed.
    • +
    • Once an absolute path grows beyond 260 characters, it is essentially + poisoned and all operations must use extended-length prefixes. So even a + simple operation like create_directory("a") will fail if the + absolute path of the resulting directory would exceed 260 characters.
    • +
    • Certain Boost.Filesystem functions that decompose their argument path and + then work on individual relative directories or files will not work properly + with extended-length prefix paths.
    • +
    +

    Acknowledgements

    +

    This Filesystem Library is dedicated to my wife, Sonda, who provided the +support necessary to see both a trial implementation and the proposal itself +through to completion. She gave me the strength to continue after a difficult +year of cancer treatment in the middle of it all.

    +

    Many people contributed technical comments, ideas, and suggestions to the +Boost Filesystem Library. See + +http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements.

    +

    Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas +Witt were particularly helpful in refining the library.

    +

    The create_directories, extension, basename, and replace_extension functions +were developed by Vladimir Prus. The temp_directory_path function was +contributed by Jeff Flinn. David Svoboda suggested the canonical function and +provided psuedo-code.

    +

    Howard Hinnant and John Maddock reviewed a draft of the version 2 proposal, and +identified a number of mistakes or weaknesses, resulting in a more polished +final document.

    +

    Peter Dimov suggested a single class path, with member templates to adapt to +multiple string types. His idea became the basis for the version 3 path design.

    +

    References

    + + + + + + + + + +
    [ISO-POSIX]ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group + Base Specifications, Issue 6. Also known as The Single Unix® + Specification, Version 3. Available from each of the organizations involved + in its creation. For example, read online or download from + + www.unix.org/single_unix_specification/. The ISO JTC1/SC22/WG15 - + POSIX homepage is + www.open-std.org/jtc1/sc22/WG15/
    [Abrahams]Dave Abrahams, Error and Exception Handling, + + www.boost.org/more/error_handling.html
    +
    +$snippet backmatter "$SNIPPET_FILE;" + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/src/tr2_snippets.html b/external/libs/filesystem/v3/doc/src/tr2_snippets.html new file mode 100644 index 0000000..d01df92 --- /dev/null +++ b/external/libs/filesystem/v3/doc/src/tr2_snippets.html @@ -0,0 +1,310 @@ + + + + + + +New Page 1 + + + + +$id frontmatter= + + + + + + + + + + + + + + + + + +
    Document number:N3335=12-0025
    Date: + 2012-01-13
    Project:Programming Language C++, Library Working Group
    Reply-to:Beman Dawes <bdawes at acm dot org>
    + + +

    Filesystem Library for C++11/TR2 (Revision 1)

    + + +

    This paper proposes that the filesystem library component of C++ Standard +Library Technical Report 2 be based on Version 3 of the Boost Filesystem +Library (see +www.boost.org/libs/filesystem). Preliminary wording is provided. A +TODO list identifies remaining work to be done.

    + + +

    Revision history

    + + +

    +N3335=12-0025, Filesystem Library for C++11/TR2 (Revision 1). Changes +include:

    + + +
      +
    • Regenerated the proposed wording from the Boost Filesystem library + reference documentation, using an automated process. This process reduces + the likelihood of inadvertent discrepancies between descriptions.
    • +
    • An Issues list was added, seeded with issues + raised by the LWG review of N3239 at the Bloomington meeting, and private + communications from LWG members.
    • +
    • Namespace changed to files as an experiment. Made this + issue number 1 so the LWG can pass judgement.
    • +
    • New functions were added, suggested by David Svoboda, to generate + canonical paths and manage permissions.
    • +
    • More C++11 functionality was applied. This process is still incomplete, + however.
    • +
    • Added proposed changes to header <fstream>. The previous paper had + inadvertently supplied the wrong wording.
    • +
    • Continued the general cleanup of wording.
    • +
    + + +

    +N3239 = 11-0009, Filesystem Library Update for TR2 (Preliminary), reflected +changes made to the Boost library version 3 since the previously accepted +committee paper:

    + + +
      +
    • A single class path handles all aspects of + internationalization, replacing the previous template and its path + and wpath instantiations. Character types char, + wchar_t, char16_t, and char32_t are + supported. This is a major simplification of the path abstraction, + particularly for functions that take path arguments. This change was based + on a suggestion by Peter Dimov.
    • +
    • Several operational functions have been added, including much better + symlink support, the ability to resize a file, and the ability to generate a + unique path.
    • +
    • Support for error reporting via error_code is now uniform + throughout the operations functions.
    • +
    • Several functions have been renamed, based on feedback from users.
    • +
    + + +

    +N1975 = 06-0045, Filesystem Library Proposal for TR2 (Revision 3), was +adopted by the committee in April, 2006, at the Berlin meeting. Shortly +afterward the Library Working Group set aside work on TR2 to concentrate on +C++0x.

    + + +

    Motivation and Scope

    + + +

    The motivation and scope for a filesystem library were described in +N1975, and are not repeated here. A minor scope reduction is that an +addition to the current C++ runtime library is no longer needed.

    + + +

    Boost Filesystem Version 3 introduced a single path type that interoperates well with both +basic_string and user defined string types. Thus the following Design +alternatives paragraph is no long applicable:

    + + +
    + + +

    Single path type which can at runtime accept narrow or wide character +pathnames. Although certainly interesting, and possibly superior, such a +design would not interoperate well with the current Standard Library's +compile-time typed basic_string. A new runtime polymorphic string +class would be the best place to experiment with this concept, not a path class.

    + + +
    + + +

    TODO

    +
      +
    • Apply more C++0X features. Boost.Filesystem needs to implement these to verify their + application is correct.
    • +
    • Boost.Filesystem needs to implement char16_t and char32_t support to verify the + specification for these is correct.
    • +
    • Replace path inserter and extractor Effects with prose, since the + current wording relies on + boost::io::quoted.
    • +
    • The Boost implementation has more class path non-member relational + functions that shown in the docs, and the specific set of relational + functions varies between Windows and POSIX. Figure out what's happening and + document it.
    • +
    • Source is not specified as actually + implemented. Expose path_traits?
    • +
    • Effects for copy and copy_directory + need to be reviewed, revised, tested, peer reviewed.
    • +
    • Review changes to header <fstream>. Add semantics. Add section + names. Verify still in sync with WP.
    • +
    + + $endid + +$id wording_prefix= +

    Proposed Wording

    + +

    +Gray-shaded italic text is commentary on the proposal. It is not to be added to +the TR.

    +

    Add the following +to the Technical Report's front matter:

    +

    The following standard contains provisions which, through reference in this +text, constitute provisions of this Technical Report. At the time of +publication, the editions indicated were valid. All standards are subject to +revision, and parties to agreements based on this Technical Report are +encouraged to investigate the possibility of applying the most recent editions +of the standard indicated below. Members of IEC and ISO maintain registers of +currently valid International Standards.

    +
      +
    • ISO/IEC 9945:2003, Portable Operating System Interface (POSIX1), + part 1 (Base Definitions) and part 2 (System Interfaces), both as + corrected by their respective 2004 Correction 1 documents.

      [Note: + ISO/IEC 9945:2003 is also IEEE Std 1003.1-2001, and The Open Group Base + Specifications, Issue 6, and is also known as The Single Unix2 + Specification, Version 3. It is available from each of those + organizations, and may be read online or downloaded from + + www.unix.org/single_unix_specification/ -- end note]

    • +
    +

    ISO/IEC 9945:2003, with the indicated corrections, is hereinafter called +POSIX.

    +

    Footnote 1: POSIX® is a registered trademark +of The IEEE.

    +

    Footnote 2: UNIX® is a registered trademark +of The Open Group.

    +

    Add the following +to the Technical Report as a new Clause:

    +

    Filesystem Library

    + +$endid + +$id wording_suffix= +

    End of new +Clause.

    +

    Modify File streams +[fstreams] as follows:

    +

    To class +basic_filebuf public members add:

    +
    +
    basic_filebuf<charT,traits>* open(const path& p, std::ios_base::openmode mode);
    + +
    +

    To class +basic_ifstream public members add:

    + +
    +
    explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in)
    + +
    void open(const path& p, std::ios_base::openmode mode=std::ios_base::in);
    + +
    +

    To class +basic_ofstream public members add:

    + +
    +
    explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out);
    +
    void open(const path& p, std::ios_base::openmode mode=std::ios_base::out);
    +
    +

    To class +basic_fstream public members add:

    +
    +
    explicit basic_fstream(const path& p,
    +  std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
    +
    void open(const path& p,
    +  std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
    +
    +

    + + +End of proposed wording.

    +
    +

    Issues List

    +
    +

    Issue 1: What is the appropriate namespace?

    +

    Discussion

    +

    The proposal places the library in namespace std::tr2::$SUBNAMESPACE;. +Rationale for a sub-namespace is that the library uses several names that don't +seem appropriate for namespace tr2 since full standardization would +then put the names into std. The function names remove +and rename are of particular concern because these functions differ +in behavior from current standard library functions with those names. It also +doesn't seem desirable to preempt names like equivalent and +status.

    +

    The Boost Filesystem library used namespace boost::filesystem, +but that always seemed a bit too long.

    +

    Proposed resolution

    +

    Status quo. Leave in namespace std::tr2::$SUBNAMESPACE;.

    +
    +

    Issue 2: Excessive use of const codecvt_type& arguments

    +

    Discussion

    +

    Users sometimes need to do path conversions that use something other than the +imbued codecvt facet. The need is particularly acute in multi-threaded +applications where changing the imbued facet would introduce a data race. That +said, providing an optional const codecvt_type& argument for every +function where the need might possibly arise is excessive because its use is so +rare and it adds considerable interface clutter.

    +

    Proposed resolution

    +

    Remove all existing class path const codecvt_type& +arguments.

    +

    Add an additional non-member function:

    +
    +
    unspecified-iterator-type convert(const path& p, const codecvt_type& codecvt);
    +

    Returns: An unspecified iterator type whose value type is + path::value_type. The returned iterator points to the beginning + of a sequence equivalent to p.native() with encoding as specified + by codecvt.

    +
    +
    +

    Issue 3: Possible "implicit cast to native type"?

    +

    Discussion

    +

    In Bloomington there was discussion of "implicit cast to implicit cast to +native OS type to inter operate with existing iostream library and native +functions instead of modifying fstream".

    +

    Beman comments: I wasn't in Bloomington and am not sure of the context of the +above. N3239 inadvertently included the Boost docs for <fstream> rather than +suggested <fstream> changes for TR2, and that may have caused some confusion. Or +maybe I'm just missing something from the wiki notes. Some further discussions +are needed to better define the issue.

    +

    Proposed resolution

    +
    +

    Issue 4: Given move semantics, it is best not to return const strings.

    +

    Discussion

    +

    The issue title pretty much says it all.

    +

    Proposed resolution

    +

    As part of the C++11 refinements to the interface, review returns of const +strings and change to plain strings where appropriate.

    +
    +

    Issue 5: Is there a way to handle characters that are illegal for particular +OS?

    +

    Discussion

    +

    Question raised by Pablo in Bloomington.

    +

    Proposed resolution

    +

    Beman suggests NAD, Future. I've done some work on this, including looking at +systems like OpenVMS that have an escape mechanism to handle otherwise +unrepresentable characters. There was a comment to that effect in N3239. I +believe it should be deferred to some future release since (1) it is complex +enough that I'd like to see actual implementation and use experience (presumably +via Boost), and (2) I can't recall a user ever requesting such a feature.

    +
    +

    Issue 6: Could allocator support be class path?

    +

    Discussion

    +

    Question raised by a committee member in private email.

    +

    Comment from Beman: How would allocator support work, given that class path +is not a template?

    +

    Proposed resolution

    +
    +

    $endid + +$id backmatter= +$endid

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/tutorial.html b/external/libs/filesystem/v3/doc/tutorial.html new file mode 100644 index 0000000..f275cb6 --- /dev/null +++ b/external/libs/filesystem/v3/doc/tutorial.html @@ -0,0 +1,1128 @@ + + + + + + + +Filesystem Tutorial + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Tutorial +
    + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    +

    + Introduction
    + Preliminaries
    + Reporting the size of a file - (tut1.cpp)
    + Using status queries to determine file existence and type - (tut2.cpp)
    + Directory iteration plus catching + exceptions - (tut3.cpp)
    + Using path decomposition, plus sorting results - (tut4.cpp)
    + Class path: Constructors, including + Unicode - (tut5.cpp)
    + Class path: Generic format vs. Native format
    + Class path: Iterators, observers, composition, decomposition, and query - (path_info.cpp)
    + Error reporting
    +

    +

    Introduction

    + +

    This tutorial develops a little command line program to list information +about files and directories - essentially a much simplified version of the POSIX ls or Windows dir +commands. We'll start with the simplest possible version and progress to more +complex functionality. Along the way we'll digress to cover topics you'll need +to know about to understand Boost.Filesystem.

    + +

    Source code for each of the tutorial programs is available, and you +are encouraged to compile, test, and experiment with it. To conserve space, we won't +always show boilerplate code here, but the provided source is complete and +ready to build.

    + +

    Preliminaries

    + +

    Install the Boost distribution if you haven't already done so. See the +Boost Getting +Started docs.

    + +

    This tutorial assumes you are going to compile and test the examples using +the provided scripts. That's highly recommended.

    + +
    + +

    If you are planning to compile and test the examples but not use the +scripts, make sure your build setup knows where to +locate or build the Boost library binaries.

    + +
    +

    Fire up your command line interpreter, and type the following commands:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ cd boost-root/libs/filesystem/example/test
    +$ ./setup
    +$ ./bld
    +$ ./tut1
    +Usage: tut1 path
    +
    +
    >cd boost-root\libs\filesystem\example\test
    +>setup
    +>bld
    +>tut1
    +Usage: tut1 path
    +
    + +

    If the tut1 command outputs "Usage: tut1 path", all +is well. A set of tutorial programs has been copied (by setup) to +boost-root/libs/filesystem/example/test +and then built. You are encouraged to modify and experiment with them as the +tutorial progresses. Just invoke the bld script again to rebuild.

    + +

    If something didn't work right, here are troubleshooting suggestions:

    + +
      +
    • The bjam program executable isn't being found. + Check your path environmental variable if it should have been found, + otherwise see + Boost + Getting Started.
    • +
    • Look at bjam.log to try to spot an indication of the + problem.
    • +
    + +

    Reporting the size of a file - (tut1.cpp)

    + +

    Let's get started. One of the simplest things we can do is report the size of +a file.

    + + + + + +
    +
    tut1.cpp
    +
    +
    #include <iostream>
    +#include <boost/filesystem.hpp>
    +using namespace boost::filesystem;
    +
    +int main(int argc, char* argv[])
    +{
    +  if (argc < 2)
    +  {
    +    std::cout << "Usage: tut1 path\n";
    +    return 1;
    +  }
    +  std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
    +  return 0;
    +}
    +
    +
    + +

    The Boost.Filesystem file_size +function returns a uintmax_t +containing the size of the file named by the argument. The declaration looks +like this:

    + +
    +
    uintmax_t file_size(const path& p);
    +
    +

    For now, all you need to know is that class path has constructors that take +const char * and many other useful types. (If you can't wait to +find out more, skip ahead to the class path section of +the tutorial.)

    +

    Please take a minute to try out tut1 on your system, using a +file that is known to exist, such as tut1.cpp. Here is what the +results look like on two different operating systems:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut1 tut1.cpp
    +tut1.cpp 569
    +
    $ ls -l tut1.cpp
    +-rwxrwxrwx 1 root root 569 2010-02-01 07:31 tut1.cpp
    +
    +
    >tut1 tut1.cpp
    +tut1.cpp 592
    +>dir tut1.cpp
    +...
    +01/30/2010 10:47 AM 592 tut1.cpp
    +...
    +
    + +

    So far, so good. The reported Linux and Windows sizes are different because +the Linux tests used "\n" line endings, while the Windows tests +used "\r\n" line endings.

    +

    Now try again, but give a path that doesn't exist:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut1 foo
    +terminate called after throwing an instance of 'boost::exception_detail::
    +clone_impl<boost::exception_detail::error_info_injector<boost::
    +filesystem::filesystem_error> >'
    +  what(): boost::filesystem::file_size: No such file or directory: "foo"
    +Aborted
    +
    +
    >tut1 foo
    +

    An exception is thrown; the exact form of the response depends on + Windows system options.

    + +

    What happens? + There's no file named foo in the current directory, so an +exception is thrown.

    +

    Try this:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut1 .
    +terminate called after throwing an instance of 'boost::exception_detail::
    +clone_impl<boost::exception_detail::error_info_injector<boost::
    +filesystem::filesystem_error> >'
    +  what(): boost::filesystem::file_size: Operation not permitted "."
    +Aborted
    +
    +
    >tut1 .
    +

    An exception is thrown; the exact form of the response depends on + Windows system options.

    + +

    The current directory exists, but file_size() works on regular + files, not directories, so again, an exception is thrown.

    + +

    We'll deal with those situations in tut2.cpp.

    + +

    Using status queries to determine file existence and type - (tut2.cpp)

    + +

    Boost.Filesystem includes status query functions such as +exists, +is_directory, and +is_regular_file. These return +bool's, and will return true if the condition +described by their name is met. Otherwise they return false, +including when any element +of the path argument can't be found.

    + +

    tut2.cpp uses several of the status query functions to cope with non-existent +files and with different kinds of files:

    + + + + + +
    +
    tut2.cpp
    +
    +
    int main(int argc, char* argv[])
    +{
    +  path p (argv[1]);   // p reads clearer than argv[1] in the following code
    +
    +  if (exists(p))    // does p actually exist?
    +  {
    +    if (is_regular_file(p))        // is p a regular file?   
    +      cout << p << " size is " << file_size(p) << '\n';
    +
    +    else if (is_directory(p))      // is p a directory?
    +      cout << p << "is a directory\n";
    +
    +    else
    +      cout << p << "exists, but is neither a regular file nor a directory\n";
    +  }
    +  else
    +    cout << p << "does not exist\n";
    +
    +  return 0;
    +}
    +
    +
    + +

    Give it a try:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut2 tut2.cpp
    +tut2 size is cpp 1037
    +$ ./tut2 foo
    +foo does not exist
    +$ ./tut2 .
    +. is a directory
    +
    +
    >tut2 tut2.cpp
    +tut2.cpp size is 1079
    +
    +>tut2 foo
    +foo does not exist
    +
    +>tut2 .
    +. is a directory
    +
    + +

    Although tut2 works OK in these tests, the output is less than satisfactory +for a directory. We'd typically like to see a list of the directory's contents. In tut3.cpp +we will see how to iterate over directories.

    + +

    But first, let's try one more test:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ls /home/jane/foo
    +ls: cannot access /home/jane/foo: Permission denied
    +$ ./tut2 /home/jane/foo
    +terminate called after throwing an instance of 'boost::exception_detail::
    +clone_impl<boost::exception_detail::error_info_injector<boost::
    +filesystem::filesystem_error> >'
    +   what(): boost::filesystem::status: Permission denied:
    +     "/home/jane/foo"
    +Aborted
    +
    +
    >dir e:\
    +The device is not ready.
    +>tut2 e:\
    +

    An exception is thrown; the exact form of the response depends on + Windows system options.

    + +

    On the Linux system, the test was being run from an account that did not have +permission to access /home/jane/foo. On the Windows system, +e: was a Compact Disc reader/writer that was not ready. End users +shouldn't have to interpret cryptic exceptions reports, so as we move on to tut3.cpp +we will increase the robustness of the code, too.

    + +

    Directory iteration plus catching +exceptions - (tut3.cpp)

    + +

    Boost.Filesystem's +directory_iterator class is just what we need here. It follows the +general pattern of the standard library's istream_iterator. Constructed from +a path, it iterates over the contents of the directory. A default constructed directory_iterator +acts as the end iterator.

    + +

    The value type of directory_iterator is +directory_entry. A +directory_entry object contains a path and file_status +information.  A +directory_entry object +can be used directly, but can also be passed to path arguments in function calls.

    + +

    The other need is increased robustness in the face of the many kinds of +errors that can affect file system operations. We could do that at the level of +each call to a Boost.Filesystem function (see Error +reporting), but it is easier to supply an overall try/catch block.

    + + + + + +
    +
    tut3.cpp
    +
    +
    int main(int argc, char* argv[])
    +{
    +  path p (argv[1]);   // p reads clearer than argv[1] in the following code
    +
    +  try
    +  {
    +    if (exists(p))    // does p actually exist?
    +    {
    +      if (is_regular_file(p))        // is p a regular file?   
    +        cout << p << " size is " << file_size(p) << '\n';
    +
    +      else if (is_directory(p))      // is p a directory?
    +      {
    +        cout << p << " is a directory containing:\n";
    +
    +        copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type
    +          ostream_iterator<directory_entry>(cout, "\n")); // is directory_entry, which is
    +                                                          // converted to a path by the
    +                                                          // path stream inserter
    +      }
    +
    +      else
    +        cout << p << " exists, but is neither a regular file nor a directory\n";
    +    }
    +    else
    +      cout << p << " does not exist\n";
    +  }
    +
    +  catch (const filesystem_error& ex)
    +  {
    +    cout << ex.what() << '\n';
    +  }
    +
    +  return 0;
    +}
    +
    +
    + +

    Give tut3 a try, passing it a path to a directory as a command line argument. +Here is a run on a checkout of the Boost Subversion trunk, followed by a repeat +of the test cases that caused exceptions on Linux and Windows:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut3 ~/boost/trunk
    +/home/beman/boost/trunk is a directory containing:
    +  /home/beman/boost/trunk/tools
    +  /home/beman/boost/trunk/boost-build.jam
    +  /home/beman/boost/trunk/dist
    +  /home/beman/boost/trunk/doc
    +  /home/beman/boost/trunk/bootstrap.sh
    +  /home/beman/boost/trunk/index.html
    +  /home/beman/boost/trunk/bootstrap.bat
    +  /home/beman/boost/trunk/boost.css
    +  /home/beman/boost/trunk/INSTALL
    +  /home/beman/boost/trunk/rst.css
    +  /home/beman/boost/trunk/boost
    +  /home/beman/boost/trunk/people
    +  /home/beman/boost/trunk/wiki
    +  /home/beman/boost/trunk/boost.png
    +  /home/beman/boost/trunk/LICENSE_1_0.txt
    +  /home/beman/boost/trunk/more
    +  /home/beman/boost/trunk/Jamroot
    +  /home/beman/boost/trunk/.svn
    +  /home/beman/boost/trunk/libs
    +  /home/beman/boost/trunk/index.htm
    +  /home/beman/boost/trunk/status
    +  /home/beman/boost/trunk/CMakeLists.txt
    +
    +
    >tut3 c:\boost\trunk
    +c:\boost\trunk is a directory containing:
    +   c:\boost\trunk\.svn
    +   c:\boost\trunk\boost
    +   c:\boost\trunk\boost-build.jam
    +   c:\boost\trunk\boost.css
    +   c:\boost\trunk\boost.png
    +   c:\boost\trunk\bootstrap.bat
    +   c:\boost\trunk\bootstrap.sh
    +   c:\boost\trunk\CMakeLists.txt
    +   c:\boost\trunk\dist
    +   c:\boost\trunk\doc
    +   c:\boost\trunk\index.htm
    +   c:\boost\trunk\index.html
    +   c:\boost\trunk\INSTALL
    +   c:\boost\trunk\Jamroot
    +   c:\boost\trunk\libs
    +   c:\boost\trunk\LICENSE_1_0.txt
    +   c:\boost\trunk\more
    +   c:\boost\trunk\people
    +   c:\boost\trunk\rst.css
    +   c:\boost\trunk\status
    +   c:\boost\trunk\tools
    +   c:\boost\trunk\wiki
    +
    +>tut3 e:\
    +boost::filesystem::status: The device is not ready: "e:\"
    +
    + +

    Not bad, but we can make further improvements:

    + +
      +
    • The listing would be much easier to read if only the filename was + displayed, rather than the full path.
    • +
    • The Linux listing isn't sorted. That's because the ordering of + directory iteration is unspecified. Ordering depends on the underlying + operating system API and file system specifics. So we need to sort the + results ourselves.
    • +
    + +

    Move on to tut4.cpp to see how those changes play out!

    + +

    Using path decomposition, plus sorting results - (tut4.cpp)

    + + + + + +
    +
    tut4.cpp
    +
    +
    int main(int argc, char* argv[])
    +{
    +  path p (argv[1]);   // p reads clearer than argv[1] in the following code
    +
    +  try
    +  {
    +    if (exists(p))    // does p actually exist?
    +    {
    +      if (is_regular_file(p))        // is p a regular file?   
    +        cout << p << " size is " << file_size(p) << '\n';
    +
    +      else if (is_directory(p))      // is p a directory?
    +      {
    +        cout << p << " is a directory containing:\n";
    +
    +        typedef vector<path> vec;             // store paths,
    +        vec v;                                // so we can sort them later
    +
    +        copy(directory_iterator(p), directory_iterator(), back_inserter(v));
    +
    +        sort(v.begin(), v.end());             // sort, since directory iteration
    +                                              // is not ordered on some file systems
    +  
    +        for (vec::const_iterator it (v.begin()); it != v.end(); ++it)
    +        {
    +          cout << "   " << *it << '\n';
    +        }
    +      }
    +
    +      else
    +        cout << p << " exists, but is neither a regular file nor a directory\n";
    +    }
    +    else
    +      cout << p << " does not exist\n";
    +  }
    +
    +  catch (const filesystem_error& ex)
    +  {
    +    cout << ex.what() << '\n';
    +  }
    +
    +  return 0;
    +}
    +
    +
    + +

    The key difference between tut3.cpp and tut4.cpp is + what happens in the directory iteration loop. We changed:

    +
    +
    cout << " " << *it << '\n';   // *it returns a directory_entry,
    +
    +

    to:

    +
    +
    path fn = it->path().filename();   // extract the filename from the path
    +v.push_back(fn);                   // push into vector for later sorting
    +
    +

    path() + is a directory_entry observer function. + filename() is one of + several path decomposition functions. It extracts the filename portion ("index.html") + from a path ("/home/beman/boost/trunk/index.html"). These decomposition functions are + more fully explored in the Path iterators, observers, + composition, decomposition and query portion of this tutorial.

    +

    The above was written as two lines of code for clarity. It could have + been written more concisely as:

    +
    +
    v.push_back(it->path().filename()); // we only care about the filename
    +
    +

    Here is the output from a test of tut4.cpp:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut4 ~/boost/trunk
    +/home/beman/boost/trunk is a directory containing:
    +  .svn
    +  CMakeLists.txt
    +  INSTALL
    +  Jamroot
    +  LICENSE_1_0.txt
    +  boost
    +  boost-build.jam
    +  boost.css
    +  boost.png
    +  bootstrap.bat
    +  bootstrap.sh
    +  doc
    +  index.htm
    +  index.html
    +  libs
    +  more
    +  people
    +  rst.css
    +  status
    +  tools
    +  wiki
    +
    +
    C:\v3d>tut4 c:\boost\trunk
    +c:\boost\trunk is a directory containing:
    +  .svn
    +  CMakeLists.txt
    +  INSTALL
    +  Jamroot
    +  LICENSE_1_0.txt
    +  boost
    +  boost-build.jam
    +  boost.css
    +  boost.png
    +  bootstrap.bat
    +  bootstrap.sh
    +  doc
    +  index.htm
    +  index.html
    +  libs
    +  more
    +  people
    +  rst.css
    +  status
    +  tools
    +  wiki
    +
    + +

    That completes the main portion of this tutorial. If you haven't already + worked through the Class path sections of this tutorial, dig into them now. + The Error reporting section may also be of + interest, although it can be skipped unless you are deeply concerned about + error handling issues.

    + +
    + +

     Class path: Constructors, +including Unicode - (tut5.cpp)

    + +

    Traditional C interfaces pass paths as const char* arguments. +C++ interfaces may add const std::string& overloads, but adding +overloads becomes untenable if wide characters, containers, and iterator ranges +need to be supported.

    +

    Passing paths as const path& arguments is far simpler, yet far +more flexible because class path itself is far more flexible:

    +
      +
    1. Class path supports multiple character types and encodings, including Unicode, to + ease internationalization.
    2. +
    3. Class path supports multiple source types, such as iterators for null terminated + sequences, iterator ranges, containers (including std::basic_string), + and directory_entry's, + so functions taking paths don't need to provide several overloads.
    4. +
    5. Class path supports both native and generic pathname formats, so programs can be + portable between operating systems yet use native formats where desirable.
    6. +
    7. Class path supplies a full set of iterators, observers, composition, + decomposition, and query functions, making pathname manipulations easy, + convenient, reliable, and portable.
    8. +
    +

    Here is how (1) and (2) work. Class path constructors, +assignments, and appends have member templates for sources. For example, here +are the constructors that take sources:

    + +
    +
    template <class Source>
    +  path(Source const& source);
    +
    template <class InputIterator>
    +  path(InputIterator begin, InputIterator end);
    +
    +

    Let's look at a little program that shows how comfortable class path is with +both narrow and wide characters in C-style strings, C++ strings, and via C++ +iterators:

    + + + + + +
    +
    tut5.cpp
    +
    +
    #include <boost/filesystem.hpp>
    +#include <string>
    +#include <list>
    +namespace fs = boost::filesystem;
    +
    +int main()
    +{
    +  // \u263A is "Unicode WHITE SMILING FACE = have a nice day!"
    +  std::string narrow_string ("smile2");
    +  std::wstring wide_string (L"smile2\u263A");
    +  std::list<char> narrow_list;
    +  narrow_list.push_back('s');
    +  narrow_list.push_back('m');
    +  narrow_list.push_back('i');
    +  narrow_list.push_back('l');
    +  narrow_list.push_back('e');
    +  narrow_list.push_back('3');
    +  std::list<wchar_t> wide_list;
    +  wide_list.push_back(L's');
    +  wide_list.push_back(L'm');
    +  wide_list.push_back(L'i');
    +  wide_list.push_back(L'l');
    +  wide_list.push_back(L'e');
    +  wide_list.push_back(L'3');
    +  wide_list.push_back(L'\u263A');
    +
    +  { fs::ofstream f("smile"); }
    +  { fs::ofstream f(L"smile\u263A"); }
    +  { fs::ofstream f(narrow_string); }
    +  { fs::ofstream f(wide_string); }
    +  { fs::ofstream f(narrow_list); }
    +  { fs::ofstream f(wide_list); }
    +  narrow_list.pop_back();
    +  narrow_list.push_back('4');
    +  wide_list.pop_back();
    +  wide_list.pop_back();
    +  wide_list.push_back(L'4');
    +  wide_list.push_back(L'\u263A');
    +  { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); }
    +  { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); }
    +
    +  return 0;
    +}
    +
    +
    + +

    Testing tut5:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./tut5
    +$ ls smile*
    +smile smile☺ smile2 smile2☺ smile3 smile3☺ smile4 smile4☺
    +
    +
    >tut5
    +>dir /b smile*
    +smile
    +smile2
    +smile2☺
    +smile3
    +smile3☺
    +smile4
    +smile4☺
    +smile☺
    +
    + +

    Note that the exact appearance of the smiling face will depend on the font, +font size, and other settings for your command line window. The above tests were +run with out-of-the-box Ubuntu 9.10 and Windows 7, US Edition. If you don't get +the above results, take a look at the boost-root/libs/filesystem/example/test +directory with your system's GUI file browser, such as Linux Nautilus, Mac OS X +Finder, or Windows Explorer. These tend to be more comfortable with +international character sets than command line interpreters.

    + +

    Class path takes care of whatever character type or encoding + conversions are required by the particular operating system. Thus as + tut5 demonstrates, it's no problem to pass a wide character string to a + Boost.Filesystem operational function even if the underlying operating system + uses narrow characters, and visa versa. And the same applies to user supplied + functions that take const path& arguments.

    + +

    Class path also provides path syntax that is portable across operating systems, + element iterators, and observer, composition, decomposition, and query + functions to manipulate the elements of a path. The next section of this + tutorial deals with path syntax.

    + +
    + +

    Class path: Generic format vs. Native format

    + +

    Class path deals with two different pathname +formats - generic format and native format. For POSIX-like +file systems, these formats are the same. But for users of Windows and +other non-POSIX file systems, the distinction is important. Even +programmers writing for POSIX-like systems need to understand the distinction if +they want their code to be portable to non-POSIX systems.

    + +

    The generic format is the familiar /my_directory/my_file.txt format used by POSIX-like +operating systems such as the Unix variants, Linux, and Mac OS X. Windows also +recognizes the generic format, and it is the basis for the familiar Internet URL +format. The directory +separator character is always one or more slash characters.

    + +

    The native format is the format as defined by the particular +operating system. For Windows, either the slash or the backslash can be used as +the directory separator character, so /my_directory\my_file.txt +would work fine. Of course, if you write that in a C++ string literal, it +becomes "/my_directory\\my_file.txt".

    + +

    If a drive specifier or a backslash appears +in a pathname on a Windows system, it is always treated as the native format.

    + +

    Class path has observer functions that allow you to +obtain the string representation of a path object in either the native format +or the generic format. See the next section +for how that plays out.

    + +

    The distinction between generic format and native format is important when + communicating with native C-style API's and with users. Both tend to expect + paths in the native format and may be confused by the generic format. The generic + format is great, however, for writing portable programs that work regardless + of operating system.

    + +

    The next section covers class path observers, composition, + decomposition, query, and iteration over the elements of a path.

    + +
    + +

    Class path: Iterators, observers, composition, decomposition, and query +- (path_info.cpp)

    + +

    The path_info.cpp program is handy for learning how class path +iterators, +observers, composition, decomposition, and query functions work on your system. +If it hasn't already already been built on your system, please build it now. Run +the examples below on your system, and try some different path arguments as we +go along.

    + +

    path_info produces several dozen output lines every time it's +invoked. We will only show the output lines we are interested in at each step.

    + +

    First we'll look at iteration over the elements of a path, and then use +iteration to illustrate the difference between generic and native format paths.

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./path_info /foo/bar/baa.txt
    +...
    +elements:
    +  /
    +  foo
    +  bar
    +  baa.txt
    +
    +
    >path_info /foo/bar/baa.txt
    +...
    +elements:
    +  /
    +  foo
    +  bar
    +  baa.txt
    +
    + +

    Thus on both POSIX and Windows based systems the path "/foo/bar/baa.txt" +is seen as having four elements.

    + +

    Here is the code that produced the above listing:

    + + + + + +
    +
    +
    cout << "\nelements:\n";
    +
    +for (path::iterator it = p.begin(); it != p.end(); ++it)
    +  cout << " " << *it << '\n';
    +
    +
    +

    path::iterator::value_type is path::string_type, +and iteration treats path as a container of filenames.

    + +

    Let's look at some of the output from a slightly different +example:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./path_info /foo/bar/baa.txt
    +
    +composed path:
    +  cout << -------------: /foo/bar/baa.txt
    +  preferred()----------: /foo/bar/baa.txt
    +...
    +observers, native format:
    +  native()-------------: /foo/bar/baa.txt
    +  c_str()--------------: /foo/bar/baa.txt
    +  string()-------------: /foo/bar/baa.txt
    +  wstring()------------: /foo/bar/baa.txt
    +
    +observers, generic format:
    +  generic_string()-----: /foo/bar/baa.txt
    +  generic_wstring()----: /foo/bar/baa.txt
    +
    +
    >path_info /foo/bar\baa.txt
    +
    +composed path:
    +  cout << -------------: /foo/bar/baa.txt
    +  preferred()----------: \foo\bar\baa.txt
    +...
    +observers, native format:
    +  native()-------------: /foo/bar\baa.txt
    +  c_str()--------------: /foo/bar\baa.txt
    +  string()-------------: /foo/bar\baa.txt
    +  wstring()------------: /foo/bar\baa.txt
    +
    +observers, generic format:
    +  generic_string()-----: /foo/bar/baa.txt
    +  generic_wstring()----: /foo/bar/baa.txt
    +
    + +

    Native format observers should be used when interacting with the +operating system or with users; that's what they expect.

    + +

    Generic format observers should be used when the results need to be +portable and uniform regardless of the operating system.

    + +

    path objects always hold pathnames in the native +format, but otherwise leave them unchanged from their source. The +preferred() function will convert to the +preferred form, if the native format has several forms. Thus on Windows, it will +convert slashes to backslashes.

    + +

    Let's move on to decomposition and query functions:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./path_info /foo/bar/baa.txt
    +...
    +decomposition:
    +  root_name()----------:
    +  root_directory()-----: /
    +  root_path()----------: /
    +  relative_path()------: foo/bar/baa.txt
    +  parent_path()--------: /foo/bar
    +  filename()-----------: baa.txt
    +  stem()---------------: baa
    +  extension()----------: .txt
    +
    +query:
    +  empty()--------------: false
    +  is_absolute()--------: true
    +  has_root_name()------: false
    +  has_root_directory()-: true
    +  has_root_path()------: true
    +  has_relative_path()--: true
    +  has_parent_path()----: true
    +  has_filename()-------: true
    +  has_stem()-----------: true
    +  has_extension()------: true
    +
    +
    >path_info /foo/bar/baa.txt
    +...
    +decomposition:
    +  root_name()----------:
    +  root_directory()-----: /
    +  root_path()----------: /
    +  relative_path()------: foo/bar/baa.txt
    +  parent_path()--------: /foo/bar
    +  filename()-----------: baa.txt
    +  stem()---------------: baa
    +  extension()----------: .txt
    +
    +query:
    +  empty()--------------: false
    +  is_absolute()--------: false
    +  has_root_name()------: false
    +  has_root_directory()-: true
    +  has_root_path()------: true
    +  has_relative_path()--: true
    +  has_parent_path()----: true
    +  has_filename()-------: true
    +  has_stem()-----------: true
    +  has_extension()------: true
    +
    + +

    These are pretty self-evident, but do note the difference in the +result of is_absolute() between Linux and Windows. Because there is +no root name (i.e. drive specifier or network name), a lone slash (or backslash) +is a relative path on Windows.

    + +

    On to composition!

    + +

    Class path uses / and /= operators to +append elements. That's a reminder +that these operations append the operating system's preferred directory +separator if needed. The preferred +directory separator is a slash on POSIX-like systems, and a backslash on +Windows-like systems.

    + +

    path_info.cpp +composes a path by appending each of the command line elements to an initially +empty path:

    + + + + + +
    +
    +
    path p;  // compose a path from the command line arguments
    +
    +for (; argc > 1; --argc, ++argv)
    +  p /= argv[1];
    +
    +cout << "\ncomposed path:\n";
    +cout << " cout << -------------: " << p << "\n";
    +cout << " preferred()----------: " << p.preferred() << "\n";
    +
    +
    + +

    Let's give this code a try:

    + + + + + + + + + + +
    Ubuntu Linux Microsoft Windows
    +
    $ ./path_info / foo/bar baa.txt
    +
    +composed path:
    +  cout << -------------: /foo/bar/baa.txt
    +  preferred()----------: /foo/bar/baa.txt
    +
    +
    >path_info / foo/bar baa.txt
    +
    +composed path:
    +  cout << -------------: /foo/bar\baa.txt
    +  preferred()----------: \foo\bar\baa.txt
    +
    + +

     

    + +
    + +

    Error reporting

    + +

    The Boost.Filesystem file_size function has two overloads:

    + +
    +
    uintmax_t file_size(const path& p);
    +uintmax_t file_size(const path& p, system::error_code& ec);
    +
    +

    The only significant difference between the two is how they report errors.

    +

    The + first signature will throw exceptions to report errors. A +filesystem_error exception will be thrown +on an + operational error. filesystem_error is derived from std::runtime_error. +It has a + member function to obtain the +error_code reported by the source + of the error. It also has member functions to obtain the path or paths that caused + the error.

    + +
    + +

    Motivation for the second signature: Throwing exceptions on errors was the entire error reporting story for the earliest versions of + Boost.Filesystem, and indeed throwing exceptions on errors works very well for + many applications. But user reports trickled in that some code became so + littered with try and catch blocks as to be unreadable and unmaintainable. In + some applications I/O errors aren't exceptional, and that's the use case for + the second signature.

    + +
    + +

    Functions with a system::error_code& argument set that + argument to report operational error status, and so do not throw exceptions when I/O + related errors occur. For a full explanation, see + Error reporting in the reference + documentation.

    + +
    +

    © Copyright Beman Dawes 2010

    +

    Distributed under the Boost Software License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    +

    Revised +20 February 2011

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/v3.html b/external/libs/filesystem/v3/doc/v3.html new file mode 100644 index 0000000..83dafbf --- /dev/null +++ b/external/libs/filesystem/v3/doc/v3.html @@ -0,0 +1,151 @@ + + + + + + +Filesystem V3 Intro + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem + Version 3
    + Introduction
    + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + +

    Boost Filesystem Version 3

    + +

    Version 3 is a major revision of the Boost Filesystem library. Important +changes include:

    + +
      +
    • A single class path handles all aspects of + internationalization, replacing the previous template and its path + and wpath instantiations. Character types char, + wchar_t, char16_t, and char32_t are + supported. This is a major simplification of the path abstraction, + particularly for functions that take path arguments.
    • +
    • New class path members include:
      + +
    • +
    • New or improved operations functions include:
        +
      • absolute(). This replaces the operations function + complete(), which is now deprecated. Semantics are now provided for a + Windows corner case where the base argument was not an absolute + path. Previously this resulted in an exception being thrown.
      • +
      • create_symlink() now supported on both POSIX and Windows.
      • +
      • read_symlink() function added. Supported on both POSIX and + Windows. Used to read the contents of a symlink itself.
      • +
      • resize_file() function added. Supported on both POSIX and + Windows. Used to shrink or grow a regular file.
      • +
      • unique_path() function added. Supported on both POSIX and + Windows. Used to generate a secure temporary pathname.
      • +
      +
    • +
    • Support for error reporting via error_code is now uniform + throughout the operations functions.
    • +
    • Documentation has been reworked, including re-writes of major portions.
    • +
    • A new Tutorial provides a hopefully much + gentler and more complete introduction for new users. Current users might want + to review the three sections related to class path.
    • +
    + +

    Deprecated names and other features

    + +

    See the Deprecated Features page for transition +aids that allow much existing code to compile without change using Version 3.

    + +

    Breaking changes

    + +

    To ease the transition, Versions 2 and 3 will both be included in the next +several Boost releases. Version 2 will be the default version for one release +cycle, and then Version 3 will become the default version.

    +

    Class path

    +
      +
    • Class template basic_path and its specializations are + replaced by a single class path. Thus any code, such as + overloaded functions, that depends on path and wpath + being two distinct types will fail to compile and must be restructured. + Restructuring may be as simple as removing one of the overloads, but also + might require more complex redesign.
    • +
    • Certain functions now return path objects rather than + string or wstring objects:
        +
      • root_name()
      • +
      • root_directory()
      • +
      • filename()
      • +
      • stem()
      • +
      • extension()
      • +
      +

      Not all uses will fail; if the function is being called in a context that + accepts a path, all is well. If the result is being used in a + context requiring a std::string or std::wstring, + then .string() or .wstring() respectively must be + appended to the function call.

    • +
    •  path::iterator::value_type and  + path::const_iterator::value_type is path rather than + basic_string.
    • +
    +

    Compiler support

    +
      +
    • Compilers and standard libraries that do not fully support wide characters + and wide character strings (std::wstring) are no longer + supported.
    • +
    • Cygwin versions prior to 1.7 are no longer supported because they lack + wide string support. Cygwin now compiles only for the Windows API and path + syntax.
    • +
    • MinGW versions not supporting wide strings are no longer supported.
    • +
    • Microsoft VC++ 7.1 and earlier are no longer supported.
    • +
    + +
    +

    © Copyright Beman Dawes, 2009

    +

    Distributed under the Boost Software License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    +

    Revised +20 February 2011

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/doc/v3_design.html b/external/libs/filesystem/v3/doc/v3_design.html new file mode 100644 index 0000000..c5204ff --- /dev/null +++ b/external/libs/filesystem/v3/doc/v3_design.html @@ -0,0 +1,192 @@ + + + + + + + +Filesystem V3 Design + + + + + + + + + + +
    + +boost.png (6897 bytes) + Filesystem Version 3
    + Design
    + + + + + +
    Filesystem Home    + Releases    + Reference    + Tutorial    + FAQ    + Portability    + V3 Intro    + V3 Design    + Deprecated    +
    + + + + + + + + +
    + Contents
    + Introduction
    + Problem
    + Solution
    + Details
    + Other changes
    + Acknowledgements
    + +

    Caution: This page documents thinking early in the V3 development +process, and is intended to serve historical purposes. It is not updated to +reflect the current state of the library.

    + +

    Introduction

    + +

    During the review of Boost.Filesystem.V2 (Internationalization), Peter Dimov +suggested that the basic_path class template was unwieldy, and that a single +path type that accommodated multiple character types and encodings would be more +flexible. Although I wasn't willing to stop development at that time to +explore how this idea might be implemented, or to break from the pattern for +Internationalization used the C++ standard library, I've often thought about +Peter's suggestion. With the advent of C++0x char16_t and char32_t character +types, the basic_path class template approach becomes even more unwieldy, so it +is time to revisit the problem in light of Peter's suggestion.

    + +

    Problem

    + +

    With Filesystem.V2, a path argument to a user defined function that is to +accommodate multiple character types and encodings must be written as a +template. Do-the-right-thing overloads or template metaprogramming must be +employed to allow arguments to be written as string literals. Here's what it +looks like:

    + +
    +
    template<class Path>
    +void foo( const Path & p );
    +
    inline void foo( const path & p )
    +{
    +  return foo<path>( p );
    +}
    +inline void foo( const wpath & p )
    +{
    +  return foo<wpath>( p );
    +}
    +
    +

    That's really ugly for such a simple need, and there would be a combinatorial +explosion if the function took multiple Path arguments and each could be either +narrow or wide. It gets even worse if the C++0x char16_t and +char32_t types are to be supported.

    + +

    Solution

    + +

    Overview:

    + +
      +
    • A single, non-template, class path.
    • +
    • Each member function is a template accommodating the various + applicable character types, including user-defined character types.
    • +
    • Hold the path internally in a string of the type used by the operating + system API; std::string for POSIX, std::wstring for Windows.
    • +
    + +

    The signatures presented in Problem collapse to +simply:

    +
    +
    void foo( const path & p );
    +
    + +

    That's a signification reduction in code complexity. Specification becomes +simpler, too. I believe it will be far easier to teach, and result in much more +flexible user code.

    + +

    Other benefits:

    +
      +
    • All the polymorphism still occurs at compile time.
    • +
    • Efficiency is increased, in that conversions of the encoding, if required, + only occur once at the time of creation, not each time the path is used.
    • +
    • The size of the implementation code drops approximately in half and + becomes much more readable.
    • +
    +

    Possible problems:

    +
      +
    • The combination of member function templates and implicit constructors can + result in unclear error messages when the user makes simple commonplace coding + errors. This should be much less of a problem with C++ concepts, but in the + meantime work continues to restrict over aggressive templates via enable_if/disable_if.
    • +
    +

    Details

    + + + + + + + + + + + + + + + + + + + + +
    +

    Encoding Conversions

    +

    Host system

    +

    char string path arguments

    +

    wide string path arguments

    Systems with char as the native API path character type (i.e. + POSIX-like systems)No conversion.Conversion occurs, performed by the current path locale's + codecvt facet.
    Systems with wchar_t as the native API path character type + (i.e. Windows-like systems).Conversion occurs, performed by the current path locale's + codecvt facet.No conversion.
    + +

    When a class path function argument type matches the the operating system's +API argument type for paths, no conversion is performed rather than conversion +to a specified encoding such as one of the Unicode encodings. This avoids +unintended consequences, etc.

    + +

    Other changes

    + +

    Uniform hybrid error handling: The hybrid error handling idiom has +been consistently applied to all applicable functions.

    + +

    Acknowledgements

    + +

    Peter Dimov suggested the idea of a single path class that could cope with +multiple character types and encodings. Walter Landry contributed both the design and implementation of the copy_any, +copy_directory, copy_symlink, and read_symlink functions.

    + +
    +

    Revised +20 February, 2011

    + +

    © Copyright Beman Dawes, 2008

    +

    Use, modification, and distribution are subject to the Boost Software +License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt

    + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/example/Jamfile.v2 b/external/libs/filesystem/v3/example/Jamfile.v2 new file mode 100644 index 0000000..2d2ea27 --- /dev/null +++ b/external/libs/filesystem/v3/example/Jamfile.v2 @@ -0,0 +1,27 @@ +# Boost Filesystem Library Example Jamfile + +# (C) Copyright Vladimir Prus 2003 + +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +# Library home page: http://www.boost.org/libs/filesystem + +project + : requirements + /boost/filesystem//boost_filesystem + /boost/system//boost_system + msvc:on + static + ; + +exe tut0 : tut0.cpp ; +exe tut1 : tut1.cpp ; +exe tut2 : tut2.cpp ; +exe tut3 : tut3.cpp ; +exe tut4 : tut4.cpp ; +exe tut5 : tut5.cpp ; +exe path_info : path_info.cpp ; +exe file_status : file_status.cpp ; + +install bin : file_status ; #invoke via "bjam", not "bjam install" diff --git a/external/libs/filesystem/v3/example/error_demo.cpp b/external/libs/filesystem/v3/example/error_demo.cpp new file mode 100644 index 0000000..ce16b3b --- /dev/null +++ b/external/libs/filesystem/v3/example/error_demo.cpp @@ -0,0 +1,185 @@ +// error_demo.cpp --------------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// +// // +// The purpose of this program is to demonstrate how error reporting works. // +// // +//--------------------------------------------------------------------------------------// + +#include +#include +#include + +using std::cout; +using boost::filesystem::path; +using boost::filesystem::filesystem_error; +using boost::system::error_code; +using boost::system::system_error; +namespace fs = boost::filesystem; + +namespace +{ + void report_system_error(const system_error& ex) + { + cout << " threw system_error:\n" + << " ex.code().value() is " << ex.code().value() << '\n' + << " ex.code().category().name() is " << ex.code().category().name() << '\n' + << " ex.what() is " << ex.what() << '\n' + ; + } + + void report_filesystem_error(const system_error& ex) + { + cout << " threw filesystem_error exception:\n" + << " ex.code().value() is " << ex.code().value() << '\n' + << " ex.code().category().name() is " << ex.code().category().name() << '\n' + << " ex.what() is " << ex.what() << '\n' + ; + } + + void report_status(fs::file_status s) + { + cout << " file_status::type() is "; + switch (s.type()) + { + case fs::status_error: + cout << "status_error\n"; break; + case fs::file_not_found: + cout << "file_not_found\n"; break; + case fs::regular_file: + cout << "regular_file\n"; break; + case fs::directory_file: + cout << "directory_file\n"; break; + case fs::symlink_file: + cout << "symlink_file\n"; break; + case fs::block_file: + cout << "block_file\n"; break; + case fs::character_file: + cout << "character_file\n"; break; + case fs::fifo_file: + cout << "fifo_file\n"; break; + case fs::socket_file: + cout << "socket_file\n"; break; + case fs::type_unknown: + cout << "type_unknown\n"; break; + default: + cout << "not a valid enumeration constant\n"; + } + } + + void report_error_code(const error_code& ec) + { + cout << " ec:\n" + << " value() is " << ec.value() << '\n' + << " category().name() is " << ec.category().name() << '\n' + << " message() is " << ec.message() << '\n' + ; + } + + bool threw_exception; + +} + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + cout << "Usage: error_demo path\n"; + return 1; + } + + error_code ec; + + //// construct path - no error_code + + //try { path p1(argv[1]); } + //catch (const system_error& ex) + //{ + // cout << "construct path without error_code"; + // report_system_error(ex); + //} + + //// construct path - with error_code + + path p (argv[1]); + + fs::file_status s; + bool b (false); + fs::directory_iterator di; + + // get status - no error_code + + cout << "\nstatus(\"" << p.string() << "\");\n"; + threw_exception = false; + + try { s = fs::status(p); } + catch (const system_error& ex) + { + report_filesystem_error(ex); + threw_exception = true; + } + if (!threw_exception) + cout << " Did not throw exception\n"; + report_status(s); + + // get status - with error_code + + cout << "\nstatus(\"" << p.string() << "\", ec);\n"; + s = fs::status(p, ec); + report_status(s); + report_error_code(ec); + + // query existence - no error_code + + cout << "\nexists(\"" << p.string() << "\");\n"; + threw_exception = false; + + try { b = fs::exists(p); } + catch (const system_error& ex) + { + report_filesystem_error(ex); + threw_exception = true; + } + if (!threw_exception) + { + cout << " Did not throw exception\n" + << " Returns: " << (b ? "true" : "false") << '\n'; + } + + // query existence - with error_code + + // directory_iterator - no error_code + + cout << "\ndirectory_iterator(\"" << p.string() << "\");\n"; + threw_exception = false; + + try { di = fs::directory_iterator(p); } + catch (const system_error& ex) + { + report_filesystem_error(ex); + threw_exception = true; + } + if (!threw_exception) + { + cout << " Did not throw exception\n" + << (di == fs::directory_iterator() ? " Equal" : " Not equal") + << " to the end iterator\n"; + } + + // directory_iterator - with error_code + + cout << "\ndirectory_iterator(\"" << p.string() << "\", ec);\n"; + di = fs::directory_iterator(p, ec); + cout << (di == fs::directory_iterator() ? " Equal" : " Not equal") + << " to the end iterator\n"; + report_error_code(ec); + + return 0; +} diff --git a/external/libs/filesystem/v3/example/file_size.cpp b/external/libs/filesystem/v3/example/file_size.cpp new file mode 100644 index 0000000..3fbfa4e --- /dev/null +++ b/external/libs/filesystem/v3/example/file_size.cpp @@ -0,0 +1,44 @@ +// file_size program -------------------------------------------------------// + +// Copyright Beman Dawes, 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/libs/filesystem for documentation. + +#include +#include + +namespace fs = boost::filesystem; + +int main( int argc, char* argv[] ) +{ + + if ( argc != 2 ) + { + std::cout << "Usage: file_size path\n"; + return 1; + } + + std::cout << "sizeof(intmax_t) is " << sizeof(boost::intmax_t) << '\n'; + + fs::path p( argv[1] ); + + if ( !fs::exists( p ) ) + { + std::cout << "not found: " << argv[1] << std::endl; + return 1; + } + + if ( !fs::is_regular( p ) ) + { + std::cout << "not a regular file: " << argv[1] << std::endl; + return 1; + } + + std::cout << "size of " << argv[1] << " is " << fs::file_size( p ) + << std::endl; + return 0; +} diff --git a/external/libs/filesystem/v3/example/file_status.cpp b/external/libs/filesystem/v3/example/file_status.cpp new file mode 100644 index 0000000..5d3774f --- /dev/null +++ b/external/libs/filesystem/v3/example/file_status.cpp @@ -0,0 +1,117 @@ +// status.cpp ------------------------------------------------------------------------// + +// Copyright Beman Dawes 2011 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +#include +#include +#include + +using std::cout; using std::endl; +using namespace boost::filesystem; + +namespace +{ + path p; + + void print_boost_macros() + { + std::cout << "Boost " + << BOOST_VERSION / 100000 << '.' + << BOOST_VERSION / 100 % 1000 << '.' + << BOOST_VERSION % 100 << ", " +# ifndef _WIN64 + << BOOST_COMPILER << ", " +# else + << BOOST_COMPILER << " with _WIN64 defined, " +# endif + << BOOST_STDLIB << ", " + << BOOST_PLATFORM + << std::endl; + } + + const char* file_type_tab[] = + { "status_error", "file_not_found", "regular_file", "directory_file", + "symlink_file", "block_file", "character_file", "fifo_file", "socket_file", + "type_unknown" + }; + + const char* file_type_c_str(enum file_type t) + { + return file_type_tab[t]; + } + + void show_status(file_status s, boost::system::error_code ec) + { + boost::system::error_condition econd; + + if (ec) + { + econd = ec.default_error_condition(); + cout << "sets ec to indicate an error:\n" + << " ec.value() is " << ec.value() << '\n' + << " ec.message() is \"" << ec.message() << "\"\n" + << " ec.default_error_condition().value() is " << econd.value() << '\n' + << " ec.default_error_condition().message() is \"" << econd.message() << "\"\n"; + } + else + cout << "clears ec.\n"; + + cout << "s.type() is " << s.type() + << ", which is defined as \"" << file_type_c_str(s.type()) << "\"\n"; + + cout << "exists(s) is " << (exists(s) ? "true" : "false") << "\n"; + cout << "status_known(s) is " << (status_known(s) ? "true" : "false") << "\n"; + cout << "is_regular_file(s) is " << (is_regular_file(s) ? "true" : "false") << "\n"; + cout << "is_directory(s) is " << (is_directory(s) ? "true" : "false") << "\n"; + cout << "is_other(s) is " << (is_other(s) ? "true" : "false") << "\n"; + cout << "is_symlink(s) is " << (is_symlink(s) ? "true" : "false") << "\n"; + } + + void try_exists() + { + cout << "\nexists(" << p << ") "; + try + { + bool result = exists(p); + cout << "is " << (result ? "true" : "false") << "\n"; + } + catch (const filesystem_error& ex) + { + cout << "throws a filesystem_error exception: " << ex.what() << "\n"; + } + } + +} + +int cpp_main(int argc, char* argv[]) +{ + print_boost_macros(); + + if (argc < 2) + { + std::cout << "Usage: file_status \n"; + p = argv[0]; + } + else + p = argv[1]; + + boost::system::error_code ec; + file_status s = status(p, ec); + cout << "\nfile_status s = status(" << p << ", ec) "; + show_status(s, ec); + + s = symlink_status(p, ec); + cout << "\nfile_status s = symlink_status(" << p << ", ec) "; + show_status(s, ec); + + try_exists(); + + return 0; +} diff --git a/external/libs/filesystem/v3/example/mbcopy.cpp b/external/libs/filesystem/v3/example/mbcopy.cpp new file mode 100644 index 0000000..2b1f603 --- /dev/null +++ b/external/libs/filesystem/v3/example/mbcopy.cpp @@ -0,0 +1,90 @@ +// Boost.Filesystem mbcopy.cpp ---------------------------------------------// + +// 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) + +// Copy the files in a directory, using mbpath to represent the new file names +// See http://../doc/path.htm#mbpath for more information + +// See deprecated_test for tests of deprecated features +#define BOOST_FILESYSTEM_NO_DEPRECATED + +#include +# ifdef BOOST_FILESYSTEM_NARROW_ONLY +# error This compiler or standard library does not support wide-character strings or paths +# endif + +#include "mbpath.hpp" +#include +#include +#include +#include "../src/utf8_codecvt_facet.hpp" + +namespace fs = boost::filesystem; + +namespace +{ + // we can't use boost::filesystem::copy_file() because the argument types + // differ, so provide a not-very-smart replacement. + + void copy_file( const fs::wpath & from, const user::mbpath & to ) + { + fs::ifstream from_file( from, std::ios_base::in | std::ios_base::binary ); + if ( !from_file ) { std::cout << "input open failed\n"; return; } + + fs::ofstream to_file( to, std::ios_base::out | std::ios_base::binary ); + if ( !to_file ) { std::cout << "output open failed\n"; return; } + + char c; + while ( from_file.get(c) ) + { + to_file.put(c); + if ( to_file.fail() ) { std::cout << "write error\n"; return; } + } + + if ( !from_file.eof() ) { std::cout << "read error\n"; } + } +} + +int main( int argc, char * argv[] ) +{ + if ( argc != 2 ) + { + std::cout << "Copy files in the current directory to a target directory\n" + << "Usage: mbcopy \n"; + return 1; + } + + // For encoding, use Boost UTF-8 codecvt + std::locale global_loc = std::locale(); + std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet ); + user::mbpath_traits::imbue( loc ); + + std::string target_string( argv[1] ); + user::mbpath target_dir( user::mbpath_traits::to_internal( target_string ) ); + + if ( !fs::is_directory( target_dir ) ) + { + std::cout << "Error: " << argv[1] << " is not a directory\n"; + return 1; + } + + for ( fs::wdirectory_iterator it( L"." ); + it != fs::wdirectory_iterator(); ++it ) + { + if ( fs::is_regular_file(it->status()) ) + { + copy_file( *it, target_dir / it->path().filename() ); + } + } + + return 0; +} + + + + + diff --git a/external/libs/filesystem/v3/example/mbpath.cpp b/external/libs/filesystem/v3/example/mbpath.cpp new file mode 100644 index 0000000..4359001 --- /dev/null +++ b/external/libs/filesystem/v3/example/mbpath.cpp @@ -0,0 +1,80 @@ +// Boost.Filesystem mbpath.cpp ---------------------------------------------// + +// (c) 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 Boost.Filesystem home page at http://www.boost.org/libs/filesystem + +#include +# ifdef BOOST_FILESYSTEM_NARROW_ONLY +# error This compiler or standard library does not support wide-character strings or paths +# endif + +#include "mbpath.hpp" +#include +#include + +namespace fs = boost::filesystem; + +namespace +{ + // ISO C calls this "the locale-specific native environment": + std::locale loc(""); + + const std::codecvt * + cvt( &std::use_facet > + ( loc ) ); +} + +namespace user +{ + mbpath_traits::external_string_type + mbpath_traits::to_external( const mbpath & ph, + const internal_string_type & src ) + { + std::size_t work_size( cvt->max_length() * (src.size()+1) ); + boost::scoped_array work( new char[ work_size ] ); + std::mbstate_t state; + const internal_string_type::value_type * from_next; + external_string_type::value_type * to_next; + if ( cvt->out( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + boost::throw_exception >( + fs::basic_filesystem_error( + "user::mbpath::to_external conversion error", + ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) ); + *to_next = '\0'; + return external_string_type( work.get() ); + } + + mbpath_traits::internal_string_type + mbpath_traits::to_internal( const external_string_type & src ) + { + std::size_t work_size( src.size()+1 ); + boost::scoped_array work( new wchar_t[ work_size ] ); + std::mbstate_t state; + const external_string_type::value_type * from_next; + internal_string_type::value_type * to_next; + if ( cvt->in( + state, src.c_str(), src.c_str()+src.size(), from_next, work.get(), + work.get()+work_size, to_next ) != std::codecvt_base::ok ) + boost::throw_exception >( + fs::basic_filesystem_error( + "user::mbpath::to_internal conversion error", + boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) ); + *to_next = L'\0'; + return internal_string_type( work.get() ); + } + + void mbpath_traits::imbue( const std::locale & new_loc ) + { + loc = new_loc; + cvt = &std::use_facet + >( loc ); + } + +} // namespace user diff --git a/external/libs/filesystem/v3/example/mbpath.hpp b/external/libs/filesystem/v3/example/mbpath.hpp new file mode 100644 index 0000000..f752b3f --- /dev/null +++ b/external/libs/filesystem/v3/example/mbpath.hpp @@ -0,0 +1,44 @@ +// Boost.Filesystem mbpath.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) + +// Encodes wide character paths as MBCS +// See http://../doc/path.htm#mbpath for more information + +#include +#include // for std::mbstate_t +#include +#include + +namespace user +{ + struct mbpath_traits; + + typedef boost::filesystem::basic_path mbpath; + + struct mbpath_traits + { + typedef std::wstring internal_string_type; + typedef std::string external_string_type; + + static external_string_type to_external( const mbpath & ph, + const internal_string_type & src ); + + static internal_string_type to_internal( const external_string_type & src ); + + static void imbue( const std::locale & loc ); + }; +} // namespace user + +namespace boost +{ + namespace filesystem + { + template<> struct is_basic_path + { static const bool value = true; }; + } +} diff --git a/external/libs/filesystem/v3/example/path_info.cpp b/external/libs/filesystem/v3/example/path_info.cpp new file mode 100644 index 0000000..5c32b20 --- /dev/null +++ b/external/libs/filesystem/v3/example/path_info.cpp @@ -0,0 +1,83 @@ +// path_info.cpp ---------------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +using namespace std; +using namespace boost::filesystem; + +const char * say_what(bool b) { return b ? "true" : "false"; } + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + cout << "Usage: path_info path-portion...\n" + "Example: path_info foo/bar baz\n" +# ifdef BOOST_POSIX_API + " would report info about the composed path foo/bar/baz\n"; +# else // BOOST_WINDOWS_API + " would report info about the composed path foo/bar\\baz\n"; +# endif + return 1; + } + + path p; // compose a path from the command line arguments + + for (; argc > 1; --argc, ++argv) + p /= argv[1]; + + cout << "\ncomposed path:\n"; + cout << " cout << -------------: " << p << "\n"; + cout << " make_preferred()----------: " << path(p).make_preferred() << "\n"; + + cout << "\nelements:\n"; + + for (path::iterator it(p.begin()), it_end(p.end()); it != it_end; ++it) + cout << " " << *it << '\n'; + + cout << "\nobservers, native format:" << endl; +# ifdef BOOST_POSIX_API + cout << " native()-------------: " << p.native() << endl; + cout << " c_str()--------------: " << p.c_str() << endl; +# else // BOOST_WINDOWS_API + wcout << L" native()-------------: " << p.native() << endl; + wcout << L" c_str()--------------: " << p.c_str() << endl; +# endif + cout << " string()-------------: " << p.string() << endl; + wcout << L" wstring()------------: " << p.wstring() << endl; + + cout << "\nobservers, generic format:\n"; + cout << " generic_string()-----: " << p.generic_string() << endl; + wcout << L" generic_wstring()----: " << p.generic_wstring() << endl; + + cout << "\ndecomposition:\n"; + cout << " root_name()----------: " << p.root_name() << '\n'; + cout << " root_directory()-----: " << p.root_directory() << '\n'; + cout << " root_path()----------: " << p.root_path() << '\n'; + cout << " relative_path()------: " << p.relative_path() << '\n'; + cout << " parent_path()--------: " << p.parent_path() << '\n'; + cout << " filename()-----------: " << p.filename() << '\n'; + cout << " stem()---------------: " << p.stem() << '\n'; + cout << " extension()----------: " << p.extension() << '\n'; + + cout << "\nquery:\n"; + cout << " empty()--------------: " << say_what(p.empty()) << '\n'; + cout << " is_absolute()--------: " << say_what(p.is_absolute()) << '\n'; + cout << " has_root_name()------: " << say_what(p.has_root_name()) << '\n'; + cout << " has_root_directory()-: " << say_what(p.has_root_directory()) << '\n'; + cout << " has_root_path()------: " << say_what(p.has_root_path()) << '\n'; + cout << " has_relative_path()--: " << say_what(p.has_relative_path()) << '\n'; + cout << " has_parent_path()----: " << say_what(p.has_parent_path()) << '\n'; + cout << " has_filename()-------: " << say_what(p.has_filename()) << '\n'; + cout << " has_stem()-----------: " << say_what(p.has_stem()) << '\n'; + cout << " has_extension()------: " << say_what(p.has_extension()) << '\n'; + + return 0; +} diff --git a/external/libs/filesystem/v3/example/simple_ls.cpp b/external/libs/filesystem/v3/example/simple_ls.cpp new file mode 100644 index 0000000..9c4b638 --- /dev/null +++ b/external/libs/filesystem/v3/example/simple_ls.cpp @@ -0,0 +1,91 @@ +// simple_ls program -------------------------------------------------------// + +// Copyright Jeff Garland and 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 http://www.boost.org/libs/filesystem for documentation. + +#define BOOST_FILESYSTEM_VERSION 3 + +// As an example program, we don't want to use any deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include "boost/filesystem/operations.hpp" +#include "boost/filesystem/path.hpp" +#include "boost/progress.hpp" +#include + +namespace fs = boost::filesystem; + +int main(int argc, char* argv[]) +{ + fs::path p(fs::current_path()); + + if (argc > 1) + p = fs::system_complete(argv[1]); + else + std::cout << "\nusage: simple_ls [path]" << std::endl; + + unsigned long file_count = 0; + unsigned long dir_count = 0; + unsigned long other_count = 0; + unsigned long err_count = 0; + + if (!fs::exists(p)) + { + std::cout << "\nNot found: " << p << std::endl; + return 1; + } + + if (fs::is_directory(p)) + { + std::cout << "\nIn directory: " << p << "\n\n"; + fs::directory_iterator end_iter; + for (fs::directory_iterator dir_itr(p); + dir_itr != end_iter; + ++dir_itr) + { + try + { + if (fs::is_directory(dir_itr->status())) + { + ++dir_count; + std::cout << dir_itr->path().filename() << " [directory]\n"; + } + else if (fs::is_regular_file(dir_itr->status())) + { + ++file_count; + std::cout << dir_itr->path().filename() << "\n"; + } + else + { + ++other_count; + std::cout << dir_itr->path().filename() << " [other]\n"; + } + + } + catch (const std::exception & ex) + { + ++err_count; + std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl; + } + } + std::cout << "\n" << file_count << " files\n" + << dir_count << " directories\n" + << other_count << " others\n" + << err_count << " errors\n"; + } + else // must be a file + { + std::cout << "\nFound: " << p << "\n"; + } + return 0; +} diff --git a/external/libs/filesystem/v3/example/stems.cpp b/external/libs/filesystem/v3/example/stems.cpp new file mode 100644 index 0000000..3699fa8 --- /dev/null +++ b/external/libs/filesystem/v3/example/stems.cpp @@ -0,0 +1,31 @@ +// filesystem example stems.cpp ------------------------------------------------------// + +// Copyright Beman Dawes 2011 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + std::cout << "Usage: stems \n"; + return 1; + } + + boost::filesystem::path p(argv[1]), name(p.filename()); + + for(;;) + { + std::cout << "filename " << name << " has stem " << name.stem() + << " and extension " << name.extension() << "\n"; + if (name.stem().empty() || name.extension().empty()) + return 0; + name = name.stem(); + } +} diff --git a/external/libs/filesystem/v3/example/tchar.cpp b/external/libs/filesystem/v3/example/tchar.cpp new file mode 100644 index 0000000..5f33d69 --- /dev/null +++ b/external/libs/filesystem/v3/example/tchar.cpp @@ -0,0 +1,39 @@ +// Example use of Microsoft TCHAR ----------------------------------------------------// + +// Copyright Beman Dawes 2008 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include +#include +#include + +namespace fs = boost::filesystem; + +typedef std::basic_string tstring; + +void func( const fs::path & p ) +{ + assert( fs::exists( p ) ); +} + +int main() +{ + // get a path that is known to exist + fs::path cp = fs::current_path(); + + // demo: get tstring from the path + tstring cp_as_tstring = cp.string(); + + // demo: pass tstring to filesystem function taking path + assert( fs::exists( cp_as_tstring ) ); + + // demo: pass tstring to user function taking path + func( cp_as_tstring ); + + return 0; +} diff --git a/external/libs/filesystem/v3/example/test/Jamfile.v2 b/external/libs/filesystem/v3/example/test/Jamfile.v2 new file mode 100644 index 0000000..3b3dde5 --- /dev/null +++ b/external/libs/filesystem/v3/example/test/Jamfile.v2 @@ -0,0 +1,31 @@ +# Boost Filesystem Library Tutorial Jamfile + +# (C) Copyright Beman Dawes 2010 +# (C) Copyright Vladimir Prus 2003 + +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +# Library home page: http://www.boost.org/libs/filesystem + +project + : requirements + /boost/filesystem//boost_filesystem + /boost/system//boost_system + msvc:on + ; + +exe tut1 : tut1.cpp ; +exe tut2 : tut2.cpp ; +exe tut3 : tut3.cpp ; +exe tut4 : tut4.cpp ; +exe tut5 : tut5.cpp ; +exe path_info : path_info.cpp ; + +install tut1-copy : tut1 : . ; +install tut2-copy : tut2 : . ; +install tut3-copy : tut3 : . ; +install tut4-copy : tut4 : . ; +install tut5-copy : tut5 : . ; +install path_info-copy : path_info : . ; + diff --git a/external/libs/filesystem/v3/example/test/bld.bat b/external/libs/filesystem/v3/example/test/bld.bat new file mode 100644 index 0000000..9768600 --- /dev/null +++ b/external/libs/filesystem/v3/example/test/bld.bat @@ -0,0 +1,7 @@ +@echo off +rem Copyright Beman Dawes, 2010 +rem Distributed under the Boost Software License, Version 1.0. +rem See www.boost.org/LICENSE_1_0.txt + +bjam %* >bjam.log +find "error" bjam.log +grep "error" nul +copy /y ..\tut2.cpp >nul +copy /y ..\tut3.cpp >nul +copy /y ..\tut4.cpp >nul +copy /y ..\tut5.cpp >nul +copy /y ..\path_info.cpp >nul +del *.exe 2>nul +del *.pdb 2>nul diff --git a/external/libs/filesystem/v3/example/test/setup.sh b/external/libs/filesystem/v3/example/test/setup.sh new file mode 100755 index 0000000..c2f3c79 --- /dev/null +++ b/external/libs/filesystem/v3/example/test/setup.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +# Copyright Beman Dawes, 2010 +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +cp ../tut1.cpp . +cp ../tut2.cpp . +cp ../tut3.cpp . +cp ../tut4.cpp . +cp ../tut5.cpp . +cp ../path_info.cpp . +rm tut1 2>~/junk +rm tut2 2>~/junk +rm tut3 2>~/junk +rm tut4 2>~/junk +rm tut5 2>~/junk +rm path_info 2>~/junk + diff --git a/external/libs/filesystem/v3/example/tut0.cpp b/external/libs/filesystem/v3/example/tut0.cpp new file mode 100644 index 0000000..4055100 --- /dev/null +++ b/external/libs/filesystem/v3/example/tut0.cpp @@ -0,0 +1,25 @@ +// filesystem tut0.cpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +namespace fs = boost::filesystem; + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + std::cout << "Usage: tut0 path\n"; + return 1; + } + + std::cout << argv[1] << '\n'; + + return 0; +} diff --git a/external/libs/filesystem/v3/example/tut1.cpp b/external/libs/filesystem/v3/example/tut1.cpp new file mode 100644 index 0000000..3ac85b9 --- /dev/null +++ b/external/libs/filesystem/v3/example/tut1.cpp @@ -0,0 +1,23 @@ +// filesystem tut1.cpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +using namespace boost::filesystem; + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + std::cout << "Usage: tut1 path\n"; + return 1; + } + std::cout << argv[1] << " " << file_size(argv[1]) << '\n'; + return 0; +} diff --git a/external/libs/filesystem/v3/example/tut2.cpp b/external/libs/filesystem/v3/example/tut2.cpp new file mode 100644 index 0000000..2ca8562 --- /dev/null +++ b/external/libs/filesystem/v3/example/tut2.cpp @@ -0,0 +1,40 @@ +// filesystem tut2.cpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +using namespace std; +using namespace boost::filesystem; + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + cout << "Usage: tut2 path\n"; + return 1; + } + + path p (argv[1]); // p reads clearer than argv[1] in the following code + + if (exists(p)) // does p actually exist? + { + if (is_regular_file(p)) // is p a regular file? + cout << p << " size is " << file_size(p) << '\n'; + + else if (is_directory(p)) // is p a directory? + cout << p << " is a directory\n"; + + else + cout << p << " exists, but is neither a regular file nor a directory\n"; + } + else + cout << p << " does not exist\n"; + + return 0; +} diff --git a/external/libs/filesystem/v3/example/tut3.cpp b/external/libs/filesystem/v3/example/tut3.cpp new file mode 100644 index 0000000..bb4494e --- /dev/null +++ b/external/libs/filesystem/v3/example/tut3.cpp @@ -0,0 +1,56 @@ +// filesystem tut3.cpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +#include +#include +using namespace std; +using namespace boost::filesystem; + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + cout << "Usage: tut3 path\n"; + return 1; + } + + path p (argv[1]); // p reads clearer than argv[1] in the following code + + try + { + if (exists(p)) // does p actually exist? + { + if (is_regular_file(p)) // is p a regular file? + cout << p << " size is " << file_size(p) << '\n'; + + else if (is_directory(p)) // is p a directory? + { + cout << p << " is a directory containing:\n"; + + copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type + ostream_iterator(cout, "\n")); // is directory_entry, which is + // converted to a path by the + // path stream inserter + } + else + cout << p << " exists, but is neither a regular file nor a directory\n"; + } + else + cout << p << " does not exist\n"; + } + + catch (const filesystem_error& ex) + { + cout << ex.what() << '\n'; + } + + return 0; +} diff --git a/external/libs/filesystem/v3/example/tut4.cpp b/external/libs/filesystem/v3/example/tut4.cpp new file mode 100644 index 0000000..5888c3a --- /dev/null +++ b/external/libs/filesystem/v3/example/tut4.cpp @@ -0,0 +1,65 @@ +// filesystem tut4.cpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +#include +#include +#include +using namespace std; +using namespace boost::filesystem; + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + cout << "Usage: tut4 path\n"; + return 1; + } + + path p (argv[1]); // p reads clearer than argv[1] in the following code + + try + { + if (exists(p)) // does p actually exist? + { + if (is_regular_file(p)) // is p a regular file? + cout << p << " size is " << file_size(p) << '\n'; + + else if (is_directory(p)) // is p a directory? + { + cout << p << " is a directory containing:\n"; + + typedef vector vec; // store paths, + vec v; // so we can sort them later + + copy(directory_iterator(p), directory_iterator(), back_inserter(v)); + + sort(v.begin(), v.end()); // sort, since directory iteration + // is not ordered on some file systems + + for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it) + { + cout << " " << *it << '\n'; + } + } + else + cout << p << " exists, but is neither a regular file nor a directory\n"; + } + else + cout << p << " does not exist\n"; + } + + catch (const filesystem_error& ex) + { + cout << ex.what() << '\n'; + } + + return 0; +} diff --git a/external/libs/filesystem/v3/example/tut5.cpp b/external/libs/filesystem/v3/example/tut5.cpp new file mode 100644 index 0000000..d665b0d --- /dev/null +++ b/external/libs/filesystem/v3/example/tut5.cpp @@ -0,0 +1,52 @@ +// filesystem tut5.cpp ---------------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#include +#include +namespace fs = boost::filesystem; + +int main() +{ + // \u263A is "Unicode WHITE SMILING FACE = have a nice day!" + std::string narrow_string ("smile2"); + std::wstring wide_string (L"smile2\u263A"); + std::list narrow_list; + narrow_list.push_back('s'); + narrow_list.push_back('m'); + narrow_list.push_back('i'); + narrow_list.push_back('l'); + narrow_list.push_back('e'); + narrow_list.push_back('3'); + std::list wide_list; + wide_list.push_back(L's'); + wide_list.push_back(L'm'); + wide_list.push_back(L'i'); + wide_list.push_back(L'l'); + wide_list.push_back(L'e'); + wide_list.push_back(L'3'); + wide_list.push_back(L'\u263A'); + + { fs::ofstream f("smile"); } + { fs::ofstream f(L"smile\u263A"); } + { fs::ofstream f(narrow_string); } + { fs::ofstream f(wide_string); } + { fs::ofstream f(narrow_list); } + { fs::ofstream f(wide_list); } + narrow_list.pop_back(); + narrow_list.push_back('4'); + wide_list.pop_back(); + wide_list.pop_back(); + wide_list.push_back(L'4'); + wide_list.push_back(L'\u263A'); + { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); } + { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); } + + return 0; +} diff --git a/external/libs/filesystem/v3/index.html b/external/libs/filesystem/v3/index.html new file mode 100644 index 0000000..bbd0918 --- /dev/null +++ b/external/libs/filesystem/v3/index.html @@ -0,0 +1,14 @@ + + + + + +Automatic redirection failed, please go to +doc/index.htm. +
    +

    © Copyright Beman Dawes, 2003

    +

    Distributed under the Boost Software +License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +www.boost.org/LICENSE_1_0.txt)

    + + diff --git a/external/libs/filesystem/v3/src/codecvt_error_category.cpp b/external/libs/filesystem/v3/src/codecvt_error_category.cpp new file mode 100644 index 0000000..b35b4a9 --- /dev/null +++ b/external/libs/filesystem/v3/src/codecvt_error_category.cpp @@ -0,0 +1,93 @@ +// codecvt_error_category implementation file ----------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt) + +// Library home page at http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +#include + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include +#include +#include + +//--------------------------------------------------------------------------------------// + +namespace +{ + class codecvt_error_cat : public boost::system::error_category + { + public: + codecvt_error_cat(){} + const char* name() const; + std::string message(int ev) const; + }; + + const char* codecvt_error_cat::name() const + { + return "codecvt"; + } + + std::string codecvt_error_cat::message(int ev) const + { + std::string str; + switch (ev) + { + case std::codecvt_base::ok: + str = "ok"; + break; + case std::codecvt_base::partial: + str = "partial"; + break; + case std::codecvt_base::error: + str = "error"; + break; + case std::codecvt_base::noconv: + str = "noconv"; + break; + default: + str = "unknown error"; + } + return str; + } + +} // unnamed namespace + +namespace boost +{ + namespace filesystem3 + { + + BOOST_FILESYSTEM_DECL const boost::system::error_category& codecvt_error_category() + { + static const codecvt_error_cat codecvt_error_cat_const; + return codecvt_error_cat_const; + } + + } // namespace filesystem3 +} // namespace boost + +#endif // no wide character support diff --git a/external/libs/filesystem/v3/src/operations.cpp b/external/libs/filesystem/v3/src/operations.cpp new file mode 100644 index 0000000..fb78520 --- /dev/null +++ b/external/libs/filesystem/v3/src/operations.cpp @@ -0,0 +1,2210 @@ +// operations.cpp --------------------------------------------------------------------// + +// Copyright 2002-2009 Beman Dawes +// Copyright 2001 Dietmar Kuehl + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// See library home page at http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +// define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) +#if !(defined(__HP_aCC) && defined(_ILP32) && !defined(_STATVFS_ACPP_PROBLEMS_FIXED)) +#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect, +#endif +#if !defined(__PGI) +#define __USE_FILE_OFFSET64 // but that is harmless on Windows and on POSIX + // 64-bit systems or on 32-bit systems which don't have files larger + // than can be represented by a traditional POSIX/UNIX off_t type. + // OTOH, defining them should kick in 64-bit off_t's (and thus + // st_size)on 32-bit systems that provide the Large File + // Support (LFS)interface, such as Linux, Solaris, and IRIX. + // The defines are given before any headers are included to + // ensure that they are available to all included headers. + // That is required at least on Solaris, and possibly on other + // systems as well. +#else +#define _FILE_OFFSET_BITS 64 +#endif + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) + +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r()needs this +#endif + +#include +#include +#include +#include +#include // for malloc, free +#include // even on Windows some functions use stat() +#include +#include // for remove, rename +#if defined(__QNXNTO__) // see ticket #5355 +# include +#endif +#include + +#ifdef BOOST_FILEYSTEM_INCLUDE_IOSTREAM +# include +#endif + +namespace fs = boost::filesystem3; +using boost::filesystem3::path; +using boost::filesystem3::filesystem_error; +using boost::filesystem3::perms; +using boost::system::error_code; +using boost::system::error_category; +using boost::system::system_category; +using std::string; +using std::wstring; + +# ifdef BOOST_POSIX_API + + const fs::path dot_path("."); + const fs::path dot_dot_path(".."); +# include +# if !defined(__APPLE__) && !defined(__OpenBSD__) +# include +# define BOOST_STATVFS statvfs +# define BOOST_STATVFS_F_FRSIZE vfs.f_frsize +# else +# ifdef __OpenBSD__ +# include +# endif +# include +# define BOOST_STATVFS statfs +# define BOOST_STATVFS_F_FRSIZE static_cast(vfs.f_bsize) +# endif +# include +# include +# include +# include +# include "limits.h" + +# else // BOOST_WINDOW_API + + const fs::path dot_path(L"."); + const fs::path dot_dot_path(L".."); +# if (defined(__MINGW32__) || defined(__CYGWIN__)) && !defined(WINVER) + // Versions of MinGW or Cygwin that support Filesystem V3 support at least WINVER 0x501. + // See MinGW's windef.h +# define WINVER 0x501 +# endif +# include +# include +# include +# if !defined(_WIN32_WINNT) +# define _WIN32_WINNT 0x0500 +# endif +# if defined(__BORLANDC__) || defined(__MWERKS__) +# if defined(__BORLANDC__) + using std::time_t; +# endif +# include +# else +# include +# endif + +// REPARSE_DATA_BUFFER related definitions are found in ntifs.h, which is part of the +// Windows Device Driver Kit. Since that's inconvenient, the definitions are provided +// here. See http://msdn.microsoft.com/en-us/library/ms791514.aspx + +#if !defined(REPARSE_DATA_BUFFER_HEADER_SIZE) // mingw winnt.h does provide the defs + +#define SYMLINK_FLAG_RELATIVE 1 + +typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + ULONG Flags; + WCHAR PathBuffer[1]; + /* Example of distinction between substitute and print names: + mklink /d ldrive c:\ + SubstituteName: c:\\??\ + PrintName: c:\ + */ + } SymbolicLinkReparseBuffer; + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +#define REPARSE_DATA_BUFFER_HEADER_SIZE \ + FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) + +#endif + +#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE +#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) +#endif + +# ifndef FSCTL_GET_REPARSE_POINT +# define FSCTL_GET_REPARSE_POINT 0x900a8 +# endif + +# ifndef IO_REPARSE_TAG_SYMLINK +# define IO_REPARSE_TAG_SYMLINK (0xA000000CL) +# endif + +# endif // BOOST_WINDOWS_API + +// BOOST_FILESYSTEM_STATUS_CACHE enables file_status cache in +// dir_itr_increment. The config tests are placed here because some of the +// macros being tested come from dirent.h. +// +// TODO: find out what macros indicate dirent::d_type present in more libraries +# if defined(BOOST_WINDOWS_API)\ + || defined(_DIRENT_HAVE_D_TYPE)// defined by GNU C library if d_type present +# define BOOST_FILESYSTEM_STATUS_CACHE +# endif + +// POSIX/Windows macros ----------------------------------------------------// + +// Portions of the POSIX and Windows API's are very similar, except for name, +// order of arguments, and meaning of zero/non-zero returns. The macros below +// abstract away those differences. They follow Windows naming and order of +// arguments, and return true to indicate no error occurred. [POSIX naming, +// order of arguments, and meaning of return were followed initially, but +// found to be less clear and cause more coding errors.] + +# if defined(BOOST_POSIX_API) + +// POSIX uses a 0 return to indicate success +# define BOOST_ERRNO errno +# define BOOST_SET_CURRENT_DIRECTORY(P)(::chdir(P)== 0) +# define BOOST_CREATE_DIRECTORY(P)(::mkdir(P, S_IRWXU|S_IRWXG|S_IRWXO)== 0) +# define BOOST_CREATE_HARD_LINK(F,T)(::link(T, F)== 0) +# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(::symlink(T, F)== 0) +# define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0) +# define BOOST_DELETE_FILE(P)(::unlink(P)== 0) +# define BOOST_COPY_DIRECTORY(F,T)(!(::stat(from.c_str(), &from_stat)!= 0\ + || ::mkdir(to.c_str(),from_stat.st_mode)!= 0)) +# define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool) +# define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0) +# define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0) + +# define BOOST_ERROR_NOT_SUPPORTED ENOSYS +# define BOOST_ERROR_ALREADY_EXISTS EEXIST + +# else // BOOST_WINDOWS_API + +// Windows uses a non-0 return to indicate success +# define BOOST_ERRNO ::GetLastError() +# define BOOST_SET_CURRENT_DIRECTORY(P)(::SetCurrentDirectoryW(P)!= 0) +# define BOOST_CREATE_DIRECTORY(P)(::CreateDirectoryW(P, 0)!= 0) +# define BOOST_CREATE_HARD_LINK(F,T)(create_hard_link_api(F, T, 0)!= 0) +# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(create_symbolic_link_api(F, T, Flag)!= 0) +# define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0) +# define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0) +# define BOOST_COPY_DIRECTORY(F,T)(::CreateDirectoryExW(F, T, 0)!= 0) +# define BOOST_COPY_FILE(F,T,FailIfExistsBool)(::CopyFileW(F, T, FailIfExistsBool)!= 0) +# define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING)!= 0) +# define BOOST_RESIZE_FILE(P,SZ)(resize_file_api(P, SZ)!= 0) +# define BOOST_READ_SYMLINK(P,T) + +# define BOOST_ERROR_ALREADY_EXISTS ERROR_ALREADY_EXISTS +# define BOOST_ERROR_NOT_SUPPORTED ERROR_NOT_SUPPORTED + +# endif + +//--------------------------------------------------------------------------------------// +// // +// helpers (all operating systems) // +// // +//--------------------------------------------------------------------------------------// + +namespace +{ + + fs::file_type query_file_type(const path& p, error_code* ec); + + boost::filesystem3::directory_iterator end_dir_itr; + + const std::size_t buf_size(128); + const error_code ok; + + bool error(bool was_error, error_code* ec, const string& message) + { + if (!was_error) + { + if (ec != 0) ec->clear(); + } + else + { // error + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error(message, + error_code(BOOST_ERRNO, system_category()))); + else + ec->assign(BOOST_ERRNO, system_category()); + } + return was_error; + } + + bool error(bool was_error, const path& p, error_code* ec, const string& message) + { + if (!was_error) + { + if (ec != 0) ec->clear(); + } + else + { // error + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error(message, + p, error_code(BOOST_ERRNO, system_category()))); + else + ec->assign(BOOST_ERRNO, system_category()); + } + return was_error; + } + + bool error(bool was_error, const path& p1, const path& p2, error_code* ec, + const string& message) + { + if (!was_error) + { + if (ec != 0) ec->clear(); + } + else + { // error + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error(message, + p1, p2, error_code(BOOST_ERRNO, system_category()))); + else + ec->assign(BOOST_ERRNO, system_category()); + } + return was_error; + } + + bool error(bool was_error, const error_code& result, + const path& p, error_code* ec, const string& message) + // Overwrites ec if there has already been an error + { + if (!was_error) + { + if (ec != 0) ec->clear(); + } + else + { // error + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error(message, p, result)); + else + *ec = result; + } + return was_error; + } + + bool error(bool was_error, const error_code& result, + const path& p1, const path& p2, error_code* ec, const string& message) + // Overwrites ec if there has already been an error + { + if (!was_error) + { + if (ec != 0) ec->clear(); + } + else + { // error + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error(message, p1, p2, result)); + else + *ec = result; + } + return was_error; + } + + bool is_empty_directory(const path& p) + { + return fs::directory_iterator(p)== end_dir_itr; + } + + bool remove_directory(const path& p) // true if succeeds + { return BOOST_REMOVE_DIRECTORY(p.c_str()); } + + bool remove_file(const path& p) // true if succeeds + { return BOOST_DELETE_FILE(p.c_str()); } + + // called by remove and remove_all_aux + bool remove_file_or_directory(const path& p, fs::file_type type, error_code* ec) + // return true if file removed, false if not removed + { + if (type == fs::file_not_found) + { + if (ec != 0) ec->clear(); + return false; + } + + if (type == fs::directory_file +# ifdef BOOST_WINDOWS_API + || type == fs::_detail_directory_symlink +# endif + ) + { + if (error(!remove_directory(p), p, ec, "boost::filesystem::remove")) + return false; + } + else + { + if (error(!remove_file(p), p, ec, "boost::filesystem::remove")) + return false; + } + return true; + } + + boost::uintmax_t remove_all_aux(const path& p, fs::file_type type, + error_code* ec) + { + boost::uintmax_t count = 1; + + if (type == fs::directory_file) // but not a directory symlink + { + for (fs::directory_iterator itr(p); + itr != end_dir_itr; ++itr) + { + fs::file_type tmp_type = query_file_type(itr->path(), ec); + if (ec != 0 && *ec) + return count; + count += remove_all_aux(itr->path(), tmp_type, ec); + } + } + remove_file_or_directory(p, type, ec); + return count; + } + +#ifdef BOOST_POSIX_API + +//--------------------------------------------------------------------------------------// +// // +// POSIX-specific helpers // +// // +//--------------------------------------------------------------------------------------// + + const char dot = '.'; + + bool not_found_error(int errval) + { + return errno == ENOENT || errno == ENOTDIR; + } + + bool // true if ok + copy_file_api(const std::string& from_p, + const std::string& to_p, bool fail_if_exists) + { + const std::size_t buf_sz = 32768; + boost::scoped_array buf(new char [buf_sz]); + int infile=-1, outfile=-1; // -1 means not open + + // bug fixed: code previously did a stat()on the from_file first, but that + // introduced a gratuitous race condition; the stat()is now done after the open() + + if ((infile = ::open(from_p.c_str(), O_RDONLY))< 0) + { return false; } + + struct stat from_stat; + if (::stat(from_p.c_str(), &from_stat)!= 0) + { + ::close(infile); + return false; + } + + int oflag = O_CREAT | O_WRONLY | O_TRUNC; + if (fail_if_exists) + oflag |= O_EXCL; + if ((outfile = ::open(to_p.c_str(), oflag, from_stat.st_mode))< 0) + { + int open_errno = errno; + BOOST_ASSERT(infile >= 0); + ::close(infile); + errno = open_errno; + return false; + } + + ssize_t sz, sz_read=1, sz_write; + while (sz_read > 0 + && (sz_read = ::read(infile, buf.get(), buf_sz))> 0) + { + // Allow for partial writes - see Advanced Unix Programming (2nd Ed.), + // Marc Rochkind, Addison-Wesley, 2004, page 94 + sz_write = 0; + do + { + if ((sz = ::write(outfile, buf.get() + sz_write, + sz_read - sz_write))< 0) + { + sz_read = sz; // cause read loop termination + break; // and error to be thrown after closes + } + sz_write += sz; + } while (sz_write < sz_read); + } + + if (::close(infile)< 0)sz_read = -1; + if (::close(outfile)< 0)sz_read = -1; + + return sz_read >= 0; + } + + inline fs::file_type query_file_type(const path& p, error_code* ec) + { + return fs::detail::symlink_status(p, ec).type(); + } + +# else + +//--------------------------------------------------------------------------------------// +// // +// Windows-specific helpers // +// // +//--------------------------------------------------------------------------------------// + + const wchar_t dot = L'.'; + + bool not_found_error(int errval) + { + return errval == ERROR_FILE_NOT_FOUND + || errval == ERROR_PATH_NOT_FOUND + || errval == ERROR_INVALID_NAME // "tools/jam/src/:sys:stat.h", "//foo" + || errval == ERROR_INVALID_DRIVE // USB card reader with no card inserted + || errval == ERROR_NOT_READY // CD/DVD drive with no disc inserted + || errval == ERROR_INVALID_PARAMETER // ":sys:stat.h" + || errval == ERROR_BAD_PATHNAME // "//nosuch" on Win64 + || errval == ERROR_BAD_NETPATH; // "//nosuch" on Win32 + } + +// some distributions of mingw as early as GLIBCXX__ 20110325 have _stricmp, but the +// offical 4.6.2 release with __GLIBCXX__ 20111026 doesn't. Play it safe for now, and +// only use _stricmp if _MSC_VER is defined +#if defined(_MSC_VER) // || (defined(__GLIBCXX__) && __GLIBCXX__ >= 20110325) +# define BOOST_FILESYSTEM_STRICMP _stricmp +#else +# define BOOST_FILESYSTEM_STRICMP strcmp +#endif + + perms make_permissions(const path& p, DWORD attr) + { + perms prms = fs::owner_read | fs::group_read | fs::others_read; + if ((attr & FILE_ATTRIBUTE_READONLY) == 0) + prms |= fs::owner_write | fs::group_write | fs::others_write; + if (BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".exe") == 0 + || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".com") == 0 + || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".bat") == 0 + || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".cmd") == 0) + prms |= fs::owner_exe | fs::group_exe | fs::others_exe; + return prms; + } + + // these constants come from inspecting some Microsoft sample code + std::time_t to_time_t(const FILETIME & ft) + { + __int64 t = (static_cast<__int64>(ft.dwHighDateTime)<< 32) + + ft.dwLowDateTime; +# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0 + t -= 116444736000000000LL; +# else + t -= 116444736000000000; +# endif + t /= 10000000; + return static_cast(t); + } + + void to_FILETIME(std::time_t t, FILETIME & ft) + { + __int64 temp = t; + temp *= 10000000; +# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0 + temp += 116444736000000000LL; +# else + temp += 116444736000000000; +# endif + ft.dwLowDateTime = static_cast(temp); + ft.dwHighDateTime = static_cast(temp >> 32); + } + + // Thanks to Jeremy Maitin-Shepard for much help and for permission to + // base the equivalent()implementation on portions of his + // file-equivalence-win32.cpp experimental code. + + struct handle_wrapper + { + HANDLE handle; + handle_wrapper(HANDLE h) + : handle(h){} + ~handle_wrapper() + { + if (handle != INVALID_HANDLE_VALUE) + ::CloseHandle(handle); + } + }; + + HANDLE create_file_handle(const path& p, DWORD dwDesiredAccess, + DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile) + { + return ::CreateFileW(p.c_str(), dwDesiredAccess, dwShareMode, + lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, + hTemplateFile); + } + + bool is_reparse_point_a_symlink(const path& p) + { + handle_wrapper h(create_file_handle(p, FILE_READ_EA, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL)); + if (h.handle == INVALID_HANDLE_VALUE) + return false; + + boost::scoped_array buf(new char [MAXIMUM_REPARSE_DATA_BUFFER_SIZE]); + + // Query the reparse data + DWORD dwRetLen; + BOOL result = ::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, NULL, 0, buf.get(), + MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &dwRetLen, NULL); + if (!result) return false; + + return reinterpret_cast(buf.get()) + ->ReparseTag == IO_REPARSE_TAG_SYMLINK; + } + + inline std::size_t get_full_path_name( + const path& src, std::size_t len, wchar_t* buf, wchar_t** p) + { + return static_cast( + ::GetFullPathNameW(src.c_str(), static_cast(len), buf, p)); + } + + fs::file_status process_status_failure(const path& p, error_code* ec) + { + int errval(::GetLastError()); + if (ec != 0) // always report errval, even though some + ec->assign(errval, system_category()); // errval values are not status_errors + + if (not_found_error(errval)) + { + return fs::file_status(fs::file_not_found, fs::no_perms); + } + else if ((errval == ERROR_SHARING_VIOLATION)) + { + return fs::file_status(fs::type_unknown); + } + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status", + p, error_code(errval, system_category()))); + return fs::file_status(fs::status_error); + } + + // differs from symlink_status() in that directory symlinks are reported as + // _detail_directory_symlink, as required on Windows by remove() and its helpers. + fs::file_type query_file_type(const path& p, error_code* ec) + { + DWORD attr(::GetFileAttributesW(p.c_str())); + if (attr == 0xFFFFFFFF) + { + return process_status_failure(p, ec).type(); + } + + if (ec != 0) ec->clear(); + + if (attr & FILE_ATTRIBUTE_REPARSE_POINT) + { + if (is_reparse_point_a_symlink(p)) + return (attr & FILE_ATTRIBUTE_DIRECTORY) + ? fs::_detail_directory_symlink + : fs::symlink_file; + return fs::reparse_file; + } + + return (attr & FILE_ATTRIBUTE_DIRECTORY) + ? fs::directory_file + : fs::regular_file; + } + + BOOL resize_file_api(const wchar_t* p, boost::uintmax_t size) + { + HANDLE handle = CreateFileW(p, GENERIC_WRITE, 0, 0, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, 0); + LARGE_INTEGER sz; + sz.QuadPart = size; + return handle != INVALID_HANDLE_VALUE + && ::SetFilePointerEx(handle, sz, 0, FILE_BEGIN) + && ::SetEndOfFile(handle) + && ::CloseHandle(handle); + } + + // Windows kernel32.dll functions that may or may not be present + // must be accessed through pointers + + typedef BOOL (WINAPI *PtrCreateHardLinkW)( + /*__in*/ LPCWSTR lpFileName, + /*__in*/ LPCWSTR lpExistingFileName, + /*__reserved*/ LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + + PtrCreateHardLinkW create_hard_link_api = PtrCreateHardLinkW( + ::GetProcAddress( + ::GetModuleHandle(TEXT("kernel32.dll")), "CreateHardLinkW")); + + typedef BOOLEAN (WINAPI *PtrCreateSymbolicLinkW)( + /*__in*/ LPCWSTR lpSymlinkFileName, + /*__in*/ LPCWSTR lpTargetFileName, + /*__in*/ DWORD dwFlags + ); + + PtrCreateSymbolicLinkW create_symbolic_link_api = PtrCreateSymbolicLinkW( + ::GetProcAddress( + ::GetModuleHandle(TEXT("kernel32.dll")), "CreateSymbolicLinkW")); + +#endif + +//#ifdef BOOST_WINDOWS_API +// +// +// inline bool get_free_disk_space(const std::wstring& ph, +// PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free) +// { return ::GetDiskFreeSpaceExW(ph.c_str(), avail, total, free)!= 0; } +// +//#endif + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// // +// operations functions declared in operations.hpp // +// in alphabetic order // +// // +//--------------------------------------------------------------------------------------// + +namespace boost +{ +namespace filesystem3 +{ + + BOOST_FILESYSTEM_DECL + path absolute(const path& p, const path& base) + { +// if ( p.empty() || p.is_absolute() ) +// return p; +// // recursively calling absolute is sub-optimal, but is simple +// path abs_base(base.is_absolute() ? base : absolute(base)); +//# ifdef BOOST_WINDOWS_API +// if (p.has_root_directory()) +// return abs_base.root_name() / p; +// // !p.has_root_directory +// if (p.has_root_name()) +// return p.root_name() +// / abs_base.root_directory() / abs_base.relative_path() / p.relative_path(); +// // !p.has_root_name() +//# endif +// return abs_base / p; + + // recursively calling absolute is sub-optimal, but is sure and simple + path abs_base(base.is_absolute() ? base : absolute(base)); + + // store expensive to compute values that are needed multiple times + path p_root_name (p.root_name()); + path base_root_name (abs_base.root_name()); + path p_root_directory (p.root_directory()); + + if (p.empty()) + return abs_base; + + if (!p_root_name.empty()) // p.has_root_name() + { + if (p_root_directory.empty()) // !p.has_root_directory() + return p_root_name / abs_base.root_directory() + / abs_base.relative_path() / p.relative_path(); + // p is absolute, so fall through to return p at end of block + } + + else if (!p_root_directory.empty()) // p.has_root_directory() + { +# ifdef BOOST_POSIX_API + // POSIX can have root name it it is a network path + if (base_root_name.empty()) // !abs_base.has_root_name() + return p; +# endif + return base_root_name / p; + } + + else + { + return abs_base / p; + } + + return p; // p.is_absolute() is true + } + +namespace detail +{ + BOOST_FILESYSTEM_DECL bool possible_large_file_size_support() + { +# ifdef BOOST_POSIX_API + struct stat lcl_stat; + return sizeof(lcl_stat.st_size)> 4; +# else + return true; +# endif + } + + BOOST_FILESYSTEM_DECL + path canonical(const path& p, const path& base, system::error_code* ec) + { + path source (p.is_absolute() ? p : absolute(p, base)); + path result; + + system::error_code local_ec; + file_status stat (status(source, local_ec)); + + if (stat.type() == fs::file_not_found) + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error( + "boost::filesystem::canonical", source, + error_code(system::errc::no_such_file_or_directory, system::generic_category()))); + ec->assign(system::errc::no_such_file_or_directory, system::generic_category()); + return result; + } + else if (local_ec) + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error( + "boost::filesystem::canonical", source, local_ec)); + *ec = local_ec; + return result; + } + + bool scan (true); + while (scan) + { + scan = false; + result.clear(); + for (path::iterator itr = source.begin(); itr != source.end(); ++itr) + { + if (*itr == dot_path) + continue; + if (*itr == dot_dot_path) + { + result.remove_filename(); + continue; + } + + result /= *itr; + + bool is_sym (is_symlink(detail::symlink_status(result, ec))); + if (ec && *ec) + return path(); + + if (is_sym) + { + path link(detail::read_symlink(result, ec)); + if (ec && *ec) + return path(); + result.remove_filename(); + + if (link.is_absolute()) + { + for (++itr; itr != source.end(); ++itr) + link /= *itr; + source = link; + } + else // link is relative + { + path new_source(result); + new_source /= link; + for (++itr; itr != source.end(); ++itr) + new_source /= *itr; + source = new_source; + } + scan = true; // symlink causes scan to be restarted + break; + } + } + } + if (ec != 0) + ec->clear(); + BOOST_ASSERT_MSG(result.is_absolute(), "canonical() implementation error; please report"); + return result; + } + + BOOST_FILESYSTEM_DECL + void copy(const path& from, const path& to, system::error_code* ec) + { + file_status s(symlink_status(from, *ec)); + if (ec != 0 && *ec) return; + + if(is_symlink(s)) + { + copy_symlink(from, to, *ec); + } + else if(is_directory(s)) + { + copy_directory(from, to, *ec); + } + else if(is_regular_file(s)) + { + copy_file(from, to, copy_option::fail_if_exists, *ec); + } + else + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::copy", + from, to, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()))); + ec->assign(BOOST_ERROR_NOT_SUPPORTED, system_category()); + } + } + + BOOST_FILESYSTEM_DECL + void copy_directory(const path& from, const path& to, system::error_code* ec) + { +# ifdef BOOST_POSIX_API + struct stat from_stat; +# endif + error(!BOOST_COPY_DIRECTORY(from.c_str(), to.c_str()), + from, to, ec, "boost::filesystem::copy_directory"); + } + + BOOST_FILESYSTEM_DECL + void copy_file(const path& from, const path& to, + BOOST_SCOPED_ENUM(copy_option)option, + error_code* ec) + { + error(!BOOST_COPY_FILE(from.c_str(), to.c_str(), + option == copy_option::fail_if_exists), + from, to, ec, "boost::filesystem::copy_file"); + } + + BOOST_FILESYSTEM_DECL + void copy_symlink(const path& existing_symlink, const path& new_symlink, + system::error_code* ec) + { +# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 + error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), + new_symlink, existing_symlink, ec, + "boost::filesystem::copy_symlink"); + +# else // modern Windows or BOOST_POSIX_API + path p(read_symlink(existing_symlink, ec)); + if (ec != 0 && *ec) return; + create_symlink(p, new_symlink, ec); + +# endif + } + + BOOST_FILESYSTEM_DECL + bool create_directories(const path& p, system::error_code* ec) + { + if (p.empty() || exists(p)) + { + if (!p.empty() && !is_directory(p)) + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error( + "boost::filesystem::create_directories", p, + error_code(system::errc::file_exists, system::generic_category()))); + else ec->assign(system::errc::file_exists, system::generic_category()); + } + return false; + } + + // First create branch, by calling ourself recursively + create_directories(p.parent_path(), ec); + // Now that parent's path exists, create the directory + create_directory(p, ec); + return true; + } + + BOOST_FILESYSTEM_DECL + bool create_directory(const path& p, error_code* ec) + { + if (BOOST_CREATE_DIRECTORY(p.c_str())) + { + if (ec != 0) ec->clear(); + return true; + } + + // attempt to create directory failed + int errval(BOOST_ERRNO); // save reason for failure + error_code dummy; + if (errval == BOOST_ERROR_ALREADY_EXISTS && is_directory(p, dummy)) + { + if (ec != 0) ec->clear(); + return false; + } + + // attempt to create directory failed && it doesn't already exist + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::create_directory", + p, error_code(errval, system_category()))); + else + ec->assign(errval, system_category()); + return false; + } + + BOOST_FILESYSTEM_DECL + void create_directory_symlink(const path& to, const path& from, + system::error_code* ec) + { +# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 + + error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec, + "boost::filesystem::create_directory_symlink"); +# else + +# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600 + // see if actually supported by Windows runtime dll + if (error(!create_symbolic_link_api, + error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), + to, from, ec, + "boost::filesystem::create_directory_symlink")) + return; +# endif + + error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), SYMBOLIC_LINK_FLAG_DIRECTORY), + to, from, ec, "boost::filesystem::create_directory_symlink"); +# endif + } + + BOOST_FILESYSTEM_DECL + void create_hard_link(const path& to, const path& from, error_code* ec) + { + +# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0500 // SDK earlier than Win 2K + + error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec, + "boost::filesystem::create_hard_link"); +# else + +# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0500 + // see if actually supported by Windows runtime dll + if (error(!create_hard_link_api, + error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), + to, from, ec, + "boost::filesystem::create_hard_link")) + return; +# endif + + error(!BOOST_CREATE_HARD_LINK(from.c_str(), to.c_str()), to, from, ec, + "boost::filesystem::create_hard_link"); +# endif + } + + BOOST_FILESYSTEM_DECL + void create_symlink(const path& to, const path& from, error_code* ec) + { +# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 + error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec, + "boost::filesystem::create_directory_symlink"); +# else + +# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600 + // see if actually supported by Windows runtime dll + if (error(!create_symbolic_link_api, + error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), + to, from, ec, + "boost::filesystem::create_symlink")) + return; +# endif + + error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), 0), + to, from, ec, "boost::filesystem::create_symlink"); +# endif + } + + BOOST_FILESYSTEM_DECL + path current_path(error_code* ec) + { +# ifdef BOOST_POSIX_API + path cur; + for (long path_max = 128;; path_max *=2)// loop 'til buffer large enough + { + boost::scoped_array + buf(new char[static_cast(path_max)]); + if (::getcwd(buf.get(), static_cast(path_max))== 0) + { + if (error(errno != ERANGE + // bug in some versions of the Metrowerks C lib on the Mac: wrong errno set +# if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) + && errno != 0 +# endif + , ec, "boost::filesystem::current_path")) + { + break; + } + } + else + { + cur = buf.get(); + if (ec != 0) ec->clear(); + break; + } + } + return cur; + +# else + DWORD sz; + if ((sz = ::GetCurrentDirectoryW(0, NULL))== 0)sz = 1; + boost::scoped_array buf(new path::value_type[sz]); + error(::GetCurrentDirectoryW(sz, buf.get())== 0, ec, + "boost::filesystem::current_path"); + return path(buf.get()); +# endif + } + + + BOOST_FILESYSTEM_DECL + void current_path(const path& p, system::error_code* ec) + { + error(!BOOST_SET_CURRENT_DIRECTORY(p.c_str()), + p, ec, "boost::filesystem::current_path"); + } + + BOOST_FILESYSTEM_DECL + bool equivalent(const path& p1, const path& p2, system::error_code* ec) + { +# ifdef BOOST_POSIX_API + struct stat s2; + int e2(::stat(p2.c_str(), &s2)); + struct stat s1; + int e1(::stat(p1.c_str(), &s1)); + + if (e1 != 0 || e2 != 0) + { + // if one is invalid and the other isn't then they aren't equivalent, + // but if both are invalid then it is an error + error (e1 != 0 && e2 != 0, p1, p2, ec, "boost::filesystem::equivalent"); + return false; + } + + // both stats now known to be valid + return s1.st_dev == s2.st_dev && s1.st_ino == s2.st_ino + // According to the POSIX stat specs, "The st_ino and st_dev fields + // taken together uniquely identify the file within the system." + // Just to be sure, size and mod time are also checked. + && s1.st_size == s2.st_size && s1.st_mtime == s2.st_mtime; + +# else // Windows + + // Note well: Physical location on external media is part of the + // equivalence criteria. If there are no open handles, physical location + // can change due to defragmentation or other relocations. Thus handles + // must be held open until location information for both paths has + // been retrieved. + + // p2 is done first, so any error reported is for p1 + handle_wrapper h2( + create_file_handle( + p2.c_str(), + 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + 0)); + + handle_wrapper h1( + create_file_handle( + p1.c_str(), + 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + 0)); + + if (h1.handle == INVALID_HANDLE_VALUE + || h2.handle == INVALID_HANDLE_VALUE) + { + // if one is invalid and the other isn't, then they aren't equivalent, + // but if both are invalid then it is an error + error(h1.handle == INVALID_HANDLE_VALUE + && h2.handle == INVALID_HANDLE_VALUE, p1, p2, ec, + "boost::filesystem::equivalent"); + return false; + } + + // at this point, both handles are known to be valid + + BY_HANDLE_FILE_INFORMATION info1, info2; + + if (error(!::GetFileInformationByHandle(h1.handle, &info1), + p1, p2, ec, "boost::filesystem::equivalent")) + return false; + + if (error(!::GetFileInformationByHandle(h2.handle, &info2), + p1, p2, ec, "boost::filesystem::equivalent")) + return false; + + // In theory, volume serial numbers are sufficient to distinguish between + // devices, but in practice VSN's are sometimes duplicated, so last write + // time and file size are also checked. + return + info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber + && info1.nFileIndexHigh == info2.nFileIndexHigh + && info1.nFileIndexLow == info2.nFileIndexLow + && info1.nFileSizeHigh == info2.nFileSizeHigh + && info1.nFileSizeLow == info2.nFileSizeLow + && info1.ftLastWriteTime.dwLowDateTime + == info2.ftLastWriteTime.dwLowDateTime + && info1.ftLastWriteTime.dwHighDateTime + == info2.ftLastWriteTime.dwHighDateTime; + +# endif + } + + BOOST_FILESYSTEM_DECL + boost::uintmax_t file_size(const path& p, error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + if (error(::stat(p.c_str(), &path_stat)!= 0, + p, ec, "boost::filesystem::file_size")) + return static_cast(-1); + if (error(!S_ISREG(path_stat.st_mode), + error_code(EPERM, system_category()), + p, ec, "boost::filesystem::file_size")) + return static_cast(-1); + + return static_cast(path_stat.st_size); + +# else // Windows + + // assume uintmax_t is 64-bits on all Windows compilers + + WIN32_FILE_ATTRIBUTE_DATA fad; + + if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0, + p, ec, "boost::filesystem::file_size")) + return static_cast(-1); + + if (error((fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!= 0, + error_code(ERROR_NOT_SUPPORTED, system_category()), + p, ec, "boost::filesystem::file_size")) + return static_cast(-1); + + return (static_cast(fad.nFileSizeHigh) + << (sizeof(fad.nFileSizeLow)*8)) + fad.nFileSizeLow; +# endif + } + + BOOST_FILESYSTEM_DECL + boost::uintmax_t hard_link_count(const path& p, system::error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + return error(::stat(p.c_str(), &path_stat)!= 0, + p, ec, "boost::filesystem::hard_link_count") + ? 0 + : static_cast(path_stat.st_nlink); + +# else // Windows + + // Link count info is only available through GetFileInformationByHandle + BY_HANDLE_FILE_INFORMATION info; + handle_wrapper h( + create_file_handle(p.c_str(), 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)); + return + !error(h.handle == INVALID_HANDLE_VALUE, + p, ec, "boost::filesystem::hard_link_count") + && !error(::GetFileInformationByHandle(h.handle, &info)== 0, + p, ec, "boost::filesystem::hard_link_count") + ? info.nNumberOfLinks + : 0; +# endif + } + + BOOST_FILESYSTEM_DECL + path initial_path(error_code* ec) + { + static path init_path; + if (init_path.empty()) + init_path = current_path(ec); + else if (ec != 0) ec->clear(); + return init_path; + } + + BOOST_FILESYSTEM_DECL + bool is_empty(const path& p, system::error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + if (error(::stat(p.c_str(), &path_stat)!= 0, + p, ec, "boost::filesystem::is_empty")) + return false; + return S_ISDIR(path_stat.st_mode) + ? is_empty_directory(p) + : path_stat.st_size == 0; +# else + + WIN32_FILE_ATTRIBUTE_DATA fad; + if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0, + p, ec, "boost::filesystem::is_empty")) + return false; + + if (ec != 0) ec->clear(); + return + (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + ? is_empty_directory(p) + : (!fad.nFileSizeHigh && !fad.nFileSizeLow); +# endif + } + + BOOST_FILESYSTEM_DECL + std::time_t last_write_time(const path& p, system::error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + if (error(::stat(p.c_str(), &path_stat)!= 0, + p, ec, "boost::filesystem::last_write_time")) + return std::time_t(-1); + return path_stat.st_mtime; + +# else + + handle_wrapper hw( + create_file_handle(p.c_str(), 0, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)); + + if (error(hw.handle == INVALID_HANDLE_VALUE, + p, ec, "boost::filesystem::last_write_time")) + return std::time_t(-1); + + FILETIME lwt; + + if (error(::GetFileTime(hw.handle, 0, 0, &lwt)== 0, + p, ec, "boost::filesystem::last_write_time")) + return std::time_t(-1); + + return to_time_t(lwt); +# endif + } + + BOOST_FILESYSTEM_DECL + void last_write_time(const path& p, const std::time_t new_time, + system::error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + if (error(::stat(p.c_str(), &path_stat)!= 0, + p, ec, "boost::filesystem::last_write_time")) + return; + ::utimbuf buf; + buf.actime = path_stat.st_atime; // utime()updates access time too:-( + buf.modtime = new_time; + error(::utime(p.c_str(), &buf)!= 0, + p, ec, "boost::filesystem::last_write_time"); + +# else + + handle_wrapper hw( + create_file_handle(p.c_str(), FILE_WRITE_ATTRIBUTES, + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)); + + if (error(hw.handle == INVALID_HANDLE_VALUE, + p, ec, "boost::filesystem::last_write_time")) + return; + + FILETIME lwt; + to_FILETIME(new_time, lwt); + + error(::SetFileTime(hw.handle, 0, 0, &lwt)== 0, + p, ec, "boost::filesystem::last_write_time"); +# endif + } + +# ifdef BOOST_POSIX_API + const perms active_bits(all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit); + inline mode_t mode_cast(perms prms) { return prms & active_bits; } +# endif + + BOOST_FILESYSTEM_DECL + void permissions(const path& p, perms prms, system::error_code* ec) + { + BOOST_ASSERT_MSG(!((prms & add_perms) && (prms & remove_perms)), + "add_perms and remove_perms are mutually exclusive"); + + if ((prms & add_perms) && (prms & remove_perms)) // precondition failed + return; + +# ifdef BOOST_POSIX_API + error_code local_ec; + file_status current_status((prms & symlink_perms) + ? fs::symlink_status(p, local_ec) + : fs::status(p, local_ec)); + if (local_ec) + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error( + "boost::filesystem::permissions", p, local_ec)); + else + *ec = local_ec; + return; + } + + if (prms & add_perms) + prms |= current_status.permissions(); + else if (prms & remove_perms) + prms = current_status.permissions() & ~prms; + + // Mac OS X Lion and some other platforms don't support fchmodat() +# if defined(AT_FDCWD) && defined(AT_SYMLINK_NOFOLLOW) \ + && (!defined(__SUNPRO_CC) || __SUNPRO_CC > 0x5100) + if (::fchmodat(AT_FDCWD, p.c_str(), mode_cast(prms), + !(prms & symlink_perms) ? 0 : AT_SYMLINK_NOFOLLOW)) +# else // fallback if fchmodat() not supported + if (::chmod(p.c_str(), mode_cast(prms))) +# endif + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error( + "boost::filesystem::permissions", p, + error_code(errno, system::generic_category()))); + else + ec->assign(errno, system::generic_category()); + } + +# else // Windows + + // if not going to alter FILE_ATTRIBUTE_READONLY, just return + if (!(!((prms & (add_perms | remove_perms))) + || (prms & (owner_write|group_write|others_write)))) + return; + + DWORD attr = ::GetFileAttributesW(p.c_str()); + + if (error(attr == 0, p, ec, "boost::filesystem::permissions")) + return; + + if (prms & add_perms) + attr &= ~FILE_ATTRIBUTE_READONLY; + else if (prms & remove_perms) + attr |= FILE_ATTRIBUTE_READONLY; + else if (prms & (owner_write|group_write|others_write)) + attr &= ~FILE_ATTRIBUTE_READONLY; + else + attr |= FILE_ATTRIBUTE_READONLY; + + error(::SetFileAttributesW(p.c_str(), attr) == 0, + p, ec, "boost::filesystem::permissions"); +# endif + } + + BOOST_FILESYSTEM_DECL + path read_symlink(const path& p, system::error_code* ec) + { + path symlink_path; + +# ifdef BOOST_POSIX_API + + for (std::size_t path_max = 64;; path_max *= 2)// loop 'til buffer large enough + { + boost::scoped_array buf(new char[path_max]); + ssize_t result; + if ((result=::readlink(p.c_str(), buf.get(), path_max))== -1) + { + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::read_symlink", + p, error_code(errno, system_category()))); + else ec->assign(errno, system_category()); + break; + } + else + { + if(result != static_cast(path_max)) + { + symlink_path.assign(buf.get(), buf.get() + result); + if (ec != 0) ec->clear(); + break; + } + } + } + +# elif _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 + error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), p, ec, + "boost::filesystem::read_symlink"); +# else // Vista and Server 2008 SDK, or later + + union info_t + { + char buf[REPARSE_DATA_BUFFER_HEADER_SIZE+MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; + REPARSE_DATA_BUFFER rdb; + } info; + + handle_wrapper h( + create_file_handle(p.c_str(), GENERIC_READ, 0, 0, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0)); + + if (error(h.handle == INVALID_HANDLE_VALUE, p, ec, "boost::filesystem::read_symlink")) + return symlink_path; + + DWORD sz; + + if (!error(::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, + 0, 0, info.buf, sizeof(info), &sz, 0) == 0, p, ec, + "boost::filesystem::read_symlink" )) + symlink_path.assign( + static_cast(info.rdb.SymbolicLinkReparseBuffer.PathBuffer) + + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t), + static_cast(info.rdb.SymbolicLinkReparseBuffer.PathBuffer) + + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t) + + info.rdb.SymbolicLinkReparseBuffer.PrintNameLength/sizeof(wchar_t)); +# endif + return symlink_path; + } + + BOOST_FILESYSTEM_DECL + bool remove(const path& p, error_code* ec) + { + error_code tmp_ec; + file_type type = query_file_type(p, &tmp_ec); + if (error(type == status_error, tmp_ec, p, ec, + "boost::filesystem::remove")) + return false; + + // Since POSIX remove() is specified to work with either files or directories, in a + // perfect world it could just be called. But some important real-world operating + // systems (Windows, Mac OS X, for example) don't implement the POSIX spec. So + // remove_file_or_directory() is always called to kep it simple. + return remove_file_or_directory(p, type, ec); + } + + BOOST_FILESYSTEM_DECL + boost::uintmax_t remove_all(const path& p, error_code* ec) + { + error_code tmp_ec; + file_type type = query_file_type(p, &tmp_ec); + if (error(type == status_error, tmp_ec, p, ec, + "boost::filesystem::remove_all")) + return 0; + + return (type != status_error && type != file_not_found) // exists + ? remove_all_aux(p, type, ec) + : 0; + } + + BOOST_FILESYSTEM_DECL + void rename(const path& old_p, const path& new_p, error_code* ec) + { + error(!BOOST_MOVE_FILE(old_p.c_str(), new_p.c_str()), old_p, new_p, ec, + "boost::filesystem::rename"); + } + + BOOST_FILESYSTEM_DECL + void resize_file(const path& p, uintmax_t size, system::error_code* ec) + { + error(!BOOST_RESIZE_FILE(p.c_str(), size), p, ec, "boost::filesystem::resize_file"); + } + + BOOST_FILESYSTEM_DECL + space_info space(const path& p, error_code* ec) + { +# ifdef BOOST_POSIX_API + struct BOOST_STATVFS vfs; + space_info info; + if (!error(::BOOST_STATVFS(p.c_str(), &vfs)!= 0, + p, ec, "boost::filesystem::space")) + { + info.capacity + = static_cast(vfs.f_blocks)* BOOST_STATVFS_F_FRSIZE; + info.free + = static_cast(vfs.f_bfree)* BOOST_STATVFS_F_FRSIZE; + info.available + = static_cast(vfs.f_bavail)* BOOST_STATVFS_F_FRSIZE; + } + +# else + ULARGE_INTEGER avail, total, free; + space_info info; + + if (!error(::GetDiskFreeSpaceExW(p.c_str(), &avail, &total, &free)== 0, + p, ec, "boost::filesystem::space")) + { + info.capacity + = (static_cast(total.HighPart)<< 32) + + total.LowPart; + info.free + = (static_cast(free.HighPart)<< 32) + + free.LowPart; + info.available + = (static_cast(avail.HighPart)<< 32) + + avail.LowPart; + } + +# endif + + else + { + info.capacity = info.free = info.available = 0; + } + return info; + } + + BOOST_FILESYSTEM_DECL + file_status status(const path& p, error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + if (::stat(p.c_str(), &path_stat)!= 0) + { + if (ec != 0) // always report errno, even though some + ec->assign(errno, system_category()); // errno values are not status_errors + + if (not_found_error(errno)) + { + return fs::file_status(fs::file_not_found, fs::no_perms); + } + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status", + p, error_code(errno, system_category()))); + return fs::file_status(fs::status_error); + } + if (ec != 0) ec->clear();; + if (S_ISDIR(path_stat.st_mode)) + return fs::file_status(fs::directory_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISREG(path_stat.st_mode)) + return fs::file_status(fs::regular_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISBLK(path_stat.st_mode)) + return fs::file_status(fs::block_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISCHR(path_stat.st_mode)) + return fs::file_status(fs::character_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISFIFO(path_stat.st_mode)) + return fs::file_status(fs::fifo_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISSOCK(path_stat.st_mode)) + return fs::file_status(fs::socket_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + return fs::file_status(fs::type_unknown); + +# else // Windows + + DWORD attr(::GetFileAttributesW(p.c_str())); + if (attr == 0xFFFFFFFF) + { + return process_status_failure(p, ec); + } + + // reparse point handling; + // since GetFileAttributesW does not resolve symlinks, try to open a file + // handle to discover if the file exists + if (attr & FILE_ATTRIBUTE_REPARSE_POINT) + { + handle_wrapper h( + create_file_handle( + p.c_str(), + 0, // dwDesiredAccess; attributes only + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, // lpSecurityAttributes + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + 0)); // hTemplateFile + if (h.handle == INVALID_HANDLE_VALUE) + { + return process_status_failure(p, ec); + } + + if (!is_reparse_point_a_symlink(p)) + return file_status(reparse_file, make_permissions(p, attr)); + } + + if (ec != 0) ec->clear(); + return (attr & FILE_ATTRIBUTE_DIRECTORY) + ? file_status(directory_file, make_permissions(p, attr)) + : file_status(regular_file, make_permissions(p, attr)); + +# endif + } + + BOOST_FILESYSTEM_DECL + file_status symlink_status(const path& p, error_code* ec) + { +# ifdef BOOST_POSIX_API + + struct stat path_stat; + if (::lstat(p.c_str(), &path_stat)!= 0) + { + if (ec != 0) // always report errno, even though some + ec->assign(errno, system_category()); // errno values are not status_errors + + if (errno == ENOENT || errno == ENOTDIR) // these are not errors + { + return fs::file_status(fs::file_not_found, fs::no_perms); + } + if (ec == 0) + BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status", + p, error_code(errno, system_category()))); + return fs::file_status(fs::status_error); + } + if (ec != 0) ec->clear(); + if (S_ISREG(path_stat.st_mode)) + return fs::file_status(fs::regular_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISDIR(path_stat.st_mode)) + return fs::file_status(fs::directory_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISLNK(path_stat.st_mode)) + return fs::file_status(fs::symlink_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISBLK(path_stat.st_mode)) + return fs::file_status(fs::block_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISCHR(path_stat.st_mode)) + return fs::file_status(fs::character_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISFIFO(path_stat.st_mode)) + return fs::file_status(fs::fifo_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + if (S_ISSOCK(path_stat.st_mode)) + return fs::file_status(fs::socket_file, + static_cast(path_stat.st_mode) & fs::perms_mask); + return fs::file_status(fs::type_unknown); + +# else // Windows + + DWORD attr(::GetFileAttributesW(p.c_str())); + if (attr == 0xFFFFFFFF) + { + return process_status_failure(p, ec); + } + + if (ec != 0) ec->clear(); + + if (attr & FILE_ATTRIBUTE_REPARSE_POINT) + return is_reparse_point_a_symlink(p) + ? file_status(symlink_file, make_permissions(p, attr)) + : file_status(reparse_file, make_permissions(p, attr)); + + return (attr & FILE_ATTRIBUTE_DIRECTORY) + ? file_status(directory_file, make_permissions(p, attr)) + : file_status(regular_file, make_permissions(p, attr)); + +# endif + } + + // contributed by Jeff Flinn + BOOST_FILESYSTEM_DECL + path temp_directory_path(system::error_code* ec) + { +# ifdef BOOST_POSIX_API + const char* val = 0; + + (val = std::getenv("TMPDIR" )) || + (val = std::getenv("TMP" )) || + (val = std::getenv("TEMP" )) || + (val = std::getenv("TEMPDIR")); + + path p((val!=0) ? val : "/tmp"); + + if (p.empty() || (ec&&!is_directory(p, *ec))||(!ec&&!is_directory(p))) + { + errno = ENOTDIR; + error(true, p, ec, "boost::filesystem::temp_directory_path"); + return p; + } + + return p; + +# else // Windows + + std::vector buf(GetTempPathW(0, NULL)); + + if (buf.empty() || GetTempPathW(buf.size(), &buf[0])==0) + { + if(!buf.empty()) ::SetLastError(ENOTDIR); + error(true, ec, "boost::filesystem::temp_directory_path"); + return path(); + } + + buf.pop_back(); + + path p(buf.begin(), buf.end()); + + if ((ec&&!is_directory(p, *ec))||(!ec&&!is_directory(p))) + { + ::SetLastError(ENOTDIR); + error(true, p, ec, "boost::filesystem::temp_directory_path"); + return path(); + } + + return p; +# endif + } + + BOOST_FILESYSTEM_DECL + path system_complete(const path& p, system::error_code* ec) + { +# ifdef BOOST_POSIX_API + return (p.empty() || p.is_absolute()) + ? p : current_path()/ p; + +# else + if (p.empty()) + { + if (ec != 0) ec->clear(); + return p; + } + wchar_t buf[buf_size]; + wchar_t* pfn; + std::size_t len = get_full_path_name(p, buf_size, buf, &pfn); + + if (error(len == 0, p, ec, "boost::filesystem::system_complete")) + return path(); + + if (len < buf_size)// len does not include null termination character + return path(&buf[0]); + + boost::scoped_array big_buf(new wchar_t[len]); + + return error(get_full_path_name(p, len , big_buf.get(), &pfn)== 0, + p, ec, "boost::filesystem::system_complete") + ? path() + : path(big_buf.get()); +# endif + } + +} // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// directory_entry // +// // +//--------------------------------------------------------------------------------------// + + file_status + directory_entry::m_get_status(system::error_code* ec) const + { + if (!status_known(m_status)) + { + // optimization: if the symlink status is known, and it isn't a symlink, + // then status and symlink_status are identical so just copy the + // symlink status to the regular status. + if (status_known(m_symlink_status) + && !is_symlink(m_symlink_status)) + { + m_status = m_symlink_status; + if (ec != 0) ec->clear(); + } + else m_status = detail::status(m_path, ec); + } + else if (ec != 0) ec->clear(); + return m_status; + } + + file_status + directory_entry::m_get_symlink_status(system::error_code* ec) const + { + if (!status_known(m_symlink_status)) + m_symlink_status = detail::symlink_status(m_path, ec); + else if (ec != 0) ec->clear(); + return m_symlink_status; + } + +// dispatch directory_entry supplied here rather than in +// , thus avoiding header circularity. +// test cases are in operations_unit_test.cpp + +namespace path_traits +{ + void dispatch(const directory_entry & de, +# ifdef BOOST_WINDOWS_API + std::wstring& to, +# else + std::string& to, +# endif + const codecvt_type &) + { + to = de.path().native(); + } + +} // namespace path_traits +} // namespace filesystem3 +} // namespace boost + +//--------------------------------------------------------------------------------------// +// // +// directory_iterator // +// // +//--------------------------------------------------------------------------------------// + +namespace +{ +# ifdef BOOST_POSIX_API + + error_code path_max(std::size_t & result) + // this code is based on Stevens and Rago, Advanced Programming in the + // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49 + { +# ifdef PATH_MAX + static std::size_t max = PATH_MAX; +# else + static std::size_t max = 0; +# endif + if (max == 0) + { + errno = 0; + long tmp = ::pathconf("/", _PC_NAME_MAX); + if (tmp < 0) + { + if (errno == 0)// indeterminate + max = 4096; // guess + else return error_code(errno, system_category()); + } + else max = static_cast(tmp + 1); // relative root + } + result = max; + return ok; + } + +#if defined(__PGI) && defined(__USE_FILE_OFFSET64) +#define dirent dirent64 +#endif + + error_code dir_itr_first(void *& handle, void *& buffer, + const char* dir, string& target, + fs::file_status &, fs::file_status &) + { + if ((handle = ::opendir(dir))== 0) + return error_code(errno, system_category()); + target = string("."); // string was static but caused trouble + // when iteration called from dtor, after + // static had already been destroyed + std::size_t path_size (0); // initialization quiets gcc warning (ticket #3509) + error_code ec = path_max(path_size); + if (ec)return ec; + dirent de; + buffer = std::malloc((sizeof(dirent) - sizeof(de.d_name)) + + path_size + 1); // + 1 for "/0" + return ok; + } + + // warning: the only dirent member updated is d_name + inline int readdir_r_simulator(DIR * dirp, struct dirent * entry, + struct dirent ** result)// *result set to 0 on end of directory + { + errno = 0; + +# if !defined(__CYGWIN__)\ + && defined(_POSIX_THREAD_SAFE_FUNCTIONS)\ + && defined(_SC_THREAD_SAFE_FUNCTIONS)\ + && (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0)\ + && (!defined(__hpux) || defined(_REENTRANT)) \ + && (!defined(_AIX) || defined(__THREAD_SAFE)) + if (::sysconf(_SC_THREAD_SAFE_FUNCTIONS)>= 0) + { return ::readdir_r(dirp, entry, result); } +# endif + + struct dirent * p; + *result = 0; + if ((p = ::readdir(dirp))== 0) + return errno; + std::strcpy(entry->d_name, p->d_name); + *result = entry; + return 0; + } + + error_code dir_itr_increment(void *& handle, void *& buffer, + string& target, fs::file_status & sf, fs::file_status & symlink_sf) + { + BOOST_ASSERT(buffer != 0); + dirent * entry(static_cast(buffer)); + dirent * result; + int return_code; + if ((return_code = readdir_r_simulator(static_cast(handle), entry, &result))!= 0) + return error_code(errno, system_category()); + if (result == 0) + return fs::detail::dir_itr_close(handle, buffer); + target = entry->d_name; +# ifdef BOOST_FILESYSTEM_STATUS_CACHE + if (entry->d_type == DT_UNKNOWN) // filesystem does not supply d_type value + { + sf = symlink_sf = fs::file_status(fs::status_error); + } + else // filesystem supplies d_type value + { + if (entry->d_type == DT_DIR) + sf = symlink_sf = fs::file_status(fs::directory_file); + else if (entry->d_type == DT_REG) + sf = symlink_sf = fs::file_status(fs::regular_file); + else if (entry->d_type == DT_LNK) + { + sf = fs::file_status(fs::status_error); + symlink_sf = fs::file_status(fs::symlink_file); + } + else sf = symlink_sf = fs::file_status(fs::status_error); + } +# else + sf = symlink_sf = fs::file_status(fs::status_error); +# endif + return ok; + } + +# else // BOOST_WINDOWS_API + + error_code dir_itr_first(void *& handle, const fs::path& dir, + wstring& target, fs::file_status & sf, fs::file_status & symlink_sf) + // Note: an empty root directory has no "." or ".." entries, so this + // causes a ERROR_FILE_NOT_FOUND error which we do not considered an + // error. It is treated as eof instead. + { + // use a form of search Sebastian Martel reports will work with Win98 + wstring dirpath(dir.wstring()); + dirpath += (dirpath.empty() + || (dirpath[dirpath.size()-1] != L'\\' + && dirpath[dirpath.size()-1] != L'/' + && dirpath[dirpath.size()-1] != L':'))? L"\\*" : L"*"; + + WIN32_FIND_DATAW data; + if ((handle = ::FindFirstFileW(dirpath.c_str(), &data)) + == INVALID_HANDLE_VALUE) + { + handle = 0; // signal eof + return error_code( (::GetLastError() == ERROR_FILE_NOT_FOUND + || ::GetLastError() == ERROR_ACCESS_DENIED + // Windows Mobile returns ERROR_NO_MORE_FILES; see ticket #3551 + || ::GetLastError() == ERROR_NO_MORE_FILES) + ? 0 : ::GetLastError(), system_category() ); + } + target = data.cFileName; + if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) + // reparse points are complex, so don't try to handle them here; instead just mark + // them as status_error which causes directory_entry caching to call status() + // and symlink_status() which do handle reparse points fully + { + sf.type(fs::status_error); + symlink_sf.type(fs::status_error); + } + else + { + if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + sf.type(fs::directory_file); + symlink_sf.type(fs::directory_file); + } + else + { + sf.type(fs::regular_file); + symlink_sf.type(fs::regular_file); + } + sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes)); + symlink_sf.permissions(sf.permissions()); + } + return error_code(); + } + + error_code dir_itr_increment(void *& handle, wstring& target, + fs::file_status & sf, fs::file_status & symlink_sf) + { + WIN32_FIND_DATAW data; + if (::FindNextFileW(handle, &data)== 0)// fails + { + int error = ::GetLastError(); + fs::detail::dir_itr_close(handle); + return error_code(error == ERROR_NO_MORE_FILES ? 0 : error, system_category()); + } + target = data.cFileName; + if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) + // reparse points are complex, so don't try to handle them here; instead just mark + // them as status_error which causes directory_entry caching to call status() + // and symlink_status() which do handle reparse points fully + { + sf.type(fs::status_error); + symlink_sf.type(fs::status_error); + } + else + { + if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + sf.type(fs::directory_file); + symlink_sf.type(fs::directory_file); + } + else + { + sf.type(fs::regular_file); + symlink_sf.type(fs::regular_file); + } + sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes)); + symlink_sf.permissions(sf.permissions()); + } + return error_code(); + } +#endif + + const error_code not_found_error_code ( +# ifdef BOOST_WINDOWS_API + ERROR_PATH_NOT_FOUND +# else + ENOENT +# endif + , system_category()); + +} // unnamed namespace + +namespace boost +{ +namespace filesystem3 +{ + +namespace detail +{ + // dir_itr_close is called both from the ~dir_itr_imp()destructor + // and dir_itr_increment() + BOOST_FILESYSTEM_DECL + system::error_code dir_itr_close( // never throws + void *& handle +# if defined(BOOST_POSIX_API) + , void *& buffer +# endif + ) + { +# ifdef BOOST_POSIX_API + std::free(buffer); + buffer = 0; + if (handle == 0)return ok; + DIR * h(static_cast(handle)); + handle = 0; + return error_code(::closedir(h)== 0 ? 0 : errno, system_category()); + +# else + if (handle != 0) + { + ::FindClose(handle); + handle = 0; + } + return ok; + +# endif + } + + void directory_iterator_construct(directory_iterator& it, + const path& p, system::error_code* ec) + { + if (error(p.empty(), not_found_error_code, p, ec, + "boost::filesystem::directory_iterator::construct")) + return; + + path::string_type filename; + file_status file_stat, symlink_file_stat; + error_code result = dir_itr_first(it.m_imp->handle, +# if defined(BOOST_POSIX_API) + it.m_imp->buffer, +# endif + p.c_str(), filename, file_stat, symlink_file_stat); + + if (result) + { + it.m_imp.reset(); + error(true, result, p, + ec, "boost::filesystem::directory_iterator::construct"); + return; + } + + if (it.m_imp->handle == 0) + it.m_imp.reset(); // eof, so make end iterator + else // not eof + { + it.m_imp->dir_entry.assign(p / filename, file_stat, symlink_file_stat); + if (filename[0] == dot // dot or dot-dot + && (filename.size()== 1 + || (filename[1] == dot + && filename.size()== 2))) + { it.increment(*ec); } + } + } + + void directory_iterator_increment(directory_iterator& it, + system::error_code* ec) + { + BOOST_ASSERT_MSG(it.m_imp.get(), "attempt to increment end iterator"); + BOOST_ASSERT_MSG(it.m_imp->handle != 0, "internal program error"); + + path::string_type filename; + file_status file_stat, symlink_file_stat; + system::error_code temp_ec; + + for (;;) + { + temp_ec = dir_itr_increment(it.m_imp->handle, +# if defined(BOOST_POSIX_API) + it.m_imp->buffer, +# endif + filename, file_stat, symlink_file_stat); + + if (temp_ec) // happens if filesystem is corrupt, such as on a damaged optical disc + { + path error_path(it.m_imp->dir_entry.path().parent_path()); // fix ticket #5900 + it.m_imp.reset(); + if (ec == 0) + BOOST_FILESYSTEM_THROW( + filesystem_error("boost::filesystem::directory_iterator::operator++", + error_path, + error_code(BOOST_ERRNO, system_category()))); + ec->assign(BOOST_ERRNO, system_category()); + return; + } + else if (ec != 0) ec->clear(); + + if (it.m_imp->handle == 0) // eof, make end + { + it.m_imp.reset(); + return; + } + + if (!(filename[0] == dot // !(dot or dot-dot) + && (filename.size()== 1 + || (filename[1] == dot + && filename.size()== 2)))) + { + it.m_imp->dir_entry.replace_filename( + filename, file_stat, symlink_file_stat); + return; + } + } + } +} // namespace detail +} // namespace filesystem3 +} // namespace boost + +#endif // no wide character support diff --git a/external/libs/filesystem/v3/src/path.cpp b/external/libs/filesystem/v3/src/path.cpp new file mode 100644 index 0000000..c64cad2 --- /dev/null +++ b/external/libs/filesystem/v3/src/path.cpp @@ -0,0 +1,847 @@ +// filesystem path.cpp ------------------------------------------------------------- // + +// Copyright Beman Dawes 2008 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_WINDOWS_API +# include "windows_file_codecvt.hpp" +# include +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +# include +#endif + +#ifdef BOOST_FILESYSTEM_DEBUG +# include +# include +#endif + +namespace fs = boost::filesystem3; + +using boost::filesystem3::path; + +using std::string; +using std::wstring; + +using boost::system::error_code; + +#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE +# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256 +#endif + +//--------------------------------------------------------------------------------------// +// // +// class path helpers // +// // +//--------------------------------------------------------------------------------------// + +namespace +{ + //------------------------------------------------------------------------------------// + // miscellaneous class path helpers // + //------------------------------------------------------------------------------------// + + typedef path::value_type value_type; + typedef path::string_type string_type; + typedef string_type::size_type size_type; + + const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE; + +# ifdef BOOST_WINDOWS_API + + const wchar_t separator = L'/'; + const wchar_t preferred_separator = L'\\'; + const wchar_t* const separators = L"/\\"; + const wchar_t* separator_string = L"/"; + const wchar_t* preferred_separator_string = L"\\"; + const wchar_t colon = L':'; + const wchar_t dot = L'.'; + const wchar_t questionmark = L'?'; + const fs::path dot_path(L"."); + const fs::path dot_dot_path(L".."); + +# else + + const char separator = '/'; + const char preferred_separator = '/'; + const char* const separators = "/"; + const char* separator_string = "/"; + const char* preferred_separator_string = "/"; + const char colon = ':'; + const char dot = '.'; + const fs::path dot_path("."); + const fs::path dot_dot_path(".."); + +# endif + + inline bool is_separator(fs::path::value_type c) + { + return c == separator +# ifdef BOOST_WINDOWS_API + || c == preferred_separator +# endif + ; + } + + bool is_non_root_separator(const string_type& str, size_type pos); + // pos is position of the separator + + size_type filename_pos(const string_type& str, + size_type end_pos); // end_pos is past-the-end position + // Returns: 0 if str itself is filename (or empty) + + size_type root_directory_start(const string_type& path, size_type size); + // Returns: npos if no root_directory found + + void first_element( + const string_type& src, + size_type& element_pos, + size_type& element_size, +# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310) // VC++ 7.1 + size_type size = string_type::npos +# else + size_type size = -1 +# endif + ); + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// // +// class path implementation // +// // +//--------------------------------------------------------------------------------------// + +namespace boost +{ +namespace filesystem3 +{ + + path& path::operator/=(const path& p) + { + if (p.empty()) + return *this; + if (this == &p) // self-append + { + path rhs(p); + if (!is_separator(rhs.m_pathname[0])) + m_append_separator_if_needed(); + m_pathname += rhs.m_pathname; + } + else + { + if (!is_separator(*p.m_pathname.begin())) + m_append_separator_if_needed(); + m_pathname += p.m_pathname; + } + return *this; + } + + path& path::operator/=(const value_type* ptr) + { + if (!*ptr) + return *this; + if (ptr >= m_pathname.data() + && ptr < m_pathname.data() + m_pathname.size()) // overlapping source + { + path rhs(ptr); + if (!is_separator(rhs.m_pathname[0])) + m_append_separator_if_needed(); + m_pathname += rhs.m_pathname; + } + else + { + if (!is_separator(*ptr)) + m_append_separator_if_needed(); + m_pathname += ptr; + } + return *this; + } + +# ifdef BOOST_WINDOWS_API + + const std::string path::generic_string(const codecvt_type& cvt) const + { + path tmp(*this); + std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/'); + return tmp.string(cvt); + } + + const std::wstring path::generic_wstring() const + { + path tmp(*this); + std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/'); + return tmp.wstring(); + } + +# endif // BOOST_WINDOWS_API + + // m_append_separator_if_needed ----------------------------------------------------// + + path::string_type::size_type path::m_append_separator_if_needed() + { + if (!m_pathname.empty() && +# ifdef BOOST_WINDOWS_API + *(m_pathname.end()-1) != colon && +# endif + !is_separator(*(m_pathname.end()-1))) + { + string_type::size_type tmp(m_pathname.size()); + m_pathname += preferred_separator; + return tmp; + } + return 0; + } + + // m_erase_redundant_separator -----------------------------------------------------// + + void path::m_erase_redundant_separator(string_type::size_type sep_pos) + { + if (sep_pos // a separator was added + && sep_pos < m_pathname.size() // and something was appended + && (m_pathname[sep_pos+1] == separator // and it was also separator +# ifdef BOOST_WINDOWS_API + || m_pathname[sep_pos+1] == preferred_separator // or preferred_separator +# endif +)) { m_pathname.erase(sep_pos, 1); } // erase the added separator + } + + // modifiers -----------------------------------------------------------------------// + +# ifdef BOOST_WINDOWS_API + path & path::make_preferred() + { + std::replace(m_pathname.begin(), m_pathname.end(), L'/', L'\\'); + return *this; + } +# endif + + path& path::remove_filename() + { + m_pathname.erase(m_parent_path_end()); + return *this; + } + + path & path::replace_extension(const path & source) + { + // erase existing extension if any + size_type pos(m_pathname.rfind(dot)); + if (pos != string_type::npos && pos >= filename_pos(m_pathname, m_pathname.size())) + m_pathname.erase(pos); + + // append source extension if any + pos = source.m_pathname.rfind(dot); + if (pos != string_type::npos) + m_pathname += source.c_str() + pos; + + return *this; + } + + // decomposition -------------------------------------------------------------------// + + path path::root_path() const + { + path temp(root_name()); + if (!root_directory().empty()) temp.m_pathname += root_directory().c_str(); + return temp; + } + + path path::root_name() const + { + iterator itr(begin()); + + return (itr.m_pos != m_pathname.size() + && ( + (itr.m_element.m_pathname.size() > 1 + && is_separator(itr.m_element.m_pathname[0]) + && is_separator(itr.m_element.m_pathname[1]) + ) +# ifdef BOOST_WINDOWS_API + || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon +# endif + )) + ? itr.m_element + : path(); + } + + path path::root_directory() const + { + size_type pos(root_directory_start(m_pathname, m_pathname.size())); + + return pos == string_type::npos + ? path() + : path(m_pathname.c_str() + pos, m_pathname.c_str() + pos + 1); + } + + path path::relative_path() const + { + iterator itr(begin()); + + for (; itr.m_pos != m_pathname.size() + && (is_separator(itr.m_element.m_pathname[0]) +# ifdef BOOST_WINDOWS_API + || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon +# endif + ); ++itr) {} + + return path(m_pathname.c_str() + itr.m_pos); + } + + string_type::size_type path::m_parent_path_end() const + { + size_type end_pos(filename_pos(m_pathname, m_pathname.size())); + + bool filename_was_separator(m_pathname.size() + && is_separator(m_pathname[end_pos])); + + // skip separators unless root directory + size_type root_dir_pos(root_directory_start(m_pathname, end_pos)); + for (; + end_pos > 0 + && (end_pos-1) != root_dir_pos + && is_separator(m_pathname[end_pos-1]) + ; + --end_pos) {} + + return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator) + ? string_type::npos + : end_pos; + } + + path path::parent_path() const + { + size_type end_pos(m_parent_path_end()); + return end_pos == string_type::npos + ? path() + : path(m_pathname.c_str(), m_pathname.c_str() + end_pos); + } + + path path::filename() const + { + size_type pos(filename_pos(m_pathname, m_pathname.size())); + return (m_pathname.size() + && pos + && is_separator(m_pathname[pos]) + && is_non_root_separator(m_pathname, pos)) + ? dot_path + : path(m_pathname.c_str() + pos); + } + + path path::stem() const + { + path name(filename()); + if (name == dot_path || name == dot_dot_path) return name; + size_type pos(name.m_pathname.rfind(dot)); + return pos == string_type::npos + ? name + : path(name.m_pathname.c_str(), name.m_pathname.c_str() + pos); + } + + path path::extension() const + { + path name(filename()); + if (name == dot_path || name == dot_dot_path) return path(); + size_type pos(name.m_pathname.rfind(dot)); + return pos == string_type::npos + ? path() + : path(name.m_pathname.c_str() + pos); + } + + // m_normalize ----------------------------------------------------------------------// + + path& path::m_normalize() + { + if (m_pathname.empty()) return *this; + + path 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->native().size() == 1 + && (itr->native())[0] == dot + && itr != start + && itr != last) continue; + + // ignore a name and following ".." + if (!temp.empty() + && itr->native().size() == 2 + && (itr->native())[0] == dot + && (itr->native())[1] == dot) // dot dot + { + string_type lf(temp.filename().native()); + if (lf.size() > 0 + && (lf.size() != 1 + || (lf[0] != dot + && lf[0] != separator)) + && (lf.size() != 2 + || (lf[0] != dot + && lf[1] != dot +# ifdef BOOST_WINDOWS_API + && lf[1] != colon +# endif + ) + ) + ) + { + temp.remove_filename(); + // if not root directory, must also remove "/" if any + if (temp.m_pathname.size() > 0 + && temp.m_pathname[temp.m_pathname.size()-1] + == separator) + { + string_type::size_type rds( + root_directory_start(temp.m_pathname, temp.m_pathname.size())); + if (rds == string_type::npos + || rds != temp.m_pathname.size()-1) + { temp.m_pathname.erase(temp.m_pathname.size()-1); } + } + + iterator next(itr); + if (temp.empty() && ++next != stop + && next == last && *last == dot_path) temp /= dot_path; + continue; + } + } + + temp /= *itr; + }; + + if (temp.empty()) temp /= dot_path; + m_pathname = temp.m_pathname; + return *this; + } + +} // namespace filesystem3 +} // namespace boost + +//--------------------------------------------------------------------------------------// +// // +// class path helpers implementation // +// // +//--------------------------------------------------------------------------------------// + +namespace +{ + + // is_non_root_separator -------------------------------------------------// + + bool is_non_root_separator(const string_type & str, size_type pos) + // pos is position of the separator + { + BOOST_ASSERT_MSG(!str.empty() && is_separator(str[pos]), + "precondition violation"); + + // subsequent logic expects pos to be for leftmost slash of a set + while (pos > 0 && is_separator(str[pos-1])) + --pos; + + return pos != 0 + && (pos <= 2 || !is_separator(str[1]) + || str.find_first_of(separators, 2) != pos) +# ifdef BOOST_WINDOWS_API + && (pos !=2 || str[1] != colon) +# endif + ; + } + + // filename_pos --------------------------------------------------------------------// + + size_type filename_pos(const string_type & str, + size_type end_pos) // end_pos is past-the-end position + // return 0 if str itself is filename (or empty) + { + // case: "//" + if (end_pos == 2 + && is_separator(str[0]) + && is_separator(str[1])) return 0; + + // case: ends in "/" + if (end_pos && is_separator(str[end_pos-1])) + return end_pos-1; + + // set pos to start of last element + size_type pos(str.find_last_of(separators, end_pos-1)); + +# ifdef BOOST_WINDOWS_API + if (pos == string_type::npos) + pos = str.find_last_of(colon, end_pos-2); +# endif + + return (pos == string_type::npos // path itself must be a filename (or empty) + || (pos == 1 && is_separator(str[0]))) // or net + ? 0 // so filename is entire string + : pos + 1; // or starts after delimiter + } + + // root_directory_start ------------------------------------------------------------// + + size_type root_directory_start(const string_type & path, size_type size) + // return npos if no root_directory found + { + +# ifdef BOOST_WINDOWS_API + // case "c:/" + if (size > 2 + && path[1] == colon + && is_separator(path[2])) return 2; +# endif + + // case "//" + if (size == 2 + && is_separator(path[0]) + && is_separator(path[1])) return string_type::npos; + +# ifdef BOOST_WINDOWS_API + // case "\\?\" + if (size > 4 + && is_separator(path[0]) + && is_separator(path[1]) + && path[2] == questionmark + && is_separator(path[3])) + { + string_type::size_type pos(path.find_first_of(separators, 4)); + return pos < size ? pos : string_type::npos; + } +# endif + + // case "//net {/}" + if (size > 3 + && is_separator(path[0]) + && is_separator(path[1]) + && !is_separator(path[2])) + { + string_type::size_type pos(path.find_first_of(separators, 2)); + return pos < size ? pos : string_type::npos; + } + + // case "/" + if (size > 0 && is_separator(path[0])) return 0; + + return string_type::npos; + } + + // first_element --------------------------------------------------------------------// + // sets pos and len of first element, excluding extra separators + // if src.empty(), sets pos,len, to 0,0. + + void first_element( + const string_type & src, + size_type & element_pos, + size_type & element_size, + size_type size +) + { + if (size == string_type::npos) size = src.size(); + element_pos = 0; + element_size = 0; + if (src.empty()) return; + + string_type::size_type cur(0); + + // deal with // [network] + if (size >= 2 && is_separator(src[0]) + && is_separator(src[1]) + && (size == 2 + || !is_separator(src[2]))) + { + cur += 2; + element_size += 2; + } + + // leading (not non-network) separator + else if (is_separator(src[0])) + { + ++element_size; + // bypass extra leading separators + while (cur+1 < size + && is_separator(src[cur+1])) + { + ++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_API + && src[cur] != colon +# endif + && !is_separator(src[cur])) + { + ++cur; + ++element_size; + } + +# ifdef BOOST_WINDOWS_API + if (cur == size) return; + // include device delimiter + if (src[cur] == colon) + { ++element_size; } +# endif + + return; + } + +} // unnammed namespace + +//--------------------------------------------------------------------------------------// +// // +// class path::iterator implementation // +// // +//--------------------------------------------------------------------------------------// + +namespace boost +{ +namespace filesystem3 +{ + + path::iterator path::begin() const + { + iterator itr; + itr.m_path_ptr = this; + size_type element_size; + first_element(m_pathname, itr.m_pos, element_size); + itr.m_element = m_pathname.substr(itr.m_pos, element_size); + if (itr.m_element.m_pathname == preferred_separator_string) + itr.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX + return itr; + } + + path::iterator path::end() const + { + iterator itr; + itr.m_path_ptr = this; + itr.m_pos = m_pathname.size(); + return itr; + } + + void path::m_path_iterator_increment(path::iterator & it) + { + BOOST_ASSERT_MSG(it.m_pos < it.m_path_ptr->m_pathname.size(), + "path::basic_iterator increment past end()"); + + // increment to position past current element + it.m_pos += it.m_element.m_pathname.size(); + + // if end reached, create end basic_iterator + if (it.m_pos == it.m_path_ptr->m_pathname.size()) + { + it.m_element.clear(); + return; + } + + // both POSIX and Windows treat paths that begin with exactly two separators specially + bool was_net(it.m_element.m_pathname.size() > 2 + && is_separator(it.m_element.m_pathname[0]) + && is_separator(it.m_element.m_pathname[1]) + && !is_separator(it.m_element.m_pathname[2])); + + // process separator (Windows drive spec is only case not a separator) + if (is_separator(it.m_path_ptr->m_pathname[it.m_pos])) + { + // detect root directory + if (was_net +# ifdef BOOST_WINDOWS_API + // case "c:/" + || it.m_element.m_pathname[it.m_element.m_pathname.size()-1] == colon +# endif + ) + { + it.m_element.m_pathname = separator; + return; + } + + // bypass separators + while (it.m_pos != it.m_path_ptr->m_pathname.size() + && is_separator(it.m_path_ptr->m_pathname[it.m_pos])) + { ++it.m_pos; } + + // detect trailing separator, and treat it as ".", per POSIX spec + if (it.m_pos == it.m_path_ptr->m_pathname.size() + && is_non_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)) + { + --it.m_pos; + it.m_element = dot_path; + return; + } + } + + // get next element + size_type end_pos(it.m_path_ptr->m_pathname.find_first_of(separators, it.m_pos)); + if (end_pos == string_type::npos) end_pos = it.m_path_ptr->m_pathname.size(); + it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos); + } + + void path::m_path_iterator_decrement(path::iterator & it) + { + BOOST_ASSERT_MSG(it.m_pos, "path::iterator decrement past begin()"); + + size_type end_pos(it.m_pos); + + // if at end and there was a trailing non-root '/', return "." + if (it.m_pos == it.m_path_ptr->m_pathname.size() + && it.m_path_ptr->m_pathname.size() > 1 + && is_separator(it.m_path_ptr->m_pathname[it.m_pos-1]) + && is_non_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1) + ) + { + --it.m_pos; + it.m_element = dot_path; + return; + } + + size_type root_dir_pos(root_directory_start(it.m_path_ptr->m_pathname, end_pos)); + + // skip separators unless root directory + for ( + ; + end_pos > 0 + && (end_pos-1) != root_dir_pos + && is_separator(it.m_path_ptr->m_pathname[end_pos-1]) + ; + --end_pos) {} + + it.m_pos = filename_pos(it.m_path_ptr->m_pathname, end_pos); + it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos); + if (it.m_element.m_pathname == preferred_separator_string) + it.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX + } + +} // namespace filesystem3 +} // namespace boost + +//--------------------------------------------------------------------------------------// +// // +// detail helpers // +// // +//--------------------------------------------------------------------------------------// + +namespace +{ + + //------------------------------------------------------------------------------------// + // locale helpers // + //------------------------------------------------------------------------------------// + +#ifdef BOOST_WINDOWS_API + + std::locale path_locale(std::locale(), new windows_file_codecvt); + + const std::codecvt* + codecvt_facet(&std::use_facet > + (path_locale)); + +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) + + // "All BSD system functions expect their string parameters to be in UTF-8 encoding + // and nothing else." See + // http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html + // + // "The kernel will reject any filename that is not a valid UTF-8 string, and it will + // even be normalized (to Unicode NFD) before stored on disk, at least when using HFS. + // The right way to deal with it would be to always convert the filename to UTF-8 + // before trying to open/create a file." See + // http://lists.apple.com/archives/unix-porting/2007/Sep/msg00023.html + // + // "How a file name looks at the API level depends on the API. Current Carbon APIs + // handle file names as an array of UTF-16 characters; POSIX ones handle them as an + // array of UTF-8, which is why UTF-8 works well in Terminal. How it's stored on disk + // depends on the disk format; HFS+ uses UTF-16, but that's not important in most + // cases." See + // http://lists.apple.com/archives/applescript-users/2002/Sep/msg00319.html + // + // Many thanks to Peter Dimov for digging out the above references! + + std::locale path_locale(std::locale(), + new boost::filesystem::detail::utf8_codecvt_facet); + + const std::codecvt* + codecvt_facet(&std::use_facet > + (path_locale)); + +#else // Other POSIX + + // ISO C calls std::locale("") "the locale-specific native environment", and this + // locale is the default for many POSIX-based operating systems such as Linux. + + // std::locale("") construction can throw (if environmental variables LC_MESSAGES or + // or LANG are wrong, for example), so lazy initialization is used to ensure + // that exceptions occur after main() starts and so can be caught. + + std::locale path_locale; // initialized by path::wchar_t_codecvt_facet() below + const std::codecvt* codecvt_facet; // ditto + +# endif + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// path::imbue implementation // +//--------------------------------------------------------------------------------------// + +namespace boost +{ +namespace filesystem3 +{ + + const path::codecvt_type*& path::wchar_t_codecvt_facet() + { +# if defined(BOOST_POSIX_API) && \ + !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) + // A local static initialized by calling path::imbue ensures that std::locale(""), + // which may throw, is called only if path_locale and condecvt_facet will actually + // be used. Thus misconfigured environmental variables will only cause an + // exception if a valid std::locale("") is actually needed. + static std::locale posix_lazy_initialization(path::imbue(std::locale(""))); +# endif + return codecvt_facet; + } + + std::locale path::imbue(const std::locale& loc) + { + std::locale temp(path_locale); + path_locale = loc; + codecvt_facet = + &std::use_facet >(path_locale); + return temp; + } + +} // namespace filesystem3 +} // namespace boost + +#endif // has wide character support diff --git a/external/libs/filesystem/v3/src/path_traits.cpp b/external/libs/filesystem/v3/src/path_traits.cpp new file mode 100644 index 0000000..6606437 --- /dev/null +++ b/external/libs/filesystem/v3/src/path_traits.cpp @@ -0,0 +1,209 @@ +// filesystem path_traits.cpp --------------------------------------------------------// + +// Copyright Beman Dawes 2008, 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include // for codecvt_base::result +#include // for strlen +#include // for wcslen + +namespace pt = boost::filesystem3::path_traits; +namespace fs = boost::filesystem3; +namespace bs = boost::system; + +//--------------------------------------------------------------------------------------// +// configuration // +//--------------------------------------------------------------------------------------// + +#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE +# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256 +#endif + +namespace { + + const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE; + + +//--------------------------------------------------------------------------------------// +// // +// The public convert() functions do buffer management, and then forward to the // +// convert_aux() functions for the actual call to the codecvt facet. // +// // +//--------------------------------------------------------------------------------------// + +//--------------------------------------------------------------------------------------// +// convert_aux const char* to wstring // +//--------------------------------------------------------------------------------------// + + void convert_aux( + const char* from, + const char* from_end, + wchar_t* to, wchar_t* to_end, + std::wstring & target, + const pt::codecvt_type & cvt) + { + //std::cout << std::hex + // << " from=" << std::size_t(from) + // << " from_end=" << std::size_t(from_end) + // << " to=" << std::size_t(to) + // << " to_end=" << std::size_t(to_end) + // << std::endl; + + std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports + const char* from_next; + wchar_t* to_next; + + std::codecvt_base::result res; + + if ((res=cvt.in(state, from, from_end, from_next, + to, to_end, to_next)) != std::codecvt_base::ok) + { + //std::cout << " result is " << static_cast(res) << std::endl; + BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(), + "boost::filesystem::path codecvt to wstring")); + } + target.append(to, to_next); + } + +//--------------------------------------------------------------------------------------// +// convert_aux const wchar_t* to string // +//--------------------------------------------------------------------------------------// + + void convert_aux( + const wchar_t* from, + const wchar_t* from_end, + char* to, char* to_end, + std::string & target, + const pt::codecvt_type & cvt) + { + //std::cout << std::hex + // << " from=" << std::size_t(from) + // << " from_end=" << std::size_t(from_end) + // << " to=" << std::size_t(to) + // << " to_end=" << std::size_t(to_end) + // << std::endl; + + std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports + const wchar_t* from_next; + char* to_next; + + std::codecvt_base::result res; + + if ((res=cvt.out(state, from, from_end, from_next, + to, to_end, to_next)) != std::codecvt_base::ok) + { + //std::cout << " result is " << static_cast(res) << std::endl; + BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(), + "boost::filesystem::path codecvt to string")); + } + target.append(to, to_next); + } + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// path_traits // +//--------------------------------------------------------------------------------------// + +namespace boost { namespace filesystem3 { namespace path_traits { + +//--------------------------------------------------------------------------------------// +// convert const char* to wstring // +//--------------------------------------------------------------------------------------// + + BOOST_FILESYSTEM_DECL + void convert(const char* from, + const char* from_end, // 0 for null terminated MBCS + std::wstring & to, + const codecvt_type & cvt) + { + BOOST_ASSERT(from); + + if (!from_end) // null terminated + { + from_end = from + std::strlen(from); + } + + if (from == from_end) return; + + std::size_t buf_size = (from_end - from) * 3; // perhaps too large, but that's OK + + // dynamically allocate a buffer only if source is unusually large + if (buf_size > default_codecvt_buf_size) + { + boost::scoped_array< wchar_t > buf(new wchar_t [buf_size]); + convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt); + } + else + { + wchar_t buf[default_codecvt_buf_size]; + convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt); + } + } + +//--------------------------------------------------------------------------------------// +// convert const wchar_t* to string // +//--------------------------------------------------------------------------------------// + + BOOST_FILESYSTEM_DECL + void convert(const wchar_t* from, + const wchar_t* from_end, // 0 for null terminated MBCS + std::string & to, + const codecvt_type & cvt) + { + BOOST_ASSERT(from); + + if (!from_end) // null terminated + { + from_end = from + std::wcslen(from); + } + + if (from == from_end) return; + + // The codecvt length functions may not be implemented, and I don't really + // understand them either. Thus this code is just a guess; if it turns + // out the buffer is too small then an error will be reported and the code + // will have to be fixed. + std::size_t buf_size = (from_end - from) * 4; // perhaps too large, but that's OK + buf_size += 4; // encodings like shift-JIS need some prefix space + + // dynamically allocate a buffer only if source is unusually large + if (buf_size > default_codecvt_buf_size) + { + boost::scoped_array< char > buf(new char [buf_size]); + convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt); + } + else + { + char buf[default_codecvt_buf_size]; + convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt); + } + } +}}} // namespace boost::filesystem3::path_traits + +#endif // no wide character support diff --git a/external/libs/filesystem/v3/src/portability.cpp b/external/libs/filesystem/v3/src/portability.cpp new file mode 100644 index 0000000..31e0176 --- /dev/null +++ b/external/libs/filesystem/v3/src/portability.cpp @@ -0,0 +1,128 @@ +// portability.cpp -------------------------------------------------------------------// + +// Copyright 2002-2005 Beman Dawes +// Use, modification, and distribution is subject to the Boost 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 + +//--------------------------------------------------------------------------------------// + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include + +namespace fs = boost::filesystem3; + +#include // SGI MIPSpro compilers need this + +# ifdef BOOST_NO_STDC_NAMESPACE + namespace std { using ::strerror; } +# endif + +//--------------------------------------------------------------------------------------// + +namespace +{ + const char invalid_chars[] = + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" + "<>:\"/\\|"; + // note that the terminating '\0' is part of the string - thus the size below + // is sizeof(invalid_chars) rather than sizeof(invalid_chars)-1. I + const std::string windows_invalid_chars(invalid_chars, sizeof(invalid_chars)); + + const std::string valid_posix( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"); + +} // unnamed namespace + +namespace boost +{ + namespace filesystem3 + { + + // name_check functions ----------------------------------------------// + +# ifdef BOOST_WINDOWS + BOOST_FILESYSTEM_DECL bool native(const std::string & name) + { + return windows_name(name); + } +# else + BOOST_FILESYSTEM_DECL bool native(const std::string & name) + { + return name.size() != 0 + && name[0] != ' ' + && name.find('/') == std::string::npos; + } +# endif + + BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name) + { + return name.size() != 0 + && name.find_first_not_of(valid_posix) == std::string::npos; + } + + BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name) + { + return name.size() != 0 + && name[0] != ' ' + && name.find_first_of(windows_invalid_chars) == std::string::npos + && *(name.end()-1) != ' ' + && (*(name.end()-1) != '.' + || name.length() == 1 || name == ".."); + } + + BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name) + { + return + name.size() != 0 + && (name == "." + || name == ".." + || (windows_name(name) + && portable_posix_name(name) + && name[0] != '.' && name[0] != '-')); + } + + BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name) + { + return + name == "." + || name == ".." + || (portable_name(name) + && name.find('.') == std::string::npos); + } + + BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name) + { + std::string::size_type pos; + return + portable_name(name) + && name != "." + && name != ".." + && ((pos = name.find('.')) == std::string::npos + || (name.find('.', pos+1) == std::string::npos + && (pos + 5) > name.length())) + ; + } + + } // namespace filesystem3 +} // namespace boost + +#endif // no wide character support diff --git a/external/libs/filesystem/v3/src/unique_path.cpp b/external/libs/filesystem/v3/src/unique_path.cpp new file mode 100644 index 0000000..1569b32 --- /dev/null +++ b/external/libs/filesystem/v3/src/unique_path.cpp @@ -0,0 +1,151 @@ +// filesystem system_crypt_random.cpp ------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include + +# ifdef BOOST_POSIX_API +# include +# else // BOOST_WINDOWS_API +# include +# include +# pragma comment(lib, "Advapi32.lib") +# endif + +namespace { + +void fail(int err, boost::system::error_code* ec) +{ + if (ec == 0) + BOOST_FILESYSTEM_THROW( boost::system::system_error(err, + boost::system::system_category(), + "boost::filesystem::unique_path")); + + ec->assign(err, boost::system::system_category()); + return; +} + +void system_crypt_random(void* buf, std::size_t len, boost::system::error_code* ec) +{ +# ifdef BOOST_POSIX_API + + int file = open("/dev/urandom", O_RDONLY); + if (file == -1) + { + file = open("/dev/random", O_RDONLY); + if (file == -1) + { + fail(errno, ec); + return; + } + } + + size_t bytes_read = 0; + while (bytes_read < len) + { + ssize_t n = read(file, buf, len - bytes_read); + if (n == -1) + { + close(file); + fail(errno, ec); + return; + } + bytes_read += n; + buf = static_cast(buf) + n; + } + + close(file); + +# else // BOOST_WINDOWS_API + + HCRYPTPROV handle; + int errval = 0; + + if (!::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, 0)) + { + errval = ::GetLastError(); + if (errval == NTE_BAD_KEYSET) + { + if (!::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_NEWKEYSET)) + { + errval = ::GetLastError(); + } + else errval = 0; + } + } + + if (!errval) + { + BOOL gen_ok = ::CryptGenRandom(handle, len, static_cast(buf)); + if (!gen_ok) + errval = ::GetLastError(); + ::CryptReleaseContext(handle, 0); + } + + if (!errval) return; + + fail(errval, ec); +# endif +} + +} // unnamed namespace + +namespace boost { namespace filesystem3 { namespace detail { + +BOOST_FILESYSTEM_DECL +path unique_path(const path& model, system::error_code* ec) +{ + std::wstring s (model.wstring()); // std::string ng for MBCS encoded POSIX + const wchar_t hex[] = L"0123456789abcdef"; + const int n_ran = 16; + const int max_nibbles = 2 * n_ran; // 4-bits per nibble + char ran[n_ran]; + + int nibbles_used = max_nibbles; + for(std::wstring::size_type i=0; i < s.size(); ++i) + { + if (s[i] == L'%') // digit request + { + if (nibbles_used == max_nibbles) + { + system_crypt_random(ran, sizeof(ran), ec); + if (ec != 0 && *ec) + return ""; + nibbles_used = 0; + } + int c = ran[nibbles_used/2]; + c >>= 4 * (nibbles_used++ & 1); // if odd, shift right 1 nibble + s[i] = hex[c & 0xf]; // convert to hex digit and replace + } + } + + if (ec != 0) ec->clear(); + + return s; +} + +}}} + +#endif // no wide character support diff --git a/external/libs/filesystem/v3/src/utf8_codecvt_facet.cpp b/external/libs/filesystem/v3/src/utf8_codecvt_facet.cpp new file mode 100644 index 0000000..ed0b422 --- /dev/null +++ b/external/libs/filesystem/v3/src/utf8_codecvt_facet.cpp @@ -0,0 +1,27 @@ +// 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) + +// For HP-UX, request that WCHAR_MAX and WCHAR_MIN be defined as macros, +// not casts. See ticket 5048 +#define _INCLUDE_STDCSOURCE_199901 + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#define BOOST_FILESYSTEM_SOURCE +#include + +#define BOOST_UTF8_BEGIN_NAMESPACE \ + namespace boost { namespace filesystem { namespace detail { + +#define BOOST_UTF8_END_NAMESPACE }}} +#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL + +#include "libs/detail/utf8_codecvt_facet.cpp" + +#undef BOOST_UTF8_BEGIN_NAMESPACE +#undef BOOST_UTF8_END_NAMESPACE +#undef BOOST_UTF8_DECL diff --git a/external/libs/filesystem/v3/src/windows_file_codecvt.cpp b/external/libs/filesystem/v3/src/windows_file_codecvt.cpp new file mode 100644 index 0000000..85de59e --- /dev/null +++ b/external/libs/filesystem/v3/src/windows_file_codecvt.cpp @@ -0,0 +1,83 @@ +// filesystem windows_file_codecvt.cpp -----------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +#include +#if !defined( BOOST_NO_STD_WSTRING ) +// Boost.Filesystem V3 and later requires std::wstring support. +// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile +// will succeed and the library can be built. + +// define BOOST_FILESYSTEM_SOURCE so that knows +// the library is being built (possibly exporting rather than importing code) +#define BOOST_FILESYSTEM_SOURCE + +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include // for mbstate_t + +#ifdef BOOST_WINDOWS_API + +#include "windows_file_codecvt.hpp" + +// Versions of MinGW prior to GCC 4.6 requires this +#ifndef WINVER +# define WINVER 0x0500 +#endif + +#include + + std::codecvt_base::result windows_file_codecvt::do_in( + std::mbstate_t &, + const char* from, const char* from_end, const char*& from_next, + wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const + { + UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; + + int count; + if ((count = ::MultiByteToWideChar(codepage, MB_PRECOMPOSED, from, + from_end - from, to, to_end - to)) == 0) + { + return error; // conversion failed + } + + from_next = from_end; + to_next = to + count; + *to_next = L'\0'; + return ok; + } + + std::codecvt_base::result windows_file_codecvt::do_out( + std::mbstate_t &, + const wchar_t* from, const wchar_t* from_end, const wchar_t* & from_next, + char* to, char* to_end, char* & to_next) const + { + UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; + + int count; + if ((count = ::WideCharToMultiByte(codepage, WC_NO_BEST_FIT_CHARS, from, + from_end - from, to, to_end - to, 0, 0)) == 0) + { + return error; // conversion failed + } + + from_next = from_end; + to_next = to + count; + *to_next = '\0'; + return ok; + } + + # endif // BOOST_WINDOWS_API + +#endif // no wide character support diff --git a/external/libs/filesystem/v3/src/windows_file_codecvt.hpp b/external/libs/filesystem/v3/src/windows_file_codecvt.hpp new file mode 100644 index 0000000..d845d37 --- /dev/null +++ b/external/libs/filesystem/v3/src/windows_file_codecvt.hpp @@ -0,0 +1,56 @@ +// filesystem windows_file_codecvt.hpp -----------------------------------------------// + +// Copyright Beman Dawes 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#ifndef BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP +#define BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP + +#include +#include + + //------------------------------------------------------------------------------------// + // // + // class windows_file_codecvt // + // // + // Warning: partial implementation; even do_in and do_out only partially meet the // + // standard library specifications as the "to" buffer must hold the entire result. // + // // + //------------------------------------------------------------------------------------// + + class BOOST_FILESYSTEM_DECL windows_file_codecvt + : public std::codecvt< wchar_t, char, std::mbstate_t > + { + public: + explicit windows_file_codecvt() + : std::codecvt() {} + protected: + + virtual bool do_always_noconv() const throw() { return false; } + + // seems safest to assume variable number of characters since we don't + // actually know what codepage is active + virtual int do_encoding() const throw() { return 0; } + + 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; + + virtual std::codecvt_base::result do_unshift(std::mbstate_t&, + char* /*from*/, char* /*to*/, char* & /*next*/) const { return ok; } + + virtual int do_length(std::mbstate_t&, + const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const { return 0; } + + virtual int do_max_length() const throw () { return 0; } + }; + +#endif // BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP diff --git a/external/libs/filesystem/v3/test/Jamfile.v2 b/external/libs/filesystem/v3/test/Jamfile.v2 new file mode 100644 index 0000000..b076ffe --- /dev/null +++ b/external/libs/filesystem/v3/test/Jamfile.v2 @@ -0,0 +1,35 @@ +# Boost Filesystem Library test Jamfile + +# (C) Copyright Beman Dawes 2002-2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt) + +project + : requirements + /boost/filesystem//boost_filesystem + /boost/system//boost_system + msvc:on + ; + +# Some tests are run both statically and as shared libraries since it is helpful +# to know if failures in shared library tests are related to sharing or not. + + test-suite "filesystem" : + [ run path_unit_test.cpp : : : shared ] + [ run path_unit_test.cpp : : : static : path_unit_test_static ] + [ run path_test.cpp : : : shared ] + [ run path_test.cpp : : : static : path_test_static ] + [ run operations_unit_test.cpp : : : shared ] + [ run operations_unit_test.cpp : : : static : operations_unit_test_static ] + [ run operations_test.cpp : : : shared ] + [ run operations_test.cpp : : : static : operations_test_static ] + [ run fstream_test.cpp ] + [ run convenience_test.cpp ] + [ run large_file_support_test.cpp ] + [ run deprecated_test.cpp ] + [ run ../example/simple_ls.cpp ] + [ run ../example/file_status.cpp ] + +# [ compile ../example/mbcopy.cpp ] +# [ compile ../example/mbpath.cpp ] + ; diff --git a/external/libs/filesystem/v3/test/convenience_test.cpp b/external/libs/filesystem/v3/test/convenience_test.cpp new file mode 100644 index 0000000..17675a6 --- /dev/null +++ b/external/libs/filesystem/v3/test/convenience_test.cpp @@ -0,0 +1,180 @@ +// libs/filesystem/test/convenience_test.cpp -----------------------------------------// + +// Copyright Beman Dawes, 2002 +// 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 + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +namespace fs = boost::filesystem; +using fs::path; +namespace sys = boost::system; + +#include +#include +#include +#include +#include + +namespace +{ + template< typename F > + bool throws_fs_error(F func) + { + try { func(); } + + catch (const fs::filesystem_error &) + { + return true; + } + return false; + } + + void create_recursive_iterator(const fs::path & ph) + { + fs::recursive_directory_iterator it(ph); + } +} + +// ------------------------------------------------------------------------------------// + +int cpp_main(int, char*[]) +{ + +// create_directories() tests --------------------------------------------------------// + + BOOST_TEST(!fs::create_directories("")); // should be harmless + BOOST_TEST(!fs::create_directories("/")); // ditto + + path unique_dir = fs::unique_path(); // unique name in case tests running in parallel + path unique_yy = unique_dir / "yy"; + path unique_yya = unique_dir / "yya"; + path unique_yy_zz = unique_dir / "yy" / "zz"; + + fs::remove_all(unique_dir); // make sure slate is blank + BOOST_TEST(!fs::exists(unique_dir)); // reality check + + BOOST_TEST(fs::create_directories(unique_dir)); + BOOST_TEST(fs::exists(unique_dir)); + BOOST_TEST(fs::is_directory(unique_dir)); + + BOOST_TEST(fs::create_directories(unique_yy_zz)); + BOOST_TEST(fs::exists(unique_dir)); + BOOST_TEST(fs::exists(unique_yy)); + BOOST_TEST(fs::exists(unique_yy_zz)); + BOOST_TEST(fs::is_directory(unique_dir)); + BOOST_TEST(fs::is_directory(unique_yy)); + BOOST_TEST(fs::is_directory(unique_yy_zz)); + + path is_a_file(unique_dir / "uu"); + { + std::ofstream f(is_a_file.string().c_str()); + BOOST_TEST(!!f); + } + BOOST_TEST(throws_fs_error( + boost::bind(fs::create_directories, is_a_file))); + BOOST_TEST(throws_fs_error( + boost::bind(fs::create_directories, is_a_file / "aa"))); + +// recursive_directory_iterator tests ----------------------------------------// + + sys::error_code ec; + fs::recursive_directory_iterator it("/no-such-path", ec); + BOOST_TEST(ec); + + BOOST_TEST(throws_fs_error( + boost::bind(create_recursive_iterator, "/no-such-path"))); + + fs::remove(unique_dir / "uu"); + +#ifdef BOOST_WINDOWS_API + // These tests depends on ordering of directory entries, and that's guaranteed + // on Windows but not necessarily on other operating systems + { + std::ofstream f(unique_yya.string().c_str()); + BOOST_TEST(!!f); + } + + for (it = fs::recursive_directory_iterator(unique_dir); + it != fs::recursive_directory_iterator(); ++it) + { std::cout << it->path() << '\n'; } + + it = fs::recursive_directory_iterator(unique_dir); + BOOST_TEST(it->path() == unique_yy); + BOOST_TEST(it.level() == 0); + ++it; + BOOST_TEST(it->path() == unique_yy_zz); + BOOST_TEST(it.level() == 1); + it.pop(); + BOOST_TEST(it->path() == unique_yya); + BOOST_TEST(it.level() == 0); + it++; + BOOST_TEST(it == fs::recursive_directory_iterator()); + + it = fs::recursive_directory_iterator(unique_dir); + BOOST_TEST(it->path() == unique_yy); + it.no_push(); + ++it; + BOOST_TEST(it->path() == unique_yya); + ++it; + BOOST_TEST(it == fs::recursive_directory_iterator()); + + fs::remove(unique_yya); +#endif + + it = fs::recursive_directory_iterator(unique_yy_zz); + BOOST_TEST(it == fs::recursive_directory_iterator()); + + it = fs::recursive_directory_iterator(unique_dir); + BOOST_TEST(it->path() == unique_yy); + BOOST_TEST(it.level() == 0); + ++it; + BOOST_TEST(it->path() == unique_yy_zz); + BOOST_TEST(it.level() == 1); + it++; + BOOST_TEST(it == fs::recursive_directory_iterator()); + + it = fs::recursive_directory_iterator(unique_dir); + BOOST_TEST(it->path() == unique_yy); + it.no_push(); + ++it; + BOOST_TEST(it == fs::recursive_directory_iterator()); + + it = fs::recursive_directory_iterator(unique_dir); + BOOST_TEST(it->path() == unique_yy); + ++it; + it.pop(); + BOOST_TEST(it == fs::recursive_directory_iterator()); + + ec.clear(); + BOOST_TEST(!ec); + // check that two argument failed constructor creates the end iterator + BOOST_TEST(fs::recursive_directory_iterator("nosuchdir", ec) + == fs::recursive_directory_iterator()); + BOOST_TEST(ec); + + fs::remove_all(unique_dir); // clean up behind ourselves + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/deprecated_test.cpp b/external/libs/filesystem/v3/test/deprecated_test.cpp new file mode 100644 index 0000000..de82ff8 --- /dev/null +++ b/external/libs/filesystem/v3/test/deprecated_test.cpp @@ -0,0 +1,251 @@ +// deprecated_test program --------------------------------------------------// + +// Copyright Beman Dawes 2002 +// Copyright Vladimir Prus 2002 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +// This test verifies that various deprecated names still work. This is +// important to preserve existing code that uses the old names. + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#define BOOST_FILESYSTEM_DEPRECATED + +#include +#include +#include + +namespace fs = boost::filesystem; +using boost::filesystem::path; + +#define PATH_CHECK(a, b) check(a, b, __LINE__) + +namespace +{ + std::string platform(BOOST_PLATFORM); + + void check(const fs::path & source, + const std::string & expected, int line) + { + if (source.generic_string()== expected) return; + + ++::boost::detail::test_errors(); + + std::cout << '(' << line << ") source.string(): \"" << source.string() + << "\" != expected: \"" << expected + << "\"" << std::endl; + } + + void normalize_test() + { + PATH_CHECK(path("").normalize(), ""); + PATH_CHECK(path("/").normalize(), "/"); + PATH_CHECK(path("//").normalize(), "//"); + PATH_CHECK(path("///").normalize(), "/"); + PATH_CHECK(path("f").normalize(), "f"); + PATH_CHECK(path("foo").normalize(), "foo"); + PATH_CHECK(path("foo/").normalize(), "foo/."); + PATH_CHECK(path("f/").normalize(), "f/."); + PATH_CHECK(path("/foo").normalize(), "/foo"); + PATH_CHECK(path("foo/bar").normalize(), "foo/bar"); + PATH_CHECK(path("..").normalize(), ".."); + PATH_CHECK(path("../..").normalize(), "../.."); + PATH_CHECK(path("/..").normalize(), "/.."); + PATH_CHECK(path("/../..").normalize(), "/../.."); + PATH_CHECK(path("../foo").normalize(), "../foo"); + PATH_CHECK(path("foo/..").normalize(), "."); + PATH_CHECK(path("foo/../").normalize(), "./."); + PATH_CHECK((path("foo") / "..").normalize() , "."); + PATH_CHECK(path("foo/...").normalize(), "foo/..."); + PATH_CHECK(path("foo/.../").normalize(), "foo/.../."); + PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar"); + PATH_CHECK(path("../f").normalize(), "../f"); + PATH_CHECK(path("/../f").normalize(), "/../f"); + PATH_CHECK(path("f/..").normalize(), "."); + PATH_CHECK((path("f") / "..").normalize() , "."); + PATH_CHECK(path("foo/../..").normalize(), ".."); + PATH_CHECK(path("foo/../../").normalize(), "../."); + PATH_CHECK(path("foo/../../..").normalize(), "../.."); + PATH_CHECK(path("foo/../../../").normalize(), "../../."); + PATH_CHECK(path("foo/../bar").normalize(), "bar"); + PATH_CHECK(path("foo/../bar/").normalize(), "bar/."); + PATH_CHECK(path("foo/bar/..").normalize(), "foo"); + PATH_CHECK(path("foo/bar/../").normalize(), "foo/."); + PATH_CHECK(path("foo/bar/../..").normalize(), "."); + PATH_CHECK(path("foo/bar/../../").normalize(), "./."); + PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah"); + PATH_CHECK(path("f/../b").normalize(), "b"); + PATH_CHECK(path("f/b/..").normalize(), "f"); + PATH_CHECK(path("f/b/../").normalize(), "f/."); + PATH_CHECK(path("f/b/../a").normalize(), "f/a"); + PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo"); + PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch"); + PATH_CHECK(path("//net").normalize(), "//net"); + PATH_CHECK(path("//net/").normalize(), "//net/"); + PATH_CHECK(path("//..net").normalize(), "//..net"); + PATH_CHECK(path("//net/..").normalize(), "//net/.."); + PATH_CHECK(path("//net/foo").normalize(), "//net/foo"); + PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/."); + PATH_CHECK(path("//net/foo/..").normalize(), "//net/"); + PATH_CHECK(path("//net/foo/../").normalize(), "//net/."); + + PATH_CHECK(path("/net/foo/bar").normalize(), "/net/foo/bar"); + PATH_CHECK(path("/net/foo/bar/").normalize(), "/net/foo/bar/."); + PATH_CHECK(path("/net/foo/..").normalize(), "/net"); + PATH_CHECK(path("/net/foo/../").normalize(), "/net/."); + + PATH_CHECK(path("//net//foo//bar").normalize(), "//net/foo/bar"); + PATH_CHECK(path("//net//foo//bar//").normalize(), "//net/foo/bar/."); + PATH_CHECK(path("//net//foo//..").normalize(), "//net/"); + PATH_CHECK(path("//net//foo//..//").normalize(), "//net/."); + + PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar"); + PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/."); + PATH_CHECK(path("///net///foo///..").normalize(), "/net"); + PATH_CHECK(path("///net///foo///..///").normalize(), "/net/."); + + if (platform == "Windows") + { + PATH_CHECK(path("c:..").normalize(), "c:.."); + PATH_CHECK(path("c:foo/..").normalize(), "c:"); + + PATH_CHECK(path("c:foo/../").normalize(), "c:."); + + PATH_CHECK(path("c:/foo/..").normalize(), "c:/"); + PATH_CHECK(path("c:/foo/../").normalize(), "c:/."); + PATH_CHECK(path("c:/..").normalize(), "c:/.."); + PATH_CHECK(path("c:/../").normalize(), "c:/../."); + PATH_CHECK(path("c:/../..").normalize(), "c:/../.."); + PATH_CHECK(path("c:/../../").normalize(), "c:/../../."); + PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo"); + PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/."); + PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo"); + PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/."); + PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo"); + } + else // POSIX + { + PATH_CHECK(path("c:..").normalize(), "c:.."); + PATH_CHECK(path("c:foo/..").normalize(), "."); + PATH_CHECK(path("c:foo/../").normalize(), "./."); + PATH_CHECK(path("c:/foo/..").normalize(), "c:"); + PATH_CHECK(path("c:/foo/../").normalize(), "c:/."); + PATH_CHECK(path("c:/..").normalize(), "."); + PATH_CHECK(path("c:/../").normalize(), "./."); + PATH_CHECK(path("c:/../..").normalize(), ".."); + PATH_CHECK(path("c:/../../").normalize(), "../."); + PATH_CHECK(path("c:/../foo").normalize(), "foo"); + PATH_CHECK(path("c:/../foo/").normalize(), "foo/."); + PATH_CHECK(path("c:/../../foo").normalize(), "../foo"); + PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/."); + PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo"); + } + } + + // Compile-only tests not intended to be executed -----------------------------------// + + void compile_only() + { + fs::path p; + + fs::initial_path(); + fs::initial_path(); + + p.file_string(); + p.directory_string(); + } + + // path_rename_test -----------------------------------------------------------------// + + void path_rename_test() + { + fs::path p("foo/bar/blah"); + + BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar"); + BOOST_TEST_EQ(p.leaf(), "blah"); + BOOST_TEST_EQ(p.branch_path(), "foo/bar"); + BOOST_TEST(p.has_leaf()); + BOOST_TEST(p.has_branch_path()); + BOOST_TEST(!p.is_complete()); + + if (platform == "Windows") + { + BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar"); + p = "foo\\bar\\blah"; + BOOST_TEST_EQ(p.branch_path(), "foo\\bar"); + } + } + +} // unnamed namespace + + +//--------------------------------------------------------------------------------------// + +int cpp_main(int /*argc*/, char* /*argv*/[]) +{ + // The choice of platform is make at runtime rather than compile-time + // so that compile errors for all platforms will be detected even though + // only the current platform is runtime tested. + platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin") + ? "Windows" + : "POSIX"; + std::cout << "Platform is " << platform << '\n'; + + BOOST_TEST(fs::initial_path() == fs::current_path()); + + //path::default_name_check(fs::no_check); + + fs::directory_entry de("foo/bar"); + + de.replace_leaf("", fs::file_status(), fs::file_status()); + + //de.leaf(); + //de.string(); + + fs::path ng(" no-way, Jose"); + BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works + BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory")); + + path_rename_test(); + normalize_test(); + +// extension() tests ---------------------------------------------------------// + + BOOST_TEST(fs::extension("a/b") == ""); + BOOST_TEST(fs::extension("a/b.txt") == ".txt"); + BOOST_TEST(fs::extension("a/b.") == "."); + BOOST_TEST(fs::extension("a.b.c") == ".c"); + BOOST_TEST(fs::extension("a.b.c.") == "."); + BOOST_TEST(fs::extension("") == ""); + BOOST_TEST(fs::extension("a/") == ""); + +// basename() tests ----------------------------------------------------------// + + BOOST_TEST(fs::basename("b") == "b"); + BOOST_TEST(fs::basename("a/b.txt") == "b"); + BOOST_TEST(fs::basename("a/b.") == "b"); + BOOST_TEST(fs::basename("a.b.c") == "a.b"); + BOOST_TEST(fs::basename("a.b.c.") == "a.b.c"); + BOOST_TEST(fs::basename("") == ""); + +// change_extension tests ---------------------------------------------------// + + BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex"); + BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex"); + BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt"); + BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex"); + // see the rationale in html docs for explanation why this works + BOOST_TEST(fs::change_extension("", ".png").string() == ".png"); + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/design_use_cases.cpp b/external/libs/filesystem/v3/test/design_use_cases.cpp new file mode 100644 index 0000000..49b0c28 --- /dev/null +++ b/external/libs/filesystem/v3/test/design_use_cases.cpp @@ -0,0 +1,81 @@ +#include +#include + +// Minimal class path + +class path +{ +public: + path( const char * ) + { + std::cout << "path( const char * )\n"; + } + path( const std::string & ) + { + std::cout << "path( std::string & )\n"; + } + +// for maximum efficiency, either signature must work +# ifdef BY_VALUE + operator const std::string() const +# else + operator const std::string&() const +# endif + { + std::cout << "operator string\n"; + return m_path; + } + +#ifdef NAMED_CONVERSION + std::string string() const + { + std::cout << "std::string string() const\n"; + return m_path; + } +#endif + +private: + std::string m_path; +}; + +bool operator==( const path &, const path & ) +{ + std::cout << "operator==( const path &, const path & )\n"; + return true; +} + +// These are the critical use cases. If any of these don't compile, usability +// is unacceptably degraded. + +void f( const path & ) +{ + std::cout << "f( const path & )\n"; +} + +int main() +{ + f( "foo" ); + f( std::string( "foo" ) ); + f( path( "foo" ) ); + + std::cout << '\n'; + + std::string s1( path( "foo" ) ); + std::string s2 = path( "foo" ); + s2 = path( "foo" ); + +#ifdef NAMED_CONVERSION + s2 = path( "foo" ).string(); +#endif + + std::cout << '\n'; + + // these must call bool path( const path &, const path & ); + path( "foo" ) == path( "foo" ); + path( "foo" ) == "foo"; + path( "foo" ) == std::string( "foo" ); + "foo" == path( "foo" ); + std::string( "foo" ) == path( "foo" ); + + return 0; +} diff --git a/external/libs/filesystem/v3/test/equivalent.cpp b/external/libs/filesystem/v3/test/equivalent.cpp new file mode 100644 index 0000000..be3089a --- /dev/null +++ b/external/libs/filesystem/v3/test/equivalent.cpp @@ -0,0 +1,39 @@ +// equivalent program -------------------------------------------------------// + +// Copyright (c) 2004 Beman Dawes + +// Use, modification, and distribution is subject to the Boost 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 + +//----------------------------------------------------------------------------// + +#include +#include +#include + +int main( int argc, char * argv[] ) +{ + boost::filesystem::path::default_name_check( boost::filesystem::native ); + if ( argc != 3 ) + { + std::cout << "Usage: equivalent path1 path2\n"; + return 2; + } + + bool eq; + try + { + eq = boost::filesystem::equivalent( argv[1], argv[2] ); + } + catch ( const std::exception & ex ) + { + std::cout << ex.what() << "\n"; + return 3; + } + + std::cout << (eq ? "Paths are equivalent\n" : "Paths are not equivalent\n"); + return !eq; +} diff --git a/external/libs/filesystem/v3/test/fstream_test.cpp b/external/libs/filesystem/v3/test/fstream_test.cpp new file mode 100644 index 0000000..d194033 --- /dev/null +++ b/external/libs/filesystem/v3/test/fstream_test.cpp @@ -0,0 +1,173 @@ +// fstream_test.cpp ------------------------------------------------------------------// + +// Copyright Beman Dawes 2002 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include // for std::remove + +#include + +namespace fs = boost::filesystem; + +#include +#ifdef BOOST_NO_STDC_NAMESPACE + namespace std { using ::remove; } +#endif + +#include +#include + +#if defined(_MSC_VER) +# pragma warning(push) // Save warning settings. +# pragma warning(disable : 4428) // Disable universal-character-name encountered in source warning. +#endif + +namespace +{ + bool cleanup = true; + + void test(const fs::path & p) + { + fs::remove(p); + { + std::cout << " in test 1\n"; + fs::filebuf fb1; + fb1.open(p, std::ios_base::out); + BOOST_TEST(fb1.is_open()); + } + { + std::cout << " in test 2\n"; + fs::filebuf fb2; + fb2.open(p, std::ios_base::in); + BOOST_TEST(fb2.is_open()); + } + { + std::cout << " in test 3\n"; + fs::ifstream tfs(p); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 4\n"; + fs::ifstream tfs(p / p.filename()); // should fail + BOOST_TEST(!tfs.is_open()); + } + { + std::cout << " in test 5\n"; + fs::ifstream tfs(p, std::ios_base::in); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 6\n"; + fs::ifstream tfs; + tfs.open(p); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 7\n"; + fs::ifstream tfs; + tfs.open(p, std::ios_base::in); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 8\n"; + fs::ofstream tfs(p); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 9\n"; + fs::ofstream tfs(p, std::ios_base::out); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 10\n"; + fs::ofstream tfs; + tfs.open(p); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 11\n"; + fs::ofstream tfs; + tfs.open(p, std::ios_base::out); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 12\n"; + fs::fstream tfs(p); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 13\n"; + fs::fstream tfs(p, std::ios_base::in|std::ios_base::out); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 14\n"; + fs::fstream tfs; + tfs.open(p); + BOOST_TEST(tfs.is_open()); + } + { + std::cout << " in test 15\n"; + fs::fstream tfs; + tfs.open(p, std::ios_base::in|std::ios_base::out); + BOOST_TEST(tfs.is_open()); + } + + if (cleanup) + fs::remove(p); + + } // test +} // unnamed namespace + +int cpp_main(int argc, char*[]) +{ + if (argc > 1) cleanup = false; + + std::cout << "BOOST_FILESYSTEM_C_STR defined as \"" + << BOOST_STRINGIZE(BOOST_FILESYSTEM_C_STR) << "\"\n"; + + // test narrow characters + std::cout << "narrow character tests:\n"; + test("v3_fstream_test"); + + + // So that tests are run with known encoding, use Boost UTF-8 codecvt + std::locale global_loc = std::locale(); + std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet); + fs::path::imbue(loc); + + // test with some wide characters + // \u2780 is circled 1 against white background == e2 9e 80 in UTF-8 + // \u2781 is circled 2 against white background == e2 9e 81 in UTF-8 + // \u263A is a white smiling face + std::cout << "\nwide character tests:\n"; + test(L"fstream_test_\u2780\u263A"); + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/large_file_support_test.cpp b/external/libs/filesystem/v3/test/large_file_support_test.cpp new file mode 100644 index 0000000..287490e --- /dev/null +++ b/external/libs/filesystem/v3/test/large_file_support_test.cpp @@ -0,0 +1,45 @@ +// Boost large_file_support_test.cpp ---------------------------------------// + +// Copyright Beman Dawes 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/filesystem + + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +// See deprecated_test for tests of deprecated features +#define BOOST_FILESYSTEM_NO_DEPRECATED +#define BOOST_SYSTEM_NO_DEPRECATED + +#include +namespace fs = boost::filesystem; + +#include + +int main() +{ + if ( fs::detail::possible_large_file_size_support() ) + { + std::cout << "It appears that file sizes greater that 2 gigabytes are possible\n" + "for this configuration on this platform since the operating system\n" + "does use a large enough integer type to report large file sizes.\n\n" + "Whether or not such support is actually present depends on the OS\n"; + return 0; + } + std::cout << "The operating system is using an integer type to report file sizes\n" + "that can not represent file sizes greater that 2 gigabytes (31-bits).\n" + "Thus the Filesystem Library will not correctly deal with such large\n" + "files. If you think that this operatiing system should be able to\n" + "support large files, please report the problem to the Boost developers\n" + "mailing list.\n"; + return 1; +} diff --git a/external/libs/filesystem/v3/test/locale_info.cpp b/external/libs/filesystem/v3/test/locale_info.cpp new file mode 100644 index 0000000..db57bb1 --- /dev/null +++ b/external/libs/filesystem/v3/test/locale_info.cpp @@ -0,0 +1,88 @@ +// locale_info.cpp ---------------------------------------------------------// + +// Copyright Beman Dawes 2011 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include +using namespace std; + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4996) // ... Function call with parameters that may be unsafe +#endif + +namespace +{ + void facet_info(const locale& loc, const char* msg) + { + cout << "has_facet >(" + << msg << ") is " + << (has_facet >(loc) + ? "true\n" + : "false\n"); + } + + void default_info() + { + try + { + locale loc; + cout << "\nlocale default construction OK" << endl; + facet_info(loc, "locale()"); + } + catch (const exception& ex) + { + cout << "\nlocale default construction threw: " << ex.what() << endl; + } + } + + void null_string_info() + { + try + { + locale loc(""); + cout << "\nlocale(\"\") construction OK" << endl; + facet_info(loc, "locale(\"\")"); + } + catch (const exception& ex) + { + cout << "\nlocale(\"\") construction threw: " << ex.what() << endl; + } + } + + void classic_info() + { + try + { + locale loc(locale::classic()); + cout << "\nlocale(locale::classic()) copy construction OK" << endl; + facet_info(loc, "locale::classic()"); + } + catch (const exception& ex) + { + cout << "\nlocale(locale::clasic()) copy construction threw: " << ex.what() << endl; + } + } +} + +int main() +{ + const char* lang = getenv("LANG"); + cout << "\nLANG environmental variable is " + << (lang ? lang : "not present") << endl; + + default_info(); + null_string_info(); + classic_info(); + + return 0; +} + +#ifdef _MSC_VER +# pragma warning(pop) +#endif diff --git a/external/libs/filesystem/v3/test/long_path_test.cpp b/external/libs/filesystem/v3/test/long_path_test.cpp new file mode 100644 index 0000000..65be7cb --- /dev/null +++ b/external/libs/filesystem/v3/test/long_path_test.cpp @@ -0,0 +1,61 @@ +// long_path_test.cpp ----------------------------------------------------------------// + +// Copyright Beman Dawes 2011 + +// Distributed under the Boost Software License, Version 1.0. +// http://www.boost.org/LICENSE_1_0.txt + +// See http://www.boost.org/libs/btree for documentation. + +// See http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +#include +#include +#include + +using namespace boost::filesystem; + +#include +#include + +namespace +{ +} // unnamed namespace + +int cpp_main(int, char*[]) +{ + + std::string prefix("d:\\temp\\"); + std::cout << "prefix is " << prefix << '\n'; + + const std::size_t safe_size + = 260 - prefix.size() - 100; // Windows MAX_PATH is 260 + + std::string safe_x_string(safe_size, 'x'); + std::string safe_y_string(safe_size, 'y'); + std::string path_escape("\\\\?\\"); + + path x_p(prefix + safe_x_string); + path y_p(path_escape + prefix + safe_x_string + "\\" + safe_y_string); + + std::cout << "x_p.native().size() is " << x_p.native().size() << '\n'; + std::cout << "y_p.native().size() is " << y_p.native().size() << '\n'; + + create_directory(x_p); + BOOST_TEST(exists(x_p)); + create_directory(y_p); + BOOST_TEST(exists(y_p)); + + //std::cout << "directory x.../y... ready for testing, where ... is " << safe_size + // << " repeats of x and y, respectively\n"; + + BOOST_TEST(exists(x_p)); + + //remove_all(x_p); + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/msvc/common.vsprops b/external/libs/filesystem/v3/test/msvc/common.vsprops new file mode 100644 index 0000000..9820ca1 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/common.vsprops @@ -0,0 +1,21 @@ + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj b/external/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj new file mode 100644 index 0000000..49435cf --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj b/external/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj new file mode 100644 index 0000000..c0b3ecd --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj b/external/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj new file mode 100644 index 0000000..91e2984 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/filesystem-v3.sln b/external/libs/filesystem/v3/test/msvc/filesystem-v3.sln new file mode 100644 index 0000000..344008b --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/filesystem-v3.sln @@ -0,0 +1,173 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_unit_test", "path_unit_test\path_unit_test.vcproj", "{3C77F610-2E31-4087-9DF2-7CD45198A02D}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_unit_test", "operations_unit_test\operations_unit_test.vcproj", "{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcproj", "{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcproj", "{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcproj", "{F94CCADD-A90B-480C-A304-C19D015D36B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcproj", "{FFD738F7-96F0-445C-81EA-551665EF53D1}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcproj", "{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcproj", "{A9939CD7-BE1C-4334-947C-4C320D49B3CA}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcproj", "{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_ls", "simple_ls\simple_ls.vcproj", "{6B8EC880-702E-418A-BC63-CA46C6CC7B27}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "error_demo", "error_demo\error_demo.vcproj", "{709A954B-4F1E-4375-A418-BCBFFE598715}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut1", "tut1\tut1.vcproj", "{6376B8E4-7FD4-466B-978E-E8DA6E938689}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcproj", "{4FF64FA7-6806-401D-865C-79DD064D4A9E}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcproj", "{CD69B175-389E-4F8F-85DC-03C56A47CD1D}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut4", "tut4\tut4.vcproj", "{256EA89A-E073-4CE8-B675-BE2FBC6B2691}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hebrew_example", "hebrew_example\hebrew_example.vcproj", "{F9F236A2-8B57-415A-8397-7145144400F5}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enable_if_test", "enable_if_test\enable_if_test.vcproj", "{03FC7556-1052-45FF-A162-90D595713EAB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.ActiveCfg = Debug|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.Build.0 = Debug|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.ActiveCfg = Release|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.Build.0 = Release|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.ActiveCfg = Debug|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.Build.0 = Debug|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.ActiveCfg = Release|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.Build.0 = Release|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.ActiveCfg = Debug|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.Build.0 = Debug|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.ActiveCfg = Release|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.Build.0 = Release|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.ActiveCfg = Debug|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.Build.0 = Debug|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.ActiveCfg = Release|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.Build.0 = Release|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.Build.0 = Debug|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.ActiveCfg = Release|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.Build.0 = Release|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.ActiveCfg = Debug|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.Build.0 = Debug|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.ActiveCfg = Release|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.Build.0 = Release|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.Build.0 = Debug|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.ActiveCfg = Release|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.Build.0 = Release|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.ActiveCfg = Debug|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.Build.0 = Debug|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.ActiveCfg = Release|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.Build.0 = Release|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.ActiveCfg = Debug|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.Build.0 = Debug|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.ActiveCfg = Release|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.Build.0 = Release|Win32 + {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Debug|Win32.ActiveCfg = Debug|Win32 + {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Debug|Win32.Build.0 = Debug|Win32 + {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Release|Win32.ActiveCfg = Release|Win32 + {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Release|Win32.Build.0 = Release|Win32 + {709A954B-4F1E-4375-A418-BCBFFE598715}.Debug|Win32.ActiveCfg = Debug|Win32 + {709A954B-4F1E-4375-A418-BCBFFE598715}.Debug|Win32.Build.0 = Debug|Win32 + {709A954B-4F1E-4375-A418-BCBFFE598715}.Release|Win32.ActiveCfg = Release|Win32 + {709A954B-4F1E-4375-A418-BCBFFE598715}.Release|Win32.Build.0 = Release|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.ActiveCfg = Debug|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.Build.0 = Debug|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.ActiveCfg = Release|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.Build.0 = Release|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.ActiveCfg = Debug|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.Build.0 = Debug|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.ActiveCfg = Release|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.Build.0 = Release|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.Build.0 = Debug|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.ActiveCfg = Release|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.Build.0 = Release|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.ActiveCfg = Debug|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.Build.0 = Debug|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.ActiveCfg = Release|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.Build.0 = Release|Win32 + {F9F236A2-8B57-415A-8397-7145144400F5}.Debug|Win32.ActiveCfg = Debug|Win32 + {F9F236A2-8B57-415A-8397-7145144400F5}.Debug|Win32.Build.0 = Debug|Win32 + {F9F236A2-8B57-415A-8397-7145144400F5}.Release|Win32.ActiveCfg = Release|Win32 + {F9F236A2-8B57-415A-8397-7145144400F5}.Release|Win32.Build.0 = Release|Win32 + {03FC7556-1052-45FF-A162-90D595713EAB}.Debug|Win32.ActiveCfg = Debug|Win32 + {03FC7556-1052-45FF-A162-90D595713EAB}.Release|Win32.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/external/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj b/external/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj new file mode 100644 index 0000000..1120bf3 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj b/external/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj new file mode 100644 index 0000000..6eb91af --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj b/external/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj new file mode 100644 index 0000000..5e0cac2 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj b/external/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj new file mode 100644 index 0000000..a5f95ed --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj b/external/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj new file mode 100644 index 0000000..1131adf --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj b/external/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj new file mode 100644 index 0000000..9a754ef --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj b/external/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj new file mode 100644 index 0000000..0f39d3b --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj b/external/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj new file mode 100644 index 0000000..3d52d4b --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj b/external/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj new file mode 100644 index 0000000..792371f --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj b/external/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj new file mode 100644 index 0000000..80548e2 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj b/external/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj new file mode 100644 index 0000000..fea6600 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj b/external/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj new file mode 100644 index 0000000..d288e52 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj b/external/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj new file mode 100644 index 0000000..47d157d --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj b/external/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj new file mode 100644 index 0000000..37964b0 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj b/external/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj new file mode 100644 index 0000000..307b9b7 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj b/external/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj new file mode 100644 index 0000000..d169602 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/libs/filesystem/v3/test/msvc10/common.props b/external/libs/filesystem/v3/test/msvc10/common.props new file mode 100644 index 0000000..a341a58 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/common.props @@ -0,0 +1,20 @@ + + + + <_ProjectFileVersion>10.0.30319.1 + $(TEMP)\$(SolutionName)\$(Configuration)\ + $(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\ + + + + ../../../../../..;%(AdditionalIncludeDirectories) + BOOST_FILESYSTEM_VERSION=3;BOOST_SYSTEM_NO_DEPRECATED;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions) + Async + false + Level4 + + + %(AdditionalLibraryDirectories) + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj new file mode 100644 index 0000000..437ebf6 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1} + convenience_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + MaxSpeed + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj new file mode 100644 index 0000000..c16b177 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000} + deprecated_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + MaxSpeed + true + BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj b/external/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj new file mode 100644 index 0000000..dc8adc2 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj @@ -0,0 +1,100 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426} + Win32Proj + file_status + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + "$(TargetDir)\$(TargetName).exe" + Executing test $(TargetName).exe... + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + "$(TargetDir)\$(TargetName).exe" + Executing test $(TargetName).exe... + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/filesystem-v3.sln b/external/libs/filesystem/v3/test/msvc10/filesystem-v3.sln new file mode 100644 index 0000000..7f92726 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/filesystem-v3.sln @@ -0,0 +1,190 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_unit_test", "path_unit_test\path_unit_test.vcxproj", "{3C77F610-2E31-4087-9DF2-7CD45198A02D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_unit_test", "operations_unit_test\operations_unit_test.vcxproj", "{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcxproj", "{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcxproj", "{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcxproj", "{F94CCADD-A90B-480C-A304-C19D015D36B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcxproj", "{FFD738F7-96F0-445C-81EA-551665EF53D1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcxproj", "{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcxproj", "{A9939CD7-BE1C-4334-947C-4C320D49B3CA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcxproj", "{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut1", "tut1\tut1.vcxproj", "{6376B8E4-7FD4-466B-978E-E8DA6E938689}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcxproj", "{4FF64FA7-6806-401D-865C-79DD064D4A9E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcxproj", "{CD69B175-389E-4F8F-85DC-03C56A47CD1D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut4", "tut4\tut4.vcxproj", "{256EA89A-E073-4CE8-B675-BE2FBC6B2691}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windows_attributes", "windows_attributes\windows_attributes.vcxproj", "{FC5C770F-3017-4021-8DAF-C5DCA3FDF005}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut5", "tut5\tut5.vcxproj", "{5C9B3380-3C6E-45CC-986A-16D245E27E58}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut6a", "tut6a\tut6a.vcxproj", "{C781F9C4-31D4-4509-B031-84DB598B207D}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut6b", "tut6b\tut6b.vcxproj", "{4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut6c", "tut6c\tut6c.vcxproj", "{17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stems", "stems\stems.vcxproj", "{23C735E1-0195-467F-BE9F-314829402FCF}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "long_path_test", "long_path_test\long_path_test.vcxproj", "{1A6A7DAF-8705-4B2B-83B5-93F84A63496C}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "file_status", "file_status\file_status.vcxproj", "{43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "locale_info", "locale_info\locale_info.vcxproj", "{3667C35E-78D5-43D4-AAC2-349145E4341D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thread_test", "thread_test\thread_test.vcxproj", "{20E2805D-9634-46CE-B979-21CCBBD16EA3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symlinked_cpp", "symlinked_cpp\symlinked_cpp.vcxproj", "{E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}" + ProjectSection(ProjectDependencies) = postProject + {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1} + {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.ActiveCfg = Debug|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.Build.0 = Debug|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.ActiveCfg = Release|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.Build.0 = Release|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.ActiveCfg = Debug|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.Build.0 = Debug|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.ActiveCfg = Release|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.Build.0 = Release|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.ActiveCfg = Debug|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.Build.0 = Debug|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.ActiveCfg = Release|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.Build.0 = Release|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.ActiveCfg = Debug|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.Build.0 = Debug|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.ActiveCfg = Release|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.Build.0 = Release|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.Build.0 = Debug|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.ActiveCfg = Release|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.Build.0 = Release|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.ActiveCfg = Debug|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.Build.0 = Debug|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.ActiveCfg = Release|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.Build.0 = Release|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.Build.0 = Debug|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.ActiveCfg = Release|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.Build.0 = Release|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.ActiveCfg = Debug|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.Build.0 = Debug|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.ActiveCfg = Release|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.Build.0 = Release|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.ActiveCfg = Debug|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.Build.0 = Debug|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.ActiveCfg = Release|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.Build.0 = Release|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.ActiveCfg = Debug|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.Build.0 = Debug|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.ActiveCfg = Release|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.Build.0 = Release|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.ActiveCfg = Debug|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.Build.0 = Debug|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.ActiveCfg = Release|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.Build.0 = Release|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.Build.0 = Debug|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.ActiveCfg = Release|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.Build.0 = Release|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.ActiveCfg = Debug|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.Build.0 = Debug|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.ActiveCfg = Release|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.Build.0 = Release|Win32 + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|Win32.ActiveCfg = Debug|Win32 + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|Win32.Build.0 = Debug|Win32 + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|Win32.ActiveCfg = Release|Win32 + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|Win32.Build.0 = Release|Win32 + {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|Win32.ActiveCfg = Debug|Win32 + {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|Win32.Build.0 = Debug|Win32 + {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|Win32.ActiveCfg = Release|Win32 + {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|Win32.Build.0 = Release|Win32 + {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|Win32.ActiveCfg = Debug|Win32 + {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|Win32.Build.0 = Debug|Win32 + {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|Win32.ActiveCfg = Release|Win32 + {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|Win32.Build.0 = Release|Win32 + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|Win32.ActiveCfg = Debug|Win32 + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|Win32.Build.0 = Debug|Win32 + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|Win32.ActiveCfg = Release|Win32 + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|Win32.Build.0 = Release|Win32 + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|Win32.ActiveCfg = Debug|Win32 + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|Win32.Build.0 = Debug|Win32 + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|Win32.ActiveCfg = Release|Win32 + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|Win32.Build.0 = Release|Win32 + {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|Win32.ActiveCfg = Debug|Win32 + {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|Win32.Build.0 = Debug|Win32 + {23C735E1-0195-467F-BE9F-314829402FCF}.Release|Win32.ActiveCfg = Release|Win32 + {23C735E1-0195-467F-BE9F-314829402FCF}.Release|Win32.Build.0 = Release|Win32 + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|Win32.ActiveCfg = Debug|Win32 + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|Win32.Build.0 = Debug|Win32 + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|Win32.ActiveCfg = Release|Win32 + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|Win32.Build.0 = Release|Win32 + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|Win32.ActiveCfg = Debug|Win32 + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|Win32.Build.0 = Debug|Win32 + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|Win32.ActiveCfg = Release|Win32 + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|Win32.Build.0 = Release|Win32 + {3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.ActiveCfg = Debug|Win32 + {3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.Build.0 = Debug|Win32 + {3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.ActiveCfg = Release|Win32 + {3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.Build.0 = Release|Win32 + {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Debug|Win32.ActiveCfg = Debug|Win32 + {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Debug|Win32.Build.0 = Debug|Win32 + {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Release|Win32.ActiveCfg = Release|Win32 + {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Release|Win32.Build.0 = Release|Win32 + {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Debug|Win32.ActiveCfg = Debug|Win32 + {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Debug|Win32.Build.0 = Debug|Win32 + {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Release|Win32.ActiveCfg = Release|Win32 + {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/external/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj b/external/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj new file mode 100644 index 0000000..64d97fc --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj @@ -0,0 +1,110 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {FFD738F7-96F0-445C-81EA-551665EF53D1} + filesystem_dll + Win32Proj + + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(TEMP)\$(SolutionName)\$(Configuration)\ + $(Configuration)\ + true + $(TEMP)\$(SolutionName)\$(Configuration)\ + $(Configuration)\ + false + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions) + true + Async + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Windows + MachineX86 + + + + + MaxSpeed + true + %(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions) + Async + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Windows + true + true + MachineX86 + + + + + + + + + + + + + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj new file mode 100644 index 0000000..90ed1fb --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {A9939CD7-BE1C-4334-947C-4C320D49B3CA} + fstream_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + MaxSpeed + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj b/external/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj new file mode 100644 index 0000000..e2ce0eb --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj @@ -0,0 +1,96 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {3667C35E-78D5-43D4-AAC2-349145E4341D} + Win32Proj + locale_info + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + "$(TargetDir)\$(TargetName).exe" + + + Executing test $(TargetName).exe... + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + "$(TargetDir)\$(TargetName).exe" + + + Executing test $(TargetName).exe... + + + + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj new file mode 100644 index 0000000..c8cc191 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj @@ -0,0 +1,100 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C} + Win32Proj + long_path_test + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + "$(TargetDir)\$(TargetName).exe" + Executing test $(TargetName).exe... + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + "$(TargetDir)\$(TargetName).exe" + Executing test $(TargetName).exe... + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj new file mode 100644 index 0000000..b7bd47a --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj @@ -0,0 +1,106 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40} + operations_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + BOOST_FILEYSTEM_INCLUDE_IOSTREAM;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" -x + + + + + MaxSpeed + true + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" -x + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj new file mode 100644 index 0000000..2bc35c3 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj @@ -0,0 +1,109 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0} + operations_unit_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + MaxSpeed + true + %(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj new file mode 100644 index 0000000..9f26984 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C} + path_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + BOOST_FILESYSTEM_PATH_CTOR_COUNT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + MaxSpeed + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj b/external/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj new file mode 100644 index 0000000..c1203bb --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {3C77F610-2E31-4087-9DF2-7CD45198A02D} + path_unit_test + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + MaxSpeed + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + Executing test $(TargetName).exe... + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj b/external/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj new file mode 100644 index 0000000..6ed20ee --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {23C735E1-0195-467F-BE9F-314829402FCF} + Win32Proj + stems + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj b/external/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj new file mode 100644 index 0000000..dd8a490 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj @@ -0,0 +1,97 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {F94CCADD-A90B-480C-A304-C19D015D36B1} + system_dll + Win32Proj + + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(TEMP)\$(SolutionName)\$(Configuration)\ + $(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\ + true + $(TEMP)\$(SolutionName)\$(Configuration)\ + $(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\ + false + + + + Disabled + %(AdditionalIncludeDirectories) + BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions) + true + Async + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Windows + MachineX86 + + + + + MaxSpeed + true + %(AdditionalIncludeDirectories) + BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions) + Async + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Windows + true + true + MachineX86 + + + + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj new file mode 100644 index 0000000..4c2db0a --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj @@ -0,0 +1,101 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {6376B8E4-7FD4-466B-978E-E8DA6E938689} + tut1 + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + %(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj new file mode 100644 index 0000000..4e550c9 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj @@ -0,0 +1,97 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {CD69B175-389E-4F8F-85DC-03C56A47CD1D} + tut2 + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj new file mode 100644 index 0000000..ddce9f8 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj @@ -0,0 +1,95 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {4FF64FA7-6806-401D-865C-79DD064D4A9E} + tut3 + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + true + EnableFastChecks + MultiThreadedDebugDLL + + + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + MultiThreadedDLL + true + + + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj new file mode 100644 index 0000000..9f838c2 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj @@ -0,0 +1,97 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {256EA89A-E073-4CE8-B675-BE2FBC6B2691} + tut4 + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + %(AdditionalIncludeDirectories) + true + EnableFastChecks + MultiThreadedDebugDLL + + + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + %(AdditionalIncludeDirectories) + MultiThreadedDLL + true + + + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + false + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + false + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj new file mode 100644 index 0000000..bab4052 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {5C9B3380-3C6E-45CC-986A-16D245E27E58} + Win32Proj + tut5 + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj new file mode 100644 index 0000000..2794be5 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {C781F9C4-31D4-4509-B031-84DB598B207D} + Win32Proj + tut6a + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj new file mode 100644 index 0000000..b2be137 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C} + Win32Proj + tut6b + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj b/external/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj new file mode 100644 index 0000000..e06f948 --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29} + Win32Proj + tut6c + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj b/external/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj new file mode 100644 index 0000000..cd0e68e --- /dev/null +++ b/external/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005} + Win32Proj + windows_attributes + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file diff --git a/external/libs/filesystem/v3/test/operations_test.cpp b/external/libs/filesystem/v3/test/operations_test.cpp new file mode 100644 index 0000000..610f27f --- /dev/null +++ b/external/libs/filesystem/v3/test/operations_test.cpp @@ -0,0 +1,2005 @@ +// Boost operations_test.cpp ---------------------------------------------------------// + +// Copyright Beman Dawes 2002, 2009. + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +namespace fs = boost::filesystem; + +#include +#include + +using boost::system::error_code; +using boost::system::system_category; +using boost::system::system_error; + +#include +#include + +using std::cout; +using std::endl; + +#include +#include +#include +#include // for strncmp, etc. +#include +#include // for system(), getenv(), etc. + +#ifdef BOOST_WINDOWS_API +# include + +inline std::wstring convert(const char* c) +{ + std::string s(c); + + return std::wstring(s.begin(), s.end()); +} + +inline int setenv(const char* name, const fs::path::value_type* val, int) +{ + return SetEnvironmentVariableW(convert(name).c_str(), val); +} + +inline int setenv(const char* name, const char* val, int) +{ + return SetEnvironmentVariableW(convert(name).c_str(), convert(val).c_str()); +} + +inline int unsetenv(const char* name) +{ + return SetEnvironmentVariableW(convert(name).c_str(), 0); +} + +#else + +#include // allow unqualifed calls to env funcs on SunOS + +#endif + +// on Windows, except for standard libaries known to have wchar_t overloads for +// file stream I/O, use path::string() to get a narrow character c_str() +#if defined(BOOST_WINDOWS_API) \ + && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405) // not Dinkumware || no wide overloads +# define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available +#else // use the native c_str, which will be narrow on POSIX, wide on Windows +# define BOOST_FILESYSTEM_C_STR c_str() +#endif + +#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__) + +namespace +{ + typedef int errno_t; + std::string platform(BOOST_PLATFORM); + bool report_throws = false; + bool cleanup = true; + bool skip_long_windows_tests = false; + + fs::directory_iterator end_itr; + fs::path dir; + fs::path d1; + fs::path d2; + fs::path f0; + fs::path f1; + fs::path d1f1; + + bool create_symlink_ok(true); + + fs::path ng(" no-way, Jose"); + + unsigned short language_id; // 0 except for Windows + + const char* temp_dir_name = "v3_operations_test"; + + void create_file(const fs::path & ph, const std::string & contents = std::string()) + { + std::ofstream f(ph.BOOST_FILESYSTEM_C_STR); + if (!f) + throw fs::filesystem_error("operations_test create_file", + ph, error_code(errno, system_category())); + if (!contents.empty()) f << contents; + } + + void verify_file(const fs::path & ph, const std::string & expected) + { + std::ifstream f(ph.BOOST_FILESYSTEM_C_STR); + if (!f) + throw fs::filesystem_error("operations_test verify_file", + ph, error_code(errno, system_category())); + std::string contents; + f >> contents; + if (contents != expected) + throw fs::filesystem_error("operations_test verify_file contents \"" + + contents + "\" != \"" + expected + "\"", ph, error_code()); + } + + template< typename F > + bool throws_fs_error(F func, errno_t en, int line) + { + try { func(); } + + catch (const fs::filesystem_error & ex) + { + if (report_throws) + { + // use the what() convenience function to display exceptions + cout << "\n" << ex.what() << "\n"; + } + if (en == 0 + || en == ex.code().default_error_condition().value()) return true; + cout + << "\nWarning: line " << line + << " exception reports default_error_condition().value() " + << ex.code().default_error_condition().value() + << ", should be " << en + << "\n value() is " << ex.code().value() + << endl; + return true; + } + return false; + } + + boost::system::error_category* poison_category_aux() { return 0; } + boost::system::error_category& poison_category() { return *poison_category_aux(); } + + // compile-only two argument "do-the-right-thing" tests + // verifies that all overload combinations compile without error + void do_not_call() + { + fs::path p; + std::string s; + const char* a = 0; + fs::copy_file(p, p); + fs::copy_file(s, p); + fs::copy_file(a, p); + fs::copy_file(p, s); + fs::copy_file(p, a); + fs::copy_file(s, s); + fs::copy_file(a, s); + fs::copy_file(s, a); + fs::copy_file(a, a); + } + + void bad_file_size() + { + fs::file_size(" No way, Jose"); + } + + void bad_directory_size() + { + fs::file_size(fs::current_path()); + } + + fs::path bad_create_directory_path; + void bad_create_directory() + { + fs::create_directory(bad_create_directory_path); + } + + void bad_equivalent() + { + fs::equivalent("no-such-path", "another-not-present-path"); + } + + fs::path bad_remove_dir; + void bad_remove() + { + fs::remove(bad_remove_dir); + } + + class renamer + { + public: + renamer(const fs::path & p1, const fs::path & p2) + : from(p1), to(p2) {} + void operator()() + { + fs::rename(from, to); + } + private: + fs::path from; + fs::path to; + }; + + //------------------------------ debugging aids --------------------------------------// + + std::ostream& operator<<(std::ostream& os, const fs::file_status& s) + { + if (s.type() == fs::status_error) { os << "status_error"; } + else if (s.type() == fs::file_not_found) { os << "file_not_found"; } + else if (s.type() == fs::regular_file) { os << "regular_file"; } + else if (s.type() == fs::directory_file) { os << "directory_file"; } + else if (s.type() == fs::symlink_file) { os << "symlink_file"; } + else if (s.type() == fs::block_file) { os << "block_file"; } + else if (s.type() == fs::character_file) { os << "character_file"; } + else if (s.type() == fs::fifo_file) { os << "fifo_file"; } + else if (s.type() == fs::socket_file) { os << "socket_file"; } + else if (s.type() == fs::reparse_file) { os << "reparse_file"; } + else if (s.type() == fs::type_unknown) { os << "type_unknown"; } + else { os << "_detail_directory_symlink"; } + return os; + } + + void dump_tree(const fs::path & root) + { + cout << "dumping tree rooted at " << root << endl; + for (fs::recursive_directory_iterator it (root, fs::symlink_option::recurse); + it != fs::recursive_directory_iterator(); + ++it) + { + for (int i = 0; i <= it.level(); ++i) + cout << " "; + + cout << it->path(); + if (fs::is_symlink(it->path())) + { + cout << " [symlink]" << endl; + } + else + cout << endl; + } + } + + // exception_tests() ---------------------------------------------------------------// + + void exception_tests() + { + cout << "exception_tests..." << endl; + bool exception_thrown; + + // catch runtime_error by value + + cout << " catch runtime_error by value" << endl; + exception_thrown = false; + try + { + fs::create_directory("no-such-dir/foo/bar"); + } + catch (std::runtime_error x) + { + exception_thrown = true; + if (report_throws) cout << x.what() << endl; + if (platform == "Windows" && language_id == 0x0409) // English (United States) + // the stdcxx standard library apparently appends additional info + // to what(), so check only the initial portion: + BOOST_TEST(std::strncmp(x.what(), + "boost::filesystem::create_directory", + sizeof("boost::filesystem::create_directory")-1) == 0); + } + BOOST_TEST(exception_thrown); + + // catch system_error by value + + cout << " catch system_error by value" << endl; + exception_thrown = false; + try + { + fs::create_directory("no-such-dir/foo/bar"); + } + catch (system_error x) + { + exception_thrown = true; + if (report_throws) cout << x.what() << endl; + if (platform == "Windows" && language_id == 0x0409) // English (United States) + BOOST_TEST(std::strcmp(x.what(), + "boost::filesystem::create_directory: The system cannot find the path specified") == 0); + } + BOOST_TEST(exception_thrown); + + // catch filesystem_error by value + + cout << " catch filesystem_error by value" << endl; + exception_thrown = false; + try + { + fs::create_directory("no-such-dir/foo/bar"); + } + catch (fs::filesystem_error x) + { + exception_thrown = true; + if (report_throws) cout << x.what() << endl; + if (platform == "Windows" && language_id == 0x0409) // English (United States) + { + bool ok (std::strcmp(x.what(), + "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir/foo/bar\"") == 0); + BOOST_TEST(ok); + if (!ok) + { + cout << "what returns \"" << x.what() << "\"" << endl; + } + } + } + BOOST_TEST(exception_thrown); + + // catch filesystem_error by const reference + + cout << " catch filesystem_error by const reference" << endl; + exception_thrown = false; + try + { + fs::create_directory("no-such-dir/foo/bar"); + } + catch (const fs::filesystem_error & x) + { + exception_thrown = true; + if (report_throws) cout << x.what() << endl; + if (platform == "Windows" && language_id == 0x0409) // English (United States) + { + bool ok (std::strcmp(x.what(), + "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir/foo/bar\"") == 0); + BOOST_TEST(ok); + if (!ok) + { + cout << "what returns \"" << x.what() << "\"" << endl; + } + } + } + BOOST_TEST(exception_thrown); + + // the bound functions should throw, so CHECK_EXCEPTION() should return true + + BOOST_TEST(CHECK_EXCEPTION(bad_file_size, ENOENT)); + + if (platform == "Windows") + BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, ENOENT)); + else + BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, 0)); + + // test path::exception members + try { fs::file_size(ng); } // will throw + + catch (const fs::filesystem_error & ex) + { + BOOST_TEST(ex.path1().string() == " no-way, Jose"); + } + + cout << " exception_tests complete" << endl; + } + + // create a directory tree that can be used by subsequent tests ---------------------// + // + // dir + // d1 + // d1f1 // an empty file + // f0 // an empty file + // f1 // a file containing "file-f1" + + void create_tree() + { + cout << "creating test directories and files in " << dir << endl; + + // create directory d1 + BOOST_TEST(!fs::create_directory(dir)); + BOOST_TEST(!fs::is_symlink(dir)); + BOOST_TEST(!fs::is_symlink("nosuchfileordirectory")); + d1 = dir / "d1"; + BOOST_TEST(fs::create_directory(d1)); + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(fs::is_directory(d1)); + BOOST_TEST(fs::is_empty(d1)); + + // create an empty file named "d1f1" + d1f1 = d1 / "d1f1"; + create_file(d1f1, ""); + BOOST_TEST(fs::exists(d1f1)); + BOOST_TEST(!fs::is_directory(d1f1)); + BOOST_TEST(fs::is_regular_file(d1f1)); + BOOST_TEST(fs::is_empty(d1f1)); + BOOST_TEST(fs::file_size(d1f1) == 0); + BOOST_TEST(fs::hard_link_count(d1f1) == 1); + + // create an empty file named "f0" + f0 = dir / "f0"; + create_file(f0, ""); + BOOST_TEST(fs::exists(f0)); + BOOST_TEST(!fs::is_directory(f0)); + BOOST_TEST(fs::is_regular_file(f0)); + BOOST_TEST(fs::is_empty(f0)); + BOOST_TEST(fs::file_size(f0) == 0); + BOOST_TEST(fs::hard_link_count(f0) == 1); + + // create a file named "f1" + f1 = dir / "f1"; + create_file(f1, "file-f1"); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(!fs::is_directory(f1)); + BOOST_TEST(fs::is_regular_file(f1)); + BOOST_TEST(fs::file_size(f1) == 7); + verify_file(f1, "file-f1"); + } + + // directory_iterator_tests --------------------------------------------------------// + + void directory_iterator_tests() + { + cout << "directory_iterator_tests..." << endl; + + bool dir_itr_exception(false); + try { fs::directory_iterator it(""); } + catch (const fs::filesystem_error &) { dir_itr_exception = true; } + BOOST_TEST(dir_itr_exception); + + error_code ec; + + BOOST_TEST(!ec); + fs::directory_iterator it("", ec); + BOOST_TEST(ec); + + dir_itr_exception = false; + try { fs::directory_iterator it("nosuchdirectory"); } + catch (const fs::filesystem_error &) { dir_itr_exception = true; } + BOOST_TEST(dir_itr_exception); + + ec.clear(); + fs::directory_iterator it2("nosuchdirectory", ec); + BOOST_TEST(ec); + + dir_itr_exception = false; + try + { + error_code ec; + fs::directory_iterator it("nosuchdirectory", ec); + BOOST_TEST(ec); + BOOST_TEST(ec == boost::system::errc::no_such_file_or_directory); + } + catch (const fs::filesystem_error &) { dir_itr_exception = true; } + BOOST_TEST(!dir_itr_exception); + + // create a second directory named d2 + d2 = dir / "d2"; + fs::create_directory(d2); + BOOST_TEST(fs::exists(d2)); + BOOST_TEST(fs::is_directory(d2)); + + // test the basic operation of directory_iterators, and test that + // stepping one iterator doesn't affect a different iterator. + { + typedef std::vector vec_type; + vec_type vec; + + fs::directory_iterator it1(dir); + BOOST_TEST(it1 != fs::directory_iterator()); + BOOST_TEST(fs::exists(it1->status())); + vec.push_back(*it1); + BOOST_TEST(*it1 == vec[0]); + + fs::directory_iterator it2(dir); + BOOST_TEST(it2 != fs::directory_iterator()); + BOOST_TEST(*it1 == *it2); + + ++it1; + BOOST_TEST(it1 != fs::directory_iterator()); + BOOST_TEST(fs::exists(it1->status())); + BOOST_TEST(it1 != it2); + BOOST_TEST(*it1 != vec[0]); + BOOST_TEST(*it2 == vec[0]); + vec.push_back(*it1); + + ++it1; + BOOST_TEST(it1 != fs::directory_iterator()); + BOOST_TEST(fs::exists(it1->status())); + BOOST_TEST(it1 != it2); + BOOST_TEST(*it2 == vec[0]); + vec.push_back(*it1); + + ++it1; + BOOST_TEST(it1 != fs::directory_iterator()); + BOOST_TEST(fs::exists(it1->status())); + BOOST_TEST(it1 != it2); + BOOST_TEST(*it2 == vec[0]); + vec.push_back(*it1); + + ++it1; + BOOST_TEST(it1 == fs::directory_iterator()); + + BOOST_TEST(*it2 == vec[0]); + ec.clear(); + it2.increment(ec); + BOOST_TEST(!ec); + BOOST_TEST(it2 != fs::directory_iterator()); + BOOST_TEST(it1 == fs::directory_iterator()); + BOOST_TEST(*it2 == vec[1]); + ++it2; + BOOST_TEST(*it2 == vec[2]); + BOOST_TEST(it1 == fs::directory_iterator()); + ++it2; + BOOST_TEST(*it2 == vec[3]); + ++it2; + BOOST_TEST(it1 == fs::directory_iterator()); + BOOST_TEST(it2 == fs::directory_iterator()); + + // sort vec and check that the right directory entries were found + std::sort(vec.begin(), vec.end()); + + BOOST_TEST_EQ(vec[0].path().filename().string(), std::string("d1")); + BOOST_TEST_EQ(vec[1].path().filename().string(), std::string("d2")); + BOOST_TEST_EQ(vec[2].path().filename().string(), std::string("f0")); + BOOST_TEST_EQ(vec[3].path().filename().string(), std::string("f1")); + } + + { // *i++ must meet the standard's InputIterator requirements + fs::directory_iterator dir_itr(dir); + BOOST_TEST(dir_itr != fs::directory_iterator()); + fs::path p = dir_itr->path(); + BOOST_TEST((*dir_itr++).path() == p); + BOOST_TEST(dir_itr != fs::directory_iterator()); + BOOST_TEST(dir_itr->path() != p); + + // test case reported in comment to SourceForge bug tracker [937606] + fs::directory_iterator it(dir); + const fs::path p1 = (*it++).path(); + BOOST_TEST(it != fs::directory_iterator()); + const fs::path p2 = (*it++).path(); + BOOST_TEST(p1 != p2); + ++it; + ++it; + BOOST_TEST(it == fs::directory_iterator()); + } + + // Windows has a tricky special case when just the root-name is given, + // causing the rest of the path to default to the current directory. + // Reported as S/F bug [ 1259176 ] + if (platform == "Windows") + { + fs::path root_name_path(fs::current_path().root_name()); + fs::directory_iterator it(root_name_path); + BOOST_TEST(it != fs::directory_iterator()); +// BOOST_TEST(fs::exists((*it).path())); + BOOST_TEST(fs::exists(it->path())); + BOOST_TEST(it->path().parent_path() == root_name_path); + bool found(false); + do + { + if (it->path().filename() == temp_dir_name) found = true; + } while (++it != fs::directory_iterator()); + BOOST_TEST(found); + } + + // there was an inital bug in directory_iterator that caused premature + // close of an OS handle. This block will detect regression. + { + fs::directory_iterator di; + { + di = fs::directory_iterator(dir); + } + BOOST_TEST(++di != fs::directory_iterator()); + } + + cout << " directory_iterator_tests complete" << endl; + } + + // recursive_directory_iterator_tests ----------------------------------------------// + + int walk_tree(bool recursive) + { + int d1f1_count = 0; + for (fs::recursive_directory_iterator it (dir, + recursive ? fs::symlink_option::recurse : fs::symlink_option::no_recurse); + it != fs::recursive_directory_iterator(); + ++it) + { + if (it->path().filename() == "d1f1") + ++d1f1_count; + } + return d1f1_count; + } + + void recursive_directory_iterator_tests() + { + cout << "recursive_directory_iterator_tests..." << endl; + BOOST_TEST(walk_tree(false) == 1); + if (create_symlink_ok) + BOOST_TEST(walk_tree(true) > 1); + + // test iterator increment with error_code argument + boost::system::error_code ec; + int d1f1_count = 0; + for (fs::recursive_directory_iterator it (dir, fs::symlink_option::no_recurse); + it != fs::recursive_directory_iterator(); + it.increment(ec)) + { + if (it->path().filename() == "d1f1") + ++d1f1_count; + } + BOOST_TEST(!ec); + BOOST_TEST(d1f1_count == 1); + + cout << " recursive_directory_iterator_tests complete" << endl; + } + + // iterator_status_tests -----------------------------------------------------------// + + void iterator_status_tests() + { + cout << "iterator_status_tests..." << endl; + + error_code ec; + // harmless if these fail: + fs::create_symlink(dir/"f0", dir/"f0_symlink", ec); + fs::create_symlink(dir/"no such file", dir/"dangling_symlink", ec); + fs::create_directory_symlink(dir/"d1", dir/"d1_symlink", ec); + fs::create_directory_symlink(dir/"no such directory", + dir/"dangling_directory_symlink", ec); + + for (fs::directory_iterator it(dir); + it != fs::directory_iterator(); ++it) + { + BOOST_TEST(fs::status(it->path()).type() == it->status().type()); + BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type()); + if (it->path().filename() == "d1") + { + BOOST_TEST(fs::is_directory(it->status())); + BOOST_TEST(fs::is_directory(it->symlink_status())); + } + else if (it->path().filename() == "d2") + { + BOOST_TEST(fs::is_directory(it->status())); + BOOST_TEST(fs::is_directory(it->symlink_status())); + } + else if (it->path().filename() == "f0") + { + BOOST_TEST(fs::is_regular_file(it->status())); + BOOST_TEST(fs::is_regular_file(it->symlink_status())); + } + else if (it->path().filename() == "f1") + { + BOOST_TEST(fs::is_regular_file(it->status())); + BOOST_TEST(fs::is_regular_file(it->symlink_status())); + } + else if (it->path().filename() == "f0_symlink") + { + BOOST_TEST(fs::is_regular_file(it->status())); + BOOST_TEST(fs::is_symlink(it->symlink_status())); + } + else if (it->path().filename() == "dangling_symlink") + { + BOOST_TEST(it->status().type() == fs::file_not_found); + BOOST_TEST(fs::is_symlink(it->symlink_status())); + } + else if (it->path().filename() == "d1_symlink") + { + BOOST_TEST(fs::is_directory(it->status())); + BOOST_TEST(fs::is_symlink(it->symlink_status())); + } + else if (it->path().filename() == "dangling_directory_symlink") + { + BOOST_TEST(it->status().type() == fs::file_not_found); + BOOST_TEST(fs::is_symlink(it->symlink_status())); + } + //else + // cout << " Note: unexpected directory entry " << it->path().filename() << endl; + } + } + + // recursive_iterator_status_tests -------------------------------------------------// + + void recursive_iterator_status_tests() + { + cout << "recursive_iterator_status_tests..." << endl; + for (fs::recursive_directory_iterator it (dir); + it != fs::recursive_directory_iterator(); + ++it) + { + BOOST_TEST(fs::status(it->path()).type() == it->status().type()); + BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type()); + } + } + + // create_hard_link_tests ----------------------------------------------------------// + + void create_hard_link_tests() + { + cout << "create_hard_link_tests..." << endl; + + fs::path from_ph(dir / "f3"); + fs::path f1(dir / "f1"); + + BOOST_TEST(!fs::exists(from_ph)); + BOOST_TEST(fs::exists(f1)); + bool create_hard_link_ok(true); + try { fs::create_hard_link(f1, from_ph); } + catch (const fs::filesystem_error & ex) + { + create_hard_link_ok = false; + cout + << " *** For information only ***\n" + " create_hard_link() attempt failed\n" + " filesystem_error.what() reports: " << ex.what() << "\n" + " create_hard_link() may not be supported on this file system\n"; + } + + if (create_hard_link_ok) + { + cout + << " *** For information only ***\n" + " create_hard_link() succeeded\n"; + BOOST_TEST(fs::exists(from_ph)); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(fs::equivalent(from_ph, f1)); + BOOST_TEST(fs::hard_link_count(from_ph) == 2); + BOOST_TEST(fs::hard_link_count(f1) == 2); + } + + // Although tests may be running on a FAT or other file system that does + // not support hard links, that is unusual enough that it is considered + // a test failure. + BOOST_TEST(create_hard_link_ok); + + error_code ec; + fs::create_hard_link(fs::path("doesnotexist"), + fs::path("shouldnotwork"), ec); + BOOST_TEST(ec); + } + + // create_symlink_tests ------------------------------------------------------------// + + void create_symlink_tests() + { + cout << "create_symlink_tests..." << endl; + + fs::path from_ph(dir / "f4"); + fs::path f1(dir / "f1"); + BOOST_TEST(!fs::exists(from_ph)); + BOOST_TEST(fs::exists(f1)); + try { fs::create_symlink(f1, from_ph); } + catch (const fs::filesystem_error & ex) + { + create_symlink_ok = false; + cout + << " *** For information only ***\n" + " create_symlink() attempt failed\n" + " filesystem_error.what() reports: " << ex.what() << "\n" + " create_symlink() may not be supported on this operating system or file system\n"; + } + + if (create_symlink_ok) + { + cout + << " *** For information only ***\n" + " create_symlink() succeeded\n"; + BOOST_TEST(fs::exists(from_ph)); + BOOST_TEST(fs::is_symlink(from_ph)); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(fs::equivalent(from_ph, f1)); + BOOST_TEST(fs::read_symlink(from_ph) == f1); + + fs::file_status stat = fs::symlink_status(from_ph); + BOOST_TEST(fs::exists(stat)); + BOOST_TEST(!fs::is_directory(stat)); + BOOST_TEST(!fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + BOOST_TEST(fs::is_symlink(stat)); + + stat = fs::status(from_ph); + BOOST_TEST(fs::exists(stat)); + BOOST_TEST(!fs::is_directory(stat)); + BOOST_TEST(fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + BOOST_TEST(!fs::is_symlink(stat)); + + // since create_symlink worked, copy_symlink should also work + fs::path symlink2_ph(dir / "symlink2"); + fs::copy_symlink(from_ph, symlink2_ph); + stat = fs::symlink_status(symlink2_ph); + BOOST_TEST(fs::is_symlink(stat)); + BOOST_TEST(fs::exists(stat)); + BOOST_TEST(!fs::is_directory(stat)); + BOOST_TEST(!fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + } + + error_code ec = error_code(); + fs::create_symlink("doesnotexist", "", ec); + BOOST_TEST(ec); + } + + // permissions_tests ---------------------------------------------------------------// + + void permissions_tests() + { + cout << "permissions_tests..." << endl; + + fs::path p(dir / "permissions.txt"); + create_file(p); + + if (platform == "POSIX") + { + cout << " fs::status(p).permissions() " << std::oct << fs::status(p).permissions() + << std::dec << endl; + BOOST_TEST((fs::status(p).permissions() & 0600) == 0600); // 0644, 0664 sometimes returned + + fs::permissions(p, fs::owner_all); + BOOST_TEST(fs::status(p).permissions() == fs::owner_all); + + fs::permissions(p, fs::add_perms | fs::group_all); + BOOST_TEST(fs::status(p).permissions() == (fs::owner_all | fs::group_all)); + + fs::permissions(p, fs::remove_perms | fs::group_all); + BOOST_TEST(fs::status(p).permissions() == fs::owner_all); + + // some POSIX platforms cache permissions during directory iteration, some don't + // so test that iteration finds the correct permissions + for (fs::directory_iterator itr(dir); itr != fs::directory_iterator(); ++itr) + if (itr->path().filename() == fs::path("permissions.txt")) + BOOST_TEST(itr->status().permissions() == fs::owner_all); + } + else // Windows + { + BOOST_TEST(fs::status(p).permissions() == 0666); + fs::permissions(p, fs::remove_perms | fs::group_write); + BOOST_TEST(fs::status(p).permissions() == 0444); + fs::permissions(p, fs::add_perms | fs::group_write); + BOOST_TEST(fs::status(p).permissions() == 0666); + } + } + + // rename_tests --------------------------------------------------------------------// + + void rename_tests() + { + cout << "rename_tests..." << endl; + + fs::path f1(dir / "f1"); + BOOST_TEST(fs::exists(f1)); + + // error: rename a non-existent old file + BOOST_TEST(!fs::exists(d1 / "f99")); + BOOST_TEST(!fs::exists(d1 / "f98")); + renamer n1a(d1 / "f99", d1 / "f98"); + BOOST_TEST(CHECK_EXCEPTION(n1a, ENOENT)); + renamer n1b(fs::path(""), d1 / "f98"); + BOOST_TEST(CHECK_EXCEPTION(n1b, ENOENT)); + + // error: rename an existing file to "" + renamer n2(f1, ""); + BOOST_TEST(CHECK_EXCEPTION(n2, ENOENT)); + + // rename an existing file to an existent file + create_file(dir / "ff1", "ff1"); + create_file(dir / "ff2", "ff2"); + fs::rename(dir / "ff2", dir / "ff1"); + BOOST_TEST(fs::exists(dir / "ff1")); + verify_file(dir / "ff1", "ff2"); + BOOST_TEST(!fs::exists(dir / "ff2")); + + // rename an existing file to itself + BOOST_TEST(fs::exists(dir / "f1")); + fs::rename(dir / "f1", dir / "f1"); + BOOST_TEST(fs::exists(dir / "f1")); + + // error: rename an existing directory to an existing non-empty directory + BOOST_TEST(fs::exists(dir / "f1")); + BOOST_TEST(fs::exists(d1 / "f2")); + // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST, + // so we don't verify error type on the following test. + renamer n3b(dir, d1); + BOOST_TEST(CHECK_EXCEPTION(n3b, 0)); + + // error: move existing file to a nonexistent parent directory + BOOST_TEST(!fs::is_directory(dir / "f1")); + BOOST_TEST(!fs::exists(dir / "d3/f3")); + renamer n4a(dir / "f1", dir / "d3/f3"); + BOOST_TEST(CHECK_EXCEPTION(n4a, ENOENT)); + + // rename existing file in same directory + BOOST_TEST(fs::exists(d1 / "f2")); + BOOST_TEST(!fs::exists(d1 / "f50")); + fs::rename(d1 / "f2", d1 / "f50"); + BOOST_TEST(!fs::exists(d1 / "f2")); + BOOST_TEST(fs::exists(d1 / "f50")); + fs::rename(d1 / "f50", d1 / "f2"); + BOOST_TEST(fs::exists(d1 / "f2")); + BOOST_TEST(!fs::exists(d1 / "f50")); + + // move and rename an existing file to a different directory + fs::rename(d1 / "f2", d2 / "f3"); + BOOST_TEST(!fs::exists(d1 / "f2")); + BOOST_TEST(!fs::exists(d2 / "f2")); + BOOST_TEST(fs::exists(d2 / "f3")); + BOOST_TEST(!fs::is_directory(d2 / "f3")); + verify_file(d2 / "f3", "file-f1"); + fs::rename(d2 / "f3", d1 / "f2"); + BOOST_TEST(fs::exists(d1 / "f2")); + + // error: move existing directory to nonexistent parent directory + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(!fs::exists(dir / "d3/d5")); + BOOST_TEST(!fs::exists(dir / "d3")); + renamer n5a(d1, dir / "d3/d5"); + BOOST_TEST(CHECK_EXCEPTION(n5a, ENOENT)); + + // rename existing directory + fs::path d3(dir / "d3"); + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(fs::exists(d1 / "f2")); + BOOST_TEST(!fs::exists(d3)); + fs::rename(d1, d3); + BOOST_TEST(!fs::exists(d1)); + BOOST_TEST(fs::exists(d3)); + BOOST_TEST(fs::is_directory(d3)); + BOOST_TEST(!fs::exists(d1 / "f2")); + BOOST_TEST(fs::exists(d3 / "f2")); + fs::rename(d3, d1); + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(fs::exists(d1 / "f2")); + BOOST_TEST(!fs::exists(d3)); + + // rename and move d1 to d2 / "d20" + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(!fs::exists(d2 / "d20")); + BOOST_TEST(fs::exists(d1 / "f2")); + fs::rename(d1, d2 / "d20"); + BOOST_TEST(!fs::exists(d1)); + BOOST_TEST(fs::exists(d2 / "d20")); + BOOST_TEST(fs::exists(d2 / "d20" / "f2")); + fs::rename(d2 / "d20", d1); + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(!fs::exists(d2 / "d20")); + BOOST_TEST(fs::exists(d1 / "f2")); + } + + // predicate_and_status_tests ------------------------------------------------------// + + void predicate_and_status_tests() + { + cout << "predicate_and_status_tests..." << endl; + + BOOST_TEST(!fs::exists(ng)); + BOOST_TEST(!fs::is_directory(ng)); + BOOST_TEST(!fs::is_regular_file(ng)); + BOOST_TEST(!fs::is_symlink(ng)); + fs::file_status stat(fs::status(ng)); + BOOST_TEST(fs::type_present(stat)); + BOOST_TEST(fs::permissions_present(stat)); + BOOST_TEST(fs::status_known(stat)); + BOOST_TEST(!fs::exists(stat)); + BOOST_TEST(!fs::is_directory(stat)); + BOOST_TEST(!fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + BOOST_TEST(!fs::is_symlink(stat)); + stat = fs::status(""); + BOOST_TEST(fs::type_present(stat)); + BOOST_TEST(fs::permissions_present(stat)); + BOOST_TEST(fs::status_known(stat)); + BOOST_TEST(!fs::exists(stat)); + BOOST_TEST(!fs::is_directory(stat)); + BOOST_TEST(!fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + BOOST_TEST(!fs::is_symlink(stat)); + } + + // create_directory_tests ----------------------------------------------------------// + + void create_directory_tests() + { + cout << "create_directory_tests..." << endl; + + // create a directory, then check it for consistency + // take extra care to report problems, since if this fails + // many subsequent tests will fail + try + { + fs::create_directory(dir); + } + + catch (const fs::filesystem_error & x) + { + cout << x.what() << "\n\n" + "***** Creating directory " << dir << " failed. *****\n" + "***** This is a serious error that will prevent further tests *****\n" + "***** from returning useful results. Further testing is aborted. *****\n\n"; + std::exit(1); + } + + catch (...) + { + cout << "\n\n" + "***** Creating directory " << dir << " failed. *****\n" + "***** This is a serious error that will prevent further tests *****\n" + "***** from returning useful results. Further testing is aborted. *****\n\n"; + std::exit(1); + } + + BOOST_TEST(fs::exists(dir)); + BOOST_TEST(fs::is_empty(dir)); + BOOST_TEST(fs::is_directory(dir)); + BOOST_TEST(!fs::is_regular_file(dir)); + BOOST_TEST(!fs::is_other(dir)); + BOOST_TEST(!fs::is_symlink(dir)); + fs::file_status stat = fs::status(dir); + BOOST_TEST(fs::exists(stat)); + BOOST_TEST(fs::is_directory(stat)); + BOOST_TEST(!fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + BOOST_TEST(!fs::is_symlink(stat)); + + cout << " create_directory_tests complete" << endl; + } + + // current_directory_tests ---------------------------------------------------------// + + void current_directory_tests() + { + cout << "current_directory_tests..." << endl; + + // set the current directory, then check it for consistency + fs::path original_dir = fs::current_path(); + BOOST_TEST(dir != original_dir); + fs::current_path(dir); + BOOST_TEST(fs::current_path() == dir); + BOOST_TEST(fs::current_path() != original_dir); + fs::current_path(original_dir); + BOOST_TEST(fs::current_path() == original_dir); + BOOST_TEST(fs::current_path() != dir); + + // make sure the overloads work + fs::current_path(dir.c_str()); + BOOST_TEST(fs::current_path() == dir); + BOOST_TEST(fs::current_path() != original_dir); + fs::current_path(original_dir.string()); + BOOST_TEST(fs::current_path() == original_dir); + BOOST_TEST(fs::current_path() != dir); + } + + // create_directories_tests --------------------------------------------------------// + + void create_directories_tests() + { + cout << "create_directories_tests..." << endl; + + fs::path p = dir / "level1" / "level2"; + + BOOST_TEST(!fs::exists(p)); + BOOST_TEST(fs::create_directories(p)); + BOOST_TEST(fs::exists(p)); + BOOST_TEST(fs::is_directory(p)); + } + + // resize_file_tests ---------------------------------------------------------------// + + void resize_file_tests() + { + cout << "resize_file_tests..." << endl; + + fs::path p(dir / "resize_file_test.txt"); + + fs::remove(p); + create_file(p, "1234567890"); + + BOOST_TEST(fs::exists(p)); + BOOST_TEST_EQ(fs::file_size(p), 10U); + fs::resize_file(p, 5); + BOOST_TEST(fs::exists(p)); + BOOST_TEST_EQ(fs::file_size(p), 5U); + fs::resize_file(p, 15); + BOOST_TEST(fs::exists(p)); + BOOST_TEST_EQ(fs::file_size(p), 15U); + + error_code ec; + fs::resize_file("no such file", 15, ec); + BOOST_TEST(ec); + } + + // status_of_nonexistent_tests -----------------------------------------------------// + + void status_of_nonexistent_tests() + { + cout << "status_of_nonexistent_tests..." << endl; + fs::path p ("nosuch"); + BOOST_TEST(!fs::exists(p)); + BOOST_TEST(!fs::is_regular_file(p)); + BOOST_TEST(!fs::is_directory(p)); + BOOST_TEST(!fs::is_symlink(p)); + BOOST_TEST(!fs::is_other(p)); + + fs::file_status s = fs::status(p); + BOOST_TEST(!fs::exists(s)); + BOOST_TEST_EQ(s.type(), fs::file_not_found); + BOOST_TEST(fs::type_present(s)); + BOOST_TEST(!fs::is_regular_file(s)); + BOOST_TEST(!fs::is_directory(s)); + BOOST_TEST(!fs::is_symlink(s)); + BOOST_TEST(!fs::is_other(s)); + } + + // status_error_reporting_tests ----------------------------------------------------// + + void status_error_reporting_tests() + { + cout << "status_error_reporting_tests..." << endl; + + error_code ec; + + // test status, ec, for existing file + ec.assign(-1,poison_category()); + BOOST_TEST(ec.value() == -1); + BOOST_TEST(&ec.category() == &poison_category()); + fs::file_status s = fs::status(".",ec); + BOOST_TEST(ec.value() == 0); + BOOST_TEST(ec.category() == system_category()); + BOOST_TEST(fs::exists(s)); + BOOST_TEST(fs::is_directory(s)); + + // test status, ec, for non-existing file + fs::path p ("nosuch"); + ec.assign(-1,poison_category()); + s = fs::status(p,ec); + BOOST_TEST(ec.value() != 0); + BOOST_TEST(ec.category() == system_category()); + + BOOST_TEST(!fs::exists(s)); + BOOST_TEST_EQ(s.type(), fs::file_not_found); + BOOST_TEST(fs::type_present(s)); + BOOST_TEST(!fs::is_regular_file(s)); + BOOST_TEST(!fs::is_directory(s)); + BOOST_TEST(!fs::is_symlink(s)); + BOOST_TEST(!fs::is_other(s)); + + // test queries, ec, for existing file + ec.assign(-1,poison_category()); + BOOST_TEST(fs::exists(".", ec)); + BOOST_TEST(ec.value() == 0); + BOOST_TEST(ec.category() == system_category()); + ec.assign(-1,poison_category()); + BOOST_TEST(!fs::is_regular_file(".", ec)); + BOOST_TEST(ec.value() == 0); + BOOST_TEST(ec.category() == system_category()); + ec.assign(-1,poison_category()); + BOOST_TEST(fs::is_directory(".", ec)); + BOOST_TEST(ec.value() == 0); + BOOST_TEST(ec.category() == system_category()); + + // test queries, ec, for non-existing file + ec.assign(-1,poison_category()); + BOOST_TEST(!fs::exists(p, ec)); + BOOST_TEST(ec.value() != 0); + BOOST_TEST(ec.category() == system_category()); + ec.assign(-1,poison_category()); + BOOST_TEST(!fs::is_regular_file(p, ec)); + BOOST_TEST(ec.value() != 0); + BOOST_TEST(ec.category() == system_category()); + ec.assign(-1,poison_category()); + BOOST_TEST(!fs::is_directory(p, ec)); + BOOST_TEST(ec.value() != 0); + BOOST_TEST(ec.category() == system_category()); + } + + // remove_tests --------------------------------------------------------------------// + + void remove_tests(const fs::path& dir) + { + cout << "remove_tests..." << endl; + + // remove() file + fs::path f1 = dir / "shortlife"; + BOOST_TEST(!fs::exists(f1)); + create_file(f1, ""); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(!fs::is_directory(f1)); + BOOST_TEST(fs::remove(f1)); + BOOST_TEST(!fs::exists(f1)); + BOOST_TEST(!fs::remove("no-such-file")); + BOOST_TEST(!fs::remove("no-such-directory/no-such-file")); + + // remove() directory + fs::path d1 = dir / "shortlife_dir"; + BOOST_TEST(!fs::exists(d1)); + fs::create_directory(d1); + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(fs::is_directory(d1)); + BOOST_TEST(fs::is_empty(d1)); + bad_remove_dir = dir; + BOOST_TEST(CHECK_EXCEPTION(bad_remove, ENOTEMPTY)); + BOOST_TEST(fs::remove(d1)); + BOOST_TEST(!fs::exists(d1)); + } + + // remove_symlink_tests ------------------------------------------------------------// + + void remove_symlink_tests() + { + cout << "remove_symlink_tests..." << endl; + + // remove() dangling symbolic link + fs::path link("dangling_link"); + fs::remove(link); // remove any residue from past tests + BOOST_TEST(!fs::is_symlink(link)); + BOOST_TEST(!fs::exists(link)); + fs::create_symlink("nowhere", link); + BOOST_TEST(!fs::exists(link)); + BOOST_TEST(fs::is_symlink(link)); + BOOST_TEST(fs::remove(link)); + BOOST_TEST(!fs::is_symlink(link)); + + // remove() self-refering symbolic link + link = "link_to_self"; + fs::remove(link); // remove any residue from past tests + BOOST_TEST(!fs::is_symlink(link)); + BOOST_TEST(!fs::exists(link)); + fs::create_symlink(link, link); + BOOST_TEST(fs::remove(link)); + BOOST_TEST(!fs::exists(link)); + BOOST_TEST(!fs::is_symlink(link)); + + // remove() cyclic symbolic link + link = "link_to_a"; + fs::path link2("link_to_b"); + fs::remove(link); // remove any residue from past tests + fs::remove(link2); // remove any residue from past tests + BOOST_TEST(!fs::is_symlink(link)); + BOOST_TEST(!fs::exists(link)); + fs::create_symlink(link, link2); + fs::create_symlink(link2, link); + BOOST_TEST(fs::remove(link)); + BOOST_TEST(fs::remove(link2)); + BOOST_TEST(!fs::exists(link)); + BOOST_TEST(!fs::exists(link2)); + BOOST_TEST(!fs::is_symlink(link)); + + // remove() symbolic link to file + fs::path f1 = "link_target"; + fs::remove(f1); // remove any residue from past tests + BOOST_TEST(!fs::exists(f1)); + create_file(f1, ""); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(!fs::is_directory(f1)); + BOOST_TEST(fs::is_regular_file(f1)); + link = "non_dangling_link"; + fs::create_symlink(f1, link); + BOOST_TEST(fs::exists(link)); + BOOST_TEST(!fs::is_directory(link)); + BOOST_TEST(fs::is_regular_file(link)); + BOOST_TEST(fs::is_symlink(link)); + BOOST_TEST(fs::remove(link)); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(!fs::exists(link)); + BOOST_TEST(!fs::is_symlink(link)); + BOOST_TEST(fs::remove(f1)); + BOOST_TEST(!fs::exists(f1)); + } + + // absolute_tests -----------------------------------------------------------------// + + void absolute_tests() + { + cout << "absolute_tests..." << endl; + + BOOST_TEST_EQ(fs::absolute(""), fs::current_path() ); + BOOST_TEST_EQ(fs::absolute("", ""), fs::current_path() ); + BOOST_TEST_EQ(fs::absolute(fs::current_path() / "foo/bar"), fs::current_path() / "foo/bar"); + BOOST_TEST_EQ(fs::absolute("foo"), fs::current_path() / "foo"); + BOOST_TEST_EQ(fs::absolute("foo", fs::current_path()), fs::current_path() / "foo"); + BOOST_TEST_EQ(fs::absolute("bar", "foo"), fs::current_path() / "foo" / "bar"); + BOOST_TEST_EQ(fs::absolute("/foo"), fs::current_path().root_path().string() + "foo"); + +# ifdef BOOST_WINDOWS_API + BOOST_TEST_EQ(fs::absolute("a:foo", "b:/bar"), "a:/bar/foo"); +# endif + + // these tests were moved from elsewhere, so may duplicate some of the above tests + + // p.empty() + BOOST_TEST_EQ(fs::absolute(fs::path(), "//foo/bar"), "//foo/bar"); + if (platform == "Windows") + { + BOOST_TEST_EQ(fs::absolute(fs::path(), "a:/bar"), "a:/bar"); + } + + // p.has_root_name() + // p.has_root_directory() + BOOST_TEST_EQ(fs::absolute(fs::path("//foo/bar"), "//uvw/xyz"), "//foo/bar"); + if (platform == "Windows") + { + BOOST_TEST_EQ(fs::absolute(fs::path("a:/bar"), "b:/xyz"), "a:/bar"); + } + // !p.has_root_directory() + BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/"), "//net/"); + BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc"), "//net/abc"); + BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc/def"), "//net/abc/def"); + if (platform == "Windows") + { + BOOST_TEST_EQ(fs::absolute(fs::path("a:"), "b:/"), "a:/"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc"), "a:/abc"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc/def"), "a:/abc/def"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/"), "a:/foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc"), "a:/abc/foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc/def"), "a:/abc/def/foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/"), "a:/foo/bar"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc"), "a:/abc/foo/bar"); + BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc/def"), "a:/abc/def/foo/bar"); + } + // !p.has_root_name() + // p.has_root_directory() + BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/"), "//xyz/"); + BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/abc"), "//xyz/"); + BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/"), "//xyz/foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/abc"), "//xyz/foo"); + // !p.has_root_directory() + BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "//xyz/abc"), "//xyz/abc/foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "//xyz/abc"), "//xyz/abc/foo/bar"); + BOOST_TEST_EQ(fs::absolute(fs::path("."), "//xyz/abc"), "//xyz/abc/."); + BOOST_TEST_EQ(fs::absolute(fs::path(".."), "//xyz/abc"), "//xyz/abc/.."); + BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "//xyz/abc"), "//xyz/abc/./foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "//xyz/abc"), "//xyz/abc/../foo"); + if (platform == "POSIX") + { + BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "/abc"), "/abc/foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "/abc"), "/abc/foo/bar"); + BOOST_TEST_EQ(fs::absolute(fs::path("."), "/abc"), "/abc/."); + BOOST_TEST_EQ(fs::absolute(fs::path(".."), "/abc"), "/abc/.."); + BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "/abc"), "/abc/./foo"); + BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "/abc"), "/abc/../foo"); + } + + } + + // canonical_basic_tests -----------------------------------------------------------// + + void canonical_basic_tests() + { + cout << "canonical_basic_tests..." << endl; + + // error handling + error_code ec; + ec.clear(); + fs::canonical("no-such-file", ec); + BOOST_TEST(ec); + ec.clear(); + fs::canonical("no-such-file", "x", ec); + BOOST_TEST(ec); + bool ok(false); + try { fs::canonical("no-such-file"); } + catch (const fs::filesystem_error&) { ok = true; } + BOOST_TEST(ok); + + // non-symlink tests; also see canonical_symlink_tests() + BOOST_TEST_EQ(fs::canonical(""), fs::current_path()); + BOOST_TEST_EQ(fs::canonical("", fs::current_path()), fs::current_path()); + BOOST_TEST_EQ(fs::canonical("", ""), fs::current_path()); + BOOST_TEST_EQ(fs::canonical(fs::current_path()), fs::current_path()); + BOOST_TEST_EQ(fs::canonical(fs::current_path(), ""), fs::current_path()); + BOOST_TEST_EQ(fs::canonical(fs::current_path(), "no-such-file"), fs::current_path()); + + BOOST_TEST_EQ(fs::canonical("."), fs::current_path()); + BOOST_TEST_EQ(fs::canonical(".."), fs::current_path().parent_path()); + BOOST_TEST_EQ(fs::canonical("/"), fs::current_path().root_path()); + + fs::path relative_dir(dir.filename()); + BOOST_TEST_EQ(fs::canonical(dir), dir); + BOOST_TEST_EQ(fs::canonical(relative_dir), dir); + BOOST_TEST_EQ(fs::canonical(dir / "f0"), dir / "f0"); + BOOST_TEST_EQ(fs::canonical(relative_dir / "f0"), dir / "f0"); + BOOST_TEST_EQ(fs::canonical(relative_dir / "./f0"), dir / "f0"); + BOOST_TEST_EQ(fs::canonical(relative_dir / "d1/../f0"), dir / "f0"); + } + + // canonical_symlink_tests -----------------------------------------------------------// + + void canonical_symlink_tests() + { + cout << "canonical_symlink_tests..." << endl; + + fs::path relative_dir(dir.filename()); + BOOST_TEST_EQ(fs::canonical(dir / "sym-d1/f2"), d1 / "f2"); + BOOST_TEST_EQ(fs::canonical(relative_dir / "sym-d1/f2"), d1 / "f2"); + } + + // copy_file_tests ------------------------------------------------------------------// + + void copy_file_tests(const fs::path& f1, const fs::path& d1) + { + cout << "copy_file_tests..." << endl; + + BOOST_TEST(fs::exists(f1)); + fs::remove(d1 / "f2"); // remove possible residue from prior testing + BOOST_TEST(fs::exists(d1)); + BOOST_TEST(!fs::exists(d1 / "f2")); + cout << " copy " << f1 << " to " << d1 / "f2" << endl; + fs::copy_file(f1, d1 / "f2"); + cout << " copy complete" << endl; + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(fs::exists(d1 / "f2")); + BOOST_TEST(!fs::is_directory(d1 / "f2")); + verify_file(d1 / "f2", "file-f1"); + + bool copy_ex_ok = false; + try { fs::copy_file(f1, d1 / "f2"); } + catch (const fs::filesystem_error &) { copy_ex_ok = true; } + BOOST_TEST(copy_ex_ok); + + copy_ex_ok = false; + try { fs::copy_file(f1, d1 / "f2", fs::copy_option::fail_if_exists); } + catch (const fs::filesystem_error &) { copy_ex_ok = true; } + BOOST_TEST(copy_ex_ok); + + create_file(d1 / "f2", "1234567890"); + BOOST_TEST_EQ(fs::file_size(d1 / "f2"), 10U); + copy_ex_ok = true; + try { fs::copy_file(f1, d1 / "f2", fs::copy_option::overwrite_if_exists); } + catch (const fs::filesystem_error &) { copy_ex_ok = false; } + BOOST_TEST(copy_ex_ok); + BOOST_TEST_EQ(fs::file_size(d1 / "f2"), 7U); + verify_file(d1 / "f2", "file-f1"); + } + + // symlink_status_tests -------------------------------------------------------------// + + void symlink_status_tests() + { + cout << "symlink_status_tests..." << endl; + + boost::system::error_code ec; + + fs::path dangling_sym(dir / "dangling-sym"); + fs::path dangling_directory_sym(dir / "dangling-directory-sym"); + fs::path sym_d1(dir / "sym-d1"); + fs::path symsym_d1(dir / "symsym-d1"); + fs::path sym_f1(dir / "sym-f1"); + fs::path symsym_f1(dir / "symsym-f1"); + fs::create_symlink("does not exist", dangling_sym); + fs::create_directory_symlink("does not exist", dangling_directory_sym); + fs::create_directory_symlink(d1, sym_d1); + fs::create_directory_symlink(sym_d1, symsym_d1); + fs::create_symlink(f1, sym_f1); + fs::create_symlink(sym_f1, symsym_f1); + + // verify all cases detected as symlinks + BOOST_TEST_EQ(fs::symlink_status(dangling_sym, ec).type(), fs::symlink_file); + BOOST_TEST_EQ(fs::symlink_status(dangling_directory_sym, ec).type(), fs::symlink_file); + BOOST_TEST_EQ(fs::symlink_status(sym_d1, ec).type(), fs::symlink_file); + BOOST_TEST_EQ(fs::symlink_status(symsym_d1, ec).type(), fs::symlink_file); + BOOST_TEST_EQ(fs::symlink_status(sym_f1, ec).type(), fs::symlink_file); + BOOST_TEST_EQ(fs::symlink_status(symsym_f1, ec).type(), fs::symlink_file); + + // verify all cases resolve to the (possibly recursive) symlink target + BOOST_TEST_EQ(fs::status(dangling_sym, ec).type(), fs::file_not_found); + BOOST_TEST_EQ(fs::status(dangling_directory_sym, ec).type(), fs::file_not_found); + + BOOST_TEST_EQ(fs::status(sym_d1, ec).type(), fs::directory_file); + BOOST_TEST_EQ(fs::status(sym_d1 / "d1f1", ec).type(), fs::regular_file); + BOOST_TEST_EQ(fs::status(symsym_d1, ec).type(), fs::directory_file); + BOOST_TEST_EQ(fs::status(symsym_d1 / "d1f1", ec).type(), fs::regular_file); + BOOST_TEST_EQ(fs::status(sym_f1, ec).type(), fs::regular_file); + BOOST_TEST_EQ(fs::status(symsym_f1, ec).type(), fs::regular_file); + +#ifdef BOOST_WINDOWS_API + + // On Windows, telling if a filesystem entry is a symlink, rather than some other + // kind of reparse point such as a junction, requires some truely baroque code. + // See ticket #4663, filesystem objects falsely identified as symlinks. + // This test checks two directory entries created by Windows itself to verify + // is_symlink() works correctly. Try "dir /A %HOMEPATH%\.." from the command line to + // verify this test is valid on your version of Windows. It only works on Vista and + // later. + + fs::path users(getenv("HOMEDRIVE")); + BOOST_TEST(!users.empty()); + users /= "\\Users"; + BOOST_TEST(fs::exists(users)); + BOOST_TEST(fs::exists(users/"All Users")); + BOOST_TEST(fs::exists(users/"Default User")); + BOOST_TEST(fs::is_symlink(users/"All Users")); // dir /A reports + BOOST_TEST(!fs::is_symlink(users/"Default User")); // dir /A reports + +#endif + } + + // copy_symlink_tests ---------------------------------------------------------------// + + void copy_symlink_tests(const fs::path& f1, const fs::path& d1) + { + cout << "copy_symlink_tests..." << endl; + + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(fs::exists(d1)); + fs::path sym1(d1 / "symlink1"); + fs::remove(sym1); // remove possible residue from prior testing + fs::create_symlink(f1, sym1); + BOOST_TEST(fs::exists(sym1)); + BOOST_TEST(fs::is_symlink(sym1)); + fs::path sym2(d1 / "symlink2"); + fs::copy_symlink(sym1, sym2); + BOOST_TEST(fs::exists(sym2)); + BOOST_TEST(fs::is_symlink(sym2)); + //fs::path sym3(d1 / "symlink3"); + //fs::copy(sym1, sym3); + //BOOST_TEST(fs::exists(sym3)); + //BOOST_TEST(fs::is_symlink(sym3)); + + bool copy_ex_ok = false; + try { fs::copy_symlink("no-such-file", "new-symlink1"); } + catch (const fs::filesystem_error &) { copy_ex_ok = true; } + BOOST_TEST(copy_ex_ok); + + copy_ex_ok = false; + try { fs::copy_symlink(f1, "new-symlink2"); } // should fail; f1 not symlink + catch (const fs::filesystem_error &) { copy_ex_ok = true; } + BOOST_TEST(copy_ex_ok); + } + + // write_time_tests ----------------------------------------------------------------// + + void write_time_tests(const fs::path& dir) + { + cout << "write_time_tests..." << endl; + + fs::path f1 = dir / "foobar2"; + create_file(f1, "foobar2"); + BOOST_TEST(fs::exists(f1)); + BOOST_TEST(!fs::is_directory(f1)); + BOOST_TEST(fs::is_regular_file(f1)); + BOOST_TEST(fs::file_size(f1) == 7); + verify_file(f1, "foobar2"); + + // Some file system report last write time as local (FAT), while + // others (NTFS) report it as UTC. The C standard does not specify + // if time_t is local or UTC. + + std::time_t ft = fs::last_write_time(f1); + cout << "\n UTC last_write_time() for a file just created is " + << std::asctime(std::gmtime(&ft)) << endl; + + std::tm * tmp = std::localtime(&ft); + cout << "\n Year is " << tmp->tm_year << endl; + --tmp->tm_year; + cout << " Change year to " << tmp->tm_year << endl; + fs::last_write_time(f1, std::mktime(tmp)); + std::time_t ft2 = fs::last_write_time(f1); + cout << " last_write_time() for the file is now " + << std::asctime(std::gmtime(&ft2)) << endl; + BOOST_TEST(ft != fs::last_write_time(f1)); + + cout << "\n Reset to current time" << endl; + fs::last_write_time(f1, ft); + double time_diff = std::difftime(ft, fs::last_write_time(f1)); + cout + << " original last_write_time() - current last_write_time() is " + << time_diff << " seconds" << endl; + BOOST_TEST(time_diff >= -60.0 && time_diff <= 60.0); + } + + // platform_specific_tests ---------------------------------------------------------// + + void platform_specific_tests() + { + // Windows only tests + if (platform == "Windows") + { + cout << "Window specific tests..." << endl; + if (!skip_long_windows_tests) + { + cout << " (may take several seconds)"<< endl; + + BOOST_TEST(!fs::exists(fs::path("//share-not"))); + BOOST_TEST(!fs::exists(fs::path("//share-not/"))); + BOOST_TEST(!fs::exists(fs::path("//share-not/foo"))); + } + cout << endl; + + BOOST_TEST(!fs::exists("tools/jam/src/:sys:stat.h")); // !exists() if ERROR_INVALID_NAME + BOOST_TEST(!fs::exists(":sys:stat.h")); // !exists() if ERROR_INVALID_PARAMETER + BOOST_TEST(dir.string().size() > 1 + && dir.string()[1] == ':'); // verify path includes drive + + BOOST_TEST(fs::system_complete("").empty()); + BOOST_TEST(fs::system_complete("/") == fs::initial_path().root_path()); + BOOST_TEST(fs::system_complete("foo") + == fs::initial_path() / "foo"); + + fs::path p1(fs::system_complete("/foo")); + BOOST_TEST_EQ(p1.string().size(), 6U); // this failed during v3 development due to bug + std::string s1(p1.string() ); + std::string s2(fs::initial_path().root_path().string()+"foo"); + BOOST_TEST_EQ(s1, s2); + + BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name())) + == fs::initial_path()); + BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name().string() + + "foo")).string() == fs::initial_path() / "foo"); + BOOST_TEST(fs::system_complete(fs::path("c:/")).generic_string() + == "c:/"); + BOOST_TEST(fs::system_complete(fs::path("c:/foo")).generic_string() + == "c:/foo"); + BOOST_TEST(fs::system_complete(fs::path("//share")).generic_string() + == "//share"); + } // Windows + + else if (platform == "POSIX") + { + cout << "POSIX specific tests..." << endl; + BOOST_TEST(fs::system_complete("").empty()); + BOOST_TEST(fs::initial_path().root_path().string() == "/"); + BOOST_TEST(fs::system_complete("/").string() == "/"); + BOOST_TEST(fs::system_complete("foo").string() + == fs::initial_path().string()+"/foo"); + BOOST_TEST(fs::system_complete("/foo").string() + == fs::initial_path().root_path().string()+"foo"); + } // POSIX + } + + // initial_tests -------------------------------------------------------------------// + + void initial_tests() + { + cout << "initial_tests..." << endl; + + cout << " current_path().string() is\n \"" + << fs::initial_path().string() + << "\"\n\n"; + BOOST_TEST(fs::initial_path() == fs::current_path()); + BOOST_TEST(fs::initial_path().is_absolute()); + BOOST_TEST(fs::current_path().is_absolute()); + BOOST_TEST(fs::initial_path().string() + == fs::current_path().string()); + } + + // space_tests ---------------------------------------------------------------------// + + void space_tests() + { + cout << "space_tests..." << endl; + + // make some reasonable assuptions for testing purposes + fs::space_info spi(fs::space(dir)); + BOOST_TEST(spi.capacity > 1000000); + BOOST_TEST(spi.free > 1000); + BOOST_TEST(spi.capacity > spi.free); + BOOST_TEST(spi.free >= spi.available); + + // it is convenient to display space, but older VC++ versions choke +# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0 + cout << " capacity = " << spi.capacity << '\n'; + cout << " free = " << spi.free << '\n'; + cout << " available = " << spi.available << '\n'; +# endif + } + + // equivalent_tests ----------------------------------------------------------------// + + void equivalent_tests(const fs::path& f1) + { + cout << "equivalent_tests..." << endl; + + BOOST_TEST(CHECK_EXCEPTION(bad_equivalent, ENOENT)); + BOOST_TEST(fs::equivalent(f1, dir / "f1")); + BOOST_TEST(fs::equivalent(dir, d1 / "..")); + BOOST_TEST(!fs::equivalent(f1, dir)); + BOOST_TEST(!fs::equivalent(dir, f1)); + BOOST_TEST(!fs::equivalent(d1, d2)); + BOOST_TEST(!fs::equivalent(dir, ng)); + BOOST_TEST(!fs::equivalent(ng, dir)); + BOOST_TEST(!fs::equivalent(f1, ng)); + BOOST_TEST(!fs::equivalent(ng, f1)); + } + + // temp_directory_path_tests -------------------------------------------------------// + // contributed by Jeff Flinn + + struct guarded_env_var + { + struct previous_value + { + std::string m_name; + std::string m_string; + bool m_empty; + + previous_value(const char* name) + : m_string(name) + , m_empty (true) + { + if(const char* value = getenv(name)) + { + m_string.assign(value); + m_empty = false; + } + else + { + m_empty = true; + } + } + ~previous_value() + { + m_empty? unsetenv(m_name.c_str()) + : setenv(m_name.c_str(), m_string.c_str(), 1); + } + }; + + previous_value m_previous_value; + + guarded_env_var(const char* name, const fs::path::value_type* value) + : m_previous_value(name) + { + value? setenv(name, value, 1) : unsetenv(name); + } + }; + + void temp_directory_path_tests() + { + { + cout << "temp_directory_path_tests..." << endl; + + BOOST_TEST(!fs::temp_directory_path().empty()); + BOOST_TEST(exists(fs::temp_directory_path())); + fs::path ph = fs::temp_directory_path()/"temp_directory_path_test.txt"; + { + if(exists(ph)) remove(ph); + std::ofstream f(ph.BOOST_FILESYSTEM_C_STR); + f << "passed"; + } + BOOST_TEST(exists(ph)); + { + std::ifstream f(ph.BOOST_FILESYSTEM_C_STR); + std::string s; + f >> s; + BOOST_TEST(s == "passed"); + } + remove(ph); + BOOST_TEST(!exists(ph)); + } + + fs::path test_temp_dir = fs::initial_path(); + +#if defined BOOST_POSIX_API + { + struct guarded_tmp_vars + { + guarded_env_var m_tmpdir ; + guarded_env_var m_tmp ; + guarded_env_var m_temp ; + guarded_env_var m_tempdir; + + guarded_tmp_vars + ( const fs::path::value_type* tmpdir + , const fs::path::value_type* tmp + , const fs::path::value_type* temp + , const fs::path::value_type* tempdir + ) + : m_tmpdir ("TMPDIR" , tmpdir ) + , m_tmp ("TMP" , tmp ) + , m_temp ("TEMP" , temp ) + , m_tempdir("TEMPDIR", tempdir) + {} + }; + + { + guarded_tmp_vars vars(test_temp_dir.c_str(), 0, 0, 0); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + { + guarded_tmp_vars vars(0, test_temp_dir.c_str(), 0, 0); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + { + guarded_tmp_vars vars(0, 0, test_temp_dir.c_str(), 0); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + { + guarded_tmp_vars vars(0, 0, 0, test_temp_dir.c_str()); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + } +#endif + +#if defined BOOST_WINDOWS_API + { + struct guarded_tmp_vars + { + guarded_env_var m_tmp ; + guarded_env_var m_temp ; + guarded_env_var m_userprofile; + + guarded_tmp_vars + ( const fs::path::value_type* tmp + , const fs::path::value_type* temp + , const fs::path::value_type* userprofile + ) + : m_tmp ("TMP" , tmp ) + , m_temp ("TEMP" , temp ) + , m_userprofile("USERPROFILE", userprofile) + {} + }; + + // should NEVER throw - the windows directory or current_path always exists + { + guarded_tmp_vars vars(0, 0, 0); + fs::path ph = fs::temp_directory_path(); + + BOOST_TEST(test_temp_dir != ph); + } + + // should NEVER fail - the windows directory or current_path always exists + { + guarded_tmp_vars vars(0, 0, 0); + error_code ec; + fs::path ph = fs::temp_directory_path(ec); + BOOST_TEST(!ec); + } + + { + guarded_tmp_vars vars(test_temp_dir.c_str(), 0, 0); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + { + guarded_tmp_vars vars(0, test_temp_dir.c_str(), 0); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + { + guarded_tmp_vars vars(0, 0, test_temp_dir.c_str()); + fs::path ph = fs::temp_directory_path(); + BOOST_TEST(equivalent(test_temp_dir, ph)); + } + } +#endif + } + + // _tests --------------------------------------------------------------------------// + + void _tests() + { + cout << "_tests..." << endl; + } + +} // unnamed namespace + + //------------------------------------------------------------------------------------// + // // + // main // + // // + //------------------------------------------------------------------------------------// + +int cpp_main(int argc, char* argv[]) +{ +// document state of critical macros +#ifdef BOOST_POSIX_API + cout << "BOOST_POSIX_API is defined\n"; +#endif +#ifdef BOOST_WINDOWS_API + cout << "BOOST_WINDOWS_API is defined\n"; +#endif + + for (; argc > 1; --argc, ++argv) + { + if (*argv[1]=='-' && *(argv[1]+1)=='t') + report_throws = true; + else if (*argv[1]=='-' && *(argv[1]+1)=='x') + cleanup = false; + else if (*argv[1]=='-' && *(argv[1]+1)=='w') + skip_long_windows_tests = true; + } + + // The choice of platform to test is make at runtime rather than compile-time + // so that compile errors for all platforms will be detected even though + // only the current platform is runtime tested. +# if defined(BOOST_POSIX_API) + platform = "POSIX"; +# elif defined(BOOST_WINDOWS_API) + platform = "Windows"; +# if !defined(__MINGW32__) && !defined(__CYGWIN__) + language_id = ::GetUserDefaultUILanguage(); +# else + language_id = 0x0409; // Assume US English +# endif +# else +# error neither BOOST_POSIX_API nor BOOST_WINDOWS_API is defined. See boost/system/api_config.hpp +# endif + cout << "API is " << platform << endl; + + dir = fs::initial_path() / temp_dir_name; + + if (fs::exists(dir)) + { + cout << "remove residue from prior failed tests..." << endl; + fs::remove_all(dir); + } + BOOST_TEST(!fs::exists(dir)); + + // several functions give unreasonable results if uintmax_t isn't 64-bits + cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n'; + BOOST_TEST(sizeof(boost::uintmax_t) >= 8); + + initial_tests(); + predicate_and_status_tests(); + exception_tests(); + platform_specific_tests(); + create_directory_tests(); + current_directory_tests(); + space_tests(); + + // create a directory tree that can be used by subsequent tests + // + // dir + // d1 + // d1f1 // an empty file + // f0 // an empty file + // f1 // a file containing "file f1" + // + create_tree(); + + status_of_nonexistent_tests(); + status_error_reporting_tests(); + directory_iterator_tests(); + create_directories_tests(); // must run AFTER directory_iterator_tests + + bad_create_directory_path = f1; + BOOST_TEST(CHECK_EXCEPTION(bad_create_directory, EEXIST)); + fs::file_status stat = fs::status(f1); + BOOST_TEST(fs::status_known(stat)); + BOOST_TEST(fs::exists(stat)); + BOOST_TEST(!fs::is_directory(stat)); + BOOST_TEST(fs::is_regular_file(stat)); + BOOST_TEST(!fs::is_other(stat)); + BOOST_TEST(!fs::is_symlink(stat)); + + equivalent_tests(f1); + create_hard_link_tests(); + create_symlink_tests(); + resize_file_tests(); + absolute_tests(); + canonical_basic_tests(); + permissions_tests(); + copy_file_tests(f1, d1); + if (create_symlink_ok) // only if symlinks supported + { + symlink_status_tests(); + copy_symlink_tests(f1, d1); + canonical_symlink_tests(); + } + iterator_status_tests(); // lots of cases by now, so a good time to test +// dump_tree(dir); + recursive_directory_iterator_tests(); + recursive_iterator_status_tests(); // lots of cases by now, so a good time to test + rename_tests(); + remove_tests(dir); + if (create_symlink_ok) // only if symlinks supported + remove_symlink_tests(); + write_time_tests(dir); + + temp_directory_path_tests(); + + cout << "testing complete" << endl; + + // post-test cleanup + if (cleanup) + { + cout << "post-test removal of " << dir << endl; + BOOST_TEST(fs::remove_all(dir) != 0); + // above was added just to simplify testing, but it ended up detecting + // a bug (failure to close an internal search handle). + cout << "post-test removal complete" << endl; + BOOST_TEST(!fs::exists(dir)); + BOOST_TEST(fs::remove_all(dir) == 0); + } + + cout << "returning from main()" << endl; + return ::boost::report_errors(); +} // main diff --git a/external/libs/filesystem/v3/test/operations_unit_test.cpp b/external/libs/filesystem/v3/test/operations_unit_test.cpp new file mode 100644 index 0000000..b592fd9 --- /dev/null +++ b/external/libs/filesystem/v3/test/operations_unit_test.cpp @@ -0,0 +1,265 @@ +// operations_unit_test.cpp ----------------------------------------------------------// + +// Copyright Beman Dawes 2008, 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +// ------------------------------------------------------------------------------------// + +// This program is misnamed - it is really a smoke test rather than a unit_test + +// ------------------------------------------------------------------------------------// + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include // make sure filesystem.hpp works +#include +#include +#include +#include + +using namespace boost::filesystem; +using namespace boost::system; +using std::cout; +using std::endl; +using std::string; + +#define CHECK(x) check(x, __FILE__, __LINE__) + +namespace +{ + + void check(bool ok, const char* file, int line) + { + if (ok) return; + + ++::boost::detail::test_errors(); + + cout << file << '(' << line << "): test failed\n"; + } + + // file_status_test ----------------------------------------------------------------// + + void file_status_test() + { + cout << "file_status test..." << endl; + + file_status s = status("."); + int v = s.permissions(); + cout << " status(\".\") permissions are " + << std::oct << (v & 0777) << std::dec << endl; + CHECK((v & 0400) == 0400); + + s = symlink_status("."); + v = s.permissions(); + cout << " symlink_status(\".\") permissions are " + << std::oct << (v & 0777) << std::dec << endl; + CHECK((v & 0400) == 0400); + } + + // query_test ----------------------------------------------------------------------// + + void query_test() + { + cout << "query test..." << endl; + + error_code ec; + + CHECK(file_size("no-such-file", ec) == static_cast(-1)); + CHECK(ec == errc::no_such_file_or_directory); + + CHECK(status("no-such-file") == file_status(file_not_found, no_perms)); + + CHECK(exists("/")); + CHECK(is_directory("/")); + CHECK(!exists("no-such-file")); + + exists("/", ec); + if (ec) + { + cout << "exists(\"/\", ec) resulted in non-zero ec.value()" << endl; + cout << "ec value: " << ec.value() << ", message: "<< ec.message() << endl; + } + CHECK(!ec); + + CHECK(exists("/")); + CHECK(is_directory("/")); + CHECK(!is_regular_file("/")); + CHECK(!boost::filesystem::is_empty("/")); + CHECK(!is_other("/")); + } + + // directory_iterator_test -----------------------------------------------// + + void directory_iterator_test() + { + cout << "directory_iterator_test..." << endl; + + directory_iterator end; + + directory_iterator it("."); + + CHECK(!it->path().empty()); + + if (is_regular_file(it->status())) + { + CHECK(is_regular_file(it->symlink_status())); + CHECK(!is_directory(it->status())); + CHECK(!is_symlink(it->status())); + CHECK(!is_directory(it->symlink_status())); + CHECK(!is_symlink(it->symlink_status())); + } + else + { + CHECK(is_directory(it->status())); + CHECK(is_directory(it->symlink_status())); + CHECK(!is_regular_file(it->status())); + CHECK(!is_regular_file(it->symlink_status())); + CHECK(!is_symlink(it->status())); + CHECK(!is_symlink(it->symlink_status())); + } + + for (; it != end; ++it) + { +// cout << " " << it->path().string() << "\n"; + } + + cout << "directory_iterator_test complete" << endl; + } + + // operations_test -------------------------------------------------------// + + void operations_test() + { + cout << "operations test..." << endl; + + error_code ec; + + CHECK(!create_directory("/", ec)); + + CHECK(!boost::filesystem::remove("no-such-file-or-directory")); + CHECK(!remove_all("no-such-file-or-directory")); + + space_info info = space("/"); + + CHECK(info.available <= info.capacity); + + CHECK(equivalent("/", "/")); + CHECK(!equivalent("/", ".")); + + std::time_t ft = last_write_time("."); + ft = -1; + last_write_time(".", ft, ec); + } + + // directory_entry_test ------------------------------------------------------------// + + void directory_entry_test() + { + cout << "directory_entry test..." << endl; + + directory_entry de("foo.bar", + file_status(regular_file, owner_all), file_status(directory_file, group_all)); + + CHECK(de.path() == "foo.bar"); + CHECK(de.status() == file_status(regular_file, owner_all)); + CHECK(de.symlink_status() == file_status(directory_file, group_all)); + CHECK(de < directory_entry("goo.bar")); + CHECK(de == directory_entry("foo.bar")); + CHECK(de != directory_entry("goo.bar")); + de.replace_filename("bar.foo"); + CHECK(de.path() == "bar.foo"); + } + + // directory_entry_overload_test ---------------------------------------------------// + + void directory_entry_overload_test() + { + cout << "directory_entry overload test..." << endl; + + directory_iterator it("."); + path p(*it); + } + + // error_handling_test -------------------------------------------------------------// + + void error_handling_test() + { + cout << "error handling test..." << endl; + + bool threw(false); + try + { + file_size("no-such-file"); + } + catch (const boost::filesystem::filesystem_error & ex) + { + threw = true; + cout << "\nas expected, attempt to get size of non-existent file threw a filesystem_error\n" + "what() returns " << ex.what() << "\n"; + } + catch (...) + { + cout << "\nunexpected exception type caught" << endl; + } + + CHECK(threw); + + error_code ec; + CHECK(!create_directory("/", ec)); + } + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// // +// main // +// // +//--------------------------------------------------------------------------------------// + +int cpp_main(int, char*[]) +{ +// document state of critical macros +#ifdef BOOST_POSIX_API + cout << "BOOST_POSIX_API is defined\n"; +#endif +#ifdef BOOST_WINDOWS_API + cout << "BOOST_WINDOWS_API is defined\n"; +#endif + cout << "BOOST_FILESYSTEM_DECL" << BOOST_STRINGIZE(=BOOST_FILESYSTEM_DECL) << "\n"; + cout << "BOOST_SYMBOL_VISIBLE" << BOOST_STRINGIZE(=BOOST_SYMBOL_VISIBLE) << "\n"; + + cout << "current_path() is " << current_path().string() << endl; + + file_status_test(); + query_test(); + directory_iterator_test(); + operations_test(); + directory_entry_test(); + directory_entry_overload_test(); + error_handling_test(); + + cout << unique_path() << endl; + cout << unique_path("foo-%%%%%-%%%%%-bar") << endl; + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/path_test.cpp b/external/libs/filesystem/v3/test/path_test.cpp new file mode 100644 index 0000000..c3e64a7 --- /dev/null +++ b/external/libs/filesystem/v3/test/path_test.cpp @@ -0,0 +1,1811 @@ +// path_test program -----------------------------------------------------------------// + +// Copyright Beman Dawes 2002, 2008 +// 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 + +// basic_path's stem(), extension(), and replace_extension() tests are based +// on basename(), extension(), and change_extension() tests from the original +// convenience_test.cpp by Vladimir Prus. + +//--------------------------------------------------------------------------------------// +// // +// Caution // +// // +// The class path relational operators (==, !=, <, etc.) on Windows treat slash and // +// backslash as equal. Thus any tests on Windows where the difference between slash // +// and backslash is significant should compare strings rather than paths. // +// // +// BOOST_TEST(path == path) // '\\' and '/' are equal // +// BOOST_TEST(path == convertable to string) // '\\' and '/' are equal // +// PATH_TEST_EQ(path, path) // '\\' and '/' are equal // +// // +// BOOST_TEST(path.string() == path.string()) // '\\' and '/' are not equal // +// BOOST_TEST(path.string() == // +// convertable to string) // '\\' and '/' are not equal // +// PATH_TEST_EQ(path.string(), // +// convertable to string) // '\\' and '/' are not equal // +// // +// The last of these is often what is needed, so the PATH_TEST_EQ macro is provided. // +// It converts its first argument to a path, and then performs a .string() on it, // +// eliminating much boilerplate .string() or even path(...).string() code. // +// // +// PATH_TEST_EQ(path, convertable to string) // '\\' and '/' are not equal // +// // +//--------------------------------------------------------------------------------------// + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fs = boost::filesystem; +using boost::filesystem::path; + +#include +#include + +#ifdef BOOST_WINDOWS_API +# define BOOST_DIR_SEP "\\" +#else +# define BOOST_DIR_SEP "/" +#endif + +#define PATH_TEST_EQ(a, b) check(a, b, __FILE__, __LINE__) + +namespace +{ + std::string platform(BOOST_PLATFORM); + + void check(const fs::path & source, + const std::string & expected, const char* file, int line) + { + if (source.string() == expected) + return; + + std::cout << file + << '(' << line << "): source: \"" << source.string() + << "\" != expected: \"" << expected + << "\"" << std::endl; + + ++::boost::detail::test_errors(); + } + + path p1("fe/fi/fo/fum"); + path p2(p1); + path p3; + path p4("foobar"); + path p5; + + // exception_tests -----------------------------------------------------------------// + + void exception_tests() + { + std::cout << "exception_tests..." << std::endl; + const std::string str_1("string-1"); + boost::system::error_code ec(12345, boost::system::system_category()); + try { throw fs::filesystem_error(str_1, ec); } + catch (const fs::filesystem_error & ex) + { + //std::cout << ex.what() << "*" << std::endl; + //BOOST_TEST(std::strcmp(ex.what(), + // "string-1: Unknown error") == 0); + BOOST_TEST(ex.code() == ec); + } + + try { throw fs::filesystem_error(str_1, "p1", "p2", ec); } + catch (const fs::filesystem_error & ex) + { + //std::cout << ex.what() << "*" << std::endl; + //BOOST_TEST(std::strcmp(ex.what(), + // "string-1: Unknown error: \"p1\", \"p2\"") == 0); + BOOST_TEST(ex.code() == ec); + BOOST_TEST(ex.path1() == "p1"); + BOOST_TEST(ex.path2() == "p2"); + } + } + + // overload_tests ------------------------------------------------------------------// + + // These verify various overloads don't cause compiler errors + // They pre-date operations_unit_test.cpp + + void overload_tests() + { + std::cout << "overload_tests..." << std::endl; + + fs::exists(p1); + fs::exists("foo"); + fs::exists(std::string("foo")); + + fs::exists(p1 / path("foo")); + fs::exists(p1 / "foo"); + fs::exists(p1 / std::string("foo")); + + fs::exists("foo" / p1); + fs::exists(std::string("foo") / p1); + + p4 /= path("foo"); + p4 /= "foo"; + p4 /= std::string("foo"); + } + + // iterator_tests ------------------------------------------------------------------// + + void iterator_tests() + { + std::cout << "iterator_tests..." << std::endl; + + path itr_ck = ""; + path::const_iterator itr = itr_ck.begin(); + BOOST_TEST(itr == itr_ck.end()); + + itr_ck = "/"; + itr = itr_ck.begin(); + BOOST_TEST(itr->string() == "/"); + BOOST_TEST(++itr == itr_ck.end()); + BOOST_TEST((--itr)->string() == "/"); + + itr_ck = "foo"; + BOOST_TEST(*itr_ck.begin() == std::string("foo")); + BOOST_TEST(boost::next(itr_ck.begin()) == itr_ck.end()); + BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo")); + BOOST_TEST(boost::prior(itr_ck.end()) == itr_ck.begin()); + + itr_ck = path("/foo"); + BOOST_TEST((itr_ck.begin())->string() == "/"); + BOOST_TEST(*boost::next(itr_ck.begin()) == std::string("foo")); + BOOST_TEST(boost::next(boost::next(itr_ck.begin())) == itr_ck.end()); + BOOST_TEST(boost::next(itr_ck.begin()) == boost::prior(itr_ck.end())); + BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo")); + BOOST_TEST(*boost::prior(boost::prior(itr_ck.end())) == std::string("/")); + BOOST_TEST(boost::prior(boost::prior(itr_ck.end())) == itr_ck.begin()); + + itr_ck = "/foo/bar"; + itr = itr_ck.begin(); + BOOST_TEST(itr->string() == "/"); + BOOST_TEST(*++itr == std::string("foo")); + BOOST_TEST(*++itr == std::string("bar")); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "bar"); + PATH_TEST_EQ(*--itr, "foo"); + PATH_TEST_EQ(*--itr, "/"); + + itr_ck = "../f"; // previously failed due to short name bug + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), ".."); + PATH_TEST_EQ(*++itr, "f"); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "f"); + PATH_TEST_EQ(*--itr, ".."); + + // POSIX says treat "/foo/bar/" as "/foo/bar/." + itr_ck = "/foo/bar/"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "/"); + PATH_TEST_EQ(*++itr, "foo"); + PATH_TEST_EQ(*++itr, "bar"); + PATH_TEST_EQ(*++itr, "."); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "."); + PATH_TEST_EQ(*--itr, "bar"); + PATH_TEST_EQ(*--itr, "foo"); + PATH_TEST_EQ(*--itr, "/"); + + // POSIX says treat "/f/b/" as "/f/b/." + itr_ck = "/f/b/"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "/"); + PATH_TEST_EQ(*++itr, "f"); + PATH_TEST_EQ(*++itr, "b"); + PATH_TEST_EQ(*++itr, "."); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "."); + PATH_TEST_EQ(*--itr, "b"); + PATH_TEST_EQ(*--itr, "f"); + PATH_TEST_EQ(*--itr, "/"); + + itr_ck = "//net"; + itr = itr_ck.begin(); + // two leading slashes are permitted by POSIX (as implementation defined), + // while for Windows it is always well defined (as a network name) + PATH_TEST_EQ(itr->string(), "//net"); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "//net"); + + itr_ck = "//net/"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "//net"); + PATH_TEST_EQ(*++itr, "/"); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "/"); + PATH_TEST_EQ(*--itr, "//net"); + + itr_ck = "//foo///bar///"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "//foo"); + PATH_TEST_EQ(*++itr, "/"); + PATH_TEST_EQ(*++itr, "bar"); + PATH_TEST_EQ(*++itr, "."); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "."); + PATH_TEST_EQ(*--itr, "bar"); + PATH_TEST_EQ(*--itr, "/"); + PATH_TEST_EQ(*--itr, "//foo"); + + itr_ck = "///foo///bar///"; + itr = itr_ck.begin(); + // three or more leading slashes are to be treated as a single slash + PATH_TEST_EQ(itr->string(), "/"); + PATH_TEST_EQ(*++itr, "foo"); + PATH_TEST_EQ(*++itr, "bar"); + PATH_TEST_EQ(*++itr, "."); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "."); + PATH_TEST_EQ(*--itr, "bar"); + PATH_TEST_EQ(*--itr, "foo"); + PATH_TEST_EQ(*--itr, "/"); + + if (platform == "Windows") + { + itr_ck = "c:/"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "c:"); + PATH_TEST_EQ(*++itr, std::string("/")); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "/"); + PATH_TEST_EQ(*--itr, "c:"); + + itr_ck = "c:\\"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "c:"); + PATH_TEST_EQ(*++itr, "/"); // test that iteration returns generic format + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "/"); // test that iteration returns generic format + PATH_TEST_EQ(*--itr, "c:"); + + itr_ck = "c:/foo"; + itr = itr_ck.begin(); + BOOST_TEST(*itr == std::string("c:")); + BOOST_TEST(*++itr == std::string("/")); + BOOST_TEST(*++itr == std::string("foo")); + BOOST_TEST(++itr == itr_ck.end()); + BOOST_TEST(*--itr == std::string("foo")); + BOOST_TEST((--itr)->string() == "/"); + BOOST_TEST(*--itr == std::string("c:")); + + itr_ck = "c:\\foo"; + itr = itr_ck.begin(); + BOOST_TEST(*itr == std::string("c:")); + BOOST_TEST(*++itr == std::string("\\")); + BOOST_TEST(*++itr == std::string("foo")); + BOOST_TEST(++itr == itr_ck.end()); + BOOST_TEST(*--itr == std::string("foo")); + BOOST_TEST(*--itr == std::string("\\")); + BOOST_TEST(*--itr == std::string("c:")); + + itr_ck = "\\\\\\foo\\\\\\bar\\\\\\"; + itr = itr_ck.begin(); + // three or more leading slashes are to be treated as a single slash + PATH_TEST_EQ(itr->string(), "/"); + PATH_TEST_EQ(*++itr, "foo"); + PATH_TEST_EQ(*++itr, "bar"); + PATH_TEST_EQ(*++itr, "."); + BOOST_TEST(++itr == itr_ck.end()); + PATH_TEST_EQ(*--itr, "."); + PATH_TEST_EQ(*--itr, "bar"); + PATH_TEST_EQ(*--itr, "foo"); + PATH_TEST_EQ(*--itr, "/"); + + itr_ck = "c:foo"; + itr = itr_ck.begin(); + BOOST_TEST(*itr == std::string("c:")); + BOOST_TEST(*++itr == std::string("foo")); + BOOST_TEST(++itr == itr_ck.end()); + BOOST_TEST(*--itr == std::string("foo")); + BOOST_TEST(*--itr == std::string("c:")); + + itr_ck = "c:foo/"; + itr = itr_ck.begin(); + BOOST_TEST(*itr == std::string("c:")); + BOOST_TEST(*++itr == std::string("foo")); + BOOST_TEST(*++itr == std::string(".")); + BOOST_TEST(++itr == itr_ck.end()); + BOOST_TEST(*--itr == std::string(".")); + BOOST_TEST(*--itr == std::string("foo")); + BOOST_TEST(*--itr == std::string("c:")); + + itr_ck = path("c:"); + BOOST_TEST(*itr_ck.begin() == std::string("c:")); + BOOST_TEST(next(itr_ck.begin()) == itr_ck.end()); + BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("c:")); + + itr_ck = path("c:/"); + BOOST_TEST(*itr_ck.begin() == std::string("c:")); + BOOST_TEST(*next(itr_ck.begin()) == std::string("/")); + BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end()); + BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("/")); + BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:")); + + itr_ck = path("c:foo"); + BOOST_TEST(*itr_ck.begin() == std::string("c:")); + BOOST_TEST(*next(itr_ck.begin()) == std::string("foo")); + BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end()); + BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("foo")); + BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:")); + + itr_ck = path("c:/foo"); + BOOST_TEST(*itr_ck.begin() == std::string("c:")); + BOOST_TEST(*next(itr_ck.begin()) == std::string("/")); + BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo")); + BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end()); + BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("foo")); + BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/")); + BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("c:")); + + itr_ck = path("//net"); + BOOST_TEST(*itr_ck.begin() == std::string("//net")); + BOOST_TEST(next(itr_ck.begin()) == itr_ck.end()); + BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("//net")); + + itr_ck = path("//net/"); + PATH_TEST_EQ(itr_ck.begin()->string(), "//net"); + PATH_TEST_EQ(next(itr_ck.begin())->string(), "/"); + BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end()); + BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin()); + PATH_TEST_EQ(prior(itr_ck.end())->string(), "/"); + PATH_TEST_EQ(prior(prior(itr_ck.end()))->string(), "//net"); + + itr_ck = path("//net/foo"); + BOOST_TEST(*itr_ck.begin() == std::string("//net")); + BOOST_TEST(*next(itr_ck.begin()) == std::string("/")); + BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo")); + BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end()); + BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("foo")); + BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/")); + BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("//net")); + + itr_ck = path("prn:"); + BOOST_TEST(*itr_ck.begin() == std::string("prn:")); + BOOST_TEST(next(itr_ck.begin()) == itr_ck.end()); + BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin()); + BOOST_TEST(*prior(itr_ck.end()) == std::string("prn:")); + } + else + { + itr_ck = "///"; + itr = itr_ck.begin(); + PATH_TEST_EQ(itr->string(), "/"); + BOOST_TEST(++itr == itr_ck.end()); + } + } + + // non_member_tests ----------------------------------------------------------------// + + void non_member_tests() + { + std::cout << "non_member_tests..." << std::endl; + + // test non-member functions, particularly operator overloads + + path e, e2; + std::string es, es2; + char ecs[] = ""; + char ecs2[] = ""; + + char acs[] = "a"; + std::string as(acs); + path a(as); + + char acs2[] = "a"; + std::string as2(acs2); + path a2(as2); + + char bcs[] = "b"; + std::string bs(bcs); + path b(bs); + + // swap + a.swap(b); + BOOST_TEST(a.string() == "b"); + BOOST_TEST(b.string() == "a"); + fs::swap(a, b); + BOOST_TEST(a.string() == "a"); + BOOST_TEST(b.string() == "b"); + + // probe operator / + PATH_TEST_EQ(path("") / ".", "."); + PATH_TEST_EQ(path("") / "..", ".."); + if (platform == "Windows") + { + BOOST_TEST(path("foo\\bar") == "foo/bar"); + BOOST_TEST((b / a).native() == path("b\\a").native()); + BOOST_TEST((bs / a).native() == path("b\\a").native()); + BOOST_TEST((bcs / a).native() == path("b\\a").native()); + BOOST_TEST((b / as).native() == path("b\\a").native()); + BOOST_TEST((b / acs).native() == path("b\\a").native()); + PATH_TEST_EQ(path("a") / "b", "a\\b"); + PATH_TEST_EQ(path("..") / "", ".."); + PATH_TEST_EQ(path("foo") / path("bar"), "foo\\bar"); // path arg + PATH_TEST_EQ(path("foo") / "bar", "foo\\bar"); // const char* arg + PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo\\bar"); // const std::string & arg + PATH_TEST_EQ("foo" / path("bar"), "foo\\bar"); + PATH_TEST_EQ(path("..") / ".." , "..\\.."); + PATH_TEST_EQ(path("/") / ".." , "/.."); + PATH_TEST_EQ(path("/..") / ".." , "/..\\.."); + PATH_TEST_EQ(path("..") / "foo" , "..\\foo"); + PATH_TEST_EQ(path("foo") / ".." , "foo\\.."); + PATH_TEST_EQ(path("..") / "f" , "..\\f"); + PATH_TEST_EQ(path("/..") / "f" , "/..\\f"); + PATH_TEST_EQ(path("f") / ".." , "f\\.."); + PATH_TEST_EQ(path("foo") / ".." / ".." , "foo\\..\\.."); + PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo\\..\\..\\.."); + PATH_TEST_EQ(path("f") / ".." / "b" , "f\\..\\b"); + PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo\\..\\bar"); + PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo\\bar\\.."); + PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo\\bar\\..\\.."); + PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo\\bar\\..\\blah"); + PATH_TEST_EQ(path("f") / "b" / ".." , "f\\b\\.."); + PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f\\b\\..\\a"); + PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo\\bar\\blah\\..\\.."); + PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo\\bar\\blah\\..\\..\\bletch"); + + PATH_TEST_EQ(path(".") / "foo", ".\\foo"); + PATH_TEST_EQ(path(".") / "..", ".\\.."); + PATH_TEST_EQ(path("foo") / ".", "foo\\."); + PATH_TEST_EQ(path("..") / ".", "..\\."); + PATH_TEST_EQ(path(".") / ".", ".\\."); + PATH_TEST_EQ(path(".") / "." / ".", ".\\.\\."); + PATH_TEST_EQ(path(".") / "foo" / ".", ".\\foo\\."); + PATH_TEST_EQ(path("foo") / "." / "bar", "foo\\.\\bar"); + PATH_TEST_EQ(path("foo") / "." / ".", "foo\\.\\."); + PATH_TEST_EQ(path("foo") / "." / "..", "foo\\.\\.."); + PATH_TEST_EQ(path(".") / "." / "..", ".\\.\\.."); + PATH_TEST_EQ(path(".") / ".." / ".", ".\\..\\."); + PATH_TEST_EQ(path("..") / "." / ".", "..\\.\\."); + } + else // POSIX + { + PATH_TEST_EQ(b / a, "b/a"); + PATH_TEST_EQ(bs / a, "b/a"); + PATH_TEST_EQ(bcs / a, "b/a"); + PATH_TEST_EQ(b / as, "b/a"); + PATH_TEST_EQ(b / acs, "b/a"); + PATH_TEST_EQ(path("a") / "b", "a/b"); + PATH_TEST_EQ(path("..") / "", ".."); + PATH_TEST_EQ(path("") / "..", ".."); + PATH_TEST_EQ(path("foo") / path("bar"), "foo/bar"); // path arg + PATH_TEST_EQ(path("foo") / "bar", "foo/bar"); // const char* arg + PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo/bar"); // const std::string & arg + PATH_TEST_EQ("foo" / path("bar"), "foo/bar"); + PATH_TEST_EQ(path("..") / ".." , "../.."); + PATH_TEST_EQ(path("/") / ".." , "/.."); + PATH_TEST_EQ(path("/..") / ".." , "/../.."); + PATH_TEST_EQ(path("..") / "foo" , "../foo"); + PATH_TEST_EQ(path("foo") / ".." , "foo/.."); + PATH_TEST_EQ(path("..") / "f" , "../f"); + PATH_TEST_EQ(path("/..") / "f" , "/../f"); + PATH_TEST_EQ(path("f") / ".." , "f/.."); + PATH_TEST_EQ(path("foo") / ".." / ".." , "foo/../.."); + PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo/../../.."); + PATH_TEST_EQ(path("f") / ".." / "b" , "f/../b"); + PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo/../bar"); + PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo/bar/.."); + PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo/bar/../.."); + PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo/bar/../blah"); + PATH_TEST_EQ(path("f") / "b" / ".." , "f/b/.."); + PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f/b/../a"); + PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../.."); + PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch"); + + PATH_TEST_EQ(path(".") / "foo", "./foo"); + PATH_TEST_EQ(path(".") / "..", "./.."); + PATH_TEST_EQ(path("foo") / ".", "foo/."); + PATH_TEST_EQ(path("..") / ".", "../."); + PATH_TEST_EQ(path(".") / ".", "./."); + PATH_TEST_EQ(path(".") / "." / ".", "././."); + PATH_TEST_EQ(path(".") / "foo" / ".", "./foo/."); + PATH_TEST_EQ(path("foo") / "." / "bar", "foo/./bar"); + PATH_TEST_EQ(path("foo") / "." / ".", "foo/./."); + PATH_TEST_EQ(path("foo") / "." / "..", "foo/./.."); + PATH_TEST_EQ(path(".") / "." / "..", "././.."); + PATH_TEST_EQ(path(".") / ".." / ".", "./../."); + PATH_TEST_EQ(path("..") / "." / ".", ".././."); + } + + // probe operator < + BOOST_TEST(!(e < e2)); + BOOST_TEST(!(es < e2)); + BOOST_TEST(!(ecs < e2)); + BOOST_TEST(!(e < es2)); + BOOST_TEST(!(e < ecs2)); + + BOOST_TEST(e < a); + BOOST_TEST(es < a); + BOOST_TEST(ecs < a); + BOOST_TEST(e < as); + BOOST_TEST(e < acs); + + BOOST_TEST(a < b); + BOOST_TEST(as < b); + BOOST_TEST(acs < b); + BOOST_TEST(a < bs); + BOOST_TEST(a < bcs); + + BOOST_TEST(!(a < a2)); + BOOST_TEST(!(as < a2)); + BOOST_TEST(!(acs < a2)); + BOOST_TEST(!(a < as2)); + BOOST_TEST(!(a < acs2)); + + // make sure basic_path overloads don't conflict with std::string overloads + + BOOST_TEST(!(as < as)); + BOOST_TEST(!(as < acs)); + BOOST_TEST(!(acs < as)); + + // reality check character set is as expected + BOOST_TEST(std::string("a.b") < std::string("a/b")); + // verify compare is actually lexicographical + BOOST_TEST(path("a/b") < path("a.b")); + + // make sure the derivative operators also work + + BOOST_TEST(b > a); + BOOST_TEST(b > as); + BOOST_TEST(b > acs); + BOOST_TEST(bs > a); + BOOST_TEST(bcs > a); + + BOOST_TEST(!(a2 > a)); + BOOST_TEST(!(a2 > as)); + BOOST_TEST(!(a2 > acs)); + BOOST_TEST(!(as2 > a)); + BOOST_TEST(!(acs2 > a)); + + BOOST_TEST(a <= b); + BOOST_TEST(as <= b); + BOOST_TEST(acs <= b); + BOOST_TEST(a <= bs); + BOOST_TEST(a <= bcs); + + BOOST_TEST(a <= a2); + BOOST_TEST(as <= a2); + BOOST_TEST(acs <= a2); + BOOST_TEST(a <= as2); + BOOST_TEST(a <= acs2); + + BOOST_TEST(b >= a); + BOOST_TEST(bs >= a); + BOOST_TEST(bcs >= a); + BOOST_TEST(b >= as); + BOOST_TEST(b >= acs); + + BOOST_TEST(a2 >= a); + BOOST_TEST(as2 >= a); + BOOST_TEST(acs2 >= a); + BOOST_TEST(a2 >= as); + BOOST_TEST(a2 >= acs); + + // operator == and != are implemented separately, so test separately + + path p1("fe/fi/fo/fum"); + path p2(p1); + path p3("fe/fi/fo/fumm"); + BOOST_TEST(p1.string() != p3.string()); + + // check each overload + BOOST_TEST(p1 != p3); + BOOST_TEST(p1 != p3.string()); + BOOST_TEST(p1 != p3.string().c_str()); + BOOST_TEST(p1.string() != p3); + BOOST_TEST(p1.string().c_str() != p3); + + p3 = p2; + BOOST_TEST(p1.string() == p3.string()); + + // check each overload + BOOST_TEST(p1 == p3); + BOOST_TEST(p1 == p3.string()); + BOOST_TEST(p1 == p3.string().c_str()); + BOOST_TEST(p1.string() == p3); + BOOST_TEST(p1.string().c_str() == p3); + + if (platform == "Windows") + { + std::cout << "Windows relational tests..." << std::endl; + path p10 ("c:\\file"); + path p11 ("c:/file"); + // check each overload + BOOST_TEST(p10.generic_string() == p11.generic_string()); + BOOST_TEST(p10 == p11); + BOOST_TEST(p10 == p11.string()); + BOOST_TEST(p10 == p11.string().c_str()); + BOOST_TEST(p10.string() == p11); + BOOST_TEST(p10.string().c_str() == p11); + BOOST_TEST(p10 == L"c:\\file"); + BOOST_TEST(p10 == L"c:/file"); + BOOST_TEST(p11 == L"c:\\file"); + BOOST_TEST(p11 == L"c:/file"); + BOOST_TEST(L"c:\\file" == p10); + BOOST_TEST(L"c:/file" == p10); + BOOST_TEST(L"c:\\file" == p11); + BOOST_TEST(L"c:/file" == p11); + + BOOST_TEST(!(p10.generic_string() != p11.generic_string())); + BOOST_TEST(!(p10 != p11)); + BOOST_TEST(!(p10 != p11.string())); + BOOST_TEST(!(p10 != p11.string().c_str())); + BOOST_TEST(!(p10.string() != p11)); + BOOST_TEST(!(p10.string().c_str() != p11)); + BOOST_TEST(!(p10 != L"c:\\file")); + BOOST_TEST(!(p10 != L"c:/file")); + BOOST_TEST(!(p11 != L"c:\\file")); + BOOST_TEST(!(p11 != L"c:/file")); + BOOST_TEST(!(L"c:\\file" != p10)); + BOOST_TEST(!(L"c:/file" != p10)); + BOOST_TEST(!(L"c:\\file" != p11)); + BOOST_TEST(!(L"c:/file" != p11)); + + BOOST_TEST(!(p10.string() < p11.string())); + BOOST_TEST(!(p10 < p11)); + BOOST_TEST(!(p10 < p11.string())); + BOOST_TEST(!(p10 < p11.string().c_str())); + BOOST_TEST(!(p10.string() < p11)); + BOOST_TEST(!(p10.string().c_str() < p11)); + BOOST_TEST(!(p10 < L"c:\\file")); + BOOST_TEST(!(p10 < L"c:/file")); + BOOST_TEST(!(p11 < L"c:\\file")); + BOOST_TEST(!(p11 < L"c:/file")); + BOOST_TEST(!(L"c:\\file" < p10)); + BOOST_TEST(!(L"c:/file" < p10)); + BOOST_TEST(!(L"c:\\file" < p11)); + BOOST_TEST(!(L"c:/file" < p11)); + + BOOST_TEST(!(p10.generic_string() > p11.generic_string())); + BOOST_TEST(!(p10 > p11)); + BOOST_TEST(!(p10 > p11.string())); + BOOST_TEST(!(p10 > p11.string().c_str())); + BOOST_TEST(!(p10.string() > p11)); + BOOST_TEST(!(p10.string().c_str() > p11)); + BOOST_TEST(!(p10 > L"c:\\file")); + BOOST_TEST(!(p10 > L"c:/file")); + BOOST_TEST(!(p11 > L"c:\\file")); + BOOST_TEST(!(p11 > L"c:/file")); + BOOST_TEST(!(L"c:\\file" > p10)); + BOOST_TEST(!(L"c:/file" > p10)); + BOOST_TEST(!(L"c:\\file" > p11)); + BOOST_TEST(!(L"c:/file" > p11)); + } + } + + // query_and_decomposition_tests ---------------------------------------------------// + // + // remove_filename() is also tested here, because its specification depends on + // a decomposition function. + + void query_and_decomposition_tests() + { + std::cout << "query_and_decomposition_tests..." << std::endl; + + // stem() tests not otherwise covered + BOOST_TEST(path("b").stem() == "b"); + BOOST_TEST(path("a/b.txt").stem() == "b"); + BOOST_TEST(path("a/b.").stem() == "b"); + BOOST_TEST(path("a.b.c").stem() == "a.b"); + BOOST_TEST(path("a.b.c.").stem() == "a.b.c"); + + // extension() tests not otherwise covered + BOOST_TEST(path("a/b").extension() == ""); + BOOST_TEST(path("a.b/c").extension() == ""); + BOOST_TEST(path("a/b.txt").extension() == ".txt"); + BOOST_TEST(path("a/b.").extension() == "."); + BOOST_TEST(path("a.b.c").extension() == ".c"); + BOOST_TEST(path("a.b.c.").extension() == "."); + BOOST_TEST(path("a/").extension() == ""); + + // main q & d test sequence + path p; + path q; + + p = q = ""; + BOOST_TEST(p.relative_path().string() == ""); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == ""); + BOOST_TEST(p.stem() == ""); + BOOST_TEST(p.extension() == ""); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(!p.has_filename()); + BOOST_TEST(!p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "/"; + BOOST_TEST(p.relative_path().string() == ""); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "/"); + BOOST_TEST(p.stem() == "/"); + BOOST_TEST(p.extension() == ""); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == "/"); + BOOST_TEST(p.root_path().string() == "/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + if (platform == "POSIX") + BOOST_TEST(p.is_absolute()); + else + BOOST_TEST(!p.is_absolute()); + + p = q = "//"; + PATH_TEST_EQ(p.relative_path().string(), ""); + PATH_TEST_EQ(p.parent_path().string(), ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "//"); + PATH_TEST_EQ(p.stem(), "//"); + PATH_TEST_EQ(p.extension(), ""); + PATH_TEST_EQ(p.root_name(), "//"); + PATH_TEST_EQ(p.root_directory(), ""); + PATH_TEST_EQ(p.root_path().string(), "//"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "///"; + PATH_TEST_EQ(p.relative_path().string(), ""); + PATH_TEST_EQ(p.parent_path().string(), ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "/"); + PATH_TEST_EQ(p.stem(), "/"); + PATH_TEST_EQ(p.extension(), ""); + PATH_TEST_EQ(p.root_name(), ""); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + if (platform == "POSIX") + BOOST_TEST(p.is_absolute()); + else + BOOST_TEST(!p.is_absolute()); + + p = q = "."; + BOOST_TEST(p.relative_path().string() == "."); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "."); + BOOST_TEST(p.stem() == "."); + BOOST_TEST(p.extension() == ""); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = ".."; + BOOST_TEST(p.relative_path().string() == ".."); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == ".."); + BOOST_TEST(p.stem() == ".."); + BOOST_TEST(p.extension() == ""); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "foo"; + BOOST_TEST(p.relative_path().string() == "foo"); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "foo"); + BOOST_TEST(p.stem() == "foo"); + BOOST_TEST(p.extension() == ""); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "/foo"; + PATH_TEST_EQ(p.relative_path().string(), "foo"); + PATH_TEST_EQ(p.parent_path().string(), "/"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.stem(), "foo"); + PATH_TEST_EQ(p.extension(), ""); + PATH_TEST_EQ(p.root_name(), ""); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(p.has_parent_path()); + if (platform == "POSIX") + BOOST_TEST(p.is_absolute()); + else + BOOST_TEST(!p.is_absolute()); + + p = q = "/foo/"; + PATH_TEST_EQ(p.relative_path().string(), "foo/"); + PATH_TEST_EQ(p.parent_path().string(), "/foo"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "."); + PATH_TEST_EQ(p.stem(), "."); + PATH_TEST_EQ(p.extension(), ""); + PATH_TEST_EQ(p.root_name(), ""); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(p.has_parent_path()); + if (platform == "POSIX") + BOOST_TEST(p.is_absolute()); + else + BOOST_TEST(!p.is_absolute()); + + p = q = "///foo"; + PATH_TEST_EQ(p.relative_path().string(), "foo"); + PATH_TEST_EQ(p.parent_path().string(), "/"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.root_name(), ""); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + if (platform == "POSIX") + BOOST_TEST(p.is_absolute()); + else + BOOST_TEST(!p.is_absolute()); + + p = q = "foo/bar"; + BOOST_TEST(p.relative_path().string() == "foo/bar"); + BOOST_TEST(p.parent_path().string() == "foo"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "bar"); + BOOST_TEST(p.stem() == "bar"); + BOOST_TEST(p.extension() == ""); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_stem()); + BOOST_TEST(!p.has_extension()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "../foo"; + BOOST_TEST(p.relative_path().string() == "../foo"); + BOOST_TEST(p.parent_path().string() == ".."); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "foo"); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "..///foo"; + PATH_TEST_EQ(p.relative_path().string(), "..///foo"); + PATH_TEST_EQ(p.parent_path().string(), ".."); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.root_name(), ""); + PATH_TEST_EQ(p.root_directory(), ""); + PATH_TEST_EQ(p.root_path().string(), ""); + BOOST_TEST(!p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = "/foo/bar"; + BOOST_TEST(p.relative_path().string() == "foo/bar"); + BOOST_TEST(p.parent_path().string() == "/foo"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "bar"); + BOOST_TEST(p.root_name() == ""); + BOOST_TEST(p.root_directory() == "/"); + BOOST_TEST(p.root_path().string() == "/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(!p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + if (platform == "POSIX") + BOOST_TEST(p.is_absolute()); + else + BOOST_TEST(!p.is_absolute()); + + // Both POSIX and Windows allow two leading slashs + // (POSIX meaning is implementation defined) + PATH_TEST_EQ(path("//resource"), "//resource"); + PATH_TEST_EQ(path("//resource/"), "//resource/"); + PATH_TEST_EQ(path("//resource/foo"), "//resource/foo"); + + p = q = path("//net"); + PATH_TEST_EQ(p.string(), "//net"); + PATH_TEST_EQ(p.relative_path().string(), ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.parent_path().string(), ""); + PATH_TEST_EQ(p.filename(), "//net"); + PATH_TEST_EQ(p.root_name(), "//net"); + PATH_TEST_EQ(p.root_directory(), ""); + PATH_TEST_EQ(p.root_path().string(), "//net"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = path("//net/"); + BOOST_TEST(p.relative_path().string() == ""); + BOOST_TEST(p.parent_path().string() == "//net"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "/"); + BOOST_TEST(p.root_name() == "//net"); + BOOST_TEST(p.root_directory() == "/"); + BOOST_TEST(p.root_path().string() == "//net/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + p = q = path("//net/foo"); + BOOST_TEST(p.relative_path().string() == "foo"); + BOOST_TEST(p.parent_path().string() == "//net/"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "foo"); + BOOST_TEST(p.root_name() == "//net"); + BOOST_TEST(p.root_directory() == "/"); + BOOST_TEST(p.root_path().string() == "//net/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + p = q = path("//net///foo"); + PATH_TEST_EQ(p.relative_path().string(), "foo"); + PATH_TEST_EQ(p.parent_path().string(), "//net/"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.root_name(), "//net"); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "//net/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + if (platform == "Windows") + { + + //p = q = L"\\\\?\\"; + //BOOST_TEST(p.relative_path().string() == ""); + //BOOST_TEST(p.parent_path().string() == ""); + //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + //BOOST_TEST(p.filename() == ""); + //BOOST_TEST(p.stem() == ""); + //BOOST_TEST(p.extension() == ""); + //BOOST_TEST(p.root_name() == ""); + //BOOST_TEST(p.root_directory() == ""); + //BOOST_TEST(p.root_path().string() == ""); + //BOOST_TEST(!p.has_root_path()); + //BOOST_TEST(!p.has_root_name()); + //BOOST_TEST(!p.has_root_directory()); + //BOOST_TEST(!p.has_relative_path()); + //BOOST_TEST(!p.has_filename()); + //BOOST_TEST(!p.has_stem()); + //BOOST_TEST(!p.has_extension()); + //BOOST_TEST(!p.has_parent_path()); + //BOOST_TEST(!p.is_absolute()); + + p = q = path("c:"); + BOOST_TEST(p.relative_path().string() == ""); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "c:"); + BOOST_TEST(p.root_name() == "c:"); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == "c:"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + //p = q = path(L"\\\\?\\c:"); + //BOOST_TEST(p.relative_path().string() == ""); + //BOOST_TEST(p.parent_path().string() == ""); + //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + //BOOST_TEST(p.filename() == "c:"); + //BOOST_TEST(p.root_name() == "c:"); + //BOOST_TEST(p.root_directory() == ""); + //BOOST_TEST(p.root_path().string() == "c:"); + //BOOST_TEST(p.has_root_path()); + //BOOST_TEST(p.has_root_name()); + //BOOST_TEST(!p.has_root_directory()); + //BOOST_TEST(!p.has_relative_path()); + //BOOST_TEST(p.has_filename()); + //BOOST_TEST(!p.has_parent_path()); + //BOOST_TEST(!p.is_absolute()); + + p = q = path("c:foo"); + BOOST_TEST(p.relative_path().string() == "foo"); + BOOST_TEST(p.parent_path().string() == "c:"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "foo"); + BOOST_TEST(p.root_name() == "c:"); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == "c:"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + //p = q = path(L"\\\\?\\c:foo"); + //BOOST_TEST(p.relative_path().string() == "foo"); + //BOOST_TEST(p.parent_path().string() == "c:"); + //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + //BOOST_TEST(p.filename() == "foo"); + //BOOST_TEST(p.root_name() == "c:"); + //BOOST_TEST(p.root_directory() == ""); + //BOOST_TEST(p.root_path().string() == "c:"); + //BOOST_TEST(p.has_root_path()); + //BOOST_TEST(p.has_root_name()); + //BOOST_TEST(!p.has_root_directory()); + //BOOST_TEST(p.has_relative_path()); + //BOOST_TEST(p.has_filename()); + //BOOST_TEST(p.has_parent_path()); + //BOOST_TEST(!p.is_absolute()); + + p = q = path("c:/"); + BOOST_TEST(p.relative_path().string() == ""); + BOOST_TEST(p.parent_path().string() == "c:"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "/"); + BOOST_TEST(p.root_name() == "c:"); + BOOST_TEST(p.root_directory() == "/"); + BOOST_TEST(p.root_path().string() == "c:/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + p = q = path("c:.."); + BOOST_TEST(p.relative_path().string() == ".."); + BOOST_TEST(p.parent_path().string() == "c:"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == ".."); + BOOST_TEST(p.root_name() == "c:"); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == "c:"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = path("c:/foo"); + PATH_TEST_EQ(p.relative_path().string(), "foo"); + PATH_TEST_EQ(p.parent_path().string(), "c:/"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.root_name(), "c:"); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "c:/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + p = q = path("c://foo"); + PATH_TEST_EQ(p.relative_path().string(), "foo"); + PATH_TEST_EQ(p.parent_path().string(), "c:/"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.root_name(), "c:"); + PATH_TEST_EQ(p.root_directory(), "/"); + PATH_TEST_EQ(p.root_path().string(), "c:/"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + p = q = path("c:\\foo\\bar"); + PATH_TEST_EQ(p.relative_path().string(), "foo\\bar"); + PATH_TEST_EQ(p.parent_path().string(), "c:\\foo"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "bar"); + PATH_TEST_EQ(p.root_name(), "c:"); + PATH_TEST_EQ(p.root_directory(), "\\"); + PATH_TEST_EQ(p.root_path().string(), "c:\\"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + + p = q = path("prn:"); + BOOST_TEST(p.relative_path().string() == ""); + BOOST_TEST(p.parent_path().string() == ""); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + BOOST_TEST(p.filename() == "prn:"); + BOOST_TEST(p.root_name() == "prn:"); + BOOST_TEST(p.root_directory() == ""); + BOOST_TEST(p.root_path().string() == "prn:"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(!p.has_root_directory()); + BOOST_TEST(!p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(!p.has_parent_path()); + BOOST_TEST(!p.is_absolute()); + + p = q = path("\\\\net\\\\\\foo"); + PATH_TEST_EQ(p.relative_path().string(), "foo"); + PATH_TEST_EQ(p.parent_path().string(), "\\\\net\\"); + PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); + PATH_TEST_EQ(p.filename(), "foo"); + PATH_TEST_EQ(p.root_name(), "\\\\net"); + PATH_TEST_EQ(p.root_directory(), "\\"); + PATH_TEST_EQ(p.root_path().string(), "\\\\net\\"); + BOOST_TEST(p.has_root_path()); + BOOST_TEST(p.has_root_name()); + BOOST_TEST(p.has_root_directory()); + BOOST_TEST(p.has_relative_path()); + BOOST_TEST(p.has_filename()); + BOOST_TEST(p.has_parent_path()); + BOOST_TEST(p.is_absolute()); + } // Windows + + else + { // POSIX + PATH_TEST_EQ(path("/foo/bar/"), "/foo/bar/"); + PATH_TEST_EQ(path("//foo//bar//"), "//foo//bar//"); + PATH_TEST_EQ(path("///foo///bar///"), "///foo///bar///"); + + p = path("/usr/local/bin:/usr/bin:/bin"); + BOOST_TEST(p.string() == "/usr/local/bin:/usr/bin:/bin"); + } // POSIX + } + + // composition_tests ----------------------------------------------------------------// + + void composition_tests() + { + std::cout << "composition_tests..." << std::endl; + + } + + // construction_tests ---------------------------------------------------------------// + + void construction_tests() + { + std::cout << "construction_tests..." << std::endl; + + PATH_TEST_EQ("", ""); + + PATH_TEST_EQ("foo", "foo"); + PATH_TEST_EQ("f", "f"); + + PATH_TEST_EQ("foo/", "foo/"); + PATH_TEST_EQ("f/", "f/"); + PATH_TEST_EQ("foo/..", "foo/.."); + PATH_TEST_EQ("foo/../", "foo/../"); + PATH_TEST_EQ("foo/bar/../..", "foo/bar/../.."); + PATH_TEST_EQ("foo/bar/../../", "foo/bar/../../"); + PATH_TEST_EQ("/", "/"); + PATH_TEST_EQ("/f", "/f"); + + PATH_TEST_EQ("/foo", "/foo"); + PATH_TEST_EQ("/foo/bar/", "/foo/bar/"); + PATH_TEST_EQ("//foo//bar//", "//foo//bar//"); + PATH_TEST_EQ("///foo///bar///", "///foo///bar///"); + PATH_TEST_EQ("\\/foo\\/bar\\/", "\\/foo\\/bar\\/"); + PATH_TEST_EQ("\\//foo\\//bar\\//", "\\//foo\\//bar\\//"); + + if (platform == "Windows") + { + PATH_TEST_EQ(path("c:") / "foo", "c:foo"); + PATH_TEST_EQ(path("c:") / "/foo", "c:/foo"); + + PATH_TEST_EQ("\\foo\\bar\\", "\\foo\\bar\\"); + PATH_TEST_EQ("\\\\foo\\\\bar\\\\", "\\\\foo\\\\bar\\\\"); + PATH_TEST_EQ("\\\\\\foo\\\\\\bar\\\\\\", "\\\\\\foo\\\\\\bar\\\\\\"); + + PATH_TEST_EQ("\\", "\\"); + PATH_TEST_EQ("\\f", "\\f"); + PATH_TEST_EQ("\\foo", "\\foo"); + PATH_TEST_EQ("foo\\bar", "foo\\bar"); + PATH_TEST_EQ("foo bar", "foo bar"); + PATH_TEST_EQ("c:", "c:"); + PATH_TEST_EQ("c:/", "c:/"); + PATH_TEST_EQ("c:.", "c:."); + PATH_TEST_EQ("c:./foo", "c:./foo"); + PATH_TEST_EQ("c:.\\foo", "c:.\\foo"); + PATH_TEST_EQ("c:..", "c:.."); + PATH_TEST_EQ("c:/.", "c:/."); + PATH_TEST_EQ("c:/..", "c:/.."); + PATH_TEST_EQ("c:/../", "c:/../"); + PATH_TEST_EQ("c:\\..\\", "c:\\..\\"); + PATH_TEST_EQ("c:/../..", "c:/../.."); + PATH_TEST_EQ("c:/../foo", "c:/../foo"); + PATH_TEST_EQ("c:\\..\\foo", "c:\\..\\foo"); + PATH_TEST_EQ("c:../foo", "c:../foo"); + PATH_TEST_EQ("c:..\\foo", "c:..\\foo"); + PATH_TEST_EQ("c:/../../foo", "c:/../../foo"); + PATH_TEST_EQ("c:\\..\\..\\foo", "c:\\..\\..\\foo"); + PATH_TEST_EQ("c:foo/..", "c:foo/.."); + PATH_TEST_EQ("c:/foo/..", "c:/foo/.."); + PATH_TEST_EQ("c:/..foo", "c:/..foo"); + PATH_TEST_EQ("c:foo", "c:foo"); + PATH_TEST_EQ("c:/foo", "c:/foo"); + PATH_TEST_EQ("\\\\netname", "\\\\netname"); + PATH_TEST_EQ("\\\\netname\\", "\\\\netname\\"); + PATH_TEST_EQ("\\\\netname\\foo", "\\\\netname\\foo"); + PATH_TEST_EQ("c:/foo", "c:/foo"); + PATH_TEST_EQ("prn:", "prn:"); + } + else + { + } + + PATH_TEST_EQ("foo/bar", "foo/bar"); + PATH_TEST_EQ("a/b", "a/b"); // probe for length effects + PATH_TEST_EQ("..", ".."); + PATH_TEST_EQ("../..", "../.."); + PATH_TEST_EQ("/..", "/.."); + PATH_TEST_EQ("/../..", "/../.."); + PATH_TEST_EQ("../foo", "../foo"); + PATH_TEST_EQ("foo/..", "foo/.."); + PATH_TEST_EQ("foo/..bar", "foo/..bar"); + PATH_TEST_EQ("../f", "../f"); + PATH_TEST_EQ("/../f", "/../f"); + PATH_TEST_EQ("f/..", "f/.."); + PATH_TEST_EQ("foo/../..", "foo/../.."); + PATH_TEST_EQ("foo/../../..", "foo/../../.."); + PATH_TEST_EQ("foo/../bar", "foo/../bar"); + PATH_TEST_EQ("foo/bar/..", "foo/bar/.."); + PATH_TEST_EQ("foo/bar/../..", "foo/bar/../.."); + PATH_TEST_EQ("foo/bar/../blah", "foo/bar/../blah"); + PATH_TEST_EQ("f/../b", "f/../b"); + PATH_TEST_EQ("f/b/..", "f/b/.."); + PATH_TEST_EQ("f/b/../a", "f/b/../a"); + PATH_TEST_EQ("foo/bar/blah/../..", "foo/bar/blah/../.."); + PATH_TEST_EQ("foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch"); + PATH_TEST_EQ("...", "..."); + PATH_TEST_EQ("....", "...."); + PATH_TEST_EQ("foo/...", "foo/..."); + PATH_TEST_EQ("abc.", "abc."); + PATH_TEST_EQ("abc..", "abc.."); + PATH_TEST_EQ("foo/abc.", "foo/abc."); + PATH_TEST_EQ("foo/abc..", "foo/abc.."); + + PATH_TEST_EQ(".abc", ".abc"); + PATH_TEST_EQ("a.c", "a.c"); + PATH_TEST_EQ("..abc", "..abc"); + PATH_TEST_EQ("a..c", "a..c"); + PATH_TEST_EQ("foo/.abc", "foo/.abc"); + PATH_TEST_EQ("foo/a.c", "foo/a.c"); + PATH_TEST_EQ("foo/..abc", "foo/..abc"); + PATH_TEST_EQ("foo/a..c", "foo/a..c"); + + PATH_TEST_EQ(".", "."); + PATH_TEST_EQ("./foo", "./foo"); + PATH_TEST_EQ("./..", "./.."); + PATH_TEST_EQ("./../foo", "./../foo"); + PATH_TEST_EQ("foo/.", "foo/."); + PATH_TEST_EQ("../.", "../."); + PATH_TEST_EQ("./.", "./."); + PATH_TEST_EQ("././.", "././."); + PATH_TEST_EQ("./foo/.", "./foo/."); + PATH_TEST_EQ("foo/./bar", "foo/./bar"); + PATH_TEST_EQ("foo/./.", "foo/./."); + PATH_TEST_EQ("foo/./..", "foo/./.."); + PATH_TEST_EQ("foo/./../bar", "foo/./../bar"); + PATH_TEST_EQ("foo/../.", "foo/../."); + PATH_TEST_EQ("././..", "././.."); + PATH_TEST_EQ("./../.", "./../."); + PATH_TEST_EQ(".././.", ".././."); + } + + // append_tests --------------------------------------------------------------------// + + void append_test_aux(const path & p, const std::string & s, const std::string & expect) + { + PATH_TEST_EQ((p / path(s)).string(), expect); + PATH_TEST_EQ((p / s.c_str()).string(), expect); + PATH_TEST_EQ((p / s).string(), expect); + path x(p); + x.append(s.begin(), s.end()); + PATH_TEST_EQ(x.string(), expect); + } + + void append_tests() + { + std::cout << "append_tests..." << std::endl; + + // There are many control paths to be exercised, since empty paths and arguments, + // paths with trailing separators, arguments with leading separators, with or without + // other characters being present, are all separate cases that need to be tested. + // Furthermore, some of the code to be tested is specific to argument categories, + // so that results in further permutations to be tested. + + //// code to generate test cases + //// + //// expected results must be checked by hand + //// "foo\bar" expected result must be edited by hand and moved for Windows/POSIX + //// + //const char* x[] = { "", "/", "foo", "foo/" }; + //const char* y[] = { "", "/", "bar", "/bar" }; + + //for (int i = 0; i < sizeof(x)/sizeof(char*); ++i) + // for (int j = 0; j < sizeof(y)/sizeof(char*); ++j) + // { + // std::cout << "\n PATH_TEST_EQ(path(\"" << x[i] << "\") / \"" << y[j] << "\", \"" + // << path(x[i]) / y[j] << "\");\n"; + // std::cout << " append_test_aux(\"" << x[i] << "\", \"" << y[j] << "\", \"" + // << path(x[i]) / y[j] << "\");\n"; + // } + + PATH_TEST_EQ(path("") / "", ""); + append_test_aux("", "", ""); + + PATH_TEST_EQ(path("") / "/", "/"); + append_test_aux("", "/", "/"); + + PATH_TEST_EQ(path("") / "bar", "bar"); + append_test_aux("", "bar", "bar"); + + PATH_TEST_EQ(path("") / "/bar", "/bar"); + append_test_aux("", "/bar", "/bar"); + + PATH_TEST_EQ(path("/") / "", "/"); + append_test_aux("/", "", "/"); + + PATH_TEST_EQ(path("/") / "/", "//"); + append_test_aux("/", "/", "//"); + + PATH_TEST_EQ(path("/") / "bar", "/bar"); + append_test_aux("/", "bar", "/bar"); + + PATH_TEST_EQ(path("/") / "/bar", "//bar"); + append_test_aux("/", "/bar", "//bar"); + + PATH_TEST_EQ(path("foo") / "", "foo"); + append_test_aux("foo", "", "foo"); + + PATH_TEST_EQ(path("foo") / "/", "foo/"); + append_test_aux("foo", "/", "foo/"); + + PATH_TEST_EQ(path("foo") / "/bar", "foo/bar"); + append_test_aux("foo", "/bar", "foo/bar"); + + PATH_TEST_EQ(path("foo/") / "", "foo/"); + append_test_aux("foo/", "", "foo/"); + + PATH_TEST_EQ(path("foo/") / "/", "foo//"); + append_test_aux("foo/", "/", "foo//"); + + PATH_TEST_EQ(path("foo/") / "bar", "foo/bar"); + append_test_aux("foo/", "bar", "foo/bar"); + + PATH_TEST_EQ(path("foo/") / "/bar", "foo//bar"); + append_test_aux("foo/", "/bar", "foo//bar"); + + if (platform == "Windows") + { + PATH_TEST_EQ(path("foo") / "bar", "foo\\bar"); + append_test_aux("foo", "bar", "foo\\bar"); + + // hand created test case specific to Windows + PATH_TEST_EQ(path("c:") / "bar", "c:bar"); + append_test_aux("c:", "bar", "c:bar"); + } + else + { + PATH_TEST_EQ(path("foo") / "bar", "foo/bar"); + append_test_aux("foo", "bar", "foo/bar"); + } + + } + +// self_assign_and_append_tests ------------------------------------------------------// + + void self_assign_and_append_tests() + { + std::cout << "self_assign_and_append_tests..." << std::endl; + + path p; + + p = "snafubar"; + PATH_TEST_EQ(p = p, "snafubar"); + + p = "snafubar"; + p = p.c_str(); + PATH_TEST_EQ(p, "snafubar"); + + p = "snafubar"; + p.assign(p.c_str(), path::codecvt()); + PATH_TEST_EQ(p, "snafubar"); + + p = "snafubar"; + PATH_TEST_EQ(p = p.c_str()+5, "bar"); + + p = "snafubar"; + PATH_TEST_EQ(p.assign(p.c_str() + 5, p.c_str() + 7), "ba"); + + p = "snafubar"; + p /= p; + PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); + + p = "snafubar"; + p /= p.c_str(); + PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); + + p = "snafubar"; + p.append(p.c_str(), path::codecvt()); + PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); + + p = "snafubar"; + PATH_TEST_EQ(p.append(p.c_str() + 5, p.c_str() + 7), "snafubar" BOOST_DIR_SEP "ba"); + } + + + // name_function_tests -------------------------------------------------------------// + + void name_function_tests() + { + std::cout << "name_function_tests..." << std::endl; + + BOOST_TEST(fs::portable_posix_name(std::string("x"))); + BOOST_TEST(fs::windows_name(std::string("x"))); + BOOST_TEST(fs::portable_name(std::string("x"))); + BOOST_TEST(fs::portable_directory_name(std::string("x"))); + BOOST_TEST(fs::portable_file_name(std::string("x"))); + + BOOST_TEST(fs::portable_posix_name(std::string("."))); + BOOST_TEST(fs::windows_name(std::string("."))); + BOOST_TEST(fs::portable_name(std::string("."))); + BOOST_TEST(fs::portable_directory_name(std::string("."))); + BOOST_TEST(!fs::portable_file_name(std::string("."))); + + BOOST_TEST(fs::portable_posix_name(std::string(".."))); + BOOST_TEST(fs::windows_name(std::string(".."))); + BOOST_TEST(fs::portable_name(std::string(".."))); + BOOST_TEST(fs::portable_directory_name(std::string(".."))); + BOOST_TEST(!fs::portable_file_name(std::string(".."))); + + BOOST_TEST(!fs::native(std::string(""))); + BOOST_TEST(!fs::portable_posix_name(std::string(""))); + BOOST_TEST(!fs::windows_name(std::string(""))); + BOOST_TEST(!fs::portable_name(std::string(""))); + BOOST_TEST(!fs::portable_directory_name(std::string(""))); + BOOST_TEST(!fs::portable_file_name(std::string(""))); + + BOOST_TEST(!fs::native(std::string(" "))); + BOOST_TEST(!fs::portable_posix_name(std::string(" "))); + BOOST_TEST(!fs::windows_name(std::string(" "))); + BOOST_TEST(!fs::portable_name(std::string(" "))); + BOOST_TEST(!fs::portable_directory_name(std::string(" "))); + BOOST_TEST(!fs::portable_file_name(std::string(" "))); + + BOOST_TEST(!fs::portable_posix_name(std::string(":"))); + BOOST_TEST(!fs::windows_name(std::string(":"))); + BOOST_TEST(!fs::portable_name(std::string(":"))); + BOOST_TEST(!fs::portable_directory_name(std::string(":"))); + BOOST_TEST(!fs::portable_file_name(std::string(":"))); + + BOOST_TEST(fs::portable_posix_name(std::string("-"))); + BOOST_TEST(fs::windows_name(std::string("-"))); + BOOST_TEST(!fs::portable_name(std::string("-"))); + BOOST_TEST(!fs::portable_directory_name(std::string("-"))); + BOOST_TEST(!fs::portable_file_name(std::string("-"))); + + BOOST_TEST(!fs::portable_posix_name(std::string("foo bar"))); + BOOST_TEST(fs::windows_name(std::string("foo bar"))); + BOOST_TEST(!fs::windows_name(std::string(" bar"))); + BOOST_TEST(!fs::windows_name(std::string("foo "))); + BOOST_TEST(!fs::portable_name(std::string("foo bar"))); + BOOST_TEST(!fs::portable_directory_name(std::string("foo bar"))); + BOOST_TEST(!fs::portable_file_name(std::string("foo bar"))); + + BOOST_TEST(fs::portable_posix_name(std::string("foo.bar"))); + BOOST_TEST(fs::windows_name(std::string("foo.bar"))); + BOOST_TEST(fs::portable_name(std::string("foo.bar"))); + BOOST_TEST(!fs::portable_directory_name(std::string("foo.bar"))); + BOOST_TEST(fs::portable_file_name(std::string("foo.bar"))); + + BOOST_TEST(fs::portable_posix_name(std::string("foo.barf"))); + BOOST_TEST(fs::windows_name(std::string("foo.barf"))); + BOOST_TEST(fs::portable_name(std::string("foo.barf"))); + BOOST_TEST(!fs::portable_directory_name(std::string("foo.barf"))); + BOOST_TEST(!fs::portable_file_name(std::string("foo.barf"))); + + BOOST_TEST(fs::portable_posix_name(std::string(".foo"))); + BOOST_TEST(fs::windows_name(std::string(".foo"))); + BOOST_TEST(!fs::portable_name(std::string(".foo"))); + BOOST_TEST(!fs::portable_directory_name(std::string(".foo"))); + BOOST_TEST(!fs::portable_file_name(std::string(".foo"))); + + BOOST_TEST(fs::portable_posix_name(std::string("foo."))); + BOOST_TEST(!fs::windows_name(std::string("foo."))); + BOOST_TEST(!fs::portable_name(std::string("foo."))); + BOOST_TEST(!fs::portable_directory_name(std::string("foo."))); + BOOST_TEST(!fs::portable_file_name(std::string("foo."))); + } + + // replace_extension_tests ---------------------------------------------------------// + + void replace_extension_tests() + { + std::cout << "replace_extension_tests..." << std::endl; + + BOOST_TEST(path().replace_extension().empty()); + BOOST_TEST(path().replace_extension("a").empty()); + BOOST_TEST(path().replace_extension("a.") == "."); + BOOST_TEST(path().replace_extension("a.txt") == ".txt"); + // see the rationale in html docs for explanation why this works: + BOOST_TEST(path().replace_extension(".txt") == ".txt"); + + BOOST_TEST(path("a.txt").replace_extension() == "a"); + BOOST_TEST(path("a.txt").replace_extension("") == "a"); + BOOST_TEST(path("a.txt").replace_extension(".") == "a."); + BOOST_TEST(path("a.txt").replace_extension(".tex") == "a.tex"); + BOOST_TEST(path("a.txt").replace_extension("tex") == "a"); + BOOST_TEST(path("a.").replace_extension(".tex") == "a.tex"); + BOOST_TEST(path("a.").replace_extension("tex") == "a"); + BOOST_TEST(path("a").replace_extension(".txt") == "a.txt"); + BOOST_TEST(path("a").replace_extension("txt") == "a"); + BOOST_TEST(path("a.b.txt").replace_extension(".tex") == "a.b.tex"); + BOOST_TEST(path("a.b.txt").replace_extension("tex") == "a.b"); + BOOST_TEST(path("a/b").replace_extension(".c") == "a/b.c"); + PATH_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702 + } + + // make_preferred_tests ------------------------------------------------------------// + + void make_preferred_tests() + { + std::cout << "make_preferred_tests..." << std::endl; + + if (platform == "Windows") + { + BOOST_TEST(path("//abc\\def/ghi").make_preferred().native() + == path("\\\\abc\\def\\ghi").native()); + } + else + { + BOOST_TEST(path("//abc\\def/ghi").make_preferred().native() + == path("//abc\\def/ghi").native()); + } + } + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// // +// main // +// // +//--------------------------------------------------------------------------------------// + +int cpp_main(int, char*[]) +{ + // The choice of platform is make at runtime rather than compile-time + // so that compile errors for all platforms will be detected even though + // only the current platform is runtime tested. + platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin") + ? "Windows" + : "POSIX"; + std::cout << "Platform is " << platform << '\n'; + + BOOST_TEST(p1.string() != p3.string()); + p3 = p2; + BOOST_TEST(p1.string() == p3.string()); + + path p4("foobar"); + BOOST_TEST(p4.string() == "foobar"); + p4 = p4; // self-assignment + BOOST_TEST(p4.string() == "foobar"); + + construction_tests(); + append_tests(); + self_assign_and_append_tests(); + overload_tests(); + query_and_decomposition_tests(); + composition_tests(); + iterator_tests(); + non_member_tests(); + exception_tests(); + name_function_tests(); + replace_extension_tests(); + make_preferred_tests(); + + // verify deprecated names still available + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + + p1.branch_path(); + p1.leaf(); + path p_remove_leaf; + p_remove_leaf.remove_leaf(); + +# endif + + std::string s1("//:somestring"); // this used to be treated specially + + // check the path member templates + p5.assign(s1.begin(), s1.end()); + + PATH_TEST_EQ(p5.string(), "//:somestring"); + p5 = s1; + PATH_TEST_EQ(p5.string(), "//:somestring"); + + // this code, courtesy of David Whetstone, detects a now fixed bug that + // derefereced the end iterator (assuming debug build with checked itors) + std::vector v1; + p5.assign(v1.begin(), v1.end()); + std::string s2(v1.begin(), v1.end()); + PATH_TEST_EQ(p5.string(), s2); + p5.assign(s1.begin(), s1.begin() + 1); + PATH_TEST_EQ(p5.string(), "/"); + + BOOST_TEST(p1 != p4); + BOOST_TEST(p1.string() == p2.string()); + BOOST_TEST(p1.string() == p3.string()); + BOOST_TEST(path("foo").filename() == "foo"); + BOOST_TEST(path("foo").parent_path().string() == ""); + BOOST_TEST(p1.filename() == "fum"); + BOOST_TEST(p1.parent_path().string() == "fe/fi/fo"); + BOOST_TEST(path("").empty() == true); + BOOST_TEST(path("foo").empty() == false); + + // inserter and extractor tests +# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // bypass VC++ 7.0 and earlier + std::cout << "\nInserter and extractor test..."; + std::stringstream ss; + ss << fs::path("foo/bar") << std::endl; + fs::path round_trip; + ss >> round_trip; + BOOST_TEST(round_trip.string() == "foo/bar"); + std::cout << round_trip.string() << "..." << round_trip << " complete\n"; +# endif + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/path_unit_test.cpp b/external/libs/filesystem/v3/test/path_unit_test.cpp new file mode 100644 index 0000000..0e2536b --- /dev/null +++ b/external/libs/filesystem/v3/test/path_unit_test.cpp @@ -0,0 +1,1037 @@ +// filesystem path_unit_test.cpp --------------------------------------------------- // + +// Copyright Beman Dawes 2008, 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +// ---------------------------------------------------------------------------------- // +// +// The purpose of this test is to ensure that each function in the public +// interface can be called with arguments of the appropriate types. It does +// not attempt to verify that the full range of values for each argument +// are processed correctly. +// +// For full functionality tests, including probes with many different argument +// values, see path_test.cpp and other test programs. +// +// ---------------------------------------------------------------------------------- // + +#define BOOST_FILESYSTEM_VERSION 3 + +#include + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +#include + +// See deprecated_test for tests of deprecated features +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +# define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include // for imbue tests +#include "test_codecvt.hpp" // for codecvt arg tests +#include +#include +#include // used constructor tests +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fs = boost::filesystem; +namespace bs = boost::system; +using boost::filesystem::path; +using std::cout; +using std::endl; +using std::string; +using std::wstring; + +#define CHECK(x) check(x, __FILE__, __LINE__) +#define PATH_IS(a, b) check_path(a, b, __FILE__, __LINE__) +#define NATIVE_IS(p, s, ws) check_native(p, s, ws, __FILE__, __LINE__) +#define IS(a,b) check_equal(a, b, __FILE__, __LINE__) + +#if defined(_MSC_VER) +# pragma warning(push) // Save warning settings. +# pragma warning(disable : 4428) // Disable universal-character-name encountered in source warning. +#endif + +namespace +{ + + boost::system::error_code ec; + const boost::system::error_code ok; + const boost::system::error_code ng(-1, boost::system::system_category()); + + std::string platform(BOOST_PLATFORM); + + void check_path(const path& source, + const wstring& expected, const char* file, int line) + { + if (source == expected) return; + + ++::boost::detail::test_errors(); + + std::cout << file; + std::wcout << L'(' << line << L"): source.wstring(): \"" + << source.wstring() + << L"\" != expected: \"" << expected + << L"\"\n" ; + } + +# ifdef BOOST_WINDOWS_API + void check_native(const path& p, + const string&, const wstring& expected, const char* file, int line) +# else + void check_native(const path& p, + const string& expected, const wstring&, const char* file, int line) +# endif + { + if (p.native() == expected) return; + + ++::boost::detail::test_errors(); + + std::cout << file << '(' << line << "): native() is not equal expected\n" + " native---: " << std::hex; + path::string_type nat(p.native()); + for (path::string_type::const_iterator it = nat.begin(); it != nat.end(); ++it) + std::cout << long(*it) << ' '; + std::cout << "\n expected-: "; + for (path::string_type::const_iterator it = expected.begin(); it != expected.end(); ++it) + std::cout << long(*it) << ' '; + std::cout << std::dec << std::endl; + } + + template< class T1, class T2 > + void check_equal(const T1& value, + const T2& expected, const char* file, int line) + { + if (value == expected) return; + + ++::boost::detail::test_errors(); + + std::cout << file; + + std::wcout << L'(' << line << L"): value: \"" << value + << L"\" != expected: \"" << expected + << L"\"\n" ; + } + + void check(bool ok, const char* file, int line) + { + if (ok) return; + + ++::boost::detail::test_errors(); + + std::cout << file << '(' << line << "): test failed\n"; + } + + string s("string"); + wstring ws(L"wstring"); + std::list l; // see main() for initialization to s, t, r, i, n, g + std::list wl; // see main() for initialization to w, s, t, r, i, n, g + std::vector v; // see main() for initialization to f, u, z + std::vector wv; // see main() for initialization to w, f, u, z + + class Base {}; + class Derived : public Base {}; + void fun(const boost::filesystem::path&) {} + void fun(const boost::shared_ptr< Base >&) {} + + // test_constructors ---------------------------------------------------------------// + + void test_constructors() + { + std::cout << "testing constructors..." << std::endl; + + path x0; // default constructor + PATH_IS(x0, L""); + BOOST_TEST_EQ(x0.native().size(), 0U); + + path x1(l.begin(), l.end()); // iterator range char + PATH_IS(x1, L"string"); + BOOST_TEST_EQ(x1.native().size(), 6U); + + path x2(x1); // copy constructor + PATH_IS(x2, L"string"); + BOOST_TEST_EQ(x2.native().size(), 6U); + + path x3(wl.begin(), wl.end()); // iterator range wchar_t + PATH_IS(x3, L"wstring"); + BOOST_TEST_EQ(x3.native().size(), 7U); + + // contiguous containers + path x4(string("std::string")); // std::string + PATH_IS(x4, L"std::string"); + BOOST_TEST_EQ(x4.native().size(), 11U); + + path x5(wstring(L"std::wstring")); // std::wstring + PATH_IS(x5, L"std::wstring"); + BOOST_TEST_EQ(x5.native().size(), 12U); + + path x4v(v); // std::vector + PATH_IS(x4v, L"fuz"); + BOOST_TEST_EQ(x4v.native().size(), 3U); + + path x5v(wv); // std::vector + PATH_IS(x5v, L"wfuz"); + BOOST_TEST_EQ(x5v.native().size(), 4U); + + path x6("array char"); // array char + PATH_IS(x6, L"array char"); + BOOST_TEST_EQ(x6.native().size(), 10U); + + path x7(L"array wchar_t"); // array wchar_t + PATH_IS(x7, L"array wchar_t"); + BOOST_TEST_EQ(x7.native().size(), 13U); + + char char_array[100]; + std::strcpy(char_array, "big array char"); + path x6o(char_array); // array char, only partially full + PATH_IS(x6o, L"big array char"); + BOOST_TEST_EQ(x6o.native().size(), 14U); + + wchar_t wchar_array[100]; + std::wcscpy(wchar_array, L"big array wchar_t"); + path x7o(wchar_array); // array char, only partially full + PATH_IS(x7o, L"big array wchar_t"); + BOOST_TEST_EQ(x7o.native().size(), 17U); + + path x8(s.c_str()); // const char* null terminated + PATH_IS(x8, L"string"); + BOOST_TEST_EQ(x8.native().size(), 6U); + + path x9(ws.c_str()); // const wchar_t* null terminated + PATH_IS(x9, L"wstring"); + BOOST_TEST_EQ(x9.native().size(), 7U); + + // non-contiguous containers + path x10(l); // std::list + PATH_IS(x10, L"string"); + BOOST_TEST_EQ(x10.native().size(), 6U); + + path xll(wl); // std::list + PATH_IS(xll, L"wstring"); + BOOST_TEST_EQ(xll.native().size(), 7U); + + // easy-to-make coding errors + // path e1(x0, path::codecvt()); // fails to compile, and that is OK + + boost::shared_ptr< Derived > pDerived( new Derived() ); + fun( pDerived ); // tests constructor member template enable_if working correctly; + // will fail to compile if enable_if not taking path off the table + } + + path x; + path y; + + // test_assignments ----------------------------------------------------------------// + + void test_assignments() + { + std::cout << "testing assignments..." << std::endl; + + x = path("yet another path"); // another path + PATH_IS(x, L"yet another path"); + BOOST_TEST_EQ(x.native().size(), 16U); + + x = x; // self-assignment + PATH_IS(x, L"yet another path"); + BOOST_TEST_EQ(x.native().size(), 16U); + + x.assign(l.begin(), l.end()); // iterator range char + PATH_IS(x, L"string"); + + x.assign(wl.begin(), wl.end()); // iterator range wchar_t + PATH_IS(x, L"wstring"); + + x = string("std::string"); // container char + PATH_IS(x, L"std::string"); + + x = wstring(L"std::wstring"); // container wchar_t + PATH_IS(x, L"std::wstring"); + + x = "array char"; // array char + PATH_IS(x, L"array char"); + + x = L"array wchar"; // array wchar_t + PATH_IS(x, L"array wchar"); + + x = s.c_str(); // const char* null terminated + PATH_IS(x, L"string"); + + x = ws.c_str(); // const wchar_t* null terminated + PATH_IS(x, L"wstring"); + } + + // test_appends --------------------------------------------------------------------// + + void test_appends() + { + std::cout << "testing appends..." << std::endl; + +# ifdef BOOST_WINDOWS_API +# define BOOST_FS_FOO L"/foo\\" +# else // POSIX paths +# define BOOST_FS_FOO L"/foo/" +# endif + + x = "/foo"; + x /= path(""); // empty path + PATH_IS(x, L"/foo"); + + x = "/foo"; + x /= path("/"); // slash path + PATH_IS(x, L"/foo/"); + + x = "/foo"; + x /= path("/boo"); // slash path + PATH_IS(x, L"/foo/boo"); + + x = "/foo"; + x /= x; // self-append + PATH_IS(x, L"/foo/foo"); + + x = "/foo"; + x /= path("yet another path"); // another path + PATH_IS(x, BOOST_FS_FOO L"yet another path"); + + x = "/foo"; + x.append(l.begin(), l.end()); // iterator range char + PATH_IS(x, BOOST_FS_FOO L"string"); + + x = "/foo"; + x.append(wl.begin(), wl.end()); // iterator range wchar_t + PATH_IS(x, BOOST_FS_FOO L"wstring"); + + x = "/foo"; + x /= string("std::string"); // container char + PATH_IS(x, BOOST_FS_FOO L"std::string"); + + x = "/foo"; + x /= wstring(L"std::wstring"); // container wchar_t + PATH_IS(x, BOOST_FS_FOO L"std::wstring"); + + x = "/foo"; + x /= "array char"; // array char + PATH_IS(x, BOOST_FS_FOO L"array char"); + + x = "/foo"; + x /= L"array wchar"; // array wchar_t + PATH_IS(x, BOOST_FS_FOO L"array wchar"); + + x = "/foo"; + x /= s.c_str(); // const char* null terminated + PATH_IS(x, BOOST_FS_FOO L"string"); + + x = "/foo"; + x /= ws.c_str(); // const wchar_t* null terminated + PATH_IS(x, BOOST_FS_FOO L"wstring"); + } + + // test_observers ------------------------------------------------------------------// + + void test_observers() + { + std::cout << "testing observers..." << std::endl; + + path p0("abc"); + + CHECK(p0.native().size() == 3); + CHECK(p0.string() == "abc"); + CHECK(p0.string().size() == 3); + CHECK(p0.wstring() == L"abc"); + CHECK(p0.wstring().size() == 3); + +# ifdef BOOST_WINDOWS_API + + path p("abc\\def/ghi"); + + CHECK(std::wstring(p.c_str()) == L"abc\\def/ghi"); + + CHECK(p.string() == "abc\\def/ghi"); + CHECK(p.wstring() == L"abc\\def/ghi"); + + CHECK(p.generic_string() == "abc/def/ghi"); + CHECK(p.generic_wstring() == L"abc/def/ghi"); + + CHECK(p.generic_string() == "abc/def/ghi"); + CHECK(p.generic_string() == L"abc/def/ghi"); + CHECK(p.generic_string() == L"abc/def/ghi"); + +# else // BOOST_POSIX_API + + path p("abc\\def/ghi"); + + CHECK(string(p.c_str()) == "abc\\def/ghi"); + + CHECK(p.string() == "abc\\def/ghi"); + CHECK(p.wstring() == L"abc\\def/ghi"); + + CHECK(p.generic_string() == "abc\\def/ghi"); + CHECK(p.generic_wstring() == L"abc\\def/ghi"); + + CHECK(p.generic_string() == "abc\\def/ghi"); + CHECK(p.generic_string() == L"abc\\def/ghi"); + CHECK(p.generic_string() == "abc\\def/ghi"); + +# endif + } + + // test_relationals ----------------------------------------------------------------// + + void test_relationals() + { + std::cout << "testing relationals..." << std::endl; + + boost::hash hash; + +# ifdef BOOST_WINDOWS_API + // this is a critical use case to meet user expectations + CHECK(path("c:\\abc") == path("c:/abc")); + CHECK(hash(path("c:\\abc")) == hash(path("c:/abc"))); +# endif + + const path p("bar"); + const path p2("baz"); + + CHECK(!(p < p)); + CHECK(p < p2); + CHECK(!(p2 < p)); + CHECK(p < "baz"); + CHECK(p < string("baz")); + CHECK(p < L"baz"); + CHECK(p < wstring(L"baz")); + CHECK(!("baz" < p)); + CHECK(!(string("baz") < p)); + CHECK(!(L"baz" < p)); + CHECK(!(wstring(L"baz") < p)); + + CHECK(p == p); + CHECK(!(p == p2)); + CHECK(!(p2 == p)); + CHECK(p2 == "baz"); + CHECK(p2 == string("baz")); + CHECK(p2 == L"baz"); + CHECK(p2 == wstring(L"baz")); + CHECK("baz" == p2); + CHECK(string("baz") == p2); + CHECK(L"baz" == p2); + CHECK(wstring(L"baz") == p2); + + CHECK(hash(p) == hash(p)); + CHECK(hash(p) != hash(p2)); // Not strictly required, but desirable + + CHECK(!(p != p)); + CHECK(p != p2); + CHECK(p2 != p); + + CHECK(p <= p); + CHECK(p <= p2); + CHECK(!(p2 <= p)); + + CHECK(!(p > p)); + CHECK(!(p > p2)); + CHECK(p2 > p); + + CHECK(p >= p); + CHECK(!(p >= p2)); + CHECK(p2 >= p); +} + + // test_inserter_and_extractor -----------------------------------------------------// + + void test_inserter_and_extractor() + { + std::cout << "testing inserter and extractor..." << std::endl; + + path p1("foo bar"); // verify space in path roundtrips per ticket #3863 + path p2; + + std::stringstream ss; + + CHECK(p1 != p2); + ss << p1; + ss >> p2; + CHECK(p1 == p2); + + path wp1(L"foo bar"); + path wp2; + + std::wstringstream wss; + + CHECK(wp1 != wp2); + wss << wp1; + wss >> wp2; + CHECK(wp1 == wp2); + } + + // test_other_non_members ----------------------------------------------------------// + + void test_other_non_members() + { + std::cout << "testing other_non_members..." << std::endl; + + path p1("foo"); + path p2("bar"); + + // operator / + + CHECK(p1 / p2 == path("foo/bar").make_preferred()); + CHECK("foo" / p2 == path("foo/bar").make_preferred()); + CHECK(L"foo" / p2 == path("foo/bar").make_preferred()); + CHECK(string("foo") / p2 == path("foo/bar").make_preferred()); + CHECK(wstring(L"foo") / p2 == path("foo/bar").make_preferred()); + CHECK(p1 / "bar" == path("foo/bar").make_preferred()); + CHECK(p1 / L"bar" == path("foo/bar").make_preferred()); + CHECK(p1 / string("bar") == path("foo/bar").make_preferred()); + CHECK(p1 / wstring(L"bar") == path("foo/bar").make_preferred()); + + swap(p1, p2); + + CHECK(p1 == "bar"); + CHECK(p2 == "foo"); + + CHECK(path("").remove_filename() == ""); + CHECK(path("foo").remove_filename() == ""); + CHECK(path("foo/bar").remove_filename() == "foo"); + } + +// // test_modifiers ------------------------------------------------------------------// +// +// void test_modifiers() +// { +// std::cout << "testing modifiers..." << std::endl; +// +// } + + // test_iterators ------------------------------------------------------------------// + + void test_iterators() + { + std::cout << "testing iterators..." << std::endl; + + path p1; + CHECK(p1.begin() == p1.end()); + + path p2("/"); + CHECK(p2.begin() != p2.end()); + CHECK(*p2.begin() == "/"); + CHECK(++p2.begin() == p2.end()); + + path p3("foo/bar/baz"); + + path::iterator it(p3.begin()); + CHECK(p3.begin() != p3.end()); + CHECK(*it == "foo"); + CHECK(*++it == "bar"); + CHECK(*++it == "baz"); + CHECK(*--it == "bar"); + CHECK(*--it == "foo"); + CHECK(*++it == "bar"); + CHECK(*++it == "baz"); + CHECK(++it == p3.end()); + } + + // test_modifiers ------------------------------------------------------------------// + + void test_modifiers() + { + std::cout << "testing modifiers..." << std::endl; + + } + + // test_decompositions -------------------------------------------------------------// + + void test_decompositions() + { + std::cout << "testing decompositions..." << std::endl; + + CHECK(path("").root_name().string() == ""); + CHECK(path("foo").root_name().string() == ""); + CHECK(path("/").root_name().string() == ""); + CHECK(path("/foo").root_name().string() == ""); + CHECK(path("//netname").root_name().string() == "//netname"); + CHECK(path("//netname/foo").root_name().string() == "//netname"); + + CHECK(path("").root_directory().string() == ""); + CHECK(path("foo").root_directory().string() == ""); + CHECK(path("/").root_directory().string() == "/"); + CHECK(path("/foo").root_directory().string() == "/"); + CHECK(path("//netname").root_directory().string() == ""); + CHECK(path("//netname/foo").root_directory().string() == "/"); + + CHECK(path("").root_path().string() == ""); + CHECK(path("/").root_path().string() == "/"); + CHECK(path("/foo").root_path().string() == "/"); + CHECK(path("//netname").root_path().string() == "//netname"); + CHECK(path("//netname/foo").root_path().string() == "//netname/"); + +# ifdef BOOST_WINDOWS_API + CHECK(path("c:/foo").root_path().string() == "c:/"); +# endif + + CHECK(path("").relative_path().string() == ""); + CHECK(path("/").relative_path().string() == ""); + CHECK(path("/foo").relative_path().string() == "foo"); + + CHECK(path("").parent_path().string() == ""); + CHECK(path("/").parent_path().string() == ""); + CHECK(path("/foo").parent_path().string() == "/"); + CHECK(path("/foo/bar").parent_path().string() == "/foo"); + + CHECK(path("/foo/bar/baz.zoo").filename().string() == "baz.zoo"); + + CHECK(path("/foo/bar/baz.zoo").stem().string() == "baz"); + CHECK(path("/foo/bar.woo/baz").stem().string() == "baz"); + + CHECK(path("foo.bar.baz.tar.bz2").extension().string() == ".bz2"); + CHECK(path("/foo/bar/baz.zoo").extension().string() == ".zoo"); + CHECK(path("/foo/bar.woo/baz").extension().string() == ""); + } + + // test_queries --------------------------------------------------------------------// + + void test_queries() + { + std::cout << "testing queries..." << std::endl; + + path p1(""); + path p2("//netname/foo.doo"); + + CHECK(p1.empty()); + CHECK(!p1.has_root_path()); + CHECK(!p1.has_root_name()); + CHECK(!p1.has_root_directory()); + CHECK(!p1.has_relative_path()); + CHECK(!p1.has_parent_path()); + CHECK(!p1.has_filename()); + CHECK(!p1.has_stem()); + CHECK(!p1.has_extension()); + CHECK(!p1.is_absolute()); + CHECK(p1.is_relative()); + + CHECK(!p2.empty()); + CHECK(p2.has_root_path()); + CHECK(p2.has_root_name()); + CHECK(p2.has_root_directory()); + CHECK(p2.has_relative_path()); + CHECK(p2.has_parent_path()); + CHECK(p2.has_filename()); + CHECK(p2.has_stem()); + CHECK(p2.has_extension()); + CHECK(p2.is_absolute()); + CHECK(!p2.is_relative()); + + } + + // test_imbue_locale ---------------------------------------------------------------// + + void test_imbue_locale() + { + std::cout << "testing imbue locale..." << std::endl; + + // weak test case for before/after states since we don't know what characters the + // default locale accepts. + path before("abc"); + + // So that tests are run with known encoding, use Boost UTF-8 codecvt + // \u2722 and \xE2\x9C\xA2 are UTF-16 and UTF-8 FOUR TEARDROP-SPOKED ASTERISK + + std::locale global_loc = std::locale(); + std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet); + std::cout << " imbuing locale ..." << std::endl; + std::locale old_loc = path::imbue(loc); + + std::cout << " testing with the imbued locale ..." << std::endl; + path p2("\xE2\x9C\xA2"); + CHECK(p2 == L"\u2722"); + CHECK(p2.wstring() == L"\u2722"); + + std::cout << " imbuing the original locale ..." << std::endl; + path::imbue(old_loc); + + std::cout << " testing with the original locale ..." << std::endl; + path after("abc"); + CHECK(before == after); + + std::cout << " locale testing complete" << std::endl; + } + + // test_codecvt_argument -----------------------------------------------------------// + + void test_codecvt_argument() + { + std::cout << "testing codecvt arguments..." << std::endl; + + const char * c1 = "a1"; + const std::string s1(c1); + const std::wstring ws1(L"b2"); // off-by-one mimics test_codecvt + const std::string s2("y8"); + const std::wstring ws2(L"z9"); + + test_codecvt cvt; // produces off-by-one values that will always differ from + // the system's default locale codecvt facet + + int t = 0; + + // constructors + std::cout << " constructors test " << ++t << std::endl; + path p(c1, cvt); + NATIVE_IS(p, s1, ws1); + + std::cout << " test " << ++t << std::endl; + path p1(s1.begin(), s1.end(), cvt); + NATIVE_IS(p1, s1, ws1); + + std::cout << " test " << ++t << std::endl; + path p2(ws2, cvt); + NATIVE_IS(p2, s2, ws2); + + std::cout << " test " << ++t << std::endl; + path p3(ws2.begin(), ws2.end(), cvt); + NATIVE_IS(p3, s2, ws2); + + // path p2(p1, cvt); // fails to compile, and that is OK + + // assigns + p1.clear(); + std::cout << " assigns test " << ++t << std::endl; + p1.assign(s1,cvt); + NATIVE_IS(p1, s1, ws1); + p1.clear(); + std::cout << " test " << ++t << std::endl; + p1.assign(s1.begin(), s1.end(), cvt); + NATIVE_IS(p1, s1, ws1); + // p1.assign(p, cvt); // fails to compile, and that is OK + + // appends + p1.clear(); + std::cout << " appends test " << ++t << std::endl; + p1.append(s1,cvt); + NATIVE_IS(p1, s1, ws1); + p1.clear(); + std::cout << " test " << ++t << std::endl; + p1.append(s1.begin(), s1.end(), cvt); + NATIVE_IS(p1, s1, ws1); + // p1.append(p, cvt); // fails to compile, and that is OK + + // native observers + std::cout << " native observers test " << ++t << std::endl; + CHECK(p.string(cvt) == s1); + std::cout << " test " << ++t << std::endl; + CHECK(p.string(cvt) == s1); + std::cout << " test " << ++t << std::endl; + CHECK(p.string(cvt) == ws1); + std::cout << " test " << ++t << std::endl; + CHECK(p.wstring(cvt) == ws1); + + // generic observers + std::cout << " generic observers test " << ++t << std::endl; + CHECK(p.generic_string(cvt) == s1); + std::cout << " test " << ++t << std::endl; + CHECK(p.generic_string(cvt) == s1); + std::cout << " test " << ++t << std::endl; + CHECK(p.generic_string(cvt) == ws1); + std::cout << " test " << ++t << std::endl; + CHECK(p.generic_wstring(cvt) == ws1); + + std::cout << " codecvt arguments testing complete" << std::endl; + } + + // test_overloads ------------------------------------------------------------------// + + void test_overloads() + { + std::cout << "testing overloads..." << std::endl; + std::string s("hello"); + const char a[] = "goodbye"; + path p1(s); + path p2(s.c_str()); + path p3(a); + path p4("foo"); + + std::wstring ws(L"hello"); + const wchar_t wa[] = L"goodbye"; + path wp1(ws); + path wp2(ws.c_str()); + path wp3(wa); + path wp4(L"foo"); + } + + // test_error_handling -------------------------------------------------------------// + + class error_codecvt + : public std::codecvt< wchar_t, char, std::mbstate_t > + { + public: + explicit error_codecvt() + : std::codecvt() {} + protected: + + virtual bool do_always_noconv() const throw() { return false; } + virtual int do_encoding() const throw() { return 0; } + + virtual std::codecvt_base::result do_in(std::mbstate_t&, + const char*, const char*, const char*&, + wchar_t*, wchar_t*, wchar_t*&) const + { + static std::codecvt_base::result r = std::codecvt_base::noconv; + if (r == std::codecvt_base::partial) r = std::codecvt_base::error; + else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv; + else r = std::codecvt_base::partial; + return r; + } + + virtual std::codecvt_base::result do_out(std::mbstate_t &, + const wchar_t*, const wchar_t*, const wchar_t*&, + char*, char*, char*&) const + { + static std::codecvt_base::result r = std::codecvt_base::noconv; + if (r == std::codecvt_base::partial) r = std::codecvt_base::error; + else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv; + else r = std::codecvt_base::partial; + return r; + } + + virtual std::codecvt_base::result do_unshift(std::mbstate_t&, + char*, char*, char* &) const { return ok; } + virtual int do_length(std::mbstate_t &, + const char*, const char*, std::size_t) const { return 0; } + virtual int do_max_length() const throw () { return 0; } + }; + + void test_error_handling() + { + std::cout << "testing error handling..." << std::endl; + + std::locale global_loc = std::locale(); + std::locale loc(global_loc, new error_codecvt); + std::cout << " imbuing error locale ..." << std::endl; + std::locale old_loc = path::imbue(loc); + + // These tests rely on a path constructor that fails in the locale conversion. + // Thus construction has to call codecvt. Force that by using a narrow string + // for Windows, and a wide string for POSIX. +# ifdef BOOST_WINDOWS_API +# define STRING_FOO_ "foo" +# else +# define STRING_FOO_ L"foo" +# endif + + { + std::cout << " testing std::codecvt_base::partial error..." << std::endl; + bool exception_thrown (false); + try { path(STRING_FOO_); } + catch (const bs::system_error & ex) + { + exception_thrown = true; + BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::partial, + fs::codecvt_error_category())); + } + catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; } + BOOST_TEST(exception_thrown); + } + + { + std::cout << " testing std::codecvt_base::error error..." << std::endl; + bool exception_thrown (false); + try { path(STRING_FOO_); } + catch (const bs::system_error & ex) + { + exception_thrown = true; + BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::error, + fs::codecvt_error_category())); + } + catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; } + BOOST_TEST(exception_thrown); + } + + { + std::cout << " testing std::codecvt_base::noconv error..." << std::endl; + bool exception_thrown (false); + try { path(STRING_FOO_); } + catch (const bs::system_error & ex) + { + exception_thrown = true; + BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::noconv, + fs::codecvt_error_category())); + } + catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; } + BOOST_TEST(exception_thrown); + } + + std::cout << " restoring original locale ..." << std::endl; + path::imbue(old_loc); + std::cout << " testing error handling complete" << std::endl; + } + +# if 0 + +// // test_locales --------------------------------------------------------------------// +// +// void test_locales() +// { +// std::cout << "testing locales..." << std::endl; +// +// } + + // test_user_supplied_type ---------------------------------------------------------// + + typedef std::basic_string user_string; + +} // unnamed namespace + +namespace boost +{ +namespace filesystem +{ + namespace path_traits + { + template<> struct is_iterator { static const bool value = true; }; + template<> struct is_iterator { static const bool value = true; }; + template<> struct is_iterator { static const bool value = true; }; + template<> struct is_iterator { static const bool value = true; }; + template<> struct is_container { static const bool value = true; }; + + template<> + void append(const user_string::value_type * begin, + const user_string::value_type * end, string_type & target, system::error_code & ec) + { + for (; begin != end && *begin; ++begin) + target += *begin + 1; // change so that results distinguishable from char cvts + } + +# ifdef __GNUC__ + // This specialization shouldn't be needed, and VC++, Intel, and others work + // fine without it. But gcc 4.3.2, and presumably other versions, need it. + template<> + void append(const user_string::value_type * begin, + string_type & target, system::error_code & ec) + { + path_traits::append(begin, + static_cast(0), target, ec); + } +# endif + + template<> + user_string convert(const string_type & source, + system::error_code & ec) + { + user_string temp; + for (string_type::const_iterator it = source.begin(); + it != source.end(); ++it) + temp += *it - 1; + return temp; + } + } // namespace path_traits +} // namespace filesystem +} // namespace boost + +namespace +{ + + void test_user_supplied_type() + { + std::cout << "testing user supplied type..." << std::endl; + + user_string::value_type usr_c_str[] = { 'a', 'b', 'c', 0 }; + user_string usr(usr_c_str); + + path p1(usr.c_str()); + CHECK(p1 == path("bcd")); + CHECK(p1 == "bcd"); + user_string s1(p1.string()); + CHECK(s1 == usr); + } + +# endif + +} // unnamed namespace + +//--------------------------------------------------------------------------------------// +// // +// main // +// // +//--------------------------------------------------------------------------------------// + +int cpp_main(int, char*[]) +{ +// document state of critical macros +#ifdef BOOST_POSIX_API + cout << "BOOST_POSIX_API" << endl; +#endif +#ifdef BOOST_WINDOWS_API + cout << "BOOST_WINDOWS_API" << endl; +#endif + + l.push_back('s'); + l.push_back('t'); + l.push_back('r'); + l.push_back('i'); + l.push_back('n'); + l.push_back('g'); + + wl.push_back(L'w'); + wl.push_back(L's'); + wl.push_back(L't'); + wl.push_back(L'r'); + wl.push_back(L'i'); + wl.push_back(L'n'); + wl.push_back(L'g'); + + v.push_back('f'); + v.push_back('u'); + v.push_back('z'); + + wv.push_back(L'w'); + wv.push_back(L'f'); + wv.push_back(L'u'); + wv.push_back(L'z'); + + test_overloads(); + test_constructors(); + test_assignments(); + test_appends(); + test_modifiers(); + test_observers(); + test_relationals(); + test_inserter_and_extractor(); + test_other_non_members(); + test_iterators(); + test_decompositions(); + test_queries(); + test_imbue_locale(); + test_codecvt_argument(); + test_error_handling(); + +# if 0 + + test_user_supplied_type(); + +#endif + + std::string foo("\\abc"); + const char* bar = "/abc"; + + if (foo == bar) + cout << "unintended consequence\n"; + + return ::boost::report_errors(); +} diff --git a/external/libs/filesystem/v3/test/test_codecvt.hpp b/external/libs/filesystem/v3/test/test_codecvt.hpp new file mode 100644 index 0000000..32b2d36 --- /dev/null +++ b/external/libs/filesystem/v3/test/test_codecvt.hpp @@ -0,0 +1,79 @@ +// test_codecvt.hpp ------------------------------------------------------------------// + +// Copyright Beman Dawes 2009, 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +#ifndef BOOST_FILESYSTEM3_TEST_CODECVT_HPP +#define BOOST_FILESYSTEM3_TEST_CODECVT_HPP + +#include +#include +#include // for mbstate_t + + //------------------------------------------------------------------------------------// + // // + // class test_codecvt // + // // + // Warning: partial implementation; even do_in and do_out only partially meet the // + // standard library specifications as the "to" buffer must hold the entire result. // + // // + // The value of a wide character is the value of the corresponding narrow character // + // plus 1. This ensures that compares against expected values will fail if the // + // code conversion did not occur as expected. // + // // + //------------------------------------------------------------------------------------// + + class test_codecvt + : public std::codecvt< wchar_t, char, std::mbstate_t > + { + public: + explicit test_codecvt() + : std::codecvt() {} + protected: + + virtual bool do_always_noconv() const throw() { return false; } + + virtual int do_encoding() const throw() { return 0; } + + virtual std::codecvt_base::result do_in(std::mbstate_t&, + const char* from, const char* from_end, const char*& from_next, + wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const + { + for (; from != from_end && to != to_end; ++from, ++to) + *to = *from + 1; + if (to == to_end) + return error; + *to = L'\0'; + from_next = from; + to_next = to; + return ok; + } + + virtual std::codecvt_base::result do_out(std::mbstate_t&, + const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next, + char* to, char* to_end, char*& to_next) const + { + for (; from != from_end && to != to_end; ++from, ++to) + *to = static_cast(*from - 1); + if (to == to_end) + return error; + *to = '\0'; + from_next = from; + to_next = to; + return ok; + } + + virtual std::codecvt_base::result do_unshift(std::mbstate_t&, + char* /*from*/, char* /*to*/, char* & /*next*/) const { return ok; } + + virtual int do_length(std::mbstate_t&, + const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const { return 0; } + + virtual int do_max_length() const throw () { return 0; } + }; + +#endif // BOOST_FILESYSTEM3_TEST_CODECVT_HPP diff --git a/external/libs/filesystem/v3/test/windows_attributes.cpp b/external/libs/filesystem/v3/test/windows_attributes.cpp new file mode 100644 index 0000000..e1a686c --- /dev/null +++ b/external/libs/filesystem/v3/test/windows_attributes.cpp @@ -0,0 +1,108 @@ +// windows_attributes ----------------------------------------------------------------// + +// Copyright Beman Dawes 2010 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Library home page: http://www.boost.org/libs/filesystem + +//--------------------------------------------------------------------------------------// + +// Useful for debugging status related issues // + +//--------------------------------------------------------------------------------------// + +#include +#include +#include +#include +#include +#include +#include + +using std::make_pair; +namespace fs = boost::filesystem; + +int cpp_main( int argc, char* argv[]) +{ + typedef std::map decode_type; + decode_type table; + + table.insert(make_pair(FILE_ATTRIBUTE_ARCHIVE, "FILE_ATTRIBUTE_ARCHIVE")); + table.insert(make_pair(FILE_ATTRIBUTE_COMPRESSED, "FILE_ATTRIBUTE_COMPRESSED")); + table.insert(make_pair(FILE_ATTRIBUTE_DEVICE, "FILE_ATTRIBUTE_DEVICE")); + table.insert(make_pair(FILE_ATTRIBUTE_DIRECTORY, "FILE_ATTRIBUTE_DIRECTORY")); + table.insert(make_pair(FILE_ATTRIBUTE_ENCRYPTED, "FILE_ATTRIBUTE_ENCRYPTED")); + table.insert(make_pair(FILE_ATTRIBUTE_HIDDEN, "FILE_ATTRIBUTE_HIDDEN")); + table.insert(make_pair(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, "FILE_ATTRIBUTE_NOT_CONTENT_INDEXED")); + table.insert(make_pair(FILE_ATTRIBUTE_OFFLINE, "FILE_ATTRIBUTE_OFFLINE")); + table.insert(make_pair(FILE_ATTRIBUTE_READONLY, "FILE_ATTRIBUTE_READONLY")); + table.insert(make_pair(FILE_ATTRIBUTE_REPARSE_POINT, "FILE_ATTRIBUTE_REPARSE_POINT")); + table.insert(make_pair(FILE_ATTRIBUTE_SPARSE_FILE, "FILE_ATTRIBUTE_SPARSE_FILE")); + table.insert(make_pair(FILE_ATTRIBUTE_SYSTEM, "FILE_ATTRIBUTE_SYSTEM")); + table.insert(make_pair(FILE_ATTRIBUTE_TEMPORARY, "FILE_ATTRIBUTE_TEMPORARY")); + table.insert(make_pair(FILE_ATTRIBUTE_VIRTUAL, "FILE_ATTRIBUTE_VIRTUAL")); + + if (argc < 2) + { + std::cout << "Usage: windows_attributes path\n"; + return 1; + } + + // report Win32 ::GetFileAttributesA() + + DWORD at(::GetFileAttributesA(argv[1])); + if (at == INVALID_FILE_ATTRIBUTES) + { + std::cout << "GetFileAttributes(\"" << argv[1] + << "\") returned INVALID_FILE_ATTRIBUTES\n"; + return 0; + } + + std::cout << "GetFileAttributes(\"" << argv[1] + << "\") returned "; + + bool bar = false; + for (decode_type::iterator it = table.begin(); it != table.end(); ++it) + { + if (!(it->first & at)) + continue; + if (bar) + std::cout << " | "; + bar = true; + std::cout << it->second; + at &= ~it->first; + } + std::cout << std::endl; + + if (at) + std::cout << "plus unknown attributes " << at << std::endl; + + // report Boost Filesystem file_type + + fs::file_status stat = fs::status(argv[1]); + + const char* types[] = + { + "status_error", + "file_not_found", + "regular_file", + "directory_file", + // the following may not apply to some operating systems or file systems + "symlink_file", + "block_file", + "character_file", + "fifo_file", + "socket_file", + "reparse_file", // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink + "type_unknown", // file does exist", but isn't one of the above types or + // we don't have strong enough permission to find its type + + "_detail_directory_symlink" // internal use only; never exposed to users + }; + + std::cout << "boost::filesystem::status().type() is " << types[stat.type()] << std::endl; + + return 0; +} diff --git a/external/libs/program_options/build/Jamfile.v2 b/external/libs/program_options/build/Jamfile.v2 new file mode 100644 index 0000000..4d43ee0 --- /dev/null +++ b/external/libs/program_options/build/Jamfile.v2 @@ -0,0 +1,19 @@ + +project boost/program_options + : source-location ../src + ; + +SOURCES = + cmdline config_file options_description parsers variables_map + value_semantic positional_options utf8_codecvt_facet + convert winmain split + ; + +lib boost_program_options + : $(SOURCES).cpp + : shared:BOOST_PROGRAM_OPTIONS_DYN_LINK=1 # tell source we're building dll's + : + : shared:BOOST_PROGRAM_OPTIONS_DYN_LINK=1 + ; + +boost-install boost_program_options ; diff --git a/external/libs/program_options/src/cmdline.cpp b/external/libs/program_options/src/cmdline.cpp new file mode 100644 index 0000000..be31385 --- /dev/null +++ b/external/libs/program_options/src/cmdline.cpp @@ -0,0 +1,656 @@ +// 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) + +#define BOOST_PROGRAM_OPTIONS_SOURCE +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +namespace boost { namespace program_options { + + using namespace std; + using namespace boost::program_options::command_line_style; + + invalid_syntax:: + invalid_syntax(const string& tokens, kind_t kind) + : error(error_message(kind).append(" in '").append(tokens).append("'")) + , m_tokens(tokens) + , m_kind(kind) + {} + + string + invalid_syntax::error_message(kind_t kind) + { + // Initially, store the message in 'const char*' variable, + // to avoid conversion to string in all cases. + const char* msg; + switch(kind) + { + case long_not_allowed: + msg = "long options are not allowed"; + break; + case long_adjacent_not_allowed: + msg = "parameters adjacent to long options not allowed"; + break; + case short_adjacent_not_allowed: + msg = "parameters adjust to short options are not allowed"; + break; + case empty_adjacent_parameter: + msg = "adjacent parameter is empty"; + break; + case missing_parameter: + msg = "required parameter is missing"; + break; + case extra_parameter: + msg = "extra parameter"; + break; + case unrecognized_line: + msg = "unrecognized line"; + break; + default: + msg = "unknown error"; + } + return msg; + } + + invalid_syntax::kind_t + invalid_syntax::kind() const + { + return m_kind; + } + + const string& + invalid_syntax::tokens() const + { + return m_tokens; + } + + invalid_command_line_syntax:: + invalid_command_line_syntax(const string& tokens, kind_t kind) + : invalid_syntax(tokens, kind) + {} + +}} + + +namespace boost { namespace program_options { namespace detail { + + // vc6 needs this, but borland chokes when this is added. +#if BOOST_WORKAROUND(_MSC_VER, < 1300) + using namespace std; + using namespace program_options; +#endif + + + cmdline::cmdline(const vector& args) + { + init(args); + } + + cmdline::cmdline(int argc, const char*const * argv) + { +#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) + vector args; + copy(argv+1, argv+argc+!argc, inserter(args, args.end())); + init(args); +#else + init(vector(argv+1, argv+argc+!argc)); +#endif + } + + void + cmdline::init(const vector& args) + { + this->args = args; + m_style = command_line_style::default_style; + m_desc = 0; + m_positional = 0; + m_allow_unregistered = false; + } + + void + cmdline::style(int style) + { + if (style == 0) + style = default_style; + + check_style(style); + this->m_style = style_t(style); + } + + void + cmdline::allow_unregistered() + { + this->m_allow_unregistered = true; + } + + void + cmdline::check_style(int style) const + { + bool allow_some_long = + (style & allow_long) || (style & allow_long_disguise); + + const char* error = 0; + if (allow_some_long && + !(style & long_allow_adjacent) && !(style & long_allow_next)) + error = "style disallows parameters for long options"; + + if (!error && (style & allow_short) && + !(style & short_allow_adjacent) && !(style & short_allow_next)) + error = "style disallows parameters for short options"; + + if (!error && (style & allow_short) && + !(style & allow_dash_for_short) && !(style & allow_slash_for_short)) + error = "style disallows all characters for short options"; + + if (error) + boost::throw_exception(invalid_command_line_style(error)); + + // Need to check that if guessing and long disguise are enabled + // -f will mean the same as -foo + } + + bool + cmdline::is_style_active(style_t style) const + { + return ((m_style & style) ? true : false); + } + + void + cmdline::set_options_description(const options_description& desc) + { + m_desc = &desc; + } + + void + cmdline::set_positional_options( + const positional_options_description& positional) + { + m_positional = &positional; + } + + + vector

    ::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/external/boost/mpl/placeholders.hpp b/external/boost/mpl/placeholders.hpp new file mode 100644 index 0000000..c1a38d9 --- /dev/null +++ b/external/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. + +// $Id: placeholders.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include + +# 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 + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER placeholders.hpp +# include + +#else + +# include +# include +# include +# include + +// 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, )) +#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 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/external/boost/mpl/plus.hpp b/external/boost/mpl/plus.hpp new file mode 100644 index 0000000..79642eb --- /dev/null +++ b/external/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. + +// $Id: plus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME plus +#define AUX778076_OP_TOKEN + +#include + +#endif // BOOST_MPL_PLUS_HPP_INCLUDED diff --git a/external/boost/mpl/pop_back_fwd.hpp b/external/boost/mpl/pop_back_fwd.hpp new file mode 100644 index 0000000..4fba829 --- /dev/null +++ b/external/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. + +// $Id: pop_back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct pop_back_impl; +template< typename Sequence > struct pop_back; + +}} + +#endif // BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/pop_front_fwd.hpp b/external/boost/mpl/pop_front_fwd.hpp new file mode 100644 index 0000000..64d4c58 --- /dev/null +++ b/external/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. + +// $Id: pop_front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct pop_front_impl; +template< typename Sequence > struct pop_front; + +}} + +#endif // BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/prior.hpp b/external/boost/mpl/prior.hpp new file mode 100644 index 0000000..e08d967 --- /dev/null +++ b/external/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. + +// $Id: prior.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#endif // BOOST_MPL_PRIOR_HPP_INCLUDED diff --git a/external/boost/mpl/protect.hpp b/external/boost/mpl/protect.hpp new file mode 100644 index 0000000..4fad835 --- /dev/null +++ b/external/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. + +// $Id: protect.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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, N > + : arity +{ +}; +} // 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/external/boost/mpl/push_back.hpp b/external/boost/mpl/push_back.hpp new file mode 100644 index 0000000..96389a3 --- /dev/null +++ b/external/boost/mpl/push_back.hpp @@ -0,0 +1,53 @@ + +#ifndef BOOST_MPL_PUSH_BACK_HPP_INCLUDED +#define BOOST_MPL_PUSH_BACK_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::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::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/external/boost/mpl/push_back_fwd.hpp b/external/boost/mpl/push_back_fwd.hpp new file mode 100644 index 0000000..381aa29 --- /dev/null +++ b/external/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. + +// $Id: push_back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct push_back_impl; +template< typename Sequence, typename T > struct push_back; + +}} + +#endif // BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/push_front.hpp b/external/boost/mpl/push_front.hpp new file mode 100644 index 0000000..3c4283c --- /dev/null +++ b/external/boost/mpl/push_front.hpp @@ -0,0 +1,52 @@ + +#ifndef BOOST_MPL_PUSH_FRONT_HPP_INCLUDED +#define BOOST_MPL_PUSH_FRONT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::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::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/external/boost/mpl/push_front_fwd.hpp b/external/boost/mpl/push_front_fwd.hpp new file mode 100644 index 0000000..11123bf --- /dev/null +++ b/external/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. + +// $Id: push_front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct push_front_impl; +template< typename Sequence, typename T > struct push_front; + +}} + +#endif // BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/quote.hpp b/external/boost/mpl/quote.hpp new file mode 100644 index 0000000..52f67bf --- /dev/null +++ b/external/boost/mpl/quote.hpp @@ -0,0 +1,151 @@ + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED +#define BOOST_MPL_QUOTE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: quote.hpp 49272 2008-10-11 06:50:46Z agurtovoy $ +// $Date: 2008-10-11 02:50:46 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49272 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include +#include + +#if defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \ + && !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) +# 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 + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER quote.hpp +# include + +#else + +# include +# include +# include +# include + +# include +# include + +#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 +{ + typedef T type; +}; + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template< bool > struct quote_impl +{ + template< typename T > struct result_ + : T + { + }; +}; + +template<> struct quote_impl +{ + template< typename T > struct result_ + { + typedef T type; + }; +}; + +#endif + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, )) +#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_MPL_CFG_BCC590_WORKAROUNDS) + { + typedef typename quote_impl< + F< BOOST_MPL_PP_PARAMS(i_, U) > + , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value + >::type type; + }; +#elif !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/external/boost/mpl/remove_if.hpp b/external/boost/mpl/remove_if.hpp new file mode 100644 index 0000000..f707abd --- /dev/null +++ b/external/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. + +// $Id: remove_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include + +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::type + , identity + , apply2 + >::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::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::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/external/boost/mpl/reverse_fold.hpp b/external/boost/mpl/reverse_fold.hpp new file mode 100644 index 0000000..79b6ec7 --- /dev/null +++ b/external/boost/mpl/reverse_fold.hpp @@ -0,0 +1,50 @@ + +#ifndef BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED +#define BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: reverse_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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::value + , typename begin::type + , typename end::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/external/boost/mpl/same_as.hpp b/external/boost/mpl/same_as.hpp new file mode 100644 index 0000000..e95d55f --- /dev/null +++ b/external/boost/mpl/same_as.hpp @@ -0,0 +1,55 @@ + +#ifndef BOOST_MPL_SAME_AS_HPP_INCLUDED +#define BOOST_MPL_SAME_AS_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: same_as.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include + +#include + +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 + { +#else + { + typedef typename is_same::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 > + { +#else + { + typedef typename not_< is_same >::type type; +#endif + }; +}; + +}} + +#endif // BOOST_MPL_SAME_AS_HPP_INCLUDED diff --git a/external/boost/mpl/sequence_tag.hpp b/external/boost/mpl/sequence_tag.hpp new file mode 100644 index 0000000..41450ed --- /dev/null +++ b/external/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. + +// $Id: sequence_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include + +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 +{ + 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::value > + ::template result_ +{ +}; + +#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' + // 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 \ +{ \ + 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::value + , ::boost::mpl::aux::has_begin::value + >::template result2_ +{ +}; + +#endif // BOOST_MSVC + +BOOST_MPL_AUX_NA_SPEC(1, sequence_tag) + +}} + +#endif // BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED diff --git a/external/boost/mpl/sequence_tag_fwd.hpp b/external/boost/mpl/sequence_tag_fwd.hpp new file mode 100644 index 0000000..07d54a4 --- /dev/null +++ b/external/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. + +// $Id: sequence_tag_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +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/external/boost/mpl/size.hpp b/external/boost/mpl/size.hpp new file mode 100644 index 0000000..6ff2e65 --- /dev/null +++ b/external/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. + +// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace mpl { + +template< + typename BOOST_MPL_AUX_NA_PARAM(Sequence) + > +struct size + : aux::msvc_eti_base< + typename size_impl< typename sequence_tag::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/external/boost/mpl/size_fwd.hpp b/external/boost/mpl/size_fwd.hpp new file mode 100644 index 0000000..2bab816 --- /dev/null +++ b/external/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. + +// $Id: size_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< typename Tag > struct size_impl; +template< typename Sequence > struct size; + +}} + +#endif // BOOST_MPL_SIZE_FWD_HPP_INCLUDED diff --git a/external/boost/mpl/size_t.hpp b/external/boost/mpl/size_t.hpp new file mode 100644 index 0000000..e72d77f --- /dev/null +++ b/external/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. + +// $Id: size_t.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#define AUX_WRAPPER_VALUE_TYPE std::size_t +#define AUX_WRAPPER_NAME size_t +#define AUX_WRAPPER_PARAMS(N) std::size_t N + +#include + +#endif // BOOST_MPL_SIZE_T_HPP_INCLUDED diff --git a/external/boost/mpl/size_t_fwd.hpp b/external/boost/mpl/size_t_fwd.hpp new file mode 100644 index 0000000..84e903b --- /dev/null +++ b/external/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. + +// $Id: size_t_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include // make sure 'size_t' is placed into 'std' +#include + +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/external/boost/mpl/tag.hpp b/external/boost/mpl/tag.hpp new file mode 100644 index 0000000..747646c --- /dev/null +++ b/external/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. + +// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +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 + , aux::tag_impl + , Default + >::type +{ +#else +{ + typedef typename eval_if< + aux::has_tag + , aux::tag_impl + , Default + >::type type; + +#endif +}; + +}} + +#endif // BOOST_MPL_TAG_HPP_INCLUDED diff --git a/external/boost/mpl/times.hpp b/external/boost/mpl/times.hpp new file mode 100644 index 0000000..ea61eaf --- /dev/null +++ b/external/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. + +// $Id: times.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#define AUX778076_OP_NAME times +#define AUX778076_OP_TOKEN * +#include + +#endif // BOOST_MPL_TIMES_HPP_INCLUDED diff --git a/external/boost/mpl/vector.hpp b/external/boost/mpl/vector.hpp new file mode 100644 index 0000000..94858ff --- /dev/null +++ b/external/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. + +// $Id: vector.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +# include + +# include +# include +# include + +#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 + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector.hpp +# include + +#else + +# include + +# define AUX778076_SEQUENCE_NAME vector +# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE +# include + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_VECTOR_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/O1_size.hpp b/external/boost/mpl/vector/aux_/O1_size.hpp new file mode 100644 index 0000000..7697a24 --- /dev/null +++ b/external/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. + +// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +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 > +{ + template< typename Vector > struct apply + : mpl::long_ + { + }; +}; + +#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/external/boost/mpl/vector/aux_/at.hpp b/external/boost/mpl/vector/aux_/at.hpp new file mode 100644 index 0000000..c859f2d --- /dev/null +++ b/external/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. + +// $Id: at.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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::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 > +{ + 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::template result_ +{ +}; + +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +}} + +#endif // BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/back.hpp b/external/boost/mpl/vector/aux_/back.hpp new file mode 100644 index 0000000..4969e62 --- /dev/null +++ b/external/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. + +// $Id: back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +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::type::value + > + { + }; +}; + +#else + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< long n_ > +struct back_impl< aux::vector_tag > +{ + 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/external/boost/mpl/vector/aux_/begin_end.hpp b/external/boost/mpl/vector/aux_/begin_end.hpp new file mode 100644 index 0000000..f2bedf3 --- /dev/null +++ b/external/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. + +// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) + +# include +# include +# include + +namespace boost { namespace mpl { + +template<> +struct begin_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + { + typedef v_iter type; + }; +}; + +template<> +struct end_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + { + typedef v_iter type; + }; +}; + +}} + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +#endif // BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/clear.hpp b/external/boost/mpl/vector/aux_/clear.hpp new file mode 100644 index 0000000..5a5d2d0 --- /dev/null +++ b/external/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. + +// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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 > +{ + 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/external/boost/mpl/vector/aux_/empty.hpp b/external/boost/mpl/vector/aux_/empty.hpp new file mode 100644 index 0000000..8e76c3e --- /dev/null +++ b/external/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. + +// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +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 > +{ + 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/external/boost/mpl/vector/aux_/front.hpp b/external/boost/mpl/vector/aux_/front.hpp new file mode 100644 index 0000000..74b4c50 --- /dev/null +++ b/external/boost/mpl/vector/aux_/front.hpp @@ -0,0 +1,56 @@ + +#ifndef BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED +#define BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +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 + { + }; +}; + +#else + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< BOOST_MPL_AUX_NTTP_DECL(long, n_) > +struct front_impl< aux::vector_tag > +{ + 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_VECTOR_AUX_FRONT_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/include_preprocessed.hpp b/external/boost/mpl/vector/aux_/include_preprocessed.hpp new file mode 100644 index 0000000..247b6ed --- /dev/null +++ b/external/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. + +// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#include +#include + +#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/external/boost/mpl/vector/aux_/item.hpp b/external/boost/mpl/vector/aux_/item.hpp new file mode 100644 index 0000000..96002b9 --- /dev/null +++ b/external/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. + +// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +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::type upper_bound_; + typedef typename next::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 item_(index_); + using Base::item_; +}; + +template< + typename T + , typename Base + > +struct v_item + : Base +{ + typedef typename prior::type index_; + typedef index_ lower_bound_; + typedef typename next::type size; + typedef Base base; + typedef v_item type; + + static aux::type_wrapper item_(index_); + using Base::item_; +}; + +// "erasure" item +template< + typename Base + , int at_front + > +struct v_mask + : Base +{ + typedef typename prior::type index_; + typedef index_ upper_bound_; + typedef typename prior::type size; + typedef Base base; + typedef v_mask type; + + static aux::type_wrapper item_(index_); + using Base::item_; +}; + +template< + typename Base + > +struct v_mask + : Base +{ + typedef typename Base::lower_bound_ index_; + typedef typename next::type lower_bound_; + typedef typename prior::type size; + typedef Base base; + typedef v_mask type; + + static aux::type_wrapper item_(index_); + using Base::item_; +}; + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +}} + +#endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/iterator.hpp b/external/boost/mpl/vector/aux_/iterator.hpp new file mode 100644 index 0000000..5864aff --- /dev/null +++ b/external/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. + +// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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::type type; + + typedef Vector vector_; + typedef mpl::long_ pos; + +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + enum { + next_ = n_ + 1 + , prior_ = n_ - 1 + , pos_ = n_ + }; + + typedef v_iter next; + typedef v_iter prior; +#endif + +}; + + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< + typename Vector + , BOOST_MPL_AUX_NTTP_DECL(long, n_) + > +struct next< v_iter > +{ + typedef v_iter type; +}; + +template< + typename Vector + , BOOST_MPL_AUX_NTTP_DECL(long, n_) + > +struct prior< v_iter > +{ + typedef v_iter type; +}; + +template< + typename Vector + , BOOST_MPL_AUX_NTTP_DECL(long, n_) + , typename Distance + > +struct advance< v_iter,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, v_iter > + : mpl::long_<(m_ - n_)> +{ +}; + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template<> struct advance_impl +{ + 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 +{ + 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/external/boost/mpl/vector/aux_/numbered.hpp b/external/boost/mpl/vector/aux_/numbered.hpp new file mode 100644 index 0000000..0e5acc0 --- /dev/null +++ b/external/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. + +// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +#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 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 begin; + typedef v_iter end; +}; + +template<> +struct push_front_impl< aux::vector_tag > +{ + 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 > +{ + 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 > +{ + 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 > +{ + 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 +{ + typedef typename V::BOOST_PP_CAT(item,i_) type; +}; + +# else + +namespace aux { +template<> struct v_at_impl +{ + template< typename V_ > struct result_ + { + typedef typename V_::BOOST_PP_CAT(item,i_) type; + }; +}; +} + +template<> +struct at_impl< aux::vector_tag > +{ + template< typename V_, typename N > struct apply + { + typedef typename aux::v_at_impl + ::template result_::type type; + }; +}; + +#if i_ > 0 +template<> +struct front_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + { + typedef typename Vector::item0 type; + }; +}; + +template<> +struct back_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + { + typedef typename Vector::back type; + }; +}; + +template<> +struct empty_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + : false_ + { + }; +}; +#endif + +template<> +struct size_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + : long_ + { + }; +}; + +template<> +struct O1_size_impl< aux::vector_tag > + : size_impl< aux::vector_tag > +{ +}; + +template<> +struct clear_impl< aux::vector_tag > +{ + 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/external/boost/mpl/vector/aux_/numbered_c.hpp b/external/boost/mpl/vector/aux_/numbered_c.hpp new file mode 100644 index 0000000..dc13497 --- /dev/null +++ b/external/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. + +// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include + +#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) \ + /**/ + +#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 + , 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 \ + /**/ + +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/external/boost/mpl/vector/aux_/pop_back.hpp b/external/boost/mpl/vector/aux_/pop_back.hpp new file mode 100644 index 0000000..aa90216 --- /dev/null +++ b/external/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. + +// $Id: pop_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) + +# include +# include + +namespace boost { namespace mpl { + +template<> +struct pop_back_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + { + typedef v_mask type; + }; +}; + +}} + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +#endif // BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/pop_front.hpp b/external/boost/mpl/vector/aux_/pop_front.hpp new file mode 100644 index 0000000..854d1e7 --- /dev/null +++ b/external/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. + +// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) + +# include +# include + +namespace boost { namespace mpl { + +template<> +struct pop_front_impl< aux::vector_tag > +{ + template< typename Vector > struct apply + { + typedef v_mask type; + }; +}; + +}} + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +#endif // BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp new file mode 100644 index 0000000..c79a1ac --- /dev/null +++ b/external/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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp new file mode 100644 index 0000000..8b36f6a --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp new file mode 100644 index 0000000..eb92a78 --- /dev/null +++ b/external/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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp new file mode 100644 index 0000000..56ca53f --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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 + > +{ + typedef vector20_c type; + typedef T value_type; +}; + +}} diff --git a/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp new file mode 100644 index 0000000..a685019 --- /dev/null +++ b/external/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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp new file mode 100644 index 0000000..6251dbc --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp new file mode 100644 index 0000000..1ed648a --- /dev/null +++ b/external/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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp new file mode 100644 index 0000000..ba0ffa8 --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp new file mode 100644 index 0000000..3da323a --- /dev/null +++ b/external/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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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 + ::template result_::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/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp new file mode 100644 index 0000000..e07f2b3 --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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 + > +{ + typedef vector50_c type; + typedef T value_type; +}; + +}} diff --git a/external/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp new file mode 100644 index 0000000..88bbd3b --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp new file mode 100644 index 0000000..8b36f6a --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp new file mode 100644 index 0000000..8c6c8bb --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp new file mode 100644 index 0000000..56ca53f --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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 + > +{ + typedef vector20_c type; + typedef T value_type; +}; + +}} diff --git a/external/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp new file mode 100644 index 0000000..b7da8e7 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp new file mode 100644 index 0000000..6251dbc --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp new file mode 100644 index 0000000..7487be4 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp new file mode 100644 index 0000000..ba0ffa8 --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp new file mode 100644 index 0000000..5a4c6d7 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp new file mode 100644 index 0000000..e07f2b3 --- /dev/null +++ b/external/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 + > +{ + 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 + > +{ + 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 + > +{ + 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 + > +{ + typedef vector50_c type; + typedef T value_type; +}; + +}} diff --git a/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp new file mode 100644 index 0000000..e4c6407 --- /dev/null +++ b/external/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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp new file mode 100644 index 0000000..18eabc6 --- /dev/null +++ b/external/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 + > +{ + 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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp new file mode 100644 index 0000000..78ccac4 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp new file mode 100644 index 0000000..4bf6742 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp new file mode 100644 index 0000000..c404990 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp new file mode 100644 index 0000000..5741bb4 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp new file mode 100644 index 0000000..debcf70 --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp new file mode 100644 index 0000000..88d742e --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp new file mode 100644 index 0000000..8db06df --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp b/external/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp new file mode 100644 index 0000000..f56d6af --- /dev/null +++ b/external/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/external/boost/mpl/vector/aux_/push_back.hpp b/external/boost/mpl/vector/aux_/push_back.hpp new file mode 100644 index 0000000..b51c770 --- /dev/null +++ b/external/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. + +// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) + +# include +# include + +namespace boost { namespace mpl { + +template<> +struct push_back_impl< aux::vector_tag > +{ + template< typename Vector, typename T > struct apply + { + typedef v_item type; + }; +}; + +}} + +#endif + +#endif // BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/push_front.hpp b/external/boost/mpl/vector/aux_/push_front.hpp new file mode 100644 index 0000000..efa2aae --- /dev/null +++ b/external/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. + +// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) + +# include +# include + +namespace boost { namespace mpl { + +template<> +struct push_front_impl< aux::vector_tag > +{ + template< typename Vector, typename T > struct apply + { + typedef v_item type; + }; +}; + +}} + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +#endif // BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/size.hpp b/external/boost/mpl/vector/aux_/size.hpp new file mode 100644 index 0000000..bd40b54 --- /dev/null +++ b/external/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. + +// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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 > + : O1_size_impl< aux::vector_tag > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES + +}} + +#endif // BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED diff --git a/external/boost/mpl/vector/aux_/tag.hpp b/external/boost/mpl/vector/aux_/tag.hpp new file mode 100644 index 0000000..77d627b --- /dev/null +++ b/external/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. + +// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/vector/aux_/vector0.hpp b/external/boost/mpl/vector/aux_/vector0.hpp new file mode 100644 index 0000000..65c5544 --- /dev/null +++ b/external/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. + +// $Id: vector0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include + +#include +#include +#include + +namespace boost { namespace mpl { + +template< typename Dummy = na > struct vector0; + +template<> struct vector0 +{ +#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 item_(...); +#else + typedef aux::vector_tag<0> tag; + typedef vector0 type; + typedef void_ item0; + + typedef v_iter,0> begin; + typedef v_iter,0> end; +#endif +}; + +}} + +#endif // BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector0.hpp b/external/boost/mpl/vector/vector0.hpp new file mode 100644 index 0000000..249ecbb --- /dev/null +++ b/external/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. + +// $Id: vector0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector0_c.hpp b/external/boost/mpl/vector/vector0_c.hpp new file mode 100644 index 0000000..630af92 --- /dev/null +++ b/external/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. + +// $Id: vector0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include + +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/external/boost/mpl/vector/vector10.hpp b/external/boost/mpl/vector/vector10.hpp new file mode 100644 index 0000000..344c92c --- /dev/null +++ b/external/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. + +// $Id: vector10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector10.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(0, 10, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector10_c.hpp b/external/boost/mpl/vector/vector10_c.hpp new file mode 100644 index 0000000..05e97ad --- /dev/null +++ b/external/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. + +// $Id: vector10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector10_c.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(1, 10, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector20.hpp b/external/boost/mpl/vector/vector20.hpp new file mode 100644 index 0000000..ffa867e --- /dev/null +++ b/external/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. + +// $Id: vector20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector20.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(11, 20, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector20_c.hpp b/external/boost/mpl/vector/vector20_c.hpp new file mode 100644 index 0000000..cc13d51 --- /dev/null +++ b/external/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. + +// $Id: vector20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector20_c.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(11, 20, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector30.hpp b/external/boost/mpl/vector/vector30.hpp new file mode 100644 index 0000000..f54c61c --- /dev/null +++ b/external/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. + +// $Id: vector30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector30.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(21, 30, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector30_c.hpp b/external/boost/mpl/vector/vector30_c.hpp new file mode 100644 index 0000000..a8e3e60 --- /dev/null +++ b/external/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. + +// $Id: vector30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector30_c.hpp +# include + +#else + +# include +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(21, 30, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector40.hpp b/external/boost/mpl/vector/vector40.hpp new file mode 100644 index 0000000..2d24b6d --- /dev/null +++ b/external/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. + +// $Id: vector40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector40.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(31, 40, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector40_c.hpp b/external/boost/mpl/vector/vector40_c.hpp new file mode 100644 index 0000000..9179b26 --- /dev/null +++ b/external/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. + +// $Id: vector40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector40_c.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(31, 40, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector50.hpp b/external/boost/mpl/vector/vector50.hpp new file mode 100644 index 0000000..0050483 --- /dev/null +++ b/external/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. + +// $Id: vector50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector50.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(41, 50, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED diff --git a/external/boost/mpl/vector/vector50_c.hpp b/external/boost/mpl/vector/vector50_c.hpp new file mode 100644 index 0000000..0496742 --- /dev/null +++ b/external/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. + +// $Id: vector50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include +# include +#endif + +#include + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +# define BOOST_MPL_PREPROCESSED_HEADER vector50_c.hpp +# include + +#else + +# include +# include +# include + +namespace boost { namespace mpl { + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3,(41, 50, )) +# include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED diff --git a/external/boost/mpl/void.hpp b/external/boost/mpl/void.hpp new file mode 100644 index 0000000..f464acb --- /dev/null +++ b/external/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. + +// $Id: void.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include +#include +#include +#include +#include + +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_ + : 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_ + : 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/external/boost/mpl/void_fwd.hpp b/external/boost/mpl/void_fwd.hpp new file mode 100644 index 0000000..0dcd639 --- /dev/null +++ b/external/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. + +// $Id: void_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include + +BOOST_MPL_AUX_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/external/boost/next_prior.hpp b/external/boost/next_prior.hpp new file mode 100644 index 0000000..e1d2e42 --- /dev/null +++ b/external/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 + +namespace boost { + +// Helper functions for classes like bidirectional iterators not supporting +// operator+ and operator- +// +// Usage: +// const std::list::iterator p = get_some_iterator(); +// const std::list::iterator prev = boost::prior(p); +// const std::list::iterator next = boost::next(prev, 2); + +// Contributed by Dave Abrahams + +template +inline T next(T x) { return ++x; } + +template +inline T next(T x, Distance n) +{ + std::advance(x, n); + return x; +} + +template +inline T prior(T x) { return --x; } + +template +inline T prior(T x, Distance n) +{ + std::advance(x, -n); + return x; +} + +} // namespace boost + +#endif // BOOST_NEXT_PRIOR_HPP_INCLUDED diff --git a/external/boost/non_type.hpp b/external/boost/non_type.hpp new file mode 100644 index 0000000..896aed4 --- /dev/null +++ b/external/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 + struct non_type { }; + + +} + + +#endif // include guard diff --git a/external/boost/noncopyable.hpp b/external/boost/noncopyable.hpp new file mode 100644 index 0000000..7770bdb --- /dev/null +++ b/external/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/external/boost/none.hpp b/external/boost/none.hpp new file mode 100644 index 0000000..e9fc062 --- /dev/null +++ b/external/boost/none.hpp @@ -0,0 +1,28 @@ +// Copyright (C) 2003, 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) +// +// See http://www.boost.org/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +#ifndef BOOST_NONE_17SEP2003_HPP +#define BOOST_NONE_17SEP2003_HPP + +#include "boost/none_t.hpp" + +// NOTE: Borland users have to include this header outside any precompiled headers +// (bcc<=5.64 cannot include instance data in a precompiled header) +// -- * To be verified, now that there's no unnamed namespace + +namespace boost { + +none_t const none = (static_cast(0)) ; + +} // namespace boost + +#endif + diff --git a/external/boost/none_t.hpp b/external/boost/none_t.hpp new file mode 100644 index 0000000..63ad926 --- /dev/null +++ b/external/boost/none_t.hpp @@ -0,0 +1,24 @@ +// 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/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +#ifndef BOOST_NONE_T_17SEP2003_HPP +#define BOOST_NONE_T_17SEP2003_HPP + +namespace boost { + +namespace detail { struct none_helper{}; } + +typedef int detail::none_helper::*none_t ; + +} // namespace boost + +#endif + diff --git a/external/boost/numeric/conversion/bounds.hpp b/external/boost/numeric/conversion/bounds.hpp new file mode 100644 index 0000000..e4c7c7d --- /dev/null +++ b/external/boost/numeric/conversion/bounds.hpp @@ -0,0 +1,24 @@ +// (c) 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 +struct bounds : boundsdetail::get_impl::type +{} ; + +} } // namespace boost::numeric + +#endif diff --git a/external/boost/numeric/conversion/cast.hpp b/external/boost/numeric/conversion/cast.hpp new file mode 100644 index 0000000..1ee0251 --- /dev/null +++ b/external/boost/numeric/conversion/cast.hpp @@ -0,0 +1,61 @@ +// (c) 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 +// 22 Jun 2011 Added support for specializing cast policies via numeric_cast_traits (Brandon Kohn). +// +#ifndef BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP +#define BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582)) + +# include + +#else + +#include +#include +#include + +namespace boost +{ + template + inline Target numeric_cast( Source arg ) + { + typedef numeric::conversion_traits conv_traits; + typedef numeric::numeric_cast_traits cast_traits; + typedef boost::numeric::converter + < + Target, + Source, + conv_traits, + typename cast_traits::overflow_policy, + typename cast_traits::rounding_policy, + boost::numeric::raw_converter< conv_traits >, + typename cast_traits::range_checking_policy + > converter; + return converter::convert(arg); + } + + using numeric::bad_numeric_cast; +} // namespace boost + +#endif + +#endif diff --git a/external/boost/numeric/conversion/conversion_traits.hpp b/external/boost/numeric/conversion/conversion_traits.hpp new file mode 100644 index 0000000..6da6178 --- /dev/null +++ b/external/boost/numeric/conversion/conversion_traits.hpp @@ -0,0 +1,39 @@ +// (c) 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 +struct conversion_traits + : convdetail::get_conversion_traits::type +{ +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + typedef typename convdetail::get_conversion_traits::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/external/boost/numeric/conversion/converter.hpp b/external/boost/numeric/conversion/converter.hpp new file mode 100644 index 0000000..331cadd --- /dev/null +++ b/external/boost/numeric/conversion/converter.hpp @@ -0,0 +1,68 @@ +// (c) 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 OverflowHandler = def_overflow_handler, + class Float2IntRounder = Trunc< BOOST_DEDUCED_TYPENAME Traits::source_type> , + class RawConverter = raw_converter, + class UserRangeChecker = UseInternalRangeChecker + > +struct converter : convdetail::get_converter_impl::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 UserRangeChecker = UseInternalRangeChecker + > +struct make_converter_from +{ + template, + class RawConverter = raw_converter + > + struct to + { + typedef converter type ; + } ; + +} ; + +} } // namespace boost::numeric + +#endif + + diff --git a/external/boost/numeric/conversion/converter_policies.hpp b/external/boost/numeric/conversion/converter_policies.hpp new file mode 100644 index 0000000..b0d741b --- /dev/null +++ b/external/boost/numeric/conversion/converter_policies.hpp @@ -0,0 +1,186 @@ +// (c) 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 // for std::bad_cast + +#include // for std::floor and std::ceil + +#include + +#include "boost/type_traits/is_arithmetic.hpp" + +#include "boost/mpl/if.hpp" +#include "boost/mpl/integral_c.hpp" + +namespace boost { namespace numeric +{ + +template +struct Trunc +{ + typedef S source_type ; + + typedef typename mpl::if_< is_arithmetic,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(0) ? ceil(s) : floor(s) ; + } + + typedef mpl::integral_c< std::float_round_style, std::round_toward_zero> round_style ; +} ; + + + +template +struct Floor +{ + typedef S source_type ; + + typedef typename mpl::if_< is_arithmetic,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 +struct Ceil +{ + typedef S source_type ; + + typedef typename mpl::if_< is_arithmetic,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 +struct RoundEven +{ + typedef S source_type ; + + typedef typename mpl::if_< is_arithmetic,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 +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(s) ; } +} ; + +struct UseInternalRangeChecker {} ; + +} } // namespace boost::numeric + +#endif diff --git a/external/boost/numeric/conversion/detail/bounds.hpp b/external/boost/numeric/conversion/detail/bounds.hpp new file mode 100644 index 0000000..67342b8 --- /dev/null +++ b/external/boost/numeric/conversion/detail/bounds.hpp @@ -0,0 +1,58 @@ +// (c) 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 Integral + { + typedef std::numeric_limits 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(1); } + } ; + + template + class Float + { + typedef std::numeric_limits limits ; + + public : + + static N lowest () { return static_cast(-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 + struct get_impl + { + typedef mpl::bool_< ::std::numeric_limits::is_integer > is_int ; + + typedef Integral impl_int ; + typedef Float impl_float ; + + typedef typename mpl::if_::type type ; + } ; + +} } } // namespace boost::numeric::boundsdetail. + +#endif +// +/////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/external/boost/numeric/conversion/detail/conversion_traits.hpp b/external/boost/numeric/conversion/detail/conversion_traits.hpp new file mode 100644 index 0000000..ed25349 --- /dev/null +++ b/external/boost/numeric/conversion/detail/conversion_traits.hpp @@ -0,0 +1,97 @@ +// (c) 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 + struct non_trivial_traits_impl + { + typedef typename get_int_float_mixture ::type int_float_mixture ; + typedef typename get_sign_mixture ::type sign_mixture ; + typedef typename get_udt_builtin_mixture ::type udt_builtin_mixture ; + + typedef typename get_is_subranged::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 const&>::type argument_type ; + + typedef typename mpl::if_::type supertype ; + typedef typename mpl::if_::type subtype ; + } ; + + //------------------------------------------------------------------- + // Implementation of the Conversion Traits for T == S + // + // This is a VISIBLE base class of the user-level conversion_traits<> class. + //------------------------------------------------------------------- + template + struct trivial_traits_impl + { + typedef typename get_int_float_mixture ::type int_float_mixture ; + typedef typename get_sign_mixture ::type sign_mixture ; + typedef typename get_udt_builtin_mixture::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 + struct get_conversion_traits + { + typedef typename remove_cv::type target_type ; + typedef typename remove_cv::type source_type ; + + typedef typename is_same::type is_trivial ; + + typedef trivial_traits_impl trivial_imp ; + typedef non_trivial_traits_impl non_trivial_imp ; + + typedef typename mpl::if_::type type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif + + diff --git a/external/boost/numeric/conversion/detail/converter.hpp b/external/boost/numeric/conversion/detail/converter.hpp new file mode 100644 index 0000000..10550f8 --- /dev/null +++ b/external/boost/numeric/conversion/detail/converter.hpp @@ -0,0 +1,602 @@ +// (c) 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 + +#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 round2zero_c ; + typedef mpl::integral_c round2nearest_c ; + typedef mpl::integral_c round2inf_c ; + typedef mpl::integral_c round2neg_inf_c ; + + // Metafunction: + // + // for_round_style::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 + struct for_round_style + { + typedef ct_switch4 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 + 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(bounds::lowest()) ? cNegOverflow : cInRange ; + } + } ; + + // s < 0 ? cNegOverflow : cInRange + // + template + 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(0) ? cNegOverflow : cInRange ; + } + } ; + + // s <= Lowest(T)-1 ? cNegOverflow : cInRange + // + template + 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(bounds::lowest()) - static_cast(1.0) + ? cNegOverflow : cInRange ; + } + } ; + + // s < Lowest(T)-0.5 ? cNegOverflow : cInRange + // + template + 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(bounds::lowest()) - static_cast(0.5) + ? cNegOverflow : cInRange ; + } + } ; + + // s > Highest(T) ? cPosOverflow : cInRange + // + template + 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(bounds::highest()) + ? cPosOverflow : cInRange ; + } + } ; + + // s >= Lowest(T) + 1 ? cPosOverflow : cInRange + // + template + 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(bounds::highest()) + static_cast(1.0) + ? cPosOverflow : cInRange ; + } + } ; + + // s >= Lowest(T) + 0.5 ? cPosgOverflow : cInRange + // + template + 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(bounds::highest()) + static_cast(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 + 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 + struct combine + { + typedef applyBoth 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::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 + 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 + 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::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 + struct GetRC_Sig2Sig_or_Unsig2Unsig + { + typedef dummy_range_checker Dummy ; + + typedef LT_LoT Pred1 ; + typedef GT_HiT Pred2 ; + + typedef generic_range_checker Normal ; + + typedef typename Traits::subranged subranged ; + + typedef typename mpl::if_::type type ; + } ; + + template + struct GetRC_Sig2Unsig + { + typedef LT_Zero Pred1 ; + typedef GT_HiT Pred2 ; + + typedef generic_range_checker ChoiceA ; + + typedef generic_range_checker ChoiceB ; + + typedef typename Traits::target_type T ; + typedef typename Traits::source_type S ; + + typedef typename subranged_Unsig2Sig::type oposite_subranged ; + + typedef typename mpl::not_::type positively_subranged ; + + typedef typename mpl::if_::type type ; + } ; + + template + struct GetRC_Unsig2Sig + { + typedef GT_HiT Pred1 ; + + typedef generic_range_checker type ; + } ; + + template + struct GetRC_Int2Int + { + typedef GetRC_Sig2Sig_or_Unsig2Unsig Sig2SigQ ; + typedef GetRC_Sig2Unsig Sig2UnsigQ ; + typedef GetRC_Unsig2Sig Unsig2SigQ ; + typedef Sig2SigQ Unsig2UnsigQ ; + + typedef typename Traits::sign_mixture sign_mixture ; + + typedef typename + for_sign_mixture::type + selector ; + + typedef typename selector::type type ; + } ; + + template + struct GetRC_Int2Float + { + typedef dummy_range_checker type ; + } ; + + template + struct GetRC_Float2Int + { + typedef LE_PrevLoT Pred1 ; + typedef GE_SuccHiT Pred2 ; + typedef LT_HalfPrevLoT Pred3 ; + typedef GT_HalfSuccHiT Pred4 ; + typedef GT_HiT Pred5 ; + typedef LT_LoT Pred6 ; + + typedef generic_range_checker ToZero ; + typedef generic_range_checker ToNearest ; + typedef generic_range_checker ToInf ; + typedef generic_range_checker ToNegInf ; + + typedef typename Float2IntRounder::round_style round_style ; + + typedef typename for_round_style::type type ; + } ; + + template + struct GetRC_Float2Float + { + typedef dummy_range_checker Dummy ; + + typedef LT_LoT Pred1 ; + typedef GT_HiT Pred2 ; + + typedef generic_range_checker Normal ; + + typedef typename Traits::subranged subranged ; + + typedef typename mpl::if_::type type ; + } ; + + template + struct GetRC_BuiltIn2BuiltIn + { + typedef GetRC_Int2Int Int2IntQ ; + typedef GetRC_Int2Float Int2FloatQ ; + typedef GetRC_Float2Int Float2IntQ ; + typedef GetRC_Float2Float Float2FloatQ ; + + typedef typename Traits::int_float_mixture int_float_mixture ; + + typedef typename for_int_float_mixture::type selector ; + + typedef typename selector::type type ; + } ; + + template + struct GetRC + { + typedef GetRC_BuiltIn2BuiltIn BuiltIn2BuiltInQ ; + + typedef dummy_range_checker Dummy ; + + typedef mpl::identity DummyQ ; + + typedef typename Traits::udt_builtin_mixture udt_builtin_mixture ; + + typedef typename for_udt_builtin_mixture::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 + struct trivial_converter_impl : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type + ,BOOST_DEDUCED_TYPENAME Traits::result_type + > + ,public dummy_range_checker + { + 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 + 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 + 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 + struct get_non_trivial_converter + { + typedef GetRC InternalRangeCheckerQ ; + + typedef is_same use_internal_RC ; + + typedef mpl::identity UserRangeCheckerQ ; + + typedef typename + mpl::eval_if::type + RangeChecker ; + + typedef non_rounding_converter NonRounding ; + typedef rounding_converter Rounding ; + + typedef mpl::identity NonRoundingQ ; + typedef mpl::identity RoundingQ ; + + typedef typename Traits::int_float_mixture int_float_mixture ; + + typedef typename + for_int_float_mixture::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 Trivial ; + typedef mpl::identity TrivialQ ; + + typedef get_non_trivial_converter< Traits + ,OverflowHandler + ,Float2IntRounder + ,RawConverter + ,UserRangeChecker + > NonTrivialQ ; + + typedef typename Traits::trivial trivial ; + + typedef typename mpl::eval_if::type type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif + + diff --git a/external/boost/numeric/conversion/detail/int_float_mixture.hpp b/external/boost/numeric/conversion/detail/int_float_mixture.hpp new file mode 100644 index 0000000..464e527 --- /dev/null +++ b/external/boost/numeric/conversion/detail/int_float_mixture.hpp @@ -0,0 +1,72 @@ +// (c) 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 int2int_c ; + typedef mpl::integral_c int2float_c ; + typedef mpl::integral_c float2int_c ; + typedef mpl::integral_c float2float_c ; + + // Metafunction: + // + // get_int_float_mixture::type + // + // Selects the appropriate Int-Float Mixture Integral Constant for the combination T,S. + // + template + struct get_int_float_mixture + { + typedef mpl::bool_< ::std::numeric_limits::is_integer > S_int ; + typedef mpl::bool_< ::std::numeric_limits::is_integer > T_int ; + + typedef typename + for_both::type + type ; + } ; + + // Metafunction: + // + // for_int_float_mixture::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 + struct for_int_float_mixture + { + typedef typename + ct_switch4::type + type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif +// +/////////////////////////////////////////////////////////////////////////////////////////////// + + diff --git a/external/boost/numeric/conversion/detail/is_subranged.hpp b/external/boost/numeric/conversion/detail/is_subranged.hpp new file mode 100644 index 0000000..b5e7fe8 --- /dev/null +++ b/external/boost/numeric/conversion/detail/is_subranged.hpp @@ -0,0 +1,234 @@ +// (c) 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 + 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 + struct subranged_Unsig2Sig + { + // IMPORTANT NOTE: + // + // This code assumes that signed/unsigned integral values are represented + // such that: + // + // numeric_limits::digits + 1 == numeric_limits::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::digits+1) < (2*numeric_limits::digits) ) + // then the conversion is subranged. + // + + typedef mpl::int_< ::std::numeric_limits::digits > S_digits ; + typedef mpl::int_< ::std::numeric_limits::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::type S_digits_times_2 ; + + typedef typename mpl::less::type type ; + } ; + + // for integral to integral conversions of the same sign. + template + struct subranged_SameSign + { + // An integral conversion of the same sign is subranged if digits(T) < digits(S). + + typedef mpl::int_< ::std::numeric_limits::digits > S_digits ; + typedef mpl::int_< ::std::numeric_limits::digits > T_digits ; + + typedef typename mpl::less::type type ; + } ; + + // for integral to float conversions + template + struct subranged_Int2Float + { + typedef mpl::false_ type ; + } ; + + // for float to integral conversions + template + struct subranged_Float2Int + { + typedef mpl::true_ type ; + } ; + + // for float to float conversions + template + 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::digits > S_mantisa ; + typedef mpl::int_< ::std::numeric_limits::digits > T_mantisa ; + + typedef mpl::int_< ::std::numeric_limits::max_exponent > S_exponent ; + typedef mpl::int_< ::std::numeric_limits::max_exponent > T_exponent ; + + typedef typename mpl::less::type T_smaller_exponent ; + + typedef typename mpl::equal_to::type equal_exponents ; + + typedef mpl::less T_smaller_mantisa ; + + typedef mpl::eval_if not_bigger_exponent_case ; + + typedef typename + mpl::eval_if::type + type ; + } ; + + // for Udt to built-in conversions + template + struct subranged_Udt2BuiltIn + { + typedef mpl::true_ type ; + } ; + + // for built-in to Udt conversions + template + struct subranged_BuiltIn2Udt + { + typedef mpl::false_ type ; + } ; + + // for Udt to Udt conversions + template + struct subranged_Udt2Udt + { + typedef mpl::false_ type ; + } ; + + //------------------------------------------------------------------- + // Selectors for the implementations of the subranged predicate + //------------------------------------------------------------------- + + template + struct get_subranged_Int2Int + { + typedef subranged_SameSign Sig2Sig ; + typedef subranged_Sig2Unsig Sig2Unsig ; + typedef subranged_Unsig2Sig Unsig2Sig ; + typedef Sig2Sig Unsig2Unsig ; + + typedef typename get_sign_mixture::type sign_mixture ; + + typedef typename + for_sign_mixture::type + type ; + } ; + + template + struct get_subranged_BuiltIn2BuiltIn + { + typedef get_subranged_Int2Int Int2IntQ ; + + typedef subranged_Int2Float Int2Float ; + typedef subranged_Float2Int Float2Int ; + typedef subranged_Float2Float Float2Float ; + + typedef mpl::identity Int2FloatQ ; + typedef mpl::identity Float2IntQ ; + typedef mpl::identity Float2FloatQ ; + + typedef typename get_int_float_mixture::type int_float_mixture ; + + typedef for_int_float_mixture for_ ; + + typedef typename for_::type selected ; + + typedef typename selected::type type ; + } ; + + template + struct get_subranged + { + typedef get_subranged_BuiltIn2BuiltIn BuiltIn2BuiltInQ ; + + typedef subranged_BuiltIn2Udt BuiltIn2Udt ; + typedef subranged_Udt2BuiltIn Udt2BuiltIn ; + typedef subranged_Udt2Udt Udt2Udt ; + + typedef mpl::identity BuiltIn2UdtQ ; + typedef mpl::identity Udt2BuiltInQ ; + typedef mpl::identity Udt2UdtQ ; + + typedef typename get_udt_builtin_mixture::type udt_builtin_mixture ; + + typedef typename + for_udt_builtin_mixture::type + selected ; + + typedef typename selected::type selected2 ; + + typedef typename selected2::type type ; + } ; + + + //------------------------------------------------------------------- + // Top level implementation selector. + //------------------------------------------------------------------- + template + struct get_is_subranged + { + typedef get_subranged non_trivial_case ; + typedef mpl::identity trivial_case ; + + typedef is_same is_trivial ; + + typedef typename mpl::if_::type selected ; + + typedef typename selected::type type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif + + diff --git a/external/boost/numeric/conversion/detail/meta.hpp b/external/boost/numeric/conversion/detail/meta.hpp new file mode 100644 index 0000000..246a1b4 --- /dev/null +++ b/external/boost/numeric/conversion/detail/meta.hpp @@ -0,0 +1,120 @@ +// (c) 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_ 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::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 + struct ct_switch4 + { + typedef mpl::identity Case0TypeQ ; + typedef mpl::identity Case1TypeQ ; + + typedef equal_to is_case0 ; + typedef equal_to is_case1 ; + typedef equal_to is_case2 ; + + typedef mpl::if_ choose_2_3Q ; + typedef mpl::eval_if choose_1_2_3Q ; + + typedef typename + mpl::eval_if::type + type ; + } ; + + + + + // Metafunction: + // + // for_both::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 + struct for_both + { + typedef mpl::identity TF_Q ; + typedef mpl::identity TT_Q ; + + typedef typename mpl::not_::type not_expr0 ; + typedef typename mpl::not_::type not_expr1 ; + + typedef typename mpl::and_::type caseTT ; + typedef typename mpl::and_::type caseTF ; + typedef typename mpl::and_::type caseFT ; + + typedef mpl::if_ choose_FT_FF_Q ; + typedef mpl::eval_if choose_TF_FT_FF_Q ; + + typedef typename mpl::eval_if::type type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif + + diff --git a/external/boost/numeric/conversion/detail/numeric_cast_traits.hpp b/external/boost/numeric/conversion/detail/numeric_cast_traits.hpp new file mode 100644 index 0000000..150490d --- /dev/null +++ b/external/boost/numeric/conversion/detail/numeric_cast_traits.hpp @@ -0,0 +1,138 @@ +// +//! Copyright (c) 2011-2012 +//! Brandon Kohn +// +// Distributed under the Boost Software 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_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES) + + #include + + #if !defined(BOOST_NO_LONG_LONG) + #include + #endif + +#else +#if !BOOST_PP_IS_ITERATING + + #include + #include + #include + + #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) + #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_common.hpp") + #endif +// +//! Copyright (c) 2011-2012 +//! Brandon Kohn +// +// Distributed under the Boost Software 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__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) + #pragma wave option(preserve: 1) + #endif + + //! These are the assumed common built in fundamental types (not typedefs/macros.) + #define BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() \ + (char) \ + (signed char) \ + (unsigned char) \ + (short) \ + (unsigned short) \ + (int) \ + (unsigned int) \ + (long) \ + (unsigned long) \ + (float) \ + (double) \ + (long double) \ + /***/ + + #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() + #define BOOST_NUMERIC_CONVERSION_SEQ_B() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() + +namespace boost { namespace numeric { + + #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), )) + #include BOOST_PP_ITERATE() + +}}//namespace boost::numeric; + + #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) + #pragma wave option(output: null) + #endif + + #if ( defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) ) || !defined(BOOST_NO_LONG_LONG) + + #undef BOOST_NUMERIC_CONVERSION_SEQ_A + #undef BOOST_NUMERIC_CONVERSION_SEQ_B + + #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) + #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_long_long.hpp") + #endif + +// +//! Copyright (c) 2011-2012 +//! Brandon Kohn +// +// Distributed under the Boost Software 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__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) + #pragma wave option(preserve: 1) + #endif + +namespace boost { namespace numeric { + + #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()(boost::long_long_type)(boost::ulong_long_type) + #define BOOST_NUMERIC_CONVERSION_SEQ_B() (boost::long_long_type)(boost::ulong_long_type) + + #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), )) + #include BOOST_PP_ITERATE() + +}}//namespace boost::numeric; + + #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) + #pragma wave option(output: null) + #endif + + #endif + + #undef BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES + #undef BOOST_NUMERIC_CONVERSION_SEQ_A + #undef BOOST_NUMERIC_CONVERSION_SEQ_B + +#elif BOOST_PP_ITERATION_DEPTH() == 1 + + #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_B())), )) + #include BOOST_PP_ITERATE() + +#elif BOOST_PP_ITERATION_DEPTH() == 2 + + //! Generate default traits for the specified source and target. + #define BOOST_NUMERIC_CONVERSION_A BOOST_PP_FRAME_ITERATION(1) + #define BOOST_NUMERIC_CONVERSION_B BOOST_PP_FRAME_ITERATION(2) + + template <> + struct numeric_cast_traits + < + BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_SEQ_A()) + , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B()) + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + #undef BOOST_NUMERIC_CONVERSION_A + #undef BOOST_NUMERIC_CONVERSION_B + +#endif//! Depth 2. +#endif// BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES diff --git a/external/boost/numeric/conversion/detail/old_numeric_cast.hpp b/external/boost/numeric/conversion/detail/old_numeric_cast.hpp new file mode 100644 index 0000000..47b86d2 --- /dev/null +++ b/external/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 +// 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 +# include +# include +# include +# include +# include + +// 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* = 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 + struct signed_numeric_limits : std::numeric_limits + { + static inline T min BOOST_PREVENT_MACRO_SUBSTITUTION () + { + return (std::numeric_limits::min)() >= 0 + // unary minus causes integral promotion, thus the static_cast<> + ? static_cast(-(std::numeric_limits::max)()) + : (std::numeric_limits::min)(); + }; + }; + + // Move to namespace boost in utility.hpp? + template + struct fixed_numeric_limits_base + : public if_true< std::numeric_limits::is_signed > + ::BOOST_NESTED_TEMPLATE then< signed_numeric_limits, + std::numeric_limits + >::type + {}; + + template + struct fixed_numeric_limits + : fixed_numeric_limits_base::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::is_signed + // y_is_signed should be numeric_limits::is_signed + // y_min should be numeric_limits::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 + struct less_than_type_min + { + template + static bool check(X x, Y y_min) + { return x < y_min; } + }; + + template <> + struct less_than_type_min + { + template + static bool check(X, Y) + { return false; } + }; + + template <> + struct less_than_type_min + { + template + static bool check(X x, Y) + { return x < 0; } + }; + + // greater_than_type_max - + // same_sign should be: + // numeric_limits::is_signed == numeric_limits::is_signed + // y_max should be numeric_limits::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 + struct greater_than_type_max; + + template<> + struct greater_than_type_max + { + template + static inline bool check(X x, Y y_max) + { return x > y_max; } + }; + + template <> + struct greater_than_type_max + { + // What does the standard say about this? I think it's right, and it + // will work with every compiler I know of. + template + static inline bool check(X x, Y) + { return x >= 0 && static_cast(static_cast(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(x); \ + bool odd = y & 0x1; \ + __int64 div2 = static_cast<__int64>(y >> 1); \ + return ((static_cast(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 + { + template + static inline bool check(X x, Y y_max) + { return x > y_max; } + }; + + template <> + struct greater_than_type_max + { + // What does the standard say about this? I think it's right, and it + // will work with every compiler I know of. + template + static inline bool check(X x, Y) + { return static_cast(static_cast(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 + struct fixed_numeric_limits : public std::numeric_limits + { + static inline T min BOOST_PREVENT_MACRO_SUBSTITUTION () + { + return std::numeric_limits::is_signed && (std::numeric_limits::min)() >= 0 + ? T(-(std::numeric_limits::max)()) : (std::numeric_limits::min)(); + } + }; + +# if BOOST_MSVC +# pragma warning(pop) +#elif defined(__BORLANDC__) +# pragma option pop +# endif + } // namespace detail + +#endif + + template + inline Target numeric_cast(Source arg BOOST_EXPLICIT_DEFAULT_TARGET) + { + // typedefs abbreviating respective trait classes + typedef detail::fixed_numeric_limits arg_traits; + typedef detail::fixed_numeric_limits 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::check(arg, (result_traits::min)()) + || greater_than_type_max::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(arg); + } // numeric_cast + +# undef BOOST_EXPLICIT_DEFAULT_TARGET + +} // namespace boost + +#endif // BOOST_OLD_NUMERIC_CAST_HPP diff --git a/external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp b/external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp new file mode 100644 index 0000000..01dc932 --- /dev/null +++ b/external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp @@ -0,0 +1,1741 @@ +// +//! Copyright (c) 2011-2012 +//! Brandon Kohn +// +// Distributed under the 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 numeric { + + template <> + struct numeric_cast_traits + < + char + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , signed char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , unsigned char + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , unsigned short + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , unsigned int + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , unsigned long + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , float + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , long double + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; +}} diff --git a/external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp b/external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp new file mode 100644 index 0000000..b358b9c --- /dev/null +++ b/external/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp @@ -0,0 +1,347 @@ +// +//! Copyright (c) 2011-2012 +//! Brandon Kohn +// +// Distributed under the 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 numeric { + + + template <> + struct numeric_cast_traits + < + char + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + char + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + signed char + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned char + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + short + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned short + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + int + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned int + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + unsigned long + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + float + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + double + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + long double + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + boost::long_long_type + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + boost::long_long_type + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + boost::ulong_long_type + , boost::long_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + + template <> + struct numeric_cast_traits + < + boost::ulong_long_type + , boost::ulong_long_type + > + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; +}} diff --git a/external/boost/numeric/conversion/detail/sign_mixture.hpp b/external/boost/numeric/conversion/detail/sign_mixture.hpp new file mode 100644 index 0000000..c7f9e42 --- /dev/null +++ b/external/boost/numeric/conversion/detail/sign_mixture.hpp @@ -0,0 +1,72 @@ +// (c) 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 unsig2unsig_c ; + typedef mpl::integral_c sig2sig_c ; + typedef mpl::integral_c sig2unsig_c ; + typedef mpl::integral_c unsig2sig_c ; + + // Metafunction: + // + // get_sign_mixture::type + // + // Selects the appropriate SignMixture Integral Constant for the combination T,S. + // + template + struct get_sign_mixture + { + typedef mpl::bool_< ::std::numeric_limits::is_signed > S_signed ; + typedef mpl::bool_< ::std::numeric_limits::is_signed > T_signed ; + + typedef typename + for_both::type + type ; + } ; + + // Metafunction: + // + // for_sign_mixture::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 + struct for_sign_mixture + { + typedef typename + ct_switch4::type + type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif +// +/////////////////////////////////////////////////////////////////////////////////////////////// + + diff --git a/external/boost/numeric/conversion/detail/udt_builtin_mixture.hpp b/external/boost/numeric/conversion/detail/udt_builtin_mixture.hpp new file mode 100644 index 0000000..36dbc49 --- /dev/null +++ b/external/boost/numeric/conversion/detail/udt_builtin_mixture.hpp @@ -0,0 +1,69 @@ +// (c) 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 builtin2builtin_c ; + typedef mpl::integral_c builtin2udt_c ; + typedef mpl::integral_c udt2builtin_c ; + typedef mpl::integral_c udt2udt_c ; + + // Metafunction: + // + // for_udt_mixture::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 + struct for_udt_builtin_mixture + { + typedef typename + ct_switch4::type + type ; + } ; + + // Metafunction: + // + // get_udt_mixture::type + // + // Selects the appropriate UdtMixture Integral Constant for the combination T,S. + // + template + struct get_udt_builtin_mixture + { + typedef is_arithmetic S_builtin ; + typedef is_arithmetic T_builtin ; + + typedef typename + for_both::type + type ; + } ; + +} } } // namespace boost::numeric::convdetail + +#endif + + diff --git a/external/boost/numeric/conversion/int_float_mixture_enum.hpp b/external/boost/numeric/conversion/int_float_mixture_enum.hpp new file mode 100644 index 0000000..d0c2daa --- /dev/null +++ b/external/boost/numeric/conversion/int_float_mixture_enum.hpp @@ -0,0 +1,29 @@ +// (c) 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/external/boost/numeric/conversion/numeric_cast_traits.hpp b/external/boost/numeric/conversion/numeric_cast_traits.hpp new file mode 100644 index 0000000..e24296b --- /dev/null +++ b/external/boost/numeric/conversion/numeric_cast_traits.hpp @@ -0,0 +1,31 @@ +// +//! Copyright (c) 2011 +//! Brandon Kohn +// +// Distributed under the Boost Software 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_CAST_TRAITS_HPP +#define BOOST_NUMERIC_CAST_TRAITS_HPP + +#include + +namespace boost { namespace numeric { + + template + struct numeric_cast_traits + { + typedef def_overflow_handler overflow_policy; + typedef UseInternalRangeChecker range_checking_policy; + typedef Trunc rounding_policy; + }; + +}}//namespace boost::numeric; + +#if !defined( BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_CAST_TRAITS ) +#include +#include +#endif//!defined BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_CAST_TRAITS + +#endif//BOOST_NUMERIC_CAST_TRAITS_HPP diff --git a/external/boost/numeric/conversion/sign_mixture_enum.hpp b/external/boost/numeric/conversion/sign_mixture_enum.hpp new file mode 100644 index 0000000..1525f8d --- /dev/null +++ b/external/boost/numeric/conversion/sign_mixture_enum.hpp @@ -0,0 +1,29 @@ +// (c) 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/external/boost/numeric/conversion/udt_builtin_mixture_enum.hpp b/external/boost/numeric/conversion/udt_builtin_mixture_enum.hpp new file mode 100644 index 0000000..2540e80 --- /dev/null +++ b/external/boost/numeric/conversion/udt_builtin_mixture_enum.hpp @@ -0,0 +1,26 @@ +// (c) 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/external/boost/operators.hpp b/external/boost/operators.hpp new file mode 100644 index 0000000..b524cee --- /dev/null +++ b/external/boost/operators.hpp @@ -0,0 +1,978 @@ +// 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 +// 16 Dec 10 Limit warning suppression for 4284 to older versions of VC++ +// (Matthew Bradbury, fixes #4432) +// 07 Aug 08 Added "euclidean" spelling. (Daniel Frey) +// 03 Apr 08 Make sure "convertible to bool" is sufficient +// for T::operator<, etc. (Daniel Frey) +// 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 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 +#include +#include + +#if defined(__sgi) && !defined(__GNUC__) +# pragma set woff 1234 +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1600) +# pragma warning( disable : 4284 ) // complaint about return type of +#endif // operator-> not begin a UDT + +namespace boost { +namespace detail { + +template 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 > +struct less_than_comparable2 : B +{ + friend bool operator<=(const T& x, const U& y) { return !static_cast(x > y); } + friend bool operator>=(const T& x, const U& y) { return !static_cast(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 !static_cast(y < x); } + friend bool operator>=(const U& x, const T& y) { return !static_cast(y > x); } +}; + +template > +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 !static_cast(y < x); } + friend bool operator>=(const T& x, const T& y) { return !static_cast(x < y); } +}; + +template > +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 !static_cast(x == y); } + friend bool operator!=(const T& y, const U& x) { return !static_cast(y == x); } +}; + +template > +struct equality_comparable1 : B +{ + friend bool operator!=(const T& x, const T& y) { return !static_cast(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 > \ +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 > \ +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 > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( const T& lhs, const U& rhs ) \ + { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ +}; \ + \ +template > \ +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 > \ +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 > \ +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 > \ +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 > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \ +}; \ + \ +template > \ +struct BOOST_OPERATOR2_LEFT(NAME) : B \ +{ \ + friend T operator OP( const U& lhs, const T& rhs ) \ + { return T( lhs ) OP##= rhs; } \ +}; \ + \ +template > \ +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 > +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 > +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 > +struct dereferenceable : B +{ + P operator->() const + { + return &*static_cast(*this); + } +}; + +template > +struct indexable : B +{ + R operator[](I n) const + { + return *(static_cast(*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 > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( const T& lhs, const U& rhs ) \ + { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ +}; \ + \ +template > \ +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 > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \ +}; \ + \ +template > \ +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 > +struct equivalent2 : B +{ + friend bool operator==(const T& x, const U& y) + { + return !static_cast(x < y) && !static_cast(x > y); + } +}; + +template > +struct equivalent1 : B +{ + friend bool operator==(const T&x, const T&y) + { + return !static_cast(x < y) && !static_cast(y < x); + } +}; + +template > +struct partially_ordered2 : B +{ + friend bool operator<=(const T& x, const U& y) + { return static_cast(x < y) || static_cast(x == y); } + friend bool operator>=(const T& x, const U& y) + { return static_cast(x > y) || static_cast(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 static_cast(y > x) || static_cast(y == x); } + friend bool operator>=(const U& x, const T& y) + { return static_cast(y < x) || static_cast(y == x); } +}; + +template > +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 static_cast(x < y) || static_cast(x == y); } + friend bool operator>=(const T& x, const T& y) + { return static_cast(y < x) || static_cast(x == y); } +}; + +// Combined operator classes (contributed by Daryle Walker) ----------------// + +template > +struct totally_ordered2 + : less_than_comparable2 > {}; + +template > +struct totally_ordered1 + : less_than_comparable1 > {}; + +template > +struct additive2 + : addable2 > {}; + +template > +struct additive1 + : addable1 > {}; + +template > +struct multiplicative2 + : multipliable2 > {}; + +template > +struct multiplicative1 + : multipliable1 > {}; + +template > +struct integer_multiplicative2 + : multiplicative2 > {}; + +template > +struct integer_multiplicative1 + : multiplicative1 > {}; + +template > +struct arithmetic2 + : additive2 > {}; + +template > +struct arithmetic1 + : additive1 > {}; + +template > +struct integer_arithmetic2 + : additive2 > {}; + +template > +struct integer_arithmetic1 + : additive1 > {}; + +template > +struct bitwise2 + : xorable2 > > {}; + +template > +struct bitwise1 + : xorable1 > > {}; + +template > +struct unit_steppable + : incrementable > {}; + +template > +struct shiftable2 + : left_shiftable2 > {}; + +template > +struct shiftable1 + : left_shiftable1 > {}; + +template > +struct ring_operators2 + : additive2 > > {}; + +template > +struct ring_operators1 + : additive1 > {}; + +template > +struct ordered_ring_operators2 + : ring_operators2 > {}; + +template > +struct ordered_ring_operators1 + : ring_operators1 > {}; + +template > +struct field_operators2 + : ring_operators2 > > {}; + +template > +struct field_operators1 + : ring_operators1 > {}; + +template > +struct ordered_field_operators2 + : field_operators2 > {}; + +template > +struct ordered_field_operators1 + : field_operators1 > {}; + +template > +struct euclidian_ring_operators2 + : ring_operators2 > > > > {}; + +template > +struct euclidian_ring_operators1 + : ring_operators1 > > {}; + +template > +struct ordered_euclidian_ring_operators2 + : totally_ordered2 > {}; + +template > +struct ordered_euclidian_ring_operators1 + : totally_ordered1 > {}; + +template > +struct euclidean_ring_operators2 + : ring_operators2 > > > > {}; + +template > +struct euclidean_ring_operators1 + : ring_operators1 > > {}; + +template > +struct ordered_euclidean_ring_operators2 + : totally_ordered2 > {}; + +template > +struct ordered_euclidean_ring_operators1 + : totally_ordered1 > {}; + +template > +struct input_iteratable + : equality_comparable1 > > {}; + +template > +struct output_iteratable + : incrementable {}; + +template > +struct forward_iteratable + : input_iteratable {}; + +template > +struct bidirectional_iteratable + : forward_iteratable > {}; + +// 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 > +struct random_access_iteratable + : bidirectional_iteratable > > > {}; + +#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 > \ + struct template_name : ::template_name {}; + +# define BOOST_IMPORT_TEMPLATE3(template_name) \ + template > \ + struct template_name : ::template_name {}; + +# define BOOST_IMPORT_TEMPLATE2(template_name) \ + template > \ + struct template_name : ::template_name {}; + +# define BOOST_IMPORT_TEMPLATE1(template_name) \ + template > \ + struct template_name : ::template_name {}; + +# 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 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 \ + struct is_chained_base< ::boost::template_name4 > { \ + 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 \ + struct is_chained_base< ::boost::template_name3 > { \ + 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 \ + struct is_chained_base< ::boost::template_name2 > { \ + 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 \ + struct is_chained_base< ::boost::template_name1 > { \ + 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 '1' +// and '2' which must implement the corresponding 1- and 2- +// argument forms. +// +// The template type parameter O == is_chained_base::value is used to +// distinguish whether the 2nd argument to 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 '1' or '2'. +// + +# define BOOST_OPERATOR_TEMPLATE(template_name) \ +template \ + ,class O = typename is_chained_base::value \ + > \ +struct template_name : template_name##2 {}; \ + \ +template \ +struct template_name \ + : template_name##1 {}; \ + \ +template \ +struct template_name \ + : template_name##1 {}; \ + \ +template \ +struct is_chained_base< ::boost::template_name > { \ + 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 > \ + struct template_name : template_name##1 {}; + +#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_TEMPLATE(euclidean_ring_operators) +BOOST_OPERATOR_TEMPLATE(ordered_euclidean_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 +struct operators2 + : totally_ordered2 > > {}; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct operators : operators2 {}; + +template struct operators +#else +template struct operators +#endif + : totally_ordered > > > {}; + +// 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 +struct input_iterator_helper + : input_iteratable > {}; + +template +struct output_iterator_helper + : output_iteratable > +{ + T& operator*() { return static_cast(*this); } + T& operator++() { return static_cast(*this); } +}; + +template +struct forward_iterator_helper + : forward_iteratable > {}; + +template +struct bidirectional_iterator_helper + : bidirectional_iteratable > {}; + +template +struct random_access_iterator_helper + : random_access_iteratable > +{ + 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/external/boost/optional.hpp b/external/boost/optional.hpp new file mode 100644 index 0000000..40cf12e --- /dev/null +++ b/external/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/libs/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/external/boost/optional/optional.hpp b/external/boost/optional/optional.hpp new file mode 100644 index 0000000..ec9006e --- /dev/null +++ b/external/boost/optional/optional.hpp @@ -0,0 +1,991 @@ +// Copyright (C) 2003, 2008 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/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +// Revisions: +// 27 Apr 2008 (improved swap) Fernando Cacciola, Niels Dekker, Thorsten Ottosen +// +#ifndef BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP +#define BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if BOOST_WORKAROUND(BOOST_MSVC, == 1200) +// VC6.0 has the following bug: +// When a templated assignment operator exist, an implicit conversion +// constructing an optional is used when assigment of the form: +// optional 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 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 + +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) > 302 \ + && !defined(__INTEL_COMPILER) +// GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with +// regard to violation of the strict aliasing rules. The optional< T > storage type is marked +// with this attribute in order to let the compiler know that it will alias objects of type T +// and silence compilation warnings. +#define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS +#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 + inline void construct(Factory const& factory, void* address) + { + factory.BOOST_NESTED_TEMPLATE apply(address); + } +} + + +namespace boost { + +class in_place_factory_base ; +class typed_in_place_factory_base ; + +// This forward is needed to refer to namespace scope swap from the member swap +template void swap ( optional& x, optional& y ); + +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 aligned_storage +{ + // Borland ICEs if unnamed unions are used for this! + union + // This works around GCC warnings about breaking strict aliasing rules when casting storage address to T* +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS) + __attribute__((may_alias)) +#endif + dummy_u + { + char data[ sizeof(T) ]; + BOOST_DEDUCED_TYPENAME type_with_alignment< + ::boost::alignment_of::value >::type aligner_; + } dummy_ ; + + public: + +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS) + void const* address() const { return &dummy_; } + void * address() { return &dummy_; } +#else + void const* address() const { return dummy_.data; } + void * address() { return dummy_.data; } +#endif +} ; + +template +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 +struct types_when_is_ref +{ + typedef BOOST_DEDUCED_TYPENAME remove_reference::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 optional_base : public optional_tag +{ + private : + + typedef +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + BOOST_DEDUCED_TYPENAME +#endif + ::boost::detail::make_reference_content::type internal_type ; + + typedef aligned_storage storage_type ; + + typedef types_when_isnt_ref types_when_not_ref ; + typedef types_when_is_ref types_when_ref ; + + typedef optional_base 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::type is_reference_predicate ; + + public: + typedef BOOST_DEDUCED_TYPENAME mpl::if_::type types ; + + protected: + 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 uninitialized. + // No-throw + optional_base() + : + m_initialized(false) {} + + // Creates an optional uninitialized. + // No-throw + optional_base ( none_t ) + : + m_initialized(false) {} + + // Creates an optional initialized with 'val'. + // Can throw if T::T(T const&) does + optional_base ( argument_type val ) + : + m_initialized(false) + { + construct(val); + } + + // Creates an optional initialized with 'val' IFF cond is true, otherwise creates an uninitialzed optional. + // 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 + // 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 + 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 (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 (deep-copies the rhs value) + template + void assign ( optional const& rhs ) + { + if (is_initialized()) + { + if ( rhs.is_initialized() ) + assign_value(static_cast(rhs.get()), is_reference_predicate() ); + else destroy(); + } + else + { + if ( rhs.is_initialized() ) + construct(static_cast(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 + 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 + void construct ( Expr const& factory, in_place_factory_base const* ) + { + BOOST_STATIC_ASSERT ( ::boost::mpl::not_::value ) ; + boost_optional_detail::construct(factory, m_storage.address()); + m_initialized = true ; + } + + // Constructs in-place using the given typed factory + template + void construct ( Expr const& factory, typed_in_place_factory_base const* ) + { + BOOST_STATIC_ASSERT ( ::boost::mpl::not_::value ) ; + factory.apply(m_storage.address()) ; + m_initialized = true ; + } + + template + 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 + 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 from optional uses this function with + // 'Expr' being of type 'U' and relying on a converting constructor of T from U. + template + 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 from optional uses this function with + // 'Expr' being of type 'U' and relying on a converting assignment of T from U. + template + 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 and optional + // 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 or optional (but not optional_base<..>) + template + 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 +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS) + // This workaround is supposed to silence GCC warnings about broken strict aliasing rules + internal_type const* get_object() const + { + union { void const* ap_pvoid; internal_type const* as_ptype; } caster = { m_storage.address() }; + return caster.as_ptype; + } + internal_type * get_object() + { + union { void* ap_pvoid; internal_type* as_ptype; } caster = { m_storage.address() }; + return caster.as_ptype; + } +#else + internal_type const* get_object() const { return static_cast(m_storage.address()); } + internal_type * get_object() { return static_cast (m_storage.address()); } +#endif + + // reference_content 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* 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 optional : public optional_detail::optional_base +{ + typedef optional_detail::optional_base base ; + + typedef BOOST_DEDUCED_TYPENAME base::unspecified_bool_type unspecified_bool_type ; + + public : + + typedef optional 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 uninitialized. + // No-throw + optional() : base() {} + + // Creates an optional uninitialized. + // No-throw + optional( none_t none_ ) : base(none_) {} + + // Creates an optional initialized with 'val'. + // Can throw if T::T(T const&) does + optional ( argument_type val ) : base(val) {} + + // Creates an optional 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 + // Requires a valid conversion from U to T. + // Can throw if T::T(U const&) does + template + explicit optional ( optional const& rhs ) + : + base() + { + if ( rhs.is_initialized() ) + this->construct(rhs.get()); + } +#endif + +#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT + // Creates an optional 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(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 and optional + // 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 + explicit optional ( Expr const& expr ) : base(expr,boost::addressof(expr)) {} +#endif + + // Creates a deep copy of another optional + // Can throw if T::T(T const&) does + optional ( optional const& rhs ) : base( static_cast(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 + optional& operator= ( Expr const& expr ) + { + this->assign_expr(expr,boost::addressof(expr)); + return *this ; + } +#endif + + +#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT + // Assigns from another convertible optional (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 + optional& operator= ( optional const& rhs ) + { + this->assign(rhs); + return *this ; + } +#endif + + // Assigns from another optional (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( static_cast(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 ; + } + + void swap( optional & arg ) + { + // allow for Koenig lookup + using boost::swap; + swap(*this, arg); + } + + + // 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(v) +template +inline +optional make_optional ( T const& v ) +{ + return optional(v); +} + +// Returns optional(cond,v) +template +inline +optional make_optional ( bool cond, T const& v ) +{ + return optional(cond,v); +} + +// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED. +// No-throw +template +inline +BOOST_DEDUCED_TYPENAME optional::reference_const_type +get ( optional const& opt ) +{ + return opt.get() ; +} + +template +inline +BOOST_DEDUCED_TYPENAME optional::reference_type +get ( optional& opt ) +{ + return opt.get() ; +} + +// Returns a pointer to the value if this is initialized, otherwise, returns NULL. +// No-throw +template +inline +BOOST_DEDUCED_TYPENAME optional::pointer_const_type +get ( optional const* opt ) +{ + return opt->get_ptr() ; +} + +template +inline +BOOST_DEDUCED_TYPENAME optional::pointer_type +get ( optional* opt ) +{ + return opt->get_ptr() ; +} + +// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED. +// No-throw +template +inline +BOOST_DEDUCED_TYPENAME optional::reference_const_type +get_optional_value_or ( optional const& opt, BOOST_DEDUCED_TYPENAME optional::reference_const_type v ) +{ + return opt.get_value_or(v) ; +} + +template +inline +BOOST_DEDUCED_TYPENAME optional::reference_type +get_optional_value_or ( optional& opt, BOOST_DEDUCED_TYPENAME optional::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 +inline +BOOST_DEDUCED_TYPENAME optional::pointer_const_type +get_pointer ( optional const& opt ) +{ + return opt.get_ptr() ; +} + +template +inline +BOOST_DEDUCED_TYPENAME optional::pointer_type +get_pointer ( optional& 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 vs optional cases +// + +template +inline +bool operator == ( optional const& x, optional const& y ) +{ return equal_pointees(x,y); } + +template +inline +bool operator < ( optional const& x, optional const& y ) +{ return less_pointees(x,y); } + +template +inline +bool operator != ( optional const& x, optional const& y ) +{ return !( x == y ) ; } + +template +inline +bool operator > ( optional const& x, optional const& y ) +{ return y < x ; } + +template +inline +bool operator <= ( optional const& x, optional const& y ) +{ return !( y < x ) ; } + +template +inline +bool operator >= ( optional const& x, optional const& y ) +{ return !( x < y ) ; } + + +// +// optional vs T cases +// +template +inline +bool operator == ( optional const& x, T const& y ) +{ return equal_pointees(x, optional(y)); } + +template +inline +bool operator < ( optional const& x, T const& y ) +{ return less_pointees(x, optional(y)); } + +template +inline +bool operator != ( optional const& x, T const& y ) +{ return !( x == y ) ; } + +template +inline +bool operator > ( optional const& x, T const& y ) +{ return y < x ; } + +template +inline +bool operator <= ( optional const& x, T const& y ) +{ return !( y < x ) ; } + +template +inline +bool operator >= ( optional const& x, T const& y ) +{ return !( x < y ) ; } + +// +// T vs optional cases +// + +template +inline +bool operator == ( T const& x, optional const& y ) +{ return equal_pointees( optional(x), y ); } + +template +inline +bool operator < ( T const& x, optional const& y ) +{ return less_pointees( optional(x), y ); } + +template +inline +bool operator != ( T const& x, optional const& y ) +{ return !( x == y ) ; } + +template +inline +bool operator > ( T const& x, optional const& y ) +{ return y < x ; } + +template +inline +bool operator <= ( T const& x, optional const& y ) +{ return !( y < x ) ; } + +template +inline +bool operator >= ( T const& x, optional const& y ) +{ return !( x < y ) ; } + + +// +// optional vs none cases +// + +template +inline +bool operator == ( optional const& x, none_t ) +{ return equal_pointees(x, optional() ); } + +template +inline +bool operator < ( optional const& x, none_t ) +{ return less_pointees(x,optional() ); } + +template +inline +bool operator != ( optional const& x, none_t y ) +{ return !( x == y ) ; } + +template +inline +bool operator > ( optional const& x, none_t y ) +{ return y < x ; } + +template +inline +bool operator <= ( optional const& x, none_t y ) +{ return !( y < x ) ; } + +template +inline +bool operator >= ( optional const& x, none_t y ) +{ return !( x < y ) ; } + +// +// none vs optional cases +// + +template +inline +bool operator == ( none_t x, optional const& y ) +{ return equal_pointees(optional() ,y); } + +template +inline +bool operator < ( none_t x, optional const& y ) +{ return less_pointees(optional() ,y); } + +template +inline +bool operator != ( none_t x, optional const& y ) +{ return !( x == y ) ; } + +template +inline +bool operator > ( none_t x, optional const& y ) +{ return y < x ; } + +template +inline +bool operator <= ( none_t x, optional const& y ) +{ return !( y < x ) ; } + +template +inline +bool operator >= ( none_t x, optional const& y ) +{ return !( x < y ) ; } + +namespace optional_detail { + +template struct swap_selector; + +template<> +struct swap_selector +{ + template + static void optional_swap ( optional& x, optional& y ) + { + const bool hasX = !!x; + const bool hasY = !!y; + + if ( !hasX && !hasY ) + return; + + if( !hasX ) + x = boost::in_place(); + else if ( !hasY ) + y = boost::in_place(); + + // Boost.Utility.Swap will take care of ADL and workarounds for broken compilers + boost::swap(x.get(),y.get()); + + if( !hasX ) + y = boost::none ; + else if( !hasY ) + x = boost::none ; + } +}; + +template<> +struct swap_selector +{ + template + static void optional_swap ( optional& x, optional& y ) + { + const bool hasX = !!x; + const bool hasY = !!y; + + if ( !hasX && hasY ) + { + x = y.get(); + y = boost::none ; + } + else if ( hasX && !hasY ) + { + y = x.get(); + x = boost::none ; + } + else if ( hasX && hasY ) + { + // Boost.Utility.Swap will take care of ADL and workarounds for broken compilers + boost::swap(x.get(),y.get()); + } + } +}; + +} // namespace optional_detail + +template +struct optional_swap_should_use_default_constructor : has_nothrow_default_constructor {} ; + +template inline void swap ( optional& x, optional& y ) +{ + optional_detail::swap_selector::value>::optional_swap(x, y); +} + +} // namespace boost + +#endif diff --git a/external/boost/optional/optional_fwd.hpp b/external/boost/optional/optional_fwd.hpp new file mode 100644 index 0000000..388cc1c --- /dev/null +++ b/external/boost/optional/optional_fwd.hpp @@ -0,0 +1,29 @@ +// Copyright (C) 2003, 2008 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/libs/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +// Revisions: +// 10 May 2008 (added swap related forward declaration) Niels Dekker +// +#ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP +#define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP + +namespace boost { + +template class optional ; + +template void swap ( optional& , optional& ) ; + +template struct optional_swap_should_use_default_constructor ; + +} // namespace boost + +#endif + diff --git a/external/boost/pending/integer_log2.hpp b/external/boost/pending/integer_log2.hpp new file mode 100644 index 0000000..f4bc846 --- /dev/null +++ b/external/boost/pending/integer_log2.hpp @@ -0,0 +1,112 @@ +// ----------------------------------------------------------- +// 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. +// +// Copyright (c) 2003-2004, 2008 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) +// +// ----------------------------------------------------------- + +#ifndef BOOST_INTEGER_LOG2_HPP_GP_20030301 +#define BOOST_INTEGER_LOG2_HPP_GP_20030301 + +#include +#ifdef __BORLANDC__ +#include +#endif +#include "boost/limits.hpp" +#include "boost/config.hpp" + + +namespace boost { + namespace detail { + + template + int integer_log2_impl(T x, int n) { + + int result = 0; + + while (x != 1) { + + const T t = static_cast(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 + 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, because + // of its usual const-related problems in argument deduction + // - gps + template + struct width { + +#ifdef __BORLANDC__ + BOOST_STATIC_CONSTANT(int, value = sizeof(T) * CHAR_BIT); +#else + BOOST_STATIC_CONSTANT(int, value = (std::numeric_limits::digits)); +#endif + + }; + + } // detail + + + // --------- + // integer_log2 + // --------------- + // + template + int integer_log2(T x) { + + assert(x > 0); + + const int n = detail::max_pow2_less< + detail::width :: value, 4 + > :: value; + + return detail::integer_log2_impl(x, n); + + } + + + +} + + + +#endif // include guard diff --git a/external/boost/preprocessor/arithmetic/add.hpp b/external/boost/preprocessor/arithmetic/add.hpp new file mode 100644 index 0000000..5a29f55 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/arithmetic/dec.hpp b/external/boost/preprocessor/arithmetic/dec.hpp new file mode 100644 index 0000000..0503359 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/arithmetic/detail/div_base.hpp b/external/boost/preprocessor/arithmetic/detail/div_base.hpp new file mode 100644 index 0000000..106632a --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/arithmetic/inc.hpp b/external/boost/preprocessor/arithmetic/inc.hpp new file mode 100644 index 0000000..1597ab8 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/arithmetic/mod.hpp b/external/boost/preprocessor/arithmetic/mod.hpp new file mode 100644 index 0000000..62489d1 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/arithmetic/sub.hpp b/external/boost/preprocessor/arithmetic/sub.hpp new file mode 100644 index 0000000..5262cda --- /dev/null +++ b/external/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 +# include +# include +# include +# +# /* 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/external/boost/preprocessor/array/data.hpp b/external/boost/preprocessor/array/data.hpp new file mode 100644 index 0000000..10c926a --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/array/elem.hpp b/external/boost/preprocessor/array/elem.hpp new file mode 100644 index 0000000..105ba24 --- /dev/null +++ b/external/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 +# include +# include +# include +# +# /* 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/external/boost/preprocessor/array/size.hpp b/external/boost/preprocessor/array/size.hpp new file mode 100644 index 0000000..3f370ee --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/cat.hpp b/external/boost/preprocessor/cat.hpp new file mode 100644 index 0000000..5e52850 --- /dev/null +++ b/external/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_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(p, res) res +# endif +# +# endif diff --git a/external/boost/preprocessor/comma_if.hpp b/external/boost/preprocessor/comma_if.hpp new file mode 100644 index 0000000..9ceb079 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/comparison/less_equal.hpp b/external/boost/preprocessor/comparison/less_equal.hpp new file mode 100644 index 0000000..1302d54 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/config/config.hpp b/external/boost/preprocessor/config/config.hpp new file mode 100644 index 0000000..d02eb58 --- /dev/null +++ b/external/boost/preprocessor/config/config.hpp @@ -0,0 +1,105 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002-2011. * +# * (C) Copyright Edward Diener 2011. * +# * Distributed under the Boost Software License, Version 1.0. (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 +# +# /* BOOST_PP_VARIADICS */ +# +# if !defined BOOST_PP_VARIADICS +# /* variadic support explicitly disabled for all untested compilers */ +# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI +# define BOOST_PP_VARIADICS 0 +# /* VC++ (C/C++) */ +# elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__ +# if _MSC_VER >= 1400 +# define BOOST_PP_VARIADICS 1 +# define BOOST_PP_VARIADICS_MSVC 1 +# else +# define BOOST_PP_VARIADICS 0 +# endif +# /* Wave (C/C++), GCC (C++) */ +# elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && __GXX_EXPERIMENTAL_CXX0X__ +# define BOOST_PP_VARIADICS 1 +# /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */ +# elif !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L +# define BOOST_PP_VARIADICS 1 +# else +# define BOOST_PP_VARIADICS 0 +# endif +# elif !BOOST_PP_VARIADICS + 1 < 2 +# undef BOOST_PP_VARIADICS +# define BOOST_PP_VARIADICS 1 +# if defined _MSC_VER && _MSC_VER >= 1400 && !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI) +# define BOOST_PP_VARIADICS_MSVC 1 +# endif +# else +# undef BOOST_PP_VARIADICS +# define BOOST_PP_VARIADICS 0 +# endif +# +# endif diff --git a/external/boost/preprocessor/control/deduce_d.hpp b/external/boost/preprocessor/control/deduce_d.hpp new file mode 100644 index 0000000..a0276b0 --- /dev/null +++ b/external/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 +# include +# +# /* BOOST_PP_DEDUCE_D */ +# +# define BOOST_PP_DEDUCE_D() BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256) +# +# endif diff --git a/external/boost/preprocessor/control/detail/dmc/while.hpp b/external/boost/preprocessor/control/detail/dmc/while.hpp new file mode 100644 index 0000000..95c3135 --- /dev/null +++ b/external/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 +# include +# include +# +# 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/external/boost/preprocessor/control/detail/edg/while.hpp b/external/boost/preprocessor/control/detail/edg/while.hpp new file mode 100644 index 0000000..ce28eb2 --- /dev/null +++ b/external/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 +# include +# +# 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/external/boost/preprocessor/control/detail/msvc/while.hpp b/external/boost/preprocessor/control/detail/msvc/while.hpp new file mode 100644 index 0000000..e543e41 --- /dev/null +++ b/external/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 +# include +# +# 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/external/boost/preprocessor/control/detail/while.hpp b/external/boost/preprocessor/control/detail/while.hpp new file mode 100644 index 0000000..7315e1d --- /dev/null +++ b/external/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 +# include +# include +# +# 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/external/boost/preprocessor/control/expr_if.hpp b/external/boost/preprocessor/control/expr_if.hpp new file mode 100644 index 0000000..0e1ab51 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/control/expr_iif.hpp b/external/boost/preprocessor/control/expr_iif.hpp new file mode 100644 index 0000000..58f45a4 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/control/if.hpp b/external/boost/preprocessor/control/if.hpp new file mode 100644 index 0000000..52cfc3d --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/control/iif.hpp b/external/boost/preprocessor/control/iif.hpp new file mode 100644 index 0000000..fd07817 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/control/while.hpp b/external/boost/preprocessor/control/while.hpp new file mode 100644 index 0000000..e8a65ff --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# +# /* 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 +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# include +# 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/external/boost/preprocessor/debug/error.hpp b/external/boost/preprocessor/debug/error.hpp new file mode 100644 index 0000000..c8ae5e7 --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/dec.hpp b/external/boost/preprocessor/dec.hpp new file mode 100644 index 0000000..d572064 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/detail/auto_rec.hpp b/external/boost/preprocessor/detail/auto_rec.hpp new file mode 100644 index 0000000..39de1d0 --- /dev/null +++ b/external/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 +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# +# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP +# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP +# +# include +# +# /* 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/external/boost/preprocessor/detail/check.hpp b/external/boost/preprocessor/detail/check.hpp new file mode 100644 index 0000000..63f8ff9 --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/detail/dmc/auto_rec.hpp b/external/boost/preprocessor/detail/dmc/auto_rec.hpp new file mode 100644 index 0000000..37fbe04 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/detail/is_binary.hpp b/external/boost/preprocessor/detail/is_binary.hpp new file mode 100644 index 0000000..3428833 --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/empty.hpp b/external/boost/preprocessor/empty.hpp new file mode 100644 index 0000000..116ef74 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/enum.hpp b/external/boost/preprocessor/enum.hpp new file mode 100644 index 0000000..ae05bb0 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/enum_params.hpp b/external/boost/preprocessor/enum_params.hpp new file mode 100644 index 0000000..414f8aa --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/enum_params_with_a_default.hpp b/external/boost/preprocessor/enum_params_with_a_default.hpp new file mode 100644 index 0000000..fd1ad4c --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/enum_shifted_params.hpp b/external/boost/preprocessor/enum_shifted_params.hpp new file mode 100644 index 0000000..462c642 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/expr_if.hpp b/external/boost/preprocessor/expr_if.hpp new file mode 100644 index 0000000..f93e29b --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/facilities/empty.hpp b/external/boost/preprocessor/facilities/empty.hpp new file mode 100644 index 0000000..46db190 --- /dev/null +++ b/external/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/external/boost/preprocessor/facilities/identity.hpp b/external/boost/preprocessor/facilities/identity.hpp new file mode 100644 index 0000000..13ec4ca --- /dev/null +++ b/external/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_PP_IDENTITY */ +# +# define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY +# +# endif diff --git a/external/boost/preprocessor/facilities/intercept.hpp b/external/boost/preprocessor/facilities/intercept.hpp new file mode 100644 index 0000000..41dcc6a --- /dev/null +++ b/external/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/external/boost/preprocessor/facilities/overload.hpp b/external/boost/preprocessor/facilities/overload.hpp new file mode 100644 index 0000000..1576316 --- /dev/null +++ b/external/boost/preprocessor/facilities/overload.hpp @@ -0,0 +1,25 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2011. * +# * (C) Copyright Edward Diener 2011. * +# * Distributed under the Boost Software License, Version 1.0. (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_OVERLOAD_HPP +# define BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP +# +# include +# include +# +# /* BOOST_PP_OVERLOAD */ +# +# if BOOST_PP_VARIADICS +# define BOOST_PP_OVERLOAD(prefix, ...) BOOST_PP_CAT(prefix, BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)) +# endif +# +# endif diff --git a/external/boost/preprocessor/identity.hpp b/external/boost/preprocessor/identity.hpp new file mode 100644 index 0000000..847dd13 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/inc.hpp b/external/boost/preprocessor/inc.hpp new file mode 100644 index 0000000..b98d3a6 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/iterate.hpp b/external/boost/preprocessor/iterate.hpp new file mode 100644 index 0000000..e720ec8 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/iteration/detail/bounds/lower1.hpp b/external/boost/preprocessor/iteration/detail/bounds/lower1.hpp new file mode 100644 index 0000000..6694d0b --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/lower2.hpp b/external/boost/preprocessor/iteration/detail/bounds/lower2.hpp new file mode 100644 index 0000000..ece21fc --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/lower3.hpp b/external/boost/preprocessor/iteration/detail/bounds/lower3.hpp new file mode 100644 index 0000000..8429eac --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/lower4.hpp b/external/boost/preprocessor/iteration/detail/bounds/lower4.hpp new file mode 100644 index 0000000..ba0832f --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/lower5.hpp b/external/boost/preprocessor/iteration/detail/bounds/lower5.hpp new file mode 100644 index 0000000..f4888c7 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/upper1.hpp b/external/boost/preprocessor/iteration/detail/bounds/upper1.hpp new file mode 100644 index 0000000..50d0fcf --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/upper2.hpp b/external/boost/preprocessor/iteration/detail/bounds/upper2.hpp new file mode 100644 index 0000000..faef6f4 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/upper3.hpp b/external/boost/preprocessor/iteration/detail/bounds/upper3.hpp new file mode 100644 index 0000000..38d9ade --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/upper4.hpp b/external/boost/preprocessor/iteration/detail/bounds/upper4.hpp new file mode 100644 index 0000000..7f771c2 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/bounds/upper5.hpp b/external/boost/preprocessor/iteration/detail/bounds/upper5.hpp new file mode 100644 index 0000000..9f27d58 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/finish.hpp b/external/boost/preprocessor/iteration/detail/finish.hpp new file mode 100644 index 0000000..0236944 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/detail/iter/forward1.hpp b/external/boost/preprocessor/iteration/detail/iter/forward1.hpp new file mode 100644 index 0000000..3c6a458 --- /dev/null +++ b/external/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 +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# 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 +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_1) +# include +# 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 +# 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/external/boost/preprocessor/iteration/detail/iter/forward2.hpp b/external/boost/preprocessor/iteration/detail/iter/forward2.hpp new file mode 100644 index 0000000..e61a329 --- /dev/null +++ b/external/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 +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# 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 +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_2) +# include +# 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 +# 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/external/boost/preprocessor/iteration/detail/iter/forward3.hpp b/external/boost/preprocessor/iteration/detail/iter/forward3.hpp new file mode 100644 index 0000000..e68966f --- /dev/null +++ b/external/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 +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# 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 +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_3) +# include +# 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 +# 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/external/boost/preprocessor/iteration/detail/iter/forward4.hpp b/external/boost/preprocessor/iteration/detail/iter/forward4.hpp new file mode 100644 index 0000000..1b4f588 --- /dev/null +++ b/external/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 +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# 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 +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_4) +# include +# 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 +# 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/external/boost/preprocessor/iteration/detail/iter/forward5.hpp b/external/boost/preprocessor/iteration/detail/iter/forward5.hpp new file mode 100644 index 0000000..7617607 --- /dev/null +++ b/external/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 +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS) +# include +# 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 +# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_5) +# include +# 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 +# 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/external/boost/preprocessor/iteration/detail/iter/reverse1.hpp b/external/boost/preprocessor/iteration/detail/iter/reverse1.hpp new file mode 100644 index 0000000..bf88d2f --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/iter/reverse2.hpp b/external/boost/preprocessor/iteration/detail/iter/reverse2.hpp new file mode 100644 index 0000000..521bd24 --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/iter/reverse3.hpp b/external/boost/preprocessor/iteration/detail/iter/reverse3.hpp new file mode 100644 index 0000000..0a65514 --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/iter/reverse4.hpp b/external/boost/preprocessor/iteration/detail/iter/reverse4.hpp new file mode 100644 index 0000000..3bcfba0 --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/iter/reverse5.hpp b/external/boost/preprocessor/iteration/detail/iter/reverse5.hpp new file mode 100644 index 0000000..225a557 --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/local.hpp b/external/boost/preprocessor/iteration/detail/local.hpp new file mode 100644 index 0000000..ccddd5e --- /dev/null +++ b/external/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 +# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS) +# include +# 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 +# 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/external/boost/preprocessor/iteration/detail/rlocal.hpp b/external/boost/preprocessor/iteration/detail/rlocal.hpp new file mode 100644 index 0000000..413afa0 --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/self.hpp b/external/boost/preprocessor/iteration/detail/self.hpp new file mode 100644 index 0000000..757185c --- /dev/null +++ b/external/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/external/boost/preprocessor/iteration/detail/start.hpp b/external/boost/preprocessor/iteration/detail/start.hpp new file mode 100644 index 0000000..cbf0381 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/iteration/iterate.hpp b/external/boost/preprocessor/iteration/iterate.hpp new file mode 100644 index 0000000..8f861e7 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# +# /* 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 +# define BOOST_PP_ITERATE_2 +# define BOOST_PP_ITERATE_3 +# define BOOST_PP_ITERATE_4 +# define BOOST_PP_ITERATE_5 +# +# endif diff --git a/external/boost/preprocessor/iteration/local.hpp b/external/boost/preprocessor/iteration/local.hpp new file mode 100644 index 0000000..289fb1a --- /dev/null +++ b/external/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 +# include +# include +# +# /* BOOST_PP_LOCAL_ITERATE */ +# +# define BOOST_PP_LOCAL_ITERATE() +# +# 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/external/boost/preprocessor/iteration/self.hpp b/external/boost/preprocessor/iteration/self.hpp new file mode 100644 index 0000000..6e0464c --- /dev/null +++ b/external/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() +# +# endif diff --git a/external/boost/preprocessor/list/adt.hpp b/external/boost/preprocessor/list/adt.hpp new file mode 100644 index 0000000..b4f12ba --- /dev/null +++ b/external/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 +# include +# include +# include +# +# /* 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/external/boost/preprocessor/list/append.hpp b/external/boost/preprocessor/list/append.hpp new file mode 100644 index 0000000..26e9d74 --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/list/detail/dmc/fold_left.hpp b/external/boost/preprocessor/list/detail/dmc/fold_left.hpp new file mode 100644 index 0000000..844ac5b --- /dev/null +++ b/external/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 +# include +# include +# include +# +# 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/external/boost/preprocessor/list/detail/edg/fold_left.hpp b/external/boost/preprocessor/list/detail/edg/fold_left.hpp new file mode 100644 index 0000000..ae9524f --- /dev/null +++ b/external/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 +# include +# include +# include +# +# 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/external/boost/preprocessor/list/detail/edg/fold_right.hpp b/external/boost/preprocessor/list/detail/edg/fold_right.hpp new file mode 100644 index 0000000..d372d2e --- /dev/null +++ b/external/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 +# include +# include +# +# 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/external/boost/preprocessor/list/detail/fold_left.hpp b/external/boost/preprocessor/list/detail/fold_left.hpp new file mode 100644 index 0000000..f5fcab7 --- /dev/null +++ b/external/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 +# include +# include +# include +# +# 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/external/boost/preprocessor/list/detail/fold_right.hpp b/external/boost/preprocessor/list/detail/fold_right.hpp new file mode 100644 index 0000000..29146d5 --- /dev/null +++ b/external/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 +# include +# +# 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/external/boost/preprocessor/list/fold_left.hpp b/external/boost/preprocessor/list/fold_left.hpp new file mode 100644 index 0000000..f235aec --- /dev/null +++ b/external/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 +# include +# include +# include +# +# /* 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 +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# include +# 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/external/boost/preprocessor/list/fold_right.hpp b/external/boost/preprocessor/list/fold_right.hpp new file mode 100644 index 0000000..ce18afe --- /dev/null +++ b/external/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 +# include +# include +# include +# +# 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 +# else +# include +# endif +# +# endif diff --git a/external/boost/preprocessor/list/for_each_i.hpp b/external/boost/preprocessor/list/for_each_i.hpp new file mode 100644 index 0000000..8f02e2e --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/list/reverse.hpp b/external/boost/preprocessor/list/reverse.hpp new file mode 100644 index 0000000..651da05 --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/list/transform.hpp b/external/boost/preprocessor/list/transform.hpp new file mode 100644 index 0000000..840f306 --- /dev/null +++ b/external/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 +# include +# include +# include +# +# /* 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/external/boost/preprocessor/logical/and.hpp b/external/boost/preprocessor/logical/and.hpp new file mode 100644 index 0000000..8590365 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/logical/bitand.hpp b/external/boost/preprocessor/logical/bitand.hpp new file mode 100644 index 0000000..74e9527 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/logical/bool.hpp b/external/boost/preprocessor/logical/bool.hpp new file mode 100644 index 0000000..fc01b5b --- /dev/null +++ b/external/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_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/external/boost/preprocessor/logical/compl.hpp b/external/boost/preprocessor/logical/compl.hpp new file mode 100644 index 0000000..ad4c7a4 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/logical/not.hpp b/external/boost/preprocessor/logical/not.hpp new file mode 100644 index 0000000..b509d3f --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/punctuation/comma.hpp b/external/boost/preprocessor/punctuation/comma.hpp new file mode 100644 index 0000000..38c2e0e --- /dev/null +++ b/external/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/external/boost/preprocessor/punctuation/comma_if.hpp b/external/boost/preprocessor/punctuation/comma_if.hpp new file mode 100644 index 0000000..c711f36 --- /dev/null +++ b/external/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 +# include +# include +# include +# +# /* 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/external/boost/preprocessor/punctuation/paren.hpp b/external/boost/preprocessor/punctuation/paren.hpp new file mode 100644 index 0000000..28c18cb --- /dev/null +++ b/external/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/external/boost/preprocessor/repeat.hpp b/external/boost/preprocessor/repeat.hpp new file mode 100644 index 0000000..7c47ee8 --- /dev/null +++ b/external/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 +# +# endif diff --git a/external/boost/preprocessor/repetition/detail/dmc/for.hpp b/external/boost/preprocessor/repetition/detail/dmc/for.hpp new file mode 100644 index 0000000..1d907ff --- /dev/null +++ b/external/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 +# include +# include +# include +# +# 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/external/boost/preprocessor/repetition/detail/edg/for.hpp b/external/boost/preprocessor/repetition/detail/edg/for.hpp new file mode 100644 index 0000000..212921a --- /dev/null +++ b/external/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 +# include +# +# 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/external/boost/preprocessor/repetition/detail/for.hpp b/external/boost/preprocessor/repetition/detail/for.hpp new file mode 100644 index 0000000..2770f2c --- /dev/null +++ b/external/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 +# include +# include +# include +# +# 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/external/boost/preprocessor/repetition/detail/msvc/for.hpp b/external/boost/preprocessor/repetition/detail/msvc/for.hpp new file mode 100644 index 0000000..35c1996 --- /dev/null +++ b/external/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 +# include +# +# 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/external/boost/preprocessor/repetition/enum.hpp b/external/boost/preprocessor/repetition/enum.hpp new file mode 100644 index 0000000..0198cd9 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/repetition/enum_binary_params.hpp b/external/boost/preprocessor/repetition/enum_binary_params.hpp new file mode 100644 index 0000000..a2c1048 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/repetition/enum_params.hpp b/external/boost/preprocessor/repetition/enum_params.hpp new file mode 100644 index 0000000..65a2369 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/repetition/enum_params_with_a_default.hpp b/external/boost/preprocessor/repetition/enum_params_with_a_default.hpp new file mode 100644 index 0000000..7496df6 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/repetition/enum_shifted_params.hpp b/external/boost/preprocessor/repetition/enum_shifted_params.hpp new file mode 100644 index 0000000..88b2bf4 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/repetition/enum_trailing_params.hpp b/external/boost/preprocessor/repetition/enum_trailing_params.hpp new file mode 100644 index 0000000..f7520db --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/repetition/for.hpp b/external/boost/preprocessor/repetition/for.hpp new file mode 100644 index 0000000..5a63753 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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 +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# include +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC() +# include +# else +# include +# 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/external/boost/preprocessor/repetition/repeat.hpp b/external/boost/preprocessor/repetition/repeat.hpp new file mode 100644 index 0000000..0172738 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/repetition/repeat_from_to.hpp b/external/boost/preprocessor/repetition/repeat_from_to.hpp new file mode 100644 index 0000000..efe539e --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/seq/cat.hpp b/external/boost/preprocessor/seq/cat.hpp new file mode 100644 index 0000000..b6b09ff --- /dev/null +++ b/external/boost/preprocessor/seq/cat.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_SEQ_CAT_HPP +# define BOOST_PREPROCESSOR_SEQ_CAT_HPP +# +# include +# include +# include +# include +# include +# include +# include +# +# /* 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) \ + /**/ +# 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_A, \ + BOOST_PP_SEQ_CAT_S_I_B \ + )(s, seq) \ + /**/ +# define BOOST_PP_SEQ_CAT_S_I_A(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq)) +# define BOOST_PP_SEQ_CAT_S_I_B(s, seq) BOOST_PP_SEQ_HEAD(seq) +# +# endif diff --git a/external/boost/preprocessor/seq/detail/split.hpp b/external/boost/preprocessor/seq/detail/split.hpp new file mode 100644 index 0000000..7c33931 --- /dev/null +++ b/external/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_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/external/boost/preprocessor/seq/elem.hpp b/external/boost/preprocessor/seq/elem.hpp new file mode 100644 index 0000000..9c7a4b2 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/seq/enum.hpp b/external/boost/preprocessor/seq/enum.hpp new file mode 100644 index 0000000..b63b242 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/seq/first_n.hpp b/external/boost/preprocessor/seq/first_n.hpp new file mode 100644 index 0000000..c3c0716 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/seq/fold_left.hpp b/external/boost/preprocessor/seq/fold_left.hpp new file mode 100644 index 0000000..ab051b6 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/seq/for_each.hpp b/external/boost/preprocessor/seq/for_each.hpp new file mode 100644 index 0000000..e997a9a --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/seq/for_each_i.hpp b/external/boost/preprocessor/seq/for_each_i.hpp new file mode 100644 index 0000000..c8edf5a --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/seq/rest_n.hpp b/external/boost/preprocessor/seq/rest_n.hpp new file mode 100644 index 0000000..7e589cc --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/seq/seq.hpp b/external/boost/preprocessor/seq/seq.hpp new file mode 100644 index 0000000..f5ca84c --- /dev/null +++ b/external/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 +# include +# +# /* 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/external/boost/preprocessor/seq/size.hpp b/external/boost/preprocessor/seq/size.hpp new file mode 100644 index 0000000..385c00a --- /dev/null +++ b/external/boost/preprocessor/seq/size.hpp @@ -0,0 +1,547 @@ +# /* ************************************************************************** +# * * +# * (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 +# include +# +# 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/external/boost/preprocessor/seq/subseq.hpp b/external/boost/preprocessor/seq/subseq.hpp new file mode 100644 index 0000000..fb242f1 --- /dev/null +++ b/external/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 +# include +# include +# +# /* 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/external/boost/preprocessor/seq/transform.hpp b/external/boost/preprocessor/seq/transform.hpp new file mode 100644 index 0000000..79d8108 --- /dev/null +++ b/external/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 +# include +# include +# include +# include +# +# /* 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/external/boost/preprocessor/slot/detail/counter.hpp b/external/boost/preprocessor/slot/detail/counter.hpp new file mode 100644 index 0000000..a1c0df1 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/slot/detail/def.hpp b/external/boost/preprocessor/slot/detail/def.hpp new file mode 100644 index 0000000..885099e --- /dev/null +++ b/external/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/external/boost/preprocessor/slot/detail/shared.hpp b/external/boost/preprocessor/slot/detail/shared.hpp new file mode 100644 index 0000000..c97ac54 --- /dev/null +++ b/external/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/external/boost/preprocessor/slot/detail/slot1.hpp b/external/boost/preprocessor/slot/detail/slot1.hpp new file mode 100644 index 0000000..b22748e --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/slot/detail/slot2.hpp b/external/boost/preprocessor/slot/detail/slot2.hpp new file mode 100644 index 0000000..5d5258c --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/slot/detail/slot3.hpp b/external/boost/preprocessor/slot/detail/slot3.hpp new file mode 100644 index 0000000..005cf21 --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/slot/detail/slot4.hpp b/external/boost/preprocessor/slot/detail/slot4.hpp new file mode 100644 index 0000000..9aa4d8a --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/slot/detail/slot5.hpp b/external/boost/preprocessor/slot/detail/slot5.hpp new file mode 100644 index 0000000..d17535d --- /dev/null +++ b/external/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 +# +# 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/external/boost/preprocessor/slot/slot.hpp b/external/boost/preprocessor/slot/slot.hpp new file mode 100644 index 0000000..147b097 --- /dev/null +++ b/external/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 +# include +# +# /* BOOST_PP_ASSIGN_SLOT */ +# +# define BOOST_PP_ASSIGN_SLOT(i) BOOST_PP_CAT(BOOST_PP_ASSIGN_SLOT_, i) +# +# define BOOST_PP_ASSIGN_SLOT_1 +# define BOOST_PP_ASSIGN_SLOT_2 +# define BOOST_PP_ASSIGN_SLOT_3 +# define BOOST_PP_ASSIGN_SLOT_4 +# define BOOST_PP_ASSIGN_SLOT_5 +# +# /* BOOST_PP_SLOT */ +# +# define BOOST_PP_SLOT(i) BOOST_PP_CAT(BOOST_PP_SLOT_, i)() +# +# endif diff --git a/external/boost/preprocessor/stringize.hpp b/external/boost/preprocessor/stringize.hpp new file mode 100644 index 0000000..64dd5fd --- /dev/null +++ b/external/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_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/external/boost/preprocessor/tuple/eat.hpp b/external/boost/preprocessor/tuple/eat.hpp new file mode 100644 index 0000000..708015e --- /dev/null +++ b/external/boost/preprocessor/tuple/eat.hpp @@ -0,0 +1,106 @@ +# /* 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-2011) */ +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_EAT_HPP +# define BOOST_PREPROCESSOR_TUPLE_EAT_HPP +# +# include +# +# /* BOOST_PP_EAT */ +# +# if BOOST_PP_VARIADICS +# define BOOST_PP_EAT(...) +# else +# define BOOST_PP_EAT(x) +# endif +# +# /* BOOST_PP_TUPLE_EAT */ +# +# if BOOST_PP_VARIADICS +# define BOOST_PP_TUPLE_EAT(size) BOOST_PP_EAT +# else +# 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 +# endif +# define BOOST_PP_TUPLE_EAT_1(e0) +# define BOOST_PP_TUPLE_EAT_2(e0, e1) +# define BOOST_PP_TUPLE_EAT_3(e0, e1, e2) +# define BOOST_PP_TUPLE_EAT_4(e0, e1, e2, e3) +# define BOOST_PP_TUPLE_EAT_5(e0, e1, e2, e3, e4) +# define BOOST_PP_TUPLE_EAT_6(e0, e1, e2, e3, e4, e5) +# define BOOST_PP_TUPLE_EAT_7(e0, e1, e2, e3, e4, e5, e6) +# define BOOST_PP_TUPLE_EAT_8(e0, e1, e2, e3, e4, e5, e6, e7) +# define BOOST_PP_TUPLE_EAT_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) +# define BOOST_PP_TUPLE_EAT_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) +# define BOOST_PP_TUPLE_EAT_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) +# define BOOST_PP_TUPLE_EAT_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) +# define BOOST_PP_TUPLE_EAT_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) +# define BOOST_PP_TUPLE_EAT_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) +# define BOOST_PP_TUPLE_EAT_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) +# define BOOST_PP_TUPLE_EAT_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) +# define BOOST_PP_TUPLE_EAT_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) +# define BOOST_PP_TUPLE_EAT_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) +# define BOOST_PP_TUPLE_EAT_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) +# define BOOST_PP_TUPLE_EAT_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) +# define BOOST_PP_TUPLE_EAT_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) +# define BOOST_PP_TUPLE_EAT_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) +# define BOOST_PP_TUPLE_EAT_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) +# define BOOST_PP_TUPLE_EAT_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) +# define BOOST_PP_TUPLE_EAT_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) +# define BOOST_PP_TUPLE_EAT_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) +# define BOOST_PP_TUPLE_EAT_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) +# define BOOST_PP_TUPLE_EAT_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) +# define BOOST_PP_TUPLE_EAT_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) +# define BOOST_PP_TUPLE_EAT_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) +# define BOOST_PP_TUPLE_EAT_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) +# define BOOST_PP_TUPLE_EAT_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) +# define BOOST_PP_TUPLE_EAT_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) +# define BOOST_PP_TUPLE_EAT_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) +# define BOOST_PP_TUPLE_EAT_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) +# define BOOST_PP_TUPLE_EAT_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) +# define BOOST_PP_TUPLE_EAT_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) +# define BOOST_PP_TUPLE_EAT_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) +# define BOOST_PP_TUPLE_EAT_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) +# define BOOST_PP_TUPLE_EAT_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) +# define BOOST_PP_TUPLE_EAT_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) +# define BOOST_PP_TUPLE_EAT_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) +# define BOOST_PP_TUPLE_EAT_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) +# define BOOST_PP_TUPLE_EAT_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) +# define BOOST_PP_TUPLE_EAT_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) +# define BOOST_PP_TUPLE_EAT_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) +# define BOOST_PP_TUPLE_EAT_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) +# define BOOST_PP_TUPLE_EAT_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) +# define BOOST_PP_TUPLE_EAT_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) +# define BOOST_PP_TUPLE_EAT_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) +# define BOOST_PP_TUPLE_EAT_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) +# define BOOST_PP_TUPLE_EAT_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) +# define BOOST_PP_TUPLE_EAT_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) +# define BOOST_PP_TUPLE_EAT_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) +# define BOOST_PP_TUPLE_EAT_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) +# define BOOST_PP_TUPLE_EAT_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) +# define BOOST_PP_TUPLE_EAT_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) +# define BOOST_PP_TUPLE_EAT_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) +# define BOOST_PP_TUPLE_EAT_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) +# define BOOST_PP_TUPLE_EAT_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) +# define BOOST_PP_TUPLE_EAT_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) +# define BOOST_PP_TUPLE_EAT_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) +# define BOOST_PP_TUPLE_EAT_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) +# define BOOST_PP_TUPLE_EAT_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) +# +# endif diff --git a/external/boost/preprocessor/tuple/elem.hpp b/external/boost/preprocessor/tuple/elem.hpp new file mode 100644 index 0000000..3eba1c5 --- /dev/null +++ b/external/boost/preprocessor/tuple/elem.hpp @@ -0,0 +1,191 @@ +# /* 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-2011) */ +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_ELEM_HPP +# define BOOST_PREPROCESSOR_TUPLE_ELEM_HPP +# +# include +# include +# include +# include +# include +# +# if BOOST_PP_VARIADICS +# if BOOST_PP_VARIADICS_MSVC +# define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__), (__VA_ARGS__)) +# define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args) +# define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,) +# else +# define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__)(__VA_ARGS__) +# endif +# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple) +# define BOOST_PP_TUPLE_ELEM_O_3(size, n, tuple) BOOST_PP_TUPLE_ELEM_O_2(n, tuple) +# else +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n), BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size), tuple)) +# define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args) +# define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,) +# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() +# define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I_OO((size, n, tuple)) +# define BOOST_PP_TUPLE_ELEM_I_OO(par) BOOST_PP_TUPLE_ELEM_I ## par +# define BOOST_PP_TUPLE_ELEM_I(size, n, tuple) BOOST_PP_TUPLE_ELEM_II((n, BOOST_PP_TUPLE_ELEM_E_ ## size ## tuple)) +# define BOOST_PP_TUPLE_ELEM_II(par) BOOST_PP_TUPLE_ELEM_III_OO(par) +# define BOOST_PP_TUPLE_ELEM_III_OO(par) BOOST_PP_TUPLE_ELEM_III ## par +# define BOOST_PP_TUPLE_ELEM_III(n, etuple) BOOST_PP_TUPLE_ELEM_ ## n ## etuple +# else +# define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size) tuple) +# define BOOST_PP_TUPLE_ELEM_I(x) x +# endif +# define BOOST_PP_TUPLE_ELEM_E_1(e0) (e0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_2(e0, e1) (e0, e1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_3(e0, e1, e2) (e0, e1, e2, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_4(e0, e1, e2, e3) (e0, e1, e2, e3, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_5(e0, e1, e2, e3, e4) (e0, e1, e2, e3, e4, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_6(e0, e1, e2, e3, e4, e5) (e0, e1, e2, e3, e4, e5, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_7(e0, e1, e2, e3, e4, e5, e6) (e0, e1, e2, e3, e4, e5, e6, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, e1, e2, e3, e4, e5, e6, e7, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, e1, e2, e3, e4, e5, e6, e7, e8, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ?, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ?, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ?, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ?, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ?, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ?, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ?, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ?, ?) +# define BOOST_PP_TUPLE_ELEM_E_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ?) +# define BOOST_PP_TUPLE_ELEM_E_64 +# define BOOST_PP_TUPLE_ELEM_0(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0 +# define BOOST_PP_TUPLE_ELEM_1(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e1 +# define BOOST_PP_TUPLE_ELEM_2(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e2 +# define BOOST_PP_TUPLE_ELEM_3(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e3 +# define BOOST_PP_TUPLE_ELEM_4(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e4 +# define BOOST_PP_TUPLE_ELEM_5(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e5 +# define BOOST_PP_TUPLE_ELEM_6(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e6 +# define BOOST_PP_TUPLE_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e7 +# define BOOST_PP_TUPLE_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e8 +# define BOOST_PP_TUPLE_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e9 +# define BOOST_PP_TUPLE_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e10 +# define BOOST_PP_TUPLE_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e11 +# define BOOST_PP_TUPLE_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e12 +# define BOOST_PP_TUPLE_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e13 +# define BOOST_PP_TUPLE_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e14 +# define BOOST_PP_TUPLE_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e15 +# define BOOST_PP_TUPLE_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e16 +# define BOOST_PP_TUPLE_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e17 +# define BOOST_PP_TUPLE_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e18 +# define BOOST_PP_TUPLE_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e19 +# define BOOST_PP_TUPLE_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e20 +# define BOOST_PP_TUPLE_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e21 +# define BOOST_PP_TUPLE_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e22 +# define BOOST_PP_TUPLE_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e23 +# define BOOST_PP_TUPLE_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e24 +# define BOOST_PP_TUPLE_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e25 +# define BOOST_PP_TUPLE_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e26 +# define BOOST_PP_TUPLE_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e27 +# define BOOST_PP_TUPLE_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e28 +# define BOOST_PP_TUPLE_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e29 +# define BOOST_PP_TUPLE_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e30 +# define BOOST_PP_TUPLE_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e31 +# define BOOST_PP_TUPLE_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e32 +# define BOOST_PP_TUPLE_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e33 +# define BOOST_PP_TUPLE_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e34 +# define BOOST_PP_TUPLE_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e35 +# define BOOST_PP_TUPLE_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e36 +# define BOOST_PP_TUPLE_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e37 +# define BOOST_PP_TUPLE_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e38 +# define BOOST_PP_TUPLE_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e39 +# define BOOST_PP_TUPLE_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e40 +# define BOOST_PP_TUPLE_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e41 +# define BOOST_PP_TUPLE_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e42 +# define BOOST_PP_TUPLE_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e43 +# define BOOST_PP_TUPLE_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e44 +# define BOOST_PP_TUPLE_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e45 +# define BOOST_PP_TUPLE_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e46 +# define BOOST_PP_TUPLE_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e47 +# define BOOST_PP_TUPLE_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e48 +# define BOOST_PP_TUPLE_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e49 +# define BOOST_PP_TUPLE_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e50 +# define BOOST_PP_TUPLE_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e51 +# define BOOST_PP_TUPLE_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e52 +# define BOOST_PP_TUPLE_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e53 +# define BOOST_PP_TUPLE_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e54 +# define BOOST_PP_TUPLE_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e55 +# define BOOST_PP_TUPLE_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e56 +# define BOOST_PP_TUPLE_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e57 +# define BOOST_PP_TUPLE_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e58 +# define BOOST_PP_TUPLE_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e59 +# define BOOST_PP_TUPLE_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e60 +# define BOOST_PP_TUPLE_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e61 +# define BOOST_PP_TUPLE_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e62 +# define BOOST_PP_TUPLE_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e63 +# endif +# +# /* directly used elsewhere in Boost... */ +# +# 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 +# +# endif diff --git a/external/boost/preprocessor/tuple/rem.hpp b/external/boost/preprocessor/tuple/rem.hpp new file mode 100644 index 0000000..4e3362c --- /dev/null +++ b/external/boost/preprocessor/tuple/rem.hpp @@ -0,0 +1,134 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002-2011. * +# * (C) Copyright Edward Diener 2011. * +# * Distributed under the Boost Software License, Version 1.0. (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 +# include +# include +# +# /* BOOST_PP_REM */ +# +# if BOOST_PP_VARIADICS +# define BOOST_PP_REM(...) __VA_ARGS__ +# else +# define BOOST_PP_REM(x) x +# endif +# +# /* BOOST_PP_TUPLE_REM */ +# +# if BOOST_PP_VARIADICS +# define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM +# else +# 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 +# endif +# define BOOST_PP_TUPLE_REM_1(e0) e0 +# define BOOST_PP_TUPLE_REM_2(e0, e1) e0, e1 +# define BOOST_PP_TUPLE_REM_3(e0, e1, e2) e0, e1, e2 +# define BOOST_PP_TUPLE_REM_4(e0, e1, e2, e3) e0, e1, e2, e3 +# define BOOST_PP_TUPLE_REM_5(e0, e1, e2, e3, e4) e0, e1, e2, e3, e4 +# define BOOST_PP_TUPLE_REM_6(e0, e1, e2, e3, e4, e5) e0, e1, e2, e3, e4, e5 +# define BOOST_PP_TUPLE_REM_7(e0, e1, e2, e3, e4, e5, e6) e0, e1, e2, e3, e4, e5, e6 +# define BOOST_PP_TUPLE_REM_8(e0, e1, e2, e3, e4, e5, e6, e7) e0, e1, e2, e3, e4, e5, e6, e7 +# define BOOST_PP_TUPLE_REM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) e0, e1, e2, e3, e4, e5, e6, e7, e8 +# define BOOST_PP_TUPLE_REM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 +# define BOOST_PP_TUPLE_REM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 +# define BOOST_PP_TUPLE_REM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 +# define BOOST_PP_TUPLE_REM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 +# define BOOST_PP_TUPLE_REM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 +# define BOOST_PP_TUPLE_REM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 +# define BOOST_PP_TUPLE_REM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 +# define BOOST_PP_TUPLE_REM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16 +# define BOOST_PP_TUPLE_REM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17 +# define BOOST_PP_TUPLE_REM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18 +# define BOOST_PP_TUPLE_REM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19 +# define BOOST_PP_TUPLE_REM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20 +# define BOOST_PP_TUPLE_REM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21 +# define BOOST_PP_TUPLE_REM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22 +# define BOOST_PP_TUPLE_REM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23 +# define BOOST_PP_TUPLE_REM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24 +# define BOOST_PP_TUPLE_REM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25 +# define BOOST_PP_TUPLE_REM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26 +# define BOOST_PP_TUPLE_REM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27 +# define BOOST_PP_TUPLE_REM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28 +# define BOOST_PP_TUPLE_REM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29 +# define BOOST_PP_TUPLE_REM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30 +# define BOOST_PP_TUPLE_REM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31 +# define BOOST_PP_TUPLE_REM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32 +# define BOOST_PP_TUPLE_REM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33 +# define BOOST_PP_TUPLE_REM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34 +# define BOOST_PP_TUPLE_REM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35 +# define BOOST_PP_TUPLE_REM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36 +# define BOOST_PP_TUPLE_REM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37 +# define BOOST_PP_TUPLE_REM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38 +# define BOOST_PP_TUPLE_REM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39 +# define BOOST_PP_TUPLE_REM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40 +# define BOOST_PP_TUPLE_REM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41 +# define BOOST_PP_TUPLE_REM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42 +# define BOOST_PP_TUPLE_REM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43 +# define BOOST_PP_TUPLE_REM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44 +# define BOOST_PP_TUPLE_REM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45 +# define BOOST_PP_TUPLE_REM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46 +# define BOOST_PP_TUPLE_REM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47 +# define BOOST_PP_TUPLE_REM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48 +# define BOOST_PP_TUPLE_REM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49 +# define BOOST_PP_TUPLE_REM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50 +# define BOOST_PP_TUPLE_REM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51 +# define BOOST_PP_TUPLE_REM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52 +# define BOOST_PP_TUPLE_REM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53 +# define BOOST_PP_TUPLE_REM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54 +# define BOOST_PP_TUPLE_REM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55 +# define BOOST_PP_TUPLE_REM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56 +# define BOOST_PP_TUPLE_REM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57 +# define BOOST_PP_TUPLE_REM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58 +# define BOOST_PP_TUPLE_REM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59 +# define BOOST_PP_TUPLE_REM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60 +# define BOOST_PP_TUPLE_REM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61 +# define BOOST_PP_TUPLE_REM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62 +# define BOOST_PP_TUPLE_REM_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63 +# +# /* BOOST_PP_TUPLE_REM_CTOR */ +# +# if BOOST_PP_VARIADICS +# if BOOST_PP_VARIADICS_MSVC +# define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__)) +# define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args) +# define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,) +# else +# define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__)(__VA_ARGS__) +# endif +# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple +# define BOOST_PP_TUPLE_REM_CTOR_O_2(size, tuple) BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) +# else +# 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 +# +# endif diff --git a/external/boost/preprocessor/tuple/to_list.hpp b/external/boost/preprocessor/tuple/to_list.hpp new file mode 100644 index 0000000..2a9d6fe --- /dev/null +++ b/external/boost/preprocessor/tuple/to_list.hpp @@ -0,0 +1,116 @@ +# /* 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-2011) */ +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP +# define BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP +# +# include +# include +# include +# include +# +# /* BOOST_PP_TUPLE_TO_LIST */ +# +# if BOOST_PP_VARIADICS +# if BOOST_PP_VARIADICS_MSVC +# define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__)) +# define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args) +# define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,) +# else +# define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__) +# endif +# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple +# define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple) +# else +# 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 +# endif +# +# define BOOST_PP_TUPLE_TO_LIST_1(e0) (e0, BOOST_PP_NIL) +# define BOOST_PP_TUPLE_TO_LIST_2(e0, e1) (e0, (e1, BOOST_PP_NIL)) +# define BOOST_PP_TUPLE_TO_LIST_3(e0, e1, e2) (e0, (e1, (e2, BOOST_PP_NIL))) +# define BOOST_PP_TUPLE_TO_LIST_4(e0, e1, e2, e3) (e0, (e1, (e2, (e3, BOOST_PP_NIL)))) +# define BOOST_PP_TUPLE_TO_LIST_5(e0, e1, e2, e3, e4) (e0, (e1, (e2, (e3, (e4, BOOST_PP_NIL))))) +# define BOOST_PP_TUPLE_TO_LIST_6(e0, e1, e2, e3, e4, e5) (e0, (e1, (e2, (e3, (e4, (e5, BOOST_PP_NIL)))))) +# define BOOST_PP_TUPLE_TO_LIST_7(e0, e1, e2, e3, e4, e5, e6) (e0, (e1, (e2, (e3, (e4, (e5, (e6, BOOST_PP_NIL))))))) +# define BOOST_PP_TUPLE_TO_LIST_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, BOOST_PP_NIL)))))))) +# define BOOST_PP_TUPLE_TO_LIST_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, BOOST_PP_NIL))))))))) +# define BOOST_PP_TUPLE_TO_LIST_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, BOOST_PP_NIL)))))))))) +# define BOOST_PP_TUPLE_TO_LIST_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, BOOST_PP_NIL))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, BOOST_PP_NIL)))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, BOOST_PP_NIL))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, BOOST_PP_NIL)))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, BOOST_PP_NIL))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, BOOST_PP_NIL)))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, BOOST_PP_NIL))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, BOOST_PP_NIL)))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, BOOST_PP_NIL))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, BOOST_PP_NIL)))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, BOOST_PP_NIL))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, BOOST_PP_NIL)))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, BOOST_PP_NIL))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, BOOST_PP_NIL)))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, BOOST_PP_NIL))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, BOOST_PP_NIL)))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, BOOST_PP_NIL))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, BOOST_PP_NIL)))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, BOOST_PP_NIL))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, BOOST_PP_NIL)))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, BOOST_PP_NIL))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, BOOST_PP_NIL)))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, BOOST_PP_NIL))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, BOOST_PP_NIL)))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, BOOST_PP_NIL))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, (e62, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# define BOOST_PP_TUPLE_TO_LIST_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, (e62, (e63, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +# +# endif diff --git a/external/boost/preprocessor/variadic/elem.hpp b/external/boost/preprocessor/variadic/elem.hpp new file mode 100644 index 0000000..be38a94 --- /dev/null +++ b/external/boost/preprocessor/variadic/elem.hpp @@ -0,0 +1,94 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2011. * +# * (C) Copyright Paul Mensonides 2011. * +# * Distributed under the Boost Software License, Version 1.0. (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_VARIADIC_ELEM_HPP +# define BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP +# +# include +# include +# +# /* BOOST_PP_VARIADIC_ELEM */ +# +# if BOOST_PP_VARIADICS +# if BOOST_PP_VARIADICS_MSVC +# define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_VARIADIC_ELEM_I(n,__VA_ARGS__) +# define BOOST_PP_VARIADIC_ELEM_I(n, ...) BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,),) +# else +# define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,) +# endif +# define BOOST_PP_VARIADIC_ELEM_0(e0, ...) e0 +# define BOOST_PP_VARIADIC_ELEM_1(e0, e1, ...) e1 +# define BOOST_PP_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 +# define BOOST_PP_VARIADIC_ELEM_3(e0, e1, e2, e3, ...) e3 +# define BOOST_PP_VARIADIC_ELEM_4(e0, e1, e2, e3, e4, ...) e4 +# define BOOST_PP_VARIADIC_ELEM_5(e0, e1, e2, e3, e4, e5, ...) e5 +# define BOOST_PP_VARIADIC_ELEM_6(e0, e1, e2, e3, e4, e5, e6, ...) e6 +# define BOOST_PP_VARIADIC_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, ...) e7 +# define BOOST_PP_VARIADIC_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, ...) e8 +# define BOOST_PP_VARIADIC_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ...) e9 +# define BOOST_PP_VARIADIC_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ...) e10 +# define BOOST_PP_VARIADIC_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ...) e11 +# define BOOST_PP_VARIADIC_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ...) e12 +# define BOOST_PP_VARIADIC_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ...) e13 +# define BOOST_PP_VARIADIC_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ...) e14 +# define BOOST_PP_VARIADIC_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ...) e15 +# define BOOST_PP_VARIADIC_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ...) e16 +# define BOOST_PP_VARIADIC_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ...) e17 +# define BOOST_PP_VARIADIC_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ...) e18 +# define BOOST_PP_VARIADIC_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ...) e19 +# define BOOST_PP_VARIADIC_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ...) e20 +# define BOOST_PP_VARIADIC_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ...) e21 +# define BOOST_PP_VARIADIC_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ...) e22 +# define BOOST_PP_VARIADIC_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ...) e23 +# define BOOST_PP_VARIADIC_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ...) e24 +# define BOOST_PP_VARIADIC_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ...) e25 +# define BOOST_PP_VARIADIC_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ...) e26 +# define BOOST_PP_VARIADIC_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ...) e27 +# define BOOST_PP_VARIADIC_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ...) e28 +# define BOOST_PP_VARIADIC_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ...) e29 +# define BOOST_PP_VARIADIC_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ...) e30 +# define BOOST_PP_VARIADIC_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ...) e31 +# define BOOST_PP_VARIADIC_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ...) e32 +# define BOOST_PP_VARIADIC_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ...) e33 +# define BOOST_PP_VARIADIC_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ...) e34 +# define BOOST_PP_VARIADIC_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ...) e35 +# define BOOST_PP_VARIADIC_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ...) e36 +# define BOOST_PP_VARIADIC_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ...) e37 +# define BOOST_PP_VARIADIC_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ...) e38 +# define BOOST_PP_VARIADIC_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ...) e39 +# define BOOST_PP_VARIADIC_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ...) e40 +# define BOOST_PP_VARIADIC_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ...) e41 +# define BOOST_PP_VARIADIC_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ...) e42 +# define BOOST_PP_VARIADIC_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ...) e43 +# define BOOST_PP_VARIADIC_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ...) e44 +# define BOOST_PP_VARIADIC_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ...) e45 +# define BOOST_PP_VARIADIC_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ...) e46 +# define BOOST_PP_VARIADIC_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ...) e47 +# define BOOST_PP_VARIADIC_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ...) e48 +# define BOOST_PP_VARIADIC_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ...) e49 +# define BOOST_PP_VARIADIC_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ...) e50 +# define BOOST_PP_VARIADIC_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ...) e51 +# define BOOST_PP_VARIADIC_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ...) e52 +# define BOOST_PP_VARIADIC_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ...) e53 +# define BOOST_PP_VARIADIC_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ...) e54 +# define BOOST_PP_VARIADIC_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ...) e55 +# define BOOST_PP_VARIADIC_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ...) e56 +# define BOOST_PP_VARIADIC_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ...) e57 +# define BOOST_PP_VARIADIC_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ...) e58 +# define BOOST_PP_VARIADIC_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ...) e59 +# define BOOST_PP_VARIADIC_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ...) e60 +# define BOOST_PP_VARIADIC_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ...) e61 +# define BOOST_PP_VARIADIC_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ...) e62 +# define BOOST_PP_VARIADIC_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, ...) e63 +# endif +# +# endif diff --git a/external/boost/preprocessor/variadic/size.hpp b/external/boost/preprocessor/variadic/size.hpp new file mode 100644 index 0000000..b92a5ff --- /dev/null +++ b/external/boost/preprocessor/variadic/size.hpp @@ -0,0 +1,30 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2011. * +# * (C) Copyright Paul Mensonides 2011. * +# * Distributed under the Boost Software License, Version 1.0. (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_VARIADIC_SIZE_HPP +# define BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP +# +# include +# include +# +# /* BOOST_PP_VARIADIC_SIZE */ +# +# if BOOST_PP_VARIADICS +# if BOOST_PP_VARIADICS_MSVC +# define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),) +# else +# define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,) +# endif +# define BOOST_PP_VARIADIC_SIZE_I(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, size, ...) size +# endif +# +# endif diff --git a/external/boost/program_options.hpp b/external/boost/program_options.hpp new file mode 100644 index 0000000..9d12b08 --- /dev/null +++ b/external/boost/program_options.hpp @@ -0,0 +1,25 @@ +// 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) + +// See www.boost.org/libs/program_options for documentation. + +#ifndef PROGRAM_OPTIONS_VP_2003_05_19 +#define PROGRAM_OPTIONS_VP_2003_05_19 + +#if _MSC_VER >= 1020 +#pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/external/boost/program_options/cmdline.hpp b/external/boost/program_options/cmdline.hpp new file mode 100644 index 0000000..8705e60 --- /dev/null +++ b/external/boost/program_options/cmdline.hpp @@ -0,0 +1,90 @@ +// 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, + /// Allow "--foo=10 + */ + allow_long_disguise = short_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/external/boost/program_options/config.hpp b/external/boost/program_options/config.hpp new file mode 100644 index 0000000..8b70521 --- /dev/null +++ b/external/boost/program_options/config.hpp @@ -0,0 +1,52 @@ +// 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 +#include + +// 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 + +#endif // auto-linking disabled + +#endif // BOOST_VERSION + +/////////////////////////////////////////////////////////////////////////////// +#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 BOOST_SYMBOL_EXPORT +#else +# define BOOST_PROGRAM_OPTIONS_DECL BOOST_SYMBOL_IMPORT +#endif // BOOST_PROGRAM_OPTIONS_SOURCE +#endif // DYN_LINK + +#ifndef BOOST_PROGRAM_OPTIONS_DECL +#define BOOST_PROGRAM_OPTIONS_DECL +#endif + + +#endif // PROGRAM_OPTIONS_CONFIG_HK_2004_01_11 + diff --git a/external/boost/program_options/detail/cmdline.hpp b/external/boost/program_options/detail/cmdline.hpp new file mode 100644 index 0000000..7c43152 --- /dev/null +++ b/external/boost/program_options/detail/cmdline.hpp @@ -0,0 +1,147 @@ +// 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 +#include +#include +#include +#include +#include + + +#include + +#include + +#include +#include + +#if defined(BOOST_MSVC) +# pragma warning (push) +# pragma warning (disable:4251) // class 'std::vector<_Ty>' needs to have dll-interface to be used by clients of class 'boost::program_options::positional_options_description' +#endif + +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, + const std::string&> + additional_parser; + + typedef function1, std::vector&> + 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& 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::vectorweakness. + * + * The quality of the generator crucially depends on the choice of the + * parameters. User code should employ one of the sensibly parameterized + * generators such as \mt19937 instead. + * + * The generator requires considerable amounts of memory for the storage of + * its state array. For example, \mt11213b requires about 1408 bytes and + * \mt19937 requires about 2496 bytes. + */ +template +class mersenne_twister_engine +{ +public: + typedef UIntType result_type; + BOOST_STATIC_CONSTANT(std::size_t, word_size = w); + BOOST_STATIC_CONSTANT(std::size_t, state_size = n); + BOOST_STATIC_CONSTANT(std::size_t, shift_size = m); + BOOST_STATIC_CONSTANT(std::size_t, mask_bits = r); + BOOST_STATIC_CONSTANT(UIntType, xor_mask = a); + BOOST_STATIC_CONSTANT(std::size_t, tempering_u = u); + BOOST_STATIC_CONSTANT(UIntType, tempering_d = d); + BOOST_STATIC_CONSTANT(std::size_t, tempering_s = s); + BOOST_STATIC_CONSTANT(UIntType, tempering_b = b); + BOOST_STATIC_CONSTANT(std::size_t, tempering_t = t); + BOOST_STATIC_CONSTANT(UIntType, tempering_c = c); + BOOST_STATIC_CONSTANT(std::size_t, tempering_l = l); + BOOST_STATIC_CONSTANT(UIntType, initialization_multiplier = f); + BOOST_STATIC_CONSTANT(UIntType, default_seed = 5489u); + + // backwards compatibility + BOOST_STATIC_CONSTANT(UIntType, parameter_a = a); + BOOST_STATIC_CONSTANT(std::size_t, output_u = u); + BOOST_STATIC_CONSTANT(std::size_t, output_s = s); + BOOST_STATIC_CONSTANT(UIntType, output_b = b); + BOOST_STATIC_CONSTANT(std::size_t, output_t = t); + BOOST_STATIC_CONSTANT(UIntType, output_c = c); + BOOST_STATIC_CONSTANT(std::size_t, output_l = l); + + // old Boost.Random concept requirements + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + + + /** + * Constructs a @c mersenne_twister_engine and calls @c seed(). + */ + mersenne_twister_engine() { seed(); } + + /** + * Constructs a @c mersenne_twister_engine and calls @c seed(value). + */ + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(mersenne_twister_engine, + UIntType, value) + { seed(value); } + template mersenne_twister_engine(It& first, It last) + { seed(first,last); } + + /** + * Constructs a mersenne_twister_engine and calls @c seed(gen). + * + * @xmlnote + * The copy constructor will always be preferred over + * the templated constructor. + * @endxmlnote + */ + BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(mersenne_twister_engine, + SeedSeq, seq) + { seed(seq); } + + // compiler-generated copy ctor and assignment operator are fine + + /** Calls @c seed(default_seed). */ + void seed() { seed(default_seed); } + + /** + * Sets the state x(0) to v mod 2w. Then, iteratively, + * sets x(i) to + * (i + f * (x(i-1) xor (x(i-1) rshift w-2))) mod 2w + * for i = 1 .. n-1. x(n) is the first value to be returned by operator(). + */ + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(mersenne_twister_engine, UIntType, value) + { + // 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 = (max)(); + 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] = (f * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask; + } + } + + /** + * Seeds a mersenne_twister_engine using values produced by seq.generate(). + */ + BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(mersenne_twister_engine, SeeqSeq, seq) + { + detail::seed_array_int(seq, x); + i = n; + + // fix up the state if it's all zeroes. + if((x[0] & (~static_cast(0) << r)) == 0) { + for(std::size_t j = 1; j < n; ++j) { + if(x[j] != 0) return; + } + x[0] = static_cast(1) << (w-1); + } + } + + /** Sets the state of the generator using values from an iterator range. */ + template + void seed(It& first, It last) + { + detail::fill_array_int(first, last, x); + i = n; + + // fix up the state if it's all zeroes. + if((x[0] & (~static_cast(0) << r)) == 0) { + for(std::size_t j = 1; j < n; ++j) { + if(x[j] != 0) return; + } + x[0] = static_cast(1) << (w-1); + } + } + + /** Returns the smallest value that the generator can produce. */ + static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () + { return 0; } + /** Returns the largest value that the generator can produce. */ + static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () + { return boost::low_bits_mask_t::sig_bits; } + + /** Produces the next value of the generator. */ + result_type operator()(); + + /** Fills a range with random values */ + template + void generate(Iter first, Iter last) + { detail::generate_from_int(*this, first, last); } + + /** + * Advances the state of the generator by @c z steps. Equivalent to + * + * @code + * for(unsigned long long i = 0; i < z; ++i) { + * gen(); + * } + * @endcode + */ + void discard(boost::uintmax_t z) + { + for(boost::uintmax_t j = 0; j < z; ++j) { + (*this)(); + } + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + /** Writes a mersenne_twister_engine to a @c std::ostream */ + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const mersenne_twister_engine& mt) + { + mt.print(os); + return os; + } + + /** Reads a mersenne_twister_engine from a @c std::istream */ + template + friend std::basic_istream& + operator>>(std::basic_istream& is, + mersenne_twister_engine& mt) + { + for(std::size_t 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 + + /** + * Returns true if the two generators are in the same state, + * and will thus produce identical sequences. + */ + friend bool operator==(const mersenne_twister_engine& x, + const mersenne_twister_engine& y) + { + if(x.i < y.i) return x.equal_imp(y); + else return y.equal_imp(x); + } + + /** + * Returns true if the two generators are in different states. + */ + friend bool operator!=(const mersenne_twister_engine& x, + const mersenne_twister_engine& y) + { return !(x == y); } + +private: + /// \cond show_private + + void twist(); + + /** + * Does the work of operator==. This is in a member function + * for portability. Some compilers, such as msvc 7.1 and + * Sun CC 5.10 can't access template parameters or static + * members of the class from inline friend functions. + * + * requires i <= other.i + */ + bool equal_imp(const mersenne_twister_engine& other) const + { + UIntType back[n]; + std::size_t offset = other.i - i; + for(std::size_t j = 0; j + offset < n; ++j) + if(x[j] != other.x[j+offset]) + return false; + rewind(&back[n-1], offset); + for(std::size_t j = 0; j < offset; ++j) + if(back[j + n - offset] != other.x[j]) + return false; + return true; + } + + /** + * Does the work of operator<<. This is in a member function + * for portability. + */ + template + void print(std::basic_ostream& os) const + { + UIntType data[n]; + for(std::size_t j = 0; j < i; ++j) { + data[j + n - i] = x[j]; + } + if(i != n) { + rewind(&data[n - i - 1], n - i); + } + os << data[0]; + for(std::size_t j = 1; j < n; ++j) { + os << ' ' << data[j]; + } + } + + /** + * Copies z elements of the state preceding x[0] into + * the array whose last element is last. + */ + void rewind(UIntType* last, std::size_t z) const + { + const UIntType upper_mask = (~static_cast(0)) << r; + const UIntType lower_mask = ~upper_mask; + UIntType y0 = x[m-1] ^ x[n-1]; + if(y0 & (static_cast(1) << (w-1))) { + y0 = ((y0 ^ a) << 1) | 1; + } else { + y0 = y0 << 1; + } + for(std::size_t sz = 0; sz < z; ++sz) { + UIntType y1 = + rewind_find(last, sz, m-1) ^ rewind_find(last, sz, n-1); + if(y1 & (static_cast(1) << (w-1))) { + y1 = ((y1 ^ a) << 1) | 1; + } else { + y1 = y1 << 1; + } + *(last - sz) = (y0 & upper_mask) | (y1 & lower_mask); + y0 = y1; + } + } + + /** + * Given a pointer to the last element of the rewind array, + * and the current size of the rewind array, finds an element + * relative to the next available slot in the rewind array. + */ + UIntType + rewind_find(UIntType* last, std::size_t size, std::size_t j) const + { + std::size_t index = (j + n - size + n - 1) % n; + if(index < n - size) { + return x[index]; + } else { + return *(last - (n - 1 - index)); + } + } + + /// \endcond + + // state representation: next output is o(x(i)) + // x[0] ... x[k] x[k+1] ... x[n-1] represents + // x(i-k) ... x(i) x(i+1) ... x(i-k+n-1) + + UIntType x[n]; + std::size_t i; +}; + +/// \cond show_private + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +#define BOOST_RANDOM_MT_DEFINE_CONSTANT(type, name) \ +template \ +const type mersenne_twister_engine::name +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, word_size); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, state_size); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, shift_size); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, mask_bits); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, xor_mask); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, tempering_u); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, tempering_d); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, tempering_s); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, tempering_b); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, tempering_t); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, tempering_c); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, tempering_l); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, initialization_multiplier); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, default_seed); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, parameter_a); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, output_u ); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, output_s); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, output_b); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, output_t); +BOOST_RANDOM_MT_DEFINE_CONSTANT(UIntType, output_c); +BOOST_RANDOM_MT_DEFINE_CONSTANT(std::size_t, output_l); +BOOST_RANDOM_MT_DEFINE_CONSTANT(bool, has_fixed_range); +#undef BOOST_RANDOM_MT_DEFINE_CONSTANT +#endif + +template +void +mersenne_twister_engine::twist() +{ + const UIntType upper_mask = (~static_cast(0)) << r; + const UIntType lower_mask = ~upper_mask; + + const std::size_t unroll_factor = 6; + const std::size_t unroll_extra1 = (n-m) % unroll_factor; + const std::size_t unroll_extra2 = (m-1) % unroll_factor; + + // split loop to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(std::size_t j = 0; j < n-m-unroll_extra1; j++) { + UIntType y = (x[j] & upper_mask) | (x[j+1] & lower_mask); + x[j] = x[j+m] ^ (y >> 1) ^ ((x[j+1]&1) * a); + } + } + { + for(std::size_t j = n-m-unroll_extra1; j < n-m; j++) { + UIntType y = (x[j] & upper_mask) | (x[j+1] & lower_mask); + x[j] = x[j+m] ^ (y >> 1) ^ ((x[j+1]&1) * a); + } + } + { + for(std::size_t j = n-m; j < n-1-unroll_extra2; j++) { + UIntType y = (x[j] & upper_mask) | (x[j+1] & lower_mask); + x[j] = x[j-(n-m)] ^ (y >> 1) ^ ((x[j+1]&1) * a); + } + } + { + for(std::size_t j = n-1-unroll_extra2; j < n-1; j++) { + UIntType y = (x[j] & upper_mask) | (x[j+1] & lower_mask); + x[j] = x[j-(n-m)] ^ (y >> 1) ^ ((x[j+1]&1) * a); + } + } + // last iteration + UIntType y = (x[n-1] & upper_mask) | (x[0] & lower_mask); + x[n-1] = x[m-1] ^ (y >> 1) ^ ((x[0]&1) * a); + i = 0; +} +/// \endcond + +template +inline typename +mersenne_twister_engine::result_type +mersenne_twister_engine::operator()() +{ + if(i == n) + twist(); + // Step 4 + UIntType z = x[i]; + ++i; + z ^= ((z >> u) & d); + z ^= ((z << s) & b); + z ^= ((z << t) & c); + z ^= (z >> l); + return z; +} + +/** + * The specializations \mt11213b and \mt19937 are from + * + * @blockquote + * "Mersenne Twister: A 623-dimensionally equidistributed + * uniform pseudo-random number generator", Makoto Matsumoto + * and Takuji Nishimura, ACM Transactions on Modeling and + * Computer Simulation: Special Issue on Uniform Random Number + * Generation, Vol. 8, No. 1, January 1998, pp. 3-30. + * @endblockquote + */ +typedef mersenne_twister_engine mt11213b; + +/** + * The specializations \mt11213b and \mt19937 are from + * + * @blockquote + * "Mersenne Twister: A 623-dimensionally equidistributed + * uniform pseudo-random number generator", Makoto Matsumoto + * and Takuji Nishimura, ACM Transactions on Modeling and + * Computer Simulation: Special Issue on Uniform Random Number + * Generation, Vol. 8, No. 1, January 1998, pp. 3-30. + * @endblockquote + */ +typedef mersenne_twister_engine mt19937; + +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +typedef mersenne_twister_engine mt19937_64; +#endif + +/// \cond show_deprecated + +template +class mersenne_twister : + public mersenne_twister_engine +{ + typedef mersenne_twister_engine base_type; +public: + mersenne_twister() {} + BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(mersenne_twister, Gen, gen) + { seed(gen); } + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(mersenne_twister, UIntType, val) + { seed(val); } + template + mersenne_twister(It& first, It last) : base_type(first, last) {} + void seed() { base_type::seed(); } + BOOST_RANDOM_DETAIL_GENERATOR_SEED(mersenne_twister, Gen, gen) + { + detail::generator_seed_seq seq(gen); + base_type::seed(seq); + } + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(mersenne_twister, UIntType, val) + { base_type::seed(val); } + template + void seed(It& first, It last) { base_type::seed(first, last); } +}; + +/// \endcond + +} // namespace random + +using random::mt11213b; +using random::mt19937; +using random::mt19937_64; + +} // namespace boost + +BOOST_RANDOM_PTR_HELPER_SPEC(boost::mt11213b) +BOOST_RANDOM_PTR_HELPER_SPEC(boost::mt19937) +BOOST_RANDOM_PTR_HELPER_SPEC(boost::mt19937_64) + +#endif // BOOST_RANDOM_MERSENNE_TWISTER_HPP diff --git a/external/boost/random/negative_binomial_distribution.hpp b/external/boost/random/negative_binomial_distribution.hpp new file mode 100644 index 0000000..23b657f --- /dev/null +++ b/external/boost/random/negative_binomial_distribution.hpp @@ -0,0 +1,220 @@ +/* boost random/negative_binomial_distribution.hpp header file + * + * Copyright Steven Watanabe 2010 + * Distributed under the Boost Software License, Version 1.0. (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: negative_binomial_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + */ + +#ifndef BOOST_RANDOM_NEGATIVE_BINOMIAL_DISTRIBUTION_HPP_INCLUDED +#define BOOST_RANDOM_NEGATIVE_BINOMIAL_DISTRIBUTION_HPP_INCLUDED + +#include + +#include +#include +#include +#include + +namespace boost { +namespace random { + +/** + * The negative binomial distribution is an integer valued + * distribution with two parameters, @c k and @c p. The + * distribution produces non-negative values. + * + * The distribution function is + * \f$\displaystyle P(i) = {k+i-1\choose i}p^k(1-p)^i\f$. + * + * This implementation uses a gamma-poisson mixture. + */ +template +class negative_binomial_distribution { +public: + typedef IntType result_type; + typedef RealType input_type; + + class param_type { + public: + typedef negative_binomial_distribution distribution_type; + /** + * Construct a param_type object. @c k and @c p + * are the parameters of the distribution. + * + * Requires: k >=0 && 0 <= p <= 1 + */ + explicit param_type(IntType k_arg = 1, RealType p_arg = RealType (0.5)) + : _k(k_arg), _p(p_arg) + {} + /** Returns the @c k parameter of the distribution. */ + IntType k() const { return _k; } + /** Returns the @c p parameter of the distribution. */ + RealType p() const { return _p; } +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + /** Writes the parameters of the distribution to a @c std::ostream. */ + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const param_type& parm) + { + os << parm._p << " " << parm._k; + return os; + } + + /** Reads the parameters of the distribution from a @c std::istream. */ + template + friend std::basic_istream& + operator>>(std::basic_istream& is, param_type& parm) + { + is >> parm._p >> std::ws >> parm._k; + return is; + } +#endif + /** Returns true if the parameters have the same values. */ + friend bool operator==(const param_type& lhs, const param_type& rhs) + { + return lhs._k == rhs._k && lhs._p == rhs._p; + } + /** Returns true if the parameters have different values. */ + friend bool operator!=(const param_type& lhs, const param_type& rhs) + { + return !(lhs == rhs); + } + private: + IntType _k; + RealType _p; + }; + + /** + * Construct a @c negative_binomial_distribution object. @c k and @c p + * are the parameters of the distribution. + * + * Requires: k >=0 && 0 <= p <= 1 + */ + explicit negative_binomial_distribution(IntType k_arg = 1, + RealType p_arg = RealType(0.5)) + : _k(k_arg), _p(p_arg) + {} + + /** + * Construct an @c negative_binomial_distribution object from the + * parameters. + */ + explicit negative_binomial_distribution(const param_type& parm) + : _k(parm.k()), _p(parm.p()) + {} + + /** + * Returns a random variate distributed according to the + * negative binomial distribution. + */ + template + IntType operator()(URNG& urng) const + { + gamma_distribution gamma(_k, (1-_p)/_p); + poisson_distribution poisson(gamma(urng)); + return poisson(urng); + } + + /** + * Returns a random variate distributed according to the negative + * binomial distribution with parameters specified by @c param. + */ + template + IntType operator()(URNG& urng, const param_type& parm) const + { + return negative_binomial_distribution(parm)(urng); + } + + /** Returns the @c k parameter of the distribution. */ + IntType k() const { return _k; } + /** Returns the @c p parameter of the distribution. */ + RealType p() const { return _p; } + + /** Returns the smallest value that the distribution can produce. */ + IntType min BOOST_PREVENT_MACRO_SUBSTITUTION() const { return 0; } + /** Returns the largest value that the distribution can produce. */ + IntType max BOOST_PREVENT_MACRO_SUBSTITUTION() const + { return (std::numeric_limits::max)(); } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_k, _p); } + /** Sets parameters of the distribution. */ + void param(const param_type& parm) + { + _k = parm.k(); + _p = parm.p(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + /** Writes the parameters of the distribution to a @c std::ostream. */ + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const negative_binomial_distribution& bd) + { + os << bd.param(); + return os; + } + + /** Reads the parameters of the distribution from a @c std::istream. */ + template + friend std::basic_istream& + operator>>(std::basic_istream& is, + negative_binomial_distribution& bd) + { + bd.read(is); + return is; + } +#endif + + /** Returns true if the two distributions will produce the same + sequence of values, given equal generators. */ + friend bool operator==(const negative_binomial_distribution& lhs, + const negative_binomial_distribution& rhs) + { + return lhs._k == rhs._k && lhs._p == rhs._p; + } + /** Returns true if the two distributions could produce different + sequences of values, given equal generators. */ + friend bool operator!=(const negative_binomial_distribution& lhs, + const negative_binomial_distribution& rhs) + { + return !(lhs == rhs); + } + +private: + + /// @cond \show_private + + template + void read(std::basic_istream& is) { + param_type parm; + if(is >> parm) { + param(parm); + } + } + + // parameters + IntType _k; + RealType _p; + + /// @endcond +}; + +} + +} + +#endif diff --git a/external/boost/random/normal_distribution.hpp b/external/boost/random/normal_distribution.hpp new file mode 100644 index 0000000..9515fb3 --- /dev/null +++ b/external/boost/random/normal_distribution.hpp @@ -0,0 +1,223 @@ +/* boost random/normal_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2010-2011 + * Distributed under the Boost Software License, Version 1.0. (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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// deterministic Box-Muller method, uses trigonometric functions + +/** + * Instantiations of class template normal_distribution model a + * \random_distribution. Such a distribution produces random numbers + * @c x distributed with probability density function + * \f$\displaystyle p(x) = + * \frac{1}{\sqrt{2\pi\sigma}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} + * \f$, + * where mean and sigma are the parameters of the distribution. + */ +template +class normal_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + class param_type { + public: + typedef normal_distribution distribution_type; + + /** + * Constructs a @c param_type with a given mean and + * standard deviation. + * + * Requires: sigma >= 0 + */ + explicit param_type(RealType mean_arg = RealType(0.0), + RealType sigma_arg = RealType(1.0)) + : _mean(mean_arg), + _sigma(sigma_arg) + {} + + /** Returns the mean of the distribution. */ + RealType mean() const { return _mean; } + + /** Returns the standand deviation of the distribution. */ + RealType sigma() const { return _sigma; } + + /** Writes a @c param_type to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { os << parm._mean << " " << parm._sigma ; return os; } + + /** Reads a @c param_type from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { is >> parm._mean >> std::ws >> parm._sigma; return is; } + + /** Returns true if the two sets of parameters are the same. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._mean == rhs._mean && lhs._sigma == rhs._sigma; } + + /** Returns true if the two sets of parameters are the different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + RealType _mean; + RealType _sigma; + }; + + /** + * Constructs a @c normal_distribution object. @c mean and @c sigma are + * the parameters for the distribution. + * + * Requires: sigma >= 0 + */ + explicit normal_distribution(const RealType& mean_arg = RealType(0.0), + const RealType& sigma_arg = RealType(1.0)) + : _mean(mean_arg), _sigma(sigma_arg), + _r1(0), _r2(0), _cached_rho(0), _valid(false) + { + BOOST_ASSERT(_sigma >= RealType(0)); + } + + /** + * Constructs a @c normal_distribution object from its parameters. + */ + explicit normal_distribution(const param_type& parm) + : _mean(parm.mean()), _sigma(parm.sigma()), + _r1(0), _r2(0), _cached_rho(0), _valid(false) + {} + + /** Returns the mean of the distribution. */ + RealType mean() const { return _mean; } + /** Returns the standard deviation of the distribution. */ + RealType sigma() const { return _sigma; } + + /** Returns the smallest value that the distribution can produce. */ + RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return -std::numeric_limits::infinity(); } + /** Returns the largest value that the distribution can produce. */ + RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return std::numeric_limits::infinity(); } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_mean, _sigma); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _mean = parm.mean(); + _sigma = parm.sigma(); + _valid = false; + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { _valid = false; } + + /** Returns a normal variate. */ + template + result_type operator()(Engine& eng) + { + using std::sqrt; + using std::log; + using std::sin; + using std::cos; + + if(!_valid) { + _r1 = boost::uniform_01()(eng); + _r2 = boost::uniform_01()(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; + } + + /** Returns a normal variate with parameters specified by @c param. */ + template + result_type operator()(URNG& urng, const param_type& parm) + { + return normal_distribution(parm)(urng); + } + + /** Writes a @c normal_distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, normal_distribution, nd) + { + os << nd._mean << " " << nd._sigma << " " + << nd._valid << " " << nd._cached_rho << " " << nd._r1; + return os; + } + + /** Reads a @c normal_distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(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; + } + + /** + * Returns true if the two instances of @c normal_distribution will + * return identical sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(normal_distribution, lhs, rhs) + { + return lhs._mean == rhs._mean && lhs._sigma == rhs._sigma + && lhs._valid == rhs._valid + && (!lhs._valid || (lhs._r1 == rhs._r1 && lhs._r2 == rhs._r2)); + } + + /** + * Returns true if the two instances of @c normal_distribution will + * return different sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(normal_distribution) + +private: + RealType _mean, _sigma; + RealType _r1, _r2, _cached_rho; + bool _valid; + +}; + +} // namespace random + +using random::normal_distribution; + +} // namespace boost + +#endif // BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP diff --git a/external/boost/random/piecewise_constant_distribution.hpp b/external/boost/random/piecewise_constant_distribution.hpp new file mode 100644 index 0000000..30339c0 --- /dev/null +++ b/external/boost/random/piecewise_constant_distribution.hpp @@ -0,0 +1,466 @@ +/* boost random/piecewise_constant_distribution.hpp header file + * + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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: piecewise_constant_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + */ + +#ifndef BOOST_RANDOM_PIECEWISE_CONSTANT_DISTRIBUTION_HPP_INCLUDED +#define BOOST_RANDOM_PIECEWISE_CONSTANT_DISTRIBUTION_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef BOOST_NO_INITIALIZER_LISTS +#include +#endif + +#include +#include + +namespace boost { +namespace random { + +/** + * The class @c piecewise_constant_distribution models a \random_distribution. + */ +template +class piecewise_constant_distribution { +public: + typedef std::size_t input_type; + typedef RealType result_type; + + class param_type { + public: + + typedef piecewise_constant_distribution distribution_type; + + /** + * Constructs a @c param_type object, representing a distribution + * that produces values uniformly distributed in the range [0, 1). + */ + param_type() + { + _weights.push_back(WeightType(1)); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } + /** + * Constructs a @c param_type object from two iterator ranges + * containing the interval boundaries and the interval weights. + * If there are less than two boundaries, then this is equivalent to + * the default constructor and creates a single interval, [0, 1). + * + * The values of the interval boundaries must be strictly + * increasing, and the number of weights must be one less than + * the number of interval boundaries. If there are extra + * weights, they are ignored. + */ + template + param_type(IntervalIter intervals_first, IntervalIter intervals_last, + WeightIter weight_first) + : _intervals(intervals_first, intervals_last) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + _weights.push_back(WeightType(1)); + } else { + _weights.reserve(_intervals.size() - 1); + for(std::size_t i = 0; i < _intervals.size() - 1; ++i) { + _weights.push_back(*weight_first++); + } + } + } +#ifndef BOOST_NO_INITIALIZER_LISTS + /** + * Constructs a @c param_type object from an + * initializer_list containing the interval boundaries + * and a unary function specifying the weights. Each + * weight is determined by calling the function at the + * midpoint of the corresponding interval. + * + * If the initializer_list contains less than two elements, + * this is equivalent to the default constructor and the + * distribution will produce values uniformly distributed + * in the range [0, 1). + */ + template + param_type(const std::initializer_list& il, F f) + : _intervals(il.begin(), il.end()) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + _weights.push_back(WeightType(1)); + } else { + _weights.reserve(_intervals.size() - 1); + for(std::size_t i = 0; i < _intervals.size() - 1; ++i) { + RealType midpoint = (_intervals[i] + _intervals[i + 1]) / 2; + _weights.push_back(f(midpoint)); + } + } + } +#endif + /** + * Constructs a @c param_type object from Boost.Range + * ranges holding the interval boundaries and the weights. If + * there are less than two interval boundaries, this is equivalent + * to the default constructor and the distribution will produce + * values uniformly distributed in the range [0, 1). The + * number of weights must be one less than the number of + * interval boundaries. + */ + template + param_type(const IntervalRange& intervals_arg, + const WeightRange& weights_arg) + : _intervals(boost::begin(intervals_arg), boost::end(intervals_arg)), + _weights(boost::begin(weights_arg), boost::end(weights_arg)) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + _weights.push_back(WeightType(1)); + } + } + + /** + * Constructs the parameters for a distribution that approximates a + * function. The range of the distribution is [xmin, xmax). This + * range is divided into nw equally sized intervals and the weights + * are found by calling the unary function f on the midpoints of the + * intervals. + */ + template + param_type(std::size_t nw, RealType xmin, RealType xmax, F f) + { + std::size_t n = (nw == 0) ? 1 : nw; + double delta = (xmax - xmin) / n; + BOOST_ASSERT(delta > 0); + for(std::size_t k = 0; k < n; ++k) { + _weights.push_back(f(xmin + k*delta + delta/2)); + _intervals.push_back(xmin + k*delta); + } + _intervals.push_back(xmax); + } + + /** Returns a vector containing the interval boundaries. */ + std::vector intervals() const { return _intervals; } + + /** + * Returns a vector containing the probability densities + * over all the intervals of the distribution. + */ + std::vector densities() const + { + RealType sum = std::accumulate(_weights.begin(), _weights.end(), + static_cast(0)); + std::vector result; + result.reserve(_weights.size()); + for(std::size_t i = 0; i < _weights.size(); ++i) { + RealType width = _intervals[i + 1] - _intervals[i]; + result.push_back(_weights[i] / (sum * width)); + } + return result; + } + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + detail::print_vector(os, parm._intervals); + detail::print_vector(os, parm._weights); + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + std::vector new_intervals; + std::vector new_weights; + detail::read_vector(is, new_intervals); + detail::read_vector(is, new_weights); + if(is) { + parm._intervals.swap(new_intervals); + parm._weights.swap(new_weights); + } + return is; + } + + /** Returns true if the two sets of parameters are the same. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { + return lhs._intervals == rhs._intervals + && lhs._weights == rhs._weights; + } + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + + friend class piecewise_constant_distribution; + + std::vector _intervals; + std::vector _weights; + }; + + /** + * Creates a new @c piecewise_constant_distribution with + * a single interval, [0, 1). + */ + piecewise_constant_distribution() + { + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } + /** + * Constructs a piecewise_constant_distribution from two iterator ranges + * containing the interval boundaries and the interval weights. + * If there are less than two boundaries, then this is equivalent to + * the default constructor and creates a single interval, [0, 1). + * + * The values of the interval boundaries must be strictly + * increasing, and the number of weights must be one less than + * the number of interval boundaries. If there are extra + * weights, they are ignored. + * + * For example, + * + * @code + * double intervals[] = { 0.0, 1.0, 4.0 }; + * double weights[] = { 1.0, 1.0 }; + * piecewise_constant_distribution<> dist( + * &intervals[0], &intervals[0] + 3, &weights[0]); + * @endcode + * + * The distribution has a 50% chance of producing a + * value between 0 and 1 and a 50% chance of producing + * a value between 1 and 4. + */ + template + piecewise_constant_distribution(IntervalIter first_interval, + IntervalIter last_interval, + WeightIter first_weight) + : _intervals(first_interval, last_interval) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } else { + std::vector actual_weights; + actual_weights.reserve(_intervals.size() - 1); + for(std::size_t i = 0; i < _intervals.size() - 1; ++i) { + actual_weights.push_back(*first_weight++); + } + typedef discrete_distribution bins_type; + typename bins_type::param_type bins_param(actual_weights); + _bins.param(bins_param); + } + } +#ifndef BOOST_NO_INITIALIZER_LISTS + /** + * Constructs a piecewise_constant_distribution from an + * initializer_list containing the interval boundaries + * and a unary function specifying the weights. Each + * weight is determined by calling the function at the + * midpoint of the corresponding interval. + * + * If the initializer_list contains less than two elements, + * this is equivalent to the default constructor and the + * distribution will produce values uniformly distributed + * in the range [0, 1). + */ + template + piecewise_constant_distribution(std::initializer_list il, F f) + : _intervals(il.begin(), il.end()) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } else { + std::vector actual_weights; + actual_weights.reserve(_intervals.size() - 1); + for(std::size_t i = 0; i < _intervals.size() - 1; ++i) { + RealType midpoint = (_intervals[i] + _intervals[i + 1]) / 2; + actual_weights.push_back(f(midpoint)); + } + typedef discrete_distribution bins_type; + typename bins_type::param_type bins_param(actual_weights); + _bins.param(bins_param); + } + } +#endif + /** + * Constructs a piecewise_constant_distribution from Boost.Range + * ranges holding the interval boundaries and the weights. If + * there are less than two interval boundaries, this is equivalent + * to the default constructor and the distribution will produce + * values uniformly distributed in the range [0, 1). The + * number of weights must be one less than the number of + * interval boundaries. + */ + template + piecewise_constant_distribution(const IntervalsRange& intervals_arg, + const WeightsRange& weights_arg) + : _bins(weights_arg), + _intervals(boost::begin(intervals_arg), boost::end(intervals_arg)) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } + } + /** + * Constructs a piecewise_constant_distribution that approximates a + * function. The range of the distribution is [xmin, xmax). This + * range is divided into nw equally sized intervals and the weights + * are found by calling the unary function f on the midpoints of the + * intervals. + */ + template + piecewise_constant_distribution(std::size_t nw, + RealType xmin, + RealType xmax, + F f) + : _bins(nw, xmin, xmax, f) + { + if(nw == 0) { nw = 1; } + RealType delta = (xmax - xmin) / nw; + _intervals.reserve(nw + 1); + for(std::size_t i = 0; i < nw; ++i) { + _intervals.push_back(xmin + i * delta); + } + _intervals.push_back(xmax); + } + /** + * Constructs a piecewise_constant_distribution from its parameters. + */ + explicit piecewise_constant_distribution(const param_type& parm) + : _bins(parm._weights), + _intervals(parm._intervals) + { + } + + /** + * Returns a value distributed according to the parameters of the + * piecewist_constant_distribution. + */ + template + RealType operator()(URNG& urng) const + { + std::size_t i = _bins(urng); + return uniform_real(_intervals[i], _intervals[i+1])(urng); + } + + /** + * Returns a value distributed according to the parameters + * specified by param. + */ + template + RealType operator()(URNG& urng, const param_type& parm) const + { + return piecewise_constant_distribution(parm)(urng); + } + + /** Returns the smallest value that the distribution can produce. */ + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return _intervals.front(); } + /** Returns the largest value that the distribution can produce. */ + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return _intervals.back(); } + + /** + * Returns a vector containing the probability density + * over each interval. + */ + std::vector densities() const + { + std::vector result(_bins.probabilities()); + for(std::size_t i = 0; i < result.size(); ++i) { + result[i] /= (_intervals[i+1] - _intervals[i]); + } + return(result); + } + /** Returns a vector containing the interval boundaries. */ + std::vector intervals() const { return _intervals; } + + /** Returns the parameters of the distribution. */ + param_type param() const + { + return param_type(_intervals, _bins.probabilities()); + } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + std::vector new_intervals(parm._intervals); + typedef discrete_distribution bins_type; + typename bins_type::param_type bins_param(parm._weights); + _bins.param(bins_param); + _intervals.swap(new_intervals); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { _bins.reset(); } + + /** Writes a distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR( + os, piecewise_constant_distribution, pcd) + { + os << pcd.param(); + return os; + } + + /** Reads a distribution from a @c std::istream */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR( + is, piecewise_constant_distribution, pcd) + { + param_type parm; + if(is >> parm) { + pcd.param(parm); + } + return is; + } + + /** + * Returns true if the two distributions will return the + * same sequence of values, when passed equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR( + piecewise_constant_distribution, lhs, rhs) + { + return lhs._bins == rhs._bins && lhs._intervals == rhs._intervals; + } + /** + * Returns true if the two distributions may return different + * sequences of values, when passed equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(piecewise_constant_distribution) + +private: + discrete_distribution _bins; + std::vector _intervals; +}; + +} +} + +#endif diff --git a/external/boost/random/piecewise_linear_distribution.hpp b/external/boost/random/piecewise_linear_distribution.hpp new file mode 100644 index 0000000..7e67f7d --- /dev/null +++ b/external/boost/random/piecewise_linear_distribution.hpp @@ -0,0 +1,530 @@ +/* boost random/piecewise_linear_distribution.hpp header file + * + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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: piecewise_linear_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + */ + +#ifndef BOOST_RANDOM_PIECEWISE_LINEAR_DISTRIBUTION_HPP_INCLUDED +#define BOOST_RANDOM_PIECEWISE_LINEAR_DISTRIBUTION_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef BOOST_NO_INITIALIZER_LISTS +#include +#endif + +#include +#include + +namespace boost { +namespace random { + +/** + * The class @c piecewise_linear_distribution models a \random_distribution. + */ +template +class piecewise_linear_distribution { +public: + typedef std::size_t input_type; + typedef RealType result_type; + + class param_type { + public: + + typedef piecewise_linear_distribution distribution_type; + + /** + * Constructs a @c param_type object, representing a distribution + * that produces values uniformly distributed in the range [0, 1). + */ + param_type() + { + _weights.push_back(RealType(1)); + _weights.push_back(RealType(1)); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } + /** + * Constructs a @c param_type object from two iterator ranges + * containing the interval boundaries and weights at the boundaries. + * If there are fewer than two boundaries, then this is equivalent to + * the default constructor and the distribution will produce values + * uniformly distributed in the range [0, 1). + * + * The values of the interval boundaries must be strictly + * increasing, and the number of weights must be the same as + * the number of interval boundaries. If there are extra + * weights, they are ignored. + */ + template + param_type(IntervalIter intervals_first, IntervalIter intervals_last, + WeightIter weight_first) + : _intervals(intervals_first, intervals_last) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _weights.push_back(RealType(1)); + _weights.push_back(RealType(1)); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } else { + _weights.reserve(_intervals.size()); + for(std::size_t i = 0; i < _intervals.size(); ++i) { + _weights.push_back(*weight_first++); + } + } + } +#ifndef BOOST_NO_INITIALIZER_LISTS + /** + * Constructs a @c param_type object from an initializer_list + * containing the interval boundaries and a unary function + * specifying the weights at the boundaries. Each weight is + * determined by calling the function at the corresponding point. + * + * If the initializer_list contains fewer than two elements, + * this is equivalent to the default constructor and the + * distribution will produce values uniformly distributed + * in the range [0, 1). + */ + template + param_type(const std::initializer_list& il, F f) + : _intervals(il.begin(), il.end()) + { + if(_intervals.size() < 2) { + _intervals.clear(); + _weights.push_back(RealType(1)); + _weights.push_back(RealType(1)); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } else { + _weights.reserve(_intervals.size()); + for(typename std::vector::const_iterator + iter = _intervals.begin(), end = _intervals.end(); + iter != end; ++iter) + { + _weights.push_back(f(*iter)); + } + } + } +#endif + /** + * Constructs a @c param_type object from Boost.Range ranges holding + * the interval boundaries and the weights at the boundaries. If + * there are fewer than two interval boundaries, this is equivalent + * to the default constructor and the distribution will produce + * values uniformly distributed in the range [0, 1). The + * number of weights must be equal to the number of + * interval boundaries. + */ + template + param_type(const IntervalRange& intervals_arg, + const WeightRange& weights_arg) + : _intervals(boost::begin(intervals_arg), boost::end(intervals_arg)), + _weights(boost::begin(weights_arg), boost::end(weights_arg)) + { + if(_intervals.size() < 2) { + _weights.clear(); + _weights.push_back(RealType(1)); + _weights.push_back(RealType(1)); + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + } + } + + /** + * Constructs the parameters for a distribution that approximates a + * function. The range of the distribution is [xmin, xmax). This + * range is divided into nw equally sized intervals and the weights + * are found by calling the unary function f on the boundaries of the + * intervals. + */ + template + param_type(std::size_t nw, RealType xmin, RealType xmax, F f) + { + std::size_t n = (nw == 0) ? 1 : nw; + double delta = (xmax - xmin) / n; + BOOST_ASSERT(delta > 0); + for(std::size_t k = 0; k < n; ++k) { + _weights.push_back(f(xmin + k*delta)); + _intervals.push_back(xmin + k*delta); + } + _weights.push_back(f(xmax)); + _intervals.push_back(xmax); + } + + /** Returns a vector containing the interval boundaries. */ + std::vector intervals() const { return _intervals; } + + /** + * Returns a vector containing the probability densities + * at all the interval boundaries. + */ + std::vector densities() const + { + RealType sum = static_cast(0); + for(std::size_t i = 0; i < _intervals.size() - 1; ++i) { + RealType width = _intervals[i + 1] - _intervals[i]; + sum += (_weights[i] + _weights[i + 1]) * width / 2; + } + std::vector result; + result.reserve(_weights.size()); + for(typename std::vector::const_iterator + iter = _weights.begin(), end = _weights.end(); + iter != end; ++iter) + { + result.push_back(*iter / sum); + } + return result; + } + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + detail::print_vector(os, parm._intervals); + detail::print_vector(os, parm._weights); + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + std::vector new_intervals; + std::vector new_weights; + detail::read_vector(is, new_intervals); + detail::read_vector(is, new_weights); + if(is) { + parm._intervals.swap(new_intervals); + parm._weights.swap(new_weights); + } + return is; + } + + /** Returns true if the two sets of parameters are the same. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { + return lhs._intervals == rhs._intervals + && lhs._weights == rhs._weights; + } + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + friend class piecewise_linear_distribution; + + std::vector _intervals; + std::vector _weights; + }; + + /** + * Creates a new @c piecewise_linear_distribution that + * produces values uniformly distributed in the range [0, 1). + */ + piecewise_linear_distribution() + { + default_init(); + } + /** + * Constructs a piecewise_linear_distribution from two iterator ranges + * containing the interval boundaries and the weights at the boundaries. + * If there are fewer than two boundaries, then this is equivalent to + * the default constructor and creates a distribution that + * produces values uniformly distributed in the range [0, 1). + * + * The values of the interval boundaries must be strictly + * increasing, and the number of weights must be equal to + * the number of interval boundaries. If there are extra + * weights, they are ignored. + * + * For example, + * + * @code + * double intervals[] = { 0.0, 1.0, 2.0 }; + * double weights[] = { 0.0, 1.0, 0.0 }; + * piecewise_constant_distribution<> dist( + * &intervals[0], &intervals[0] + 3, &weights[0]); + * @endcode + * + * produces a triangle distribution. + */ + template + piecewise_linear_distribution(IntervalIter first_interval, + IntervalIter last_interval, + WeightIter first_weight) + : _intervals(first_interval, last_interval) + { + if(_intervals.size() < 2) { + default_init(); + } else { + _weights.reserve(_intervals.size()); + for(std::size_t i = 0; i < _intervals.size(); ++i) { + _weights.push_back(*first_weight++); + } + init(); + } + } +#ifndef BOOST_NO_INITIALIZER_LISTS + /** + * Constructs a piecewise_linear_distribution from an + * initializer_list containing the interval boundaries + * and a unary function specifying the weights. Each + * weight is determined by calling the function at the + * corresponding interval boundary. + * + * If the initializer_list contains fewer than two elements, + * this is equivalent to the default constructor and the + * distribution will produce values uniformly distributed + * in the range [0, 1). + */ + template + piecewise_linear_distribution(std::initializer_list il, F f) + : _intervals(il.begin(), il.end()) + { + if(_intervals.size() < 2) { + default_init(); + } else { + _weights.reserve(_intervals.size()); + for(typename std::vector::const_iterator + iter = _intervals.begin(), end = _intervals.end(); + iter != end; ++iter) + { + _weights.push_back(f(*iter)); + } + init(); + } + } +#endif + /** + * Constructs a piecewise_linear_distribution from Boost.Range + * ranges holding the interval boundaries and the weights. If + * there are fewer than two interval boundaries, this is equivalent + * to the default constructor and the distribution will produce + * values uniformly distributed in the range [0, 1). The + * number of weights must be equal to the number of + * interval boundaries. + */ + template + piecewise_linear_distribution(const IntervalsRange& intervals_arg, + const WeightsRange& weights_arg) + : _intervals(boost::begin(intervals_arg), boost::end(intervals_arg)), + _weights(boost::begin(weights_arg), boost::end(weights_arg)) + { + if(_intervals.size() < 2) { + default_init(); + } else { + init(); + } + } + /** + * Constructs a piecewise_linear_distribution that approximates a + * function. The range of the distribution is [xmin, xmax). This + * range is divided into nw equally sized intervals and the weights + * are found by calling the unary function f on the interval boundaries. + */ + template + piecewise_linear_distribution(std::size_t nw, + RealType xmin, + RealType xmax, + F f) + { + if(nw == 0) { nw = 1; } + RealType delta = (xmax - xmin) / nw; + _intervals.reserve(nw + 1); + for(std::size_t i = 0; i < nw; ++i) { + RealType x = xmin + i * delta; + _intervals.push_back(x); + _weights.push_back(f(x)); + } + _intervals.push_back(xmax); + _weights.push_back(f(xmax)); + init(); + } + /** + * Constructs a piecewise_linear_distribution from its parameters. + */ + explicit piecewise_linear_distribution(const param_type& parm) + : _intervals(parm._intervals), + _weights(parm._weights) + { + init(); + } + + /** + * Returns a value distributed according to the parameters of the + * piecewise_linear_distribution. + */ + template + RealType operator()(URNG& urng) const + { + std::size_t i = _bins(urng); + bool is_in_rectangle = (i % 2 == 0); + i = i / 2; + uniform_real dist(_intervals[i], _intervals[i+1]); + if(is_in_rectangle) { + return dist(urng); + } else if(_weights[i] < _weights[i+1]) { + return (std::max)(dist(urng), dist(urng)); + } else { + return (std::min)(dist(urng), dist(urng)); + } + } + + /** + * Returns a value distributed according to the parameters + * specified by param. + */ + template + RealType operator()(URNG& urng, const param_type& parm) const + { + return piecewise_linear_distribution(parm)(urng); + } + + /** Returns the smallest value that the distribution can produce. */ + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return _intervals.front(); } + /** Returns the largest value that the distribution can produce. */ + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return _intervals.back(); } + + /** + * Returns a vector containing the probability densities + * at the interval boundaries. + */ + std::vector densities() const + { + RealType sum = static_cast(0); + for(std::size_t i = 0; i < _intervals.size() - 1; ++i) { + RealType width = _intervals[i + 1] - _intervals[i]; + sum += (_weights[i] + _weights[i + 1]) * width / 2; + } + std::vector result; + result.reserve(_weights.size()); + for(typename std::vector::const_iterator + iter = _weights.begin(), end = _weights.end(); + iter != end; ++iter) + { + result.push_back(*iter / sum); + } + return result; + } + /** Returns a vector containing the interval boundaries. */ + std::vector intervals() const { return _intervals; } + + /** Returns the parameters of the distribution. */ + param_type param() const + { + return param_type(_intervals, _weights); + } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + std::vector new_intervals(parm._intervals); + std::vector new_weights(parm._weights); + init(new_intervals, new_weights); + _intervals.swap(new_intervals); + _weights.swap(new_weights); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { _bins.reset(); } + + /** Writes a distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR( + os, piecewise_linear_distribution, pld) + { + os << pld.param(); + return os; + } + + /** Reads a distribution from a @c std::istream */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR( + is, piecewise_linear_distribution, pld) + { + param_type parm; + if(is >> parm) { + pld.param(parm); + } + return is; + } + + /** + * Returns true if the two distributions will return the + * same sequence of values, when passed equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR( + piecewise_linear_distribution, lhs, rhs) + { + return lhs._intervals == rhs._intervals && lhs._weights == rhs._weights; + } + /** + * Returns true if the two distributions may return different + * sequences of values, when passed equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(piecewise_linear_distribution) + +private: + + /// @cond \show_private + + void init(const std::vector& intervals_arg, + const std::vector& weights_arg) + { + std::vector bin_weights; + bin_weights.reserve((intervals_arg.size() - 1) * 2); + for(std::size_t i = 0; i < intervals_arg.size() - 1; ++i) { + RealType width = intervals_arg[i + 1] - intervals_arg[i]; + RealType w1 = weights_arg[i]; + RealType w2 = weights_arg[i + 1]; + bin_weights.push_back((std::min)(w1, w2) * width); + bin_weights.push_back(std::abs(w1 - w2) * width / 2); + } + typedef discrete_distribution bins_type; + typename bins_type::param_type bins_param(bin_weights); + _bins.param(bins_param); + } + + void init() + { + init(_intervals, _weights); + } + + void default_init() + { + _intervals.clear(); + _intervals.push_back(RealType(0)); + _intervals.push_back(RealType(1)); + _weights.clear(); + _weights.push_back(RealType(1)); + _weights.push_back(RealType(1)); + init(); + } + + discrete_distribution _bins; + std::vector _intervals; + std::vector _weights; + + /// @endcond +}; + +} +} + +#endif diff --git a/external/boost/random/poisson_distribution.hpp b/external/boost/random/poisson_distribution.hpp new file mode 100644 index 0000000..c1eac37 --- /dev/null +++ b/external/boost/random/poisson_distribution.hpp @@ -0,0 +1,360 @@ +/* boost random/poisson_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Copyright Steven Watanabe 2010 + * Distributed under the Boost Software License, Version 1.0. (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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_POISSON_DISTRIBUTION_HPP +#define BOOST_RANDOM_POISSON_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace random { + +namespace detail { + +template +struct poisson_table { + static RealType value[10]; +}; + +template +RealType poisson_table::value[10] = { + 0.0, + 0.0, + 0.69314718055994529, + 1.7917594692280550, + 3.1780538303479458, + 4.7874917427820458, + 6.5792512120101012, + 8.5251613610654147, + 10.604602902745251, + 12.801827480081469 +}; + +} + +/** + * An instantiation of the class template @c poisson_distribution is a + * model of \random_distribution. The poisson distribution has + * \f$p(i) = \frac{e^{-\lambda}\lambda^i}{i!}\f$ + * + * This implementation is based on the PTRD algorithm described + * + * @blockquote + * "The transformed rejection method for generating Poisson random variables", + * Wolfgang Hormann, Insurance: Mathematics and Economics + * Volume 12, Issue 1, February 1993, Pages 39-45 + * @endblockquote + */ +template +class poisson_distribution { +public: + typedef IntType result_type; + typedef RealType input_type; + + class param_type { + public: + typedef poisson_distribution distribution_type; + /** + * Construct a param_type object with the parameter "mean" + * + * Requires: mean > 0 + */ + explicit param_type(RealType mean_arg = RealType(1)) + : _mean(mean_arg) + { + BOOST_ASSERT(_mean > 0); + } + /* Returns the "mean" parameter of the distribution. */ + RealType mean() const { return _mean; } +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + /** Writes the parameters of the distribution to a @c std::ostream. */ + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const param_type& parm) + { + os << parm._mean; + return os; + } + + /** Reads the parameters of the distribution from a @c std::istream. */ + template + friend std::basic_istream& + operator>>(std::basic_istream& is, param_type& parm) + { + is >> parm._mean; + return is; + } +#endif + /** Returns true if the parameters have the same values. */ + friend bool operator==(const param_type& lhs, const param_type& rhs) + { + return lhs._mean == rhs._mean; + } + /** Returns true if the parameters have different values. */ + friend bool operator!=(const param_type& lhs, const param_type& rhs) + { + return !(lhs == rhs); + } + private: + RealType _mean; + }; + + /** + * Constructs a @c poisson_distribution with the parameter @c mean. + * + * Requires: mean > 0 + */ + explicit poisson_distribution(RealType mean_arg = RealType(1)) + : _mean(mean_arg) + { + BOOST_ASSERT(_mean > 0); + init(); + } + + /** + * Construct an @c poisson_distribution object from the + * parameters. + */ + explicit poisson_distribution(const param_type& parm) + : _mean(parm.mean()) + { + init(); + } + + /** + * Returns a random variate distributed according to the + * poisson distribution. + */ + template + IntType operator()(URNG& urng) const + { + if(use_inversion()) { + return invert(urng); + } else { + return generate(urng); + } + } + + /** + * Returns a random variate distributed according to the + * poisson distribution with parameters specified by param. + */ + template + IntType operator()(URNG& urng, const param_type& parm) const + { + return poisson_distribution(parm)(urng); + } + + /** Returns the "mean" parameter of the distribution. */ + RealType mean() const { return _mean; } + + /** Returns the smallest value that the distribution can produce. */ + IntType min BOOST_PREVENT_MACRO_SUBSTITUTION() const { return 0; } + /** Returns the largest value that the distribution can produce. */ + IntType max BOOST_PREVENT_MACRO_SUBSTITUTION() const + { return (std::numeric_limits::max)(); } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_mean); } + /** Sets parameters of the distribution. */ + void param(const param_type& parm) + { + _mean = parm.mean(); + init(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + /** Writes the parameters of the distribution to a @c std::ostream. */ + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const poisson_distribution& pd) + { + os << pd.param(); + return os; + } + + /** Reads the parameters of the distribution from a @c std::istream. */ + template + friend std::basic_istream& + operator>>(std::basic_istream& is, poisson_distribution& pd) + { + pd.read(is); + return is; + } +#endif + + /** Returns true if the two distributions will produce the same + sequence of values, given equal generators. */ + friend bool operator==(const poisson_distribution& lhs, + const poisson_distribution& rhs) + { + return lhs._mean == rhs._mean; + } + /** Returns true if the two distributions could produce different + sequences of values, given equal generators. */ + friend bool operator!=(const poisson_distribution& lhs, + const poisson_distribution& rhs) + { + return !(lhs == rhs); + } + +private: + + /// @cond show_private + + template + void read(std::basic_istream& is) { + param_type parm; + if(is >> parm) { + param(parm); + } + } + + bool use_inversion() const + { + return _mean < 10; + } + + static RealType log_factorial(IntType k) + { + BOOST_ASSERT(k >= 0); + BOOST_ASSERT(k < 10); + return detail::poisson_table::value[k]; + } + + void init() + { + using std::sqrt; + using std::exp; + + if(use_inversion()) { + _exp_mean = exp(-_mean); + } else { + _ptrd.smu = sqrt(_mean); + _ptrd.b = 0.931 + 2.53 * _ptrd.smu; + _ptrd.a = -0.059 + 0.02483 * _ptrd.b; + _ptrd.inv_alpha = 1.1239 + 1.1328 / (_ptrd.b - 3.4); + _ptrd.v_r = 0.9277 - 3.6224 / (_ptrd.b - 2); + } + } + + template + IntType generate(URNG& urng) const + { + using std::floor; + using std::abs; + using std::log; + + while(true) { + RealType u; + RealType v = uniform_01()(urng); + if(v <= 0.86 * _ptrd.v_r) { + u = v / _ptrd.v_r - 0.43; + return static_cast(floor( + (2*_ptrd.a/(0.5-abs(u)) + _ptrd.b)*u + _mean + 0.445)); + } + + if(v >= _ptrd.v_r) { + u = uniform_01()(urng) - 0.5; + } else { + u = v/_ptrd.v_r - 0.93; + u = ((u < 0)? -0.5 : 0.5) - u; + v = uniform_01()(urng) * _ptrd.v_r; + } + + RealType us = 0.5 - abs(u); + if(us < 0.013 && v > us) { + continue; + } + + RealType k = floor((2*_ptrd.a/us + _ptrd.b)*u+_mean+0.445); + v = v*_ptrd.inv_alpha/(_ptrd.a/(us*us) + _ptrd.b); + + RealType log_sqrt_2pi = 0.91893853320467267; + + if(k >= 10) { + if(log(v*_ptrd.smu) <= (k + 0.5)*log(_mean/k) + - _mean + - log_sqrt_2pi + + k + - (1/12. - (1/360. - 1/(1260.*k*k))/(k*k))/k) { + return static_cast(k); + } + } else if(k >= 0) { + if(log(v) <= k*log(_mean) + - _mean + - log_factorial(static_cast(k))) { + return static_cast(k); + } + } + } + } + + template + IntType invert(URNG& urng) const + { + RealType p = _exp_mean; + IntType x = 0; + RealType u = uniform_01()(urng); + while(u > p) { + u = u - p; + ++x; + p = _mean * p / x; + } + return x; + } + + RealType _mean; + + union { + // for ptrd + struct { + RealType v_r; + RealType a; + RealType b; + RealType smu; + RealType inv_alpha; + } _ptrd; + // for inversion + RealType _exp_mean; + }; + + /// @endcond +}; + +} // namespace random + +using random::poisson_distribution; + +} // namespace boost + +#include + +#endif // BOOST_RANDOM_POISSON_DISTRIBUTION_HPP diff --git a/external/boost/random/random_device.hpp b/external/boost/random/random_device.hpp new file mode 100644 index 0000000..6c9d872 --- /dev/null +++ b/external/boost/random/random_device.hpp @@ -0,0 +1,142 @@ +/* boost random/random_device.hpp header file + * + * Copyright Jens Maurer 2000 + * Copyright Steven Watanabe 2010-2011 + * Distributed under the 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: random_device.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2000-02-18 Portability fixes (thanks to Beman Dawes) + */ + +// See http://www.boost.org/libs/random for documentation. + + +#ifndef BOOST_RANDOM_RANDOM_DEVICE_HPP +#define BOOST_RANDOM_RANDOM_DEVICE_HPP + +#include +#include +#include +#include + +namespace boost { +namespace random { + +/** + * Class \random_device models a \nondeterministic_random_number_generator. + * It uses one or more implementation-defined stochastic processes to + * generate a sequence of uniformly distributed non-deterministic random + * numbers. For those environments where a non-deterministic random number + * generator is not available, class random_device must not be implemented. See + * + * @blockquote + * "Randomness Recommendations for Security", D. Eastlake, S. Crocker, + * J. Schiller, Network Working Group, RFC 1750, December 1994 + * @endblockquote + * + * for further discussions. + * + * @xmlnote + * Some operating systems abstract the computer hardware enough + * to make it difficult to non-intrusively monitor stochastic processes. + * However, several do provide a special device for exactly this purpose. + * It seems to be impossible to emulate the functionality using Standard + * C++ only, so users should be aware that this class may not be available + * on all platforms. + * @endxmlnote + * + * Implementation Note for Linux + * + * On the Linux operating system, token is interpreted as a filesystem + * path. It is assumed that this path denotes an operating system + * pseudo-device which generates a stream of non-deterministic random + * numbers. The pseudo-device should never signal an error or end-of-file. + * Otherwise, @c std::ios_base::failure is thrown. By default, + * \random_device uses the /dev/urandom pseudo-device to retrieve + * the random numbers. Another option would be to specify the /dev/random + * pseudo-device, which blocks on reads if the entropy pool has no more + * random bits available. + * + * Implementation Note for Windows + * + * On the Windows operating system, token is interpreted as the name + * of a cryptographic service provider. By default \random_device uses + * MS_DEF_PROV. + * + * Performance + * + * The test program + * nondet_random_speed.cpp measures the execution times of the + * random_device.hpp implementation of the above algorithms in a tight + * loop. The performance has been evaluated on an + * Intel(R) Core(TM) i7 CPU Q 840 \@ 1.87GHz, 1867 Mhz with + * Visual C++ 2010, Microsoft Windows 7 Professional and with gcc 4.4.5, + * Ubuntu Linux 2.6.35-25-generic. + * + * + * + * + * + *
    Platformtime per invocation [microseconds]
    Windows 2.9
    Linux 1.7
    + * + * The measurement error is estimated at +/- 1 usec. + */ +class random_device : private noncopyable +{ +public: + typedef unsigned int result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + + /** Returns the smallest value that the \random_device can produce. */ + static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return 0; } + /** Returns the largest value that the \random_device can produce. */ + static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () { return ~0u; } + + /** Constructs a @c random_device, optionally using the default device. */ + BOOST_RANDOM_DECL random_device(); + /** + * Constructs a @c random_device, optionally using the given token as an + * access specification (for example, a URL) to some implementation-defined + * service for monitoring a stochastic process. + */ + BOOST_RANDOM_DECL explicit random_device(const std::string& token); + + BOOST_RANDOM_DECL ~random_device(); + + /** + * Returns: An entropy estimate for the random numbers returned by + * operator(), in the range min() to log2( max()+1). A deterministic + * random number generator (e.g. a pseudo-random number engine) + * has entropy 0. + * + * Throws: Nothing. + */ + BOOST_RANDOM_DECL double entropy() const; + /** Returns a random value in the range [min, max]. */ + BOOST_RANDOM_DECL unsigned int operator()(); + + /** Fills a range with random 32-bit values. */ + template + void generate(Iter begin, Iter end) + { + for(; begin != end; ++begin) { + *begin = (*this)(); + } + } + +private: + class impl; + impl * pimpl; +}; + +} // namespace random + +using random::random_device; + +} // namespace boost + +#endif /* BOOST_RANDOM_RANDOM_DEVICE_HPP */ diff --git a/external/boost/random/random_number_generator.hpp b/external/boost/random/random_number_generator.hpp new file mode 100644 index 0000000..f8eaf01 --- /dev/null +++ b/external/boost/random/random_number_generator.hpp @@ -0,0 +1,73 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * 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 +#include + +#include + +namespace boost { +namespace random { + +/** + * Instantiations of class template random_number_generator model a + * RandomNumberGenerator (std:25.2.11 [lib.alg.random.shuffle]). On + * each invocation, it returns a uniformly distributed integer in + * the range [0..n). + * + * The template parameter IntType shall denote some integer-like value type. + */ +template +class random_number_generator +{ +public: + typedef URNG base_type; + typedef IntType argument_type; + typedef IntType result_type; + /** + * Constructs a random_number_generator functor with the given + * \uniform_random_number_generator as the underlying source of + * random numbers. + */ + random_number_generator(base_type& rng) : _rng(rng) {} + + // compiler-generated copy ctor is fine + // assignment is disallowed because there is a reference member + + /** + * Returns a value in the range [0, n) + */ + result_type operator()(argument_type n) + { + BOOST_ASSERT(n > 0); + return uniform_int_distribution(0, n-1)(_rng); + } + +private: + base_type& _rng; +}; + +} // namespace random + +using random::random_number_generator; + +} // namespace boost + +#include + +#endif // BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP diff --git a/external/boost/random/ranlux.hpp b/external/boost/random/ranlux.hpp new file mode 100644 index 0000000..8847666 --- /dev/null +++ b/external/boost/random/ranlux.hpp @@ -0,0 +1,99 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-02-18 created + */ + +#ifndef BOOST_RANDOM_RANLUX_HPP +#define BOOST_RANDOM_RANLUX_HPP + +#include +#include +#include + +namespace boost { + +namespace random { + +namespace detail { +/** + * The ranlux family of generators are described in + * + * @blockquote + * "A portable high-quality random number generator for lattice field theory + * calculations", M. Luescher, Computer Physics Communications, 79 (1994) + * pp 100-110. + * @endblockquote + * + * The levels are given in + * + * @blockquote + * "RANLUX: A Fortran implementation ofthe high-quality + * pseudorandom number generator of Luescher", F. James, + * Computer Physics Communications 79 (1994) 111-114 + * @endblockquote + */ +class ranlux_documentation {}; +} + +typedef subtract_with_carry_engine ranlux_base; +typedef subtract_with_carry_01_engine ranlux_base_01; +typedef subtract_with_carry_01_engine ranlux64_base_01; + + +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux3; +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux4; + +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux3_01; +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux4_01; + +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux64_3_01; +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux64_4_01; + +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +typedef subtract_with_carry_engine ranlux64_base; +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux64_3; +/** @copydoc boost::random::detail::ranlux_documentation */ +typedef discard_block_engine ranlux64_4; +#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */ + + +typedef subtract_with_carry_engine ranlux24_base; +typedef subtract_with_carry_engine ranlux48_base; + +typedef discard_block_engine ranlux24; +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +typedef discard_block_engine ranlux48; +#endif +} + +using random::ranlux3; +using random::ranlux4; +using random::ranlux3_01; +using random::ranlux4_01; +using random::ranlux64_3_01; +using random::ranlux64_4_01; +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +using random::ranlux64_3; +using random::ranlux64_4; +#endif + +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP diff --git a/external/boost/random/seed_seq.hpp b/external/boost/random/seed_seq.hpp new file mode 100644 index 0000000..557b4fa --- /dev/null +++ b/external/boost/random/seed_seq.hpp @@ -0,0 +1,118 @@ +/* boost random/seed_seq.hpp header file + * + * Copyright Steven Watanabe 2010 + * Distributed under the Boost Software License, Version 1.0. (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: seed_seq.hpp 74867 2011-10-09 23:13:31Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_SEED_SEQ_HPP +#define BOOST_RANDOM_SEED_SEQ_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef BOOST_NO_INITIALIZER_LISTS +#include +#endif + +namespace boost { +namespace random { + +/** + * The class @c seed_seq stores a sequence of 32-bit words + * for seeding a \pseudo_random_number_generator. These + * words will be combined to fill the entire state of the + * generator. + */ +class seed_seq { +public: + typedef boost::uint_least32_t result_type; + + /** Initializes a seed_seq to hold an empty sequence. */ + seed_seq() {} +#ifndef BOOST_NO_INITIALIZER_LISTS + /** Initializes the sequence from an initializer_list. */ + template + seed_seq(const std::initializer_list& il) : v(il.begin(), il.end()) {} +#endif + /** Initializes the sequence from an iterator range. */ + template + seed_seq(Iter first, Iter last) : v(first, last) {} + /** Initializes the sequence from Boost.Range range. */ + template + explicit seed_seq(const Range& range) + : v(boost::begin(range), boost::end(range)) {} + + /** + * Fills a range with 32-bit values based on the stored sequence. + * + * Requires: Iter must be a Random Access Iterator whose value type + * is an unsigned integral type at least 32 bits wide. + */ + template + void generate(Iter first, Iter last) const + { + typedef typename std::iterator_traits::value_type value_type; + std::fill(first, last, static_cast(0x8b8b8b8bu)); + std::size_t s = v.size(); + std::size_t n = last - first; + std::size_t t = + (n >= 623) ? 11 : + (n >= 68) ? 7 : + (n >= 39) ? 5 : + (n >= 7) ? 3 : + (n - 1)/2; + std::size_t p = (n - t) / 2; + std::size_t q = p + t; + std::size_t m = (std::max)(s+1, n); + value_type mask = 0xffffffffu; + for(std::size_t k = 0; k < m; ++k) { + value_type r1 = + *(first + k%n) ^ *(first + (k+p)%n) ^ *(first + (k+n-1)%n); + r1 = r1 ^ (r1 >> 27); + r1 = (r1 * 1664525u) & mask; + value_type r2 = r1 + + ((k == 0) ? s : + (k <= s) ? k % n + v[k - 1] : + (k % n)); + *(first + (k+p)%n) = (*(first + (k+p)%n) + r1) & mask; + *(first + (k+q)%n) = (*(first + (k+q)%n) + r2) & mask; + *(first + k%n) = r2; + } + for(std::size_t k = m; k < m + n; ++k) { + value_type r3 = + (*(first + k%n) + *(first + (k+p)%n) + *(first + (k+n-1)%n)) + & mask; + r3 = r3 ^ (r3 >> 27); + r3 = (r3 * 1566083941u) & mask; + value_type r4 = r3 - k%m; + *(first + (k+p)%n) ^= r3; + *(first + (k+q)%n) ^= r4; + *(first + k%n) = r4; + } + } + /** Returns the size of the sequence. */ + std::size_t size() const { return v.size(); } + /** Writes the stored sequence to iter. */ + template + void param(Iter out) { std::copy(v.begin(), v.end(), out); } +private: + std::vector v; +}; + +} +} + +#endif diff --git a/external/boost/random/shuffle_order.hpp b/external/boost/random/shuffle_order.hpp new file mode 100644 index 0000000..1c8d875 --- /dev/null +++ b/external/boost/random/shuffle_order.hpp @@ -0,0 +1,269 @@ +/* boost random/shuffle_order.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2010 + * Distributed under the Boost Software License, Version 1.0. (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_order.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_SHUFFLE_ORDER_HPP +#define BOOST_RANDOM_SHUFFLE_ORDER_HPP + +#include +#include // std::copy +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace random { + +/** + * Instatiations of class template @c shuffle_order_engine model a + * \pseudo_random_number_generator. It mixes the output + * of some (usually \linear_congruential_engine) + * \uniform_random_number_generator to get better statistical properties. + * The algorithm is described in + * + * @blockquote + * "Improving a poor random number generator", Carter Bays + * and S.D. Durham, ACM Transactions on Mathematical Software, + * Vol 2, No. 1, March 1976, pp. 59-64. + * http://doi.acm.org/10.1145/355666.355670 + * @endblockquote + * + * The output of the base generator is buffered in an array of + * length k. Every output X(n) has a second role: It gives an + * index into the array where X(n+1) will be retrieved. Used + * array elements are replaced with fresh output from the base + * generator. + * + * Template parameters are the base generator and the array + * length k, which should be around 100. + */ +template +class shuffle_order_engine +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef typename base_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(std::size_t, buffer_size = k); + BOOST_STATIC_CONSTANT(std::size_t, table_size = k); + + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(k > 0); + + /** + * Constructs a @c shuffle_order_engine by invoking the + * default constructor of the base generator. + * + * Complexity: Exactly k+1 invocations of the base generator. + */ + shuffle_order_engine() : _rng() { init(); } + /** + * Constructs a @c shuffle_output_engine by invoking the one-argument + * constructor of the base generator with the parameter seed. + * + * Complexity: Exactly k+1 invocations of the base generator. + */ + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(shuffle_order_engine, + result_type, s) + { _rng.seed(s); init(); } + BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(shuffle_order_engine, SeedSeq, seq) + { _rng.seed(seq); init(); } + /** + * Constructs a @c shuffle_output_engine by using a copy + * of the provided generator. + * + * Precondition: The template argument UniformRandomNumberGenerator + * shall denote a CopyConstructible type. + * + * Complexity: Exactly k+1 invocations of the base generator. + */ + explicit shuffle_order_engine(const base_type & rng) : _rng(rng) { init(); } + +#ifndef BOOST_NO_RVALUE_REFERENCES + explicit shuffle_order_engine(base_type&& rng) : _rng(rng) { init(); } +#endif + + template shuffle_order_engine(It& first, It last) + : _rng(first, last) { init(); } + void seed() { _rng.seed(); init(); } + /** + * Invokes the one-argument seed method of the base generator + * with the parameter seed and re-initializes the internal buffer array. + * + * Complexity: Exactly k+1 invocations of the base generator. + */ + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(shuffle_order_engine, + result_type, seed_arg) + { _rng.seed(seed_arg); init(); } + /** + * Invokes the one-argument seed method of the base generator + * with the parameter seq and re-initializes the internal buffer array. + * + * Complexity: Exactly k+1 invocations of the base generator. + */ + BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(shuffle_order_engine, SeedSeq, seq) + { _rng.seed(seq); init(); } + template 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. + typedef typename make_unsigned::type base_unsigned; + const base_unsigned brange = + detail::subtract()((max)(), (min)()); + const base_unsigned off = + detail::subtract()(y, (min)()); + + base_unsigned j; + if(k == 1) { + j = 0; + } else if(brange < (std::numeric_limits::max)() / k) { + // try to do it in the native type if we know that it won't + // overflow + j = k * off / (brange + 1); + } else if(brange < (std::numeric_limits::max)() / k) { + // Otherwise try to use uint64_t + j = static_cast( + static_cast(off) * k / + (static_cast(brange) + 1)); + } else { + boost::uintmax_t divisor = + static_cast(brange) + 1; + j = static_cast(detail::muldiv(off, k, divisor)); + } + // assert(0 <= j && j < k); + y = v[j]; + v[j] = _rng(); + return y; + } + + /** Advances the generator by z steps. */ + void discard(boost::uintmax_t z) + { + for(boost::uintmax_t j = 0; j < z; ++j) { + (*this)(); + } + } + + /** Fills a range with pseudo-random values. */ + template + void generate(Iter first, Iter last) + { detail::generate_from_int(*this, first, last); } + + /** Returns the smallest value that the generator can produce. */ + static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () + { return (base_type::min)(); } + /** Returns the largest value that the generator can produce. */ + static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () + { return (base_type::max)(); } + + /** Writes a @c shuffle_order_engine to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, shuffle_order_engine, s) + { + os << s._rng; + for(std::size_t i = 0; i < k; ++i) + os << ' ' << s.v[i]; + os << ' ' << s.y; + return os; + } + + /** Reads a @c shuffle_order_engine from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, shuffle_order_engine, s) + { + is >> s._rng; + for(std::size_t i = 0; i < k; ++i) + is >> std::ws >> s.v[i]; + is >> std::ws >> s.y; + return is; + } + + /** Returns true if the two generators will produce identical sequences. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(shuffle_order_engine, x, y) + { return x._rng == y._rng && x.y == y.y && std::equal(x.v, x.v+k, y.v); } + /** Returns true if the two generators will produce different sequences. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(shuffle_order_engine) + +private: + + /// \cond show_private + + void init() + { + // 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(); + } + + /// \endcond + + 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 +const bool shuffle_order_engine::has_fixed_range; +template +const std::size_t shuffle_order_engine::table_size; +template +const std::size_t shuffle_order_engine::buffer_size; +#endif + +/** + * According to Harry Erwin (private e-mail), the specialization + * @c kreutzer1986 was suggested in: + * + * @blockquote + * "System Simulation: Programming Styles and Languages (International + * Computer Science Series)", Wolfgang Kreutzer, Addison-Wesley, December 1986. + * @endblockquote + */ +typedef shuffle_order_engine< + linear_congruential_engine, + 97> kreutzer1986; + +/** + * The specialization @c knuth_b is specified by the C++ standard. + * It is described in + * + * @blockquote + * "The Art of Computer Programming, Second Edition, Volume 2, + * Seminumerical Algorithms", Donald Knuth, Addison-Wesley, 1981. + * @endblockquote + */ +typedef shuffle_order_engine knuth_b; + +} // namespace random + +using random::kreutzer1986; + +} // namespace boost + +#include + +#endif // BOOST_RANDOM_SHUFFLE_OUTPUT_HPP diff --git a/external/boost/random/shuffle_output.hpp b/external/boost/random/shuffle_output.hpp new file mode 100644 index 0000000..44b823f --- /dev/null +++ b/external/boost/random/shuffle_output.hpp @@ -0,0 +1,51 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_SHUFFLE_OUTPUT_HPP +#define BOOST_RANDOM_SHUFFLE_OUTPUT_HPP + +#include + +namespace boost { +namespace random { + +/// \cond + +template +class shuffle_output : public shuffle_order_engine +{ + typedef shuffle_order_engine base_t; + typedef typename base_t::result_type result_type; +public: + shuffle_output() {} + template + shuffle_output(T& arg) : base_t(arg) {} + template + shuffle_output(const T& arg) : base_t(arg) {} + template + shuffle_output(It& first, It last) : base_t(first, last) {} + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () + { return (this->base().min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () + { return (this->base().max)(); } +}; + +/// \endcond + +} +} + +#endif // BOOST_RANDOM_SHUFFLE_OUTPUT_HPP diff --git a/external/boost/random/student_t_distribution.hpp b/external/boost/random/student_t_distribution.hpp new file mode 100644 index 0000000..665afdb --- /dev/null +++ b/external/boost/random/student_t_distribution.hpp @@ -0,0 +1,180 @@ +/* boost random/student_t_distribution.hpp header file + * + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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: student_t_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + */ + +#ifndef BOOST_RANDOM_STUDENT_T_DISTRIBUTION_HPP +#define BOOST_RANDOM_STUDENT_T_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +/** + * The Student t distribution is a real valued distribution with one + * parameter n, the number of degrees of freedom. + * + * It has \f$\displaystyle p(x) = + * \frac{1}{\sqrt{n\pi}} + * \frac{\Gamma((n+1)/2)}{\Gamma(n/2)} + * \left(1+\frac{x^2}{n}\right)^{-(n+1)/2} + * \f$. + */ +template +class student_t_distribution { +public: + typedef RealType result_type; + typedef RealType input_type; + + class param_type { + public: + typedef student_t_distribution distribution_type; + + /** + * Constructs a @c param_type with "n" degrees of freedom. + * + * Requires: n > 0 + */ + explicit param_type(RealType n_arg = RealType(1.0)) + : _n(n_arg) + {} + + /** Returns the number of degrees of freedom of the distribution. */ + RealType n() const { return _n; } + + /** Writes a @c param_type to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { os << parm._n; return os; } + + /** Reads a @c param_type from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { is >> parm._n; return is; } + + /** Returns true if the two sets of parameters are the same. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._n == rhs._n; } + + /** Returns true if the two sets of parameters are the different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + RealType _n; + }; + + /** + * Constructs an @c student_t_distribution with "n" degrees of freedom. + * + * Requires: n > 0 + */ + explicit student_t_distribution(RealType n_arg = RealType(1.0)) + : _normal(), _chi_squared(n_arg) + {} + /** Constructs an @c student_t_distribution from its parameters. */ + explicit student_t_distribution(const param_type& parm) + : _normal(), _chi_squared(parm.n()) + {} + + /** + * Returns a random variate distributed according to the + * Student t distribution. + */ + template + RealType operator()(URNG& urng) + { + using std::sqrt; + return _normal(urng) / sqrt(_chi_squared(urng) / n()); + } + + /** + * Returns a random variate distributed accordint to the Student + * t distribution with parameters specified by @c param. + */ + template + RealType operator()(URNG& urng, const param_type& parm) const + { + return student_t_distribution(parm)(urng); + } + + /** Returns the number of degrees of freedom. */ + RealType n() const { return _chi_squared.n(); } + + /** Returns the smallest value that the distribution can produce. */ + RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return -std::numeric_limits::infinity(); } + /** Returns the largest value that the distribution can produce. */ + RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return std::numeric_limits::infinity(); } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(n()); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + typedef chi_squared_distribution chi_squared_type; + typename chi_squared_type::param_type chi_squared_param(parm.n()); + _chi_squared.param(chi_squared_param); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() + { + _normal.reset(); + _chi_squared.reset(); + } + + /** Writes a @c student_t_distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, student_t_distribution, td) + { + os << td.param(); + return os; + } + + /** Reads a @c student_t_distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, student_t_distribution, td) + { + param_type parm; + if(is >> parm) { + td.param(parm); + } + return is; + } + + /** + * Returns true if the two instances of @c student_t_distribution will + * return identical sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(student_t_distribution, lhs, rhs) + { return lhs._normal == rhs._normal && lhs._chi_squared == rhs._chi_squared; } + + /** + * Returns true if the two instances of @c student_t_distribution will + * return different sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(student_t_distribution) + +private: + normal_distribution _normal; + chi_squared_distribution _chi_squared; +}; + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_STUDENT_T_DISTRIBUTION_HPP diff --git a/external/boost/random/subtract_with_carry.hpp b/external/boost/random/subtract_with_carry.hpp new file mode 100644 index 0000000..298eb33 --- /dev/null +++ b/external/boost/random/subtract_with_carry.hpp @@ -0,0 +1,613 @@ +/* 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 72951 2011-07-07 04:57:37Z steven_watanabe $ + * + * Revision history + * 2002-03-02 created + */ + +#ifndef BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP +#define BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP + +#include // std::pow +#include +#include // std::equal +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost { +namespace random { + +namespace detail { + +struct subtract_with_carry_discard +{ + template + static void apply(Engine& eng, boost::uintmax_t z) + { + typedef typename Engine::result_type IntType; + const std::size_t short_lag = Engine::short_lag; + const std::size_t long_lag = Engine::long_lag; + std::size_t k = eng.k; + IntType carry = eng.carry; + if(k != 0) { + // increment k until it becomes 0. + if(k < short_lag) { + std::size_t limit = (short_lag - k) < z? + short_lag : (k + static_cast(z)); + for(std::size_t j = k; j < limit; ++j) { + carry = eng.do_update(j, j + long_lag - short_lag, carry); + } + } + std::size_t limit = (long_lag - k) < z? + long_lag : (k + static_cast(z)); + std::size_t start = (k < short_lag ? short_lag : k); + for(std::size_t j = start; j < limit; ++j) { + carry = eng.do_update(j, j - short_lag, carry); + } + } + + k = ((z % long_lag) + k) % long_lag; + + if(k < z) { + // main loop: update full blocks from k = 0 to long_lag + for(std::size_t i = 0; i < (z - k) / long_lag; ++i) { + for(std::size_t j = 0; j < short_lag; ++j) { + carry = eng.do_update(j, j + long_lag - short_lag, carry); + } + for(std::size_t j = short_lag; j < long_lag; ++j) { + carry = eng.do_update(j, j - short_lag, carry); + } + } + + // Update the last partial block + std::size_t limit = short_lag < k? short_lag : k; + for(std::size_t j = 0; j < limit; ++j) { + carry = eng.do_update(j, j + long_lag - short_lag, carry); + } + for(std::size_t j = short_lag; j < k; ++j) { + carry = eng.do_update(j, j - short_lag, carry); + } + } + eng.carry = carry; + eng.k = k; + } +}; + +} + +/** + * Instantiations of @c subtract_with_carry_engine model a + * \pseudo_random_number_generator. The algorithm is + * described in + * + * @blockquote + * "A New Class of Random Number Generators", George + * Marsaglia and Arif Zaman, Annals of Applied Probability, + * Volume 1, Number 3 (1991), 462-480. + * @endblockquote + */ +template +class subtract_with_carry_engine +{ +public: + typedef IntType result_type; + BOOST_STATIC_CONSTANT(std::size_t, word_size = w); + BOOST_STATIC_CONSTANT(std::size_t, long_lag = r); + BOOST_STATIC_CONSTANT(std::size_t, short_lag = s); + BOOST_STATIC_CONSTANT(uint32_t, default_seed = 19780503u); + + // Required by the old Boost.Random concepts + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + // Backwards compatibility + BOOST_STATIC_CONSTANT(result_type, modulus = (result_type(1) << w)); + + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + + /** + * Constructs a new @c subtract_with_carry_engine and seeds + * it with the default seed. + */ + subtract_with_carry_engine() { seed(); } + /** + * Constructs a new @c subtract_with_carry_engine and seeds + * it with @c value. + */ + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(subtract_with_carry_engine, + IntType, value) + { seed(value); } + /** + * Constructs a new @c subtract_with_carry_engine and seeds + * it with values produced by @c seq.generate(). + */ + BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(subtract_with_carry_engine, + SeedSeq, seq) + { seed(seq); } + /** + * Constructs a new @c subtract_with_carry_engine and seeds + * it with values from a range. first is updated to point + * one past the last value consumed. If there are not + * enough elements in the range to fill the entire state of + * the generator, throws @c std::invalid_argument. + */ + template subtract_with_carry_engine(It& first, It last) + { seed(first,last); } + + // compiler-generated copy ctor and assignment operator are fine + + /** Seeds the generator with the default seed. */ + void seed() { seed(default_seed); } + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(subtract_with_carry_engine, + IntType, value) + { + typedef linear_congruential_engine gen_t; + gen_t intgen(static_cast(value)); + detail::generator_seed_seq gen(intgen); + seed(gen); + } + + /** Seeds the generator with values produced by @c seq.generate(). */ + BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(subtract_with_carry, SeedSeq, seq) + { + detail::seed_array_int(seq, x); + carry = (x[long_lag-1] == 0); + k = 0; + } + + /** + * Seeds the generator with values from a range. Updates @c first to + * point one past the last consumed value. If the range does not + * contain enough elements to fill the entire state of the generator, + * throws @c std::invalid_argument. + */ + template + void seed(It& first, It last) + { + detail::fill_array_int(first, last, x); + carry = (x[long_lag-1] == 0); + k = 0; + } + + /** Returns the smallest value that the generator can produce. */ + static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () + { return 0; } + /** Returns the largest value that the generator can produce. */ + static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () + { return boost::low_bits_mask_t::sig_bits; } + + /** Returns the next value of the generator. */ + result_type operator()() + { + std::size_t short_index = + (k < short_lag)? + (k + long_lag - short_lag) : + (k - short_lag); + carry = do_update(k, short_index, carry); + IntType result = x[k]; + ++k; + if(k >= long_lag) + k = 0; + return result; + } + + /** Advances the state of the generator by @c z. */ + void discard(boost::uintmax_t z) + { + detail::subtract_with_carry_discard::apply(*this, z); + } + + /** Fills a range with random values. */ + template + void generate(It first, It last) + { detail::generate_from_int(*this, first, last); } + + /** Writes a @c subtract_with_carry_engine to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, subtract_with_carry_engine, f) + { + for(unsigned int j = 0; j < f.long_lag; ++j) + os << f.compute(j) << ' '; + os << f.carry; + return os; + } + + /** Reads a @c subtract_with_carry_engine from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, subtract_with_carry_engine, f) + { + for(unsigned int j = 0; j < f.long_lag; ++j) + is >> f.x[j] >> std::ws; + is >> f.carry; + f.k = 0; + return is; + } + + /** + * Returns true if the two generators will produce identical + * sequences of values. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(subtract_with_carry_engine, x, y) + { + for(unsigned int j = 0; j < r; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + /** + * Returns true if the two generators will produce different + * sequences of values. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(subtract_with_carry_engine) + +private: + /// \cond show_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]; + } + + friend struct detail::subtract_with_carry_discard; + + IntType do_update(std::size_t current, std::size_t short_index, IntType carry) + { + IntType delta; + IntType temp = x[current] + carry; + if (x[short_index] >= temp) { + // x(n) >= 0 + delta = x[short_index] - temp; + carry = 0; + } else { + // x(n) < 0 + delta = modulus - temp + x[short_index]; + carry = 1; + } + x[current] = delta; + return carry; + } + /// \endcond + + // 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]; + std::size_t k; + IntType carry; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool subtract_with_carry_engine::has_fixed_range; +template +const IntType subtract_with_carry_engine::modulus; +template +const std::size_t subtract_with_carry_engine::word_size; +template +const std::size_t subtract_with_carry_engine::long_lag; +template +const std::size_t subtract_with_carry_engine::short_lag; +template +const uint32_t subtract_with_carry_engine::default_seed; +#endif + + +// use a floating-point representation to produce values in [0..1) +/** + * Instantiations of \subtract_with_carry_01_engine model a + * \pseudo_random_number_generator. The algorithm is + * described in + * + * @blockquote + * "A New Class of Random Number Generators", George + * Marsaglia and Arif Zaman, Annals of Applied Probability, + * Volume 1, Number 3 (1991), 462-480. + * @endblockquote + */ +template +class subtract_with_carry_01_engine +{ +public: + typedef RealType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(std::size_t, word_size = w); + BOOST_STATIC_CONSTANT(std::size_t, long_lag = r); + BOOST_STATIC_CONSTANT(std::size_t, short_lag = s); + BOOST_STATIC_CONSTANT(boost::uint32_t, default_seed = 19780503u); + + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); + + /** Creates a new \subtract_with_carry_01_engine using the default seed. */ + subtract_with_carry_01_engine() { init_modulus(); seed(); } + /** Creates a new subtract_with_carry_01_engine and seeds it with value. */ + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(subtract_with_carry_01_engine, + boost::uint32_t, value) + { init_modulus(); seed(value); } + /** + * Creates a new \subtract_with_carry_01_engine and seeds with with values + * produced by seq.generate(). + */ + BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(subtract_with_carry_01_engine, + SeedSeq, seq) + { init_modulus(); seed(seq); } + /** + * Creates a new \subtract_with_carry_01_engine and seeds it with values + * from a range. Advances first to point one past the last consumed + * value. If the range does not contain enough elements to fill the + * entire state, throws @c std::invalid_argument. + */ + template subtract_with_carry_01_engine(It& first, It last) + { init_modulus(); seed(first,last); } + +private: + /// \cond show_private + void init_modulus() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + _modulus = pow(RealType(2), RealType(word_size)); + } + /// \endcond + +public: + // compiler-generated copy ctor and assignment operator are fine + + /** Seeds the generator with the default seed. */ + void seed() { seed(default_seed); } + + /** Seeds the generator with @c value. */ + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(subtract_with_carry_01_engine, + boost::uint32_t, value) + { + typedef linear_congruential_engine gen_t; + gen_t intgen(value); + detail::generator_seed_seq gen(intgen); + seed(gen); + } + + /** Seeds the generator with values produced by @c seq.generate(). */ + BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(subtract_with_carry_01_engine, + SeedSeq, seq) + { + detail::seed_array_real(seq, x); + carry = (x[long_lag-1] ? 0 : 1 / _modulus); + k = 0; + } + + /** + * Seeds the generator with values from a range. Updates first to + * point one past the last consumed element. If there are not + * enough elements in the range to fill the entire state, throws + * @c std::invalid_argument. + */ + template + void seed(It& first, It last) + { + detail::fill_array_real(first, last, x); + carry = (x[long_lag-1] ? 0 : 1 / _modulus); + k = 0; + } + + /** Returns the smallest value that the generator can produce. */ + static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () + { return result_type(0); } + /** Returns the largest value that the generator can produce. */ + static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () + { return result_type(1); } + + /** Returns the next value of the generator. */ + result_type operator()() + { + std::size_t short_index = + (k < short_lag) ? + (k + long_lag - short_lag) : + (k - short_lag); + carry = do_update(k, short_index, carry); + RealType result = x[k]; + ++k; + if(k >= long_lag) + k = 0; + return result; + } + + /** Advances the state of the generator by @c z. */ + void discard(boost::uintmax_t z) + { detail::subtract_with_carry_discard::apply(*this, z); } + + /** Fills a range with random values. */ + template + void generate(Iter first, Iter last) + { detail::generate_from_real(*this, first, last); } + + /** Writes a \subtract_with_carry_01_engine to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, subtract_with_carry_01_engine, f) + { + 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; + } + + /** Reads a \subtract_with_carry_01_engine from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, subtract_with_carry_01_engine, f) + { + RealType value; + for(unsigned int j = 0; j < long_lag; ++j) { + is >> value >> std::ws; + f.x[j] = value / f._modulus; + } + is >> value; + f.carry = value / f._modulus; + f.k = 0; + return is; + } + + /** Returns true if the two generators will produce identical sequences. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(subtract_with_carry_01_engine, x, y) + { + for(unsigned int j = 0; j < r; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + /** Returns true if the two generators will produce different sequences. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(subtract_with_carry_01_engine) + +private: + /// \cond show_private + RealType compute(unsigned int index) const + { + return x[(k+index) % long_lag]; + } + + friend struct detail::subtract_with_carry_discard; + + RealType do_update(std::size_t current, std::size_t short_index, RealType carry) + { + RealType delta = x[short_index] - x[current] - carry; + if(delta < 0) { + delta += RealType(1); + carry = RealType(1)/_modulus; + } else { + carry = 0; + } + x[current] = delta; + return carry; + } + /// \endcond + std::size_t 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 +const bool subtract_with_carry_01_engine::has_fixed_range; +template +const std::size_t subtract_with_carry_01_engine::word_size; +template +const std::size_t subtract_with_carry_01_engine::long_lag; +template +const std::size_t subtract_with_carry_01_engine::short_lag; +template +const uint32_t subtract_with_carry_01_engine::default_seed; +#endif + + +/// \cond show_deprecated + +template +class subtract_with_carry : + public subtract_with_carry_engine::value, s, r> +{ + typedef subtract_with_carry_engine::value, s, r> base_type; +public: + subtract_with_carry() {} + BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(subtract_with_carry, Gen, gen) + { seed(gen); } + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(subtract_with_carry, + IntType, val) + { seed(val); } + template + subtract_with_carry(It& first, It last) : base_type(first, last) {} + void seed() { base_type::seed(); } + BOOST_RANDOM_DETAIL_GENERATOR_SEED(subtract_with_carry, Gen, gen) + { + detail::generator_seed_seq seq(gen); + base_type::seed(seq); + } + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(subtract_with_carry, IntType, val) + { base_type::seed(val); } + template + void seed(It& first, It last) { base_type::seed(first, last); } +}; + +template +class subtract_with_carry_01 : + public subtract_with_carry_01_engine +{ + typedef subtract_with_carry_01_engine base_type; +public: + subtract_with_carry_01() {} + BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(subtract_with_carry_01, Gen, gen) + { seed(gen); } + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(subtract_with_carry_01, + uint32_t, val) + { seed(val); } + template + subtract_with_carry_01(It& first, It last) : base_type(first, last) {} + void seed() { base_type::seed(); } + BOOST_RANDOM_DETAIL_GENERATOR_SEED(subtract_with_carry_01, Gen, gen) + { + detail::generator_seed_seq seq(gen); + base_type::seed(seq); + } + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(subtract_with_carry_01, uint32_t, val) + { base_type::seed(val); } + template + void seed(It& first, It last) { base_type::seed(first, last); } +}; + +/// \endcond + +namespace detail { + +template +struct generator_bits; + +template +struct generator_bits > { + static std::size_t value() { return w; } +}; + +template +struct generator_bits > { + static std::size_t value() { return w; } +}; + +} + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP diff --git a/external/boost/random/taus88.hpp b/external/boost/random/taus88.hpp new file mode 100644 index 0000000..c9d3810 --- /dev/null +++ b/external/boost/random/taus88.hpp @@ -0,0 +1,45 @@ +/* boost random/taus88.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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: taus88.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_TAUS88_HPP +#define BOOST_RANDOM_TAUS88_HPP + +#include +#include + +namespace boost { +namespace random { + +/** + * The specialization taus88 was suggested in + * + * @blockquote + * "Maximally Equidistributed Combined Tausworthe Generators", + * Pierre L'Ecuyer, Mathematics of Computation, Volume 65, + * Number 213, January 1996, Pages 203-213 + * @endblockquote + */ +typedef xor_combine_engine< + xor_combine_engine< + linear_feedback_shift_engine, 0, + linear_feedback_shift_engine, 0>, 0, + linear_feedback_shift_engine, 0> taus88; + +} // namespace random + +using random::taus88; + +} // namespace boost + +#endif // BOOST_RANDOM_TAUS88_HPP diff --git a/external/boost/random/triangle_distribution.hpp b/external/boost/random/triangle_distribution.hpp new file mode 100644 index 0000000..8776000 --- /dev/null +++ b/external/boost/random/triangle_distribution.hpp @@ -0,0 +1,232 @@ +/* boost random/triangle_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP +#define BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +/** + * Instantiations of @c triangle_distribution model a \random_distribution. + * A @c triangle_distribution has three parameters, @c a, @c b, and @c c, + * which are the smallest, the most probable and the largest values of + * the distribution respectively. + */ +template +class triangle_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + class param_type + { + public: + + typedef triangle_distribution distribution_type; + + /** Constructs the parameters of a @c triangle_distribution. */ + explicit param_type(RealType a_arg = RealType(0.0), + RealType b_arg = RealType(0.5), + RealType c_arg = RealType(1.0)) + : _a(a_arg), _b(b_arg), _c(c_arg) + { + BOOST_ASSERT(_a <= _b && _b <= _c); + } + + /** Returns the minimum value of the distribution. */ + RealType a() const { return _a; } + /** Returns the mode of the distribution. */ + RealType b() const { return _b; } + /** Returns the maximum value of the distribution. */ + RealType c() const { return _c; } + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + os << parm._a << " " << parm._b << " " << parm._c; + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + double a_in, b_in, c_in; + if(is >> a_in >> std::ws >> b_in >> std::ws >> c_in) { + if(a_in <= b_in && b_in <= c_in) { + parm._a = a_in; + parm._b = b_in; + parm._c = c_in; + } else { + is.setstate(std::ios_base::failbit); + } + } + return is; + } + + /** Returns true if the two sets of parameters are equal. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._a == rhs._a && lhs._b == rhs._b && lhs._c == rhs._c; } + + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + RealType _a; + RealType _b; + RealType _c; + }; + + /** + * Constructs a @c triangle_distribution with the parameters + * @c a, @c b, and @c c. + * + * Preconditions: a <= b <= c. + */ + explicit triangle_distribution(RealType a_arg = RealType(0.0), + RealType b_arg = RealType(0.5), + RealType c_arg = RealType(1.0)) + : _a(a_arg), _b(b_arg), _c(c_arg) + { + BOOST_ASSERT(_a <= _b && _b <= _c); + init(); + } + + /** Constructs a @c triangle_distribution from its parameters. */ + explicit triangle_distribution(const param_type& parm) + : _a(parm.a()), _b(parm.b()), _c(parm.c()) + { + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + /** Returns the @c a parameter of the distribution */ + result_type a() const { return _a; } + /** Returns the @c b parameter of the distribution */ + result_type b() const { return _b; } + /** Returns the @c c parameter of the distribution */ + result_type c() const { return _c; } + + /** Returns the smallest value that the distribution can produce. */ + RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _a; } + /** Returns the largest value that the distribution can produce. */ + RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _c; } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_a, _b, _c); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _a = parm.a(); + _b = parm.b(); + _c = parm.c(); + init(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + + /** + * Returns a random variate distributed according to the + * triangle distribution. + */ + template + result_type operator()(Engine& eng) + { + using std::sqrt; + result_type u = uniform_01<>()(eng); + if( u <= q1 ) + return _a + p1*sqrt(u); + else + return _c - d3*sqrt(d2*u-d1); + } + + /** + * Returns a random variate distributed according to the + * triangle distribution with parameters specified by param. + */ + template + result_type operator()(Engine& eng, const param_type& parm) + { return triangle_distribution(parm)(eng); } + + /** Writes the distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, triangle_distribution, td) + { + os << td.param(); + return os; + } + + /** Reads the distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, triangle_distribution, td) + { + param_type parm; + if(is >> parm) { + td.param(parm); + } + return is; + } + + /** + * Returns true if the two distributions will produce identical + * sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(triangle_distribution, lhs, rhs) + { return lhs._a == rhs._a && lhs._b == rhs._b && lhs._c == rhs._c; } + + /** + * Returns true if the two distributions may produce different + * sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(triangle_distribution) + +private: + /// \cond show_private + void init() + { + using std::sqrt; + d1 = _b - _a; + d2 = _c - _a; + d3 = sqrt(_c - _b); + q1 = d1 / d2; + p1 = sqrt(d1 * d2); + } + /// \endcond + + RealType _a, _b, _c; + RealType d1, d2, d3, q1, p1; +}; + +} // namespace random + +using random::triangle_distribution; + +} // namespace boost + +#endif // BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP diff --git a/external/boost/random/uniform_01.hpp b/external/boost/random/uniform_01.hpp new file mode 100644 index 0000000..d32a085 --- /dev/null +++ b/external/boost/random/uniform_01.hpp @@ -0,0 +1,277 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_UNIFORM_01_HPP +#define BOOST_RANDOM_UNIFORM_01_HPP + +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace random { + +#ifdef BOOST_RANDOM_DOXYGEN + +/** + * The distribution function uniform_01 models a \random_distribution. + * On each invocation, it returns a random floating-point value + * uniformly distributed in the range [0..1). + * + * The template parameter RealType shall denote a float-like value type + * with support for binary operators +, -, and /. + * + * Note: The current implementation is buggy, because it may not fill + * all of the mantissa with random bits. I'm unsure how to fill a + * (to-be-invented) @c boost::bigfloat class with random bits efficiently. + * It's probably time for a traits class. + */ +template +class uniform_01 +{ +public: + typedef RealType input_type; + typedef RealType result_type; + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const; + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const; + void reset(); + + template + result_type operator()(Engine& eng); + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const new_uniform_01&) + { + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, new_uniform_01&) + { + return is; + } +#endif +}; + +#else + +namespace detail { + +template +class new_uniform_01 +{ +public: + typedef RealType input_type; + typedef RealType result_type; + // 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); } + void reset() { } + + template + result_type operator()(Engine& eng) { + for (;;) { + typedef typename Engine::result_type base_result; + result_type factor = result_type(1) / + (result_type((eng.max)()-(eng.min)()) + + result_type(std::numeric_limits::is_integer ? 1 : 0)); + result_type result = result_type(eng() - (eng.min)()) * factor; + if (result < result_type(1)) + return result; + } + } + +#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const new_uniform_01&) + { + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, new_uniform_01&) + { + return is; + } +#endif +}; + +template +class backward_compatible_uniform_01 +{ + typedef boost::random::detail::ptr_helper traits; +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::is_integer); +#endif + + explicit backward_compatible_uniform_01(typename traits::rvalue_type rng) + : _rng(rng), + _factor(result_type(1) / + (result_type((base().max)()-(base().min)()) + + result_type(std::numeric_limits::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); } + typename traits::value_type& base() { return traits::ref(_rng); } + const typename traits::value_type& base() const { return traits::ref(_rng); } + void reset() { } + + result_type operator()() { + for (;;) { + result_type result = result_type(base()() - (base().min)()) * _factor; + if (result < result_type(1)) + return result; + } + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const backward_compatible_uniform_01& u) + { + os << u._rng; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, backward_compatible_uniform_01& u) + { + is >> u._rng; + return is; + } +#endif + +private: + typedef typename traits::value_type::result_type base_result; + UniformRandomNumberGenerator _rng; + result_type _factor; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool backward_compatible_uniform_01::has_fixed_range; +#endif + +template +struct select_uniform_01 +{ + template + struct apply + { + typedef backward_compatible_uniform_01 type; + }; +}; + +template<> +struct select_uniform_01 +{ + template + struct apply + { + typedef new_uniform_01 type; + }; +}; + +template<> +struct select_uniform_01 +{ + template + struct apply + { + typedef new_uniform_01 type; + }; +}; + +template<> +struct select_uniform_01 +{ + template + struct apply + { + typedef new_uniform_01 type; + }; +}; + +} + +// 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 uniform_01 + : public detail::select_uniform_01::BOOST_NESTED_TEMPLATE apply::type +{ + typedef typename detail::select_uniform_01::BOOST_NESTED_TEMPLATE apply::type impl_type; + typedef boost::random::detail::ptr_helper traits; +public: + + uniform_01() {} + + explicit uniform_01(typename traits::rvalue_type rng) + : impl_type(rng) + { + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_01& u) + { + os << static_cast(u); + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_01& u) + { + is >> static_cast(u); + return is; + } +#endif +}; + +#endif + +} // namespace random + +using random::uniform_01; + +} // namespace boost + +#include + +#endif // BOOST_RANDOM_UNIFORM_01_HPP diff --git a/external/boost/random/uniform_int.hpp b/external/boost/random/uniform_int.hpp new file mode 100644 index 0000000..7ae3b92 --- /dev/null +++ b/external/boost/random/uniform_int.hpp @@ -0,0 +1,99 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include + +namespace boost { + +/** + * The distribution function uniform_int models a \random_distribution. + * On each invocation, it returns a random integer value uniformly + * distributed in the set of integer numbers {min, min+1, min+2, ..., max}. + * + * The template parameter IntType shall denote an integer-like value type. + * + * This class is deprecated. Please use @c uniform_int_distribution in + * new code. + */ +template +class uniform_int : public random::uniform_int_distribution +{ + typedef random::uniform_int_distribution base_type; +public: + + class param_type : public base_type::param_type + { + public: + typedef uniform_int distribution_type; + /** + * Constructs the parameters of a uniform_int distribution. + * + * Requires: min <= max + */ + explicit param_type(IntType min_arg = 0, IntType max_arg = 9) + : base_type::param_type(min_arg, max_arg) + {} + }; + + /** + * Constructs a uniform_int object. @c min and @c max are + * the parameters of the distribution. + * + * Requires: min <= max + */ + explicit uniform_int(IntType min_arg = 0, IntType max_arg = 9) + : base_type(min_arg, max_arg) + {} + + /** Constructs a uniform_int distribution from its parameters. */ + explicit uniform_int(const param_type& parm) + : base_type(parm) + {} + + /** Returns the parameters of the distribution */ + param_type param() const { return param_type(this->a(), this->b()); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) { this->base_type::param(parm); } + + // Codergear seems to have trouble with a using declaration here + + template + IntType operator()(Engine& eng) const + { + return static_cast(*this)(eng); + } + + template + IntType operator()(Engine& eng, const param_type& parm) const + { + return static_cast(*this)(eng, parm); + } + + template + IntType operator()(Engine& eng, IntType n) const + { + BOOST_ASSERT(n > 0); + return static_cast(*this)(eng, param_type(0, n - 1)); + } +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_INT_HPP diff --git a/external/boost/random/uniform_int_distribution.hpp b/external/boost/random/uniform_int_distribution.hpp new file mode 100644 index 0000000..0612028 --- /dev/null +++ b/external/boost/random/uniform_int_distribution.hpp @@ -0,0 +1,400 @@ +/* boost random/uniform_int_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { +namespace detail { + + +#ifdef BOOST_MSVC +#pragma warning(push) +// disable division by zero warning, since we can't +// actually divide by zero. +#pragma warning(disable:4723) +#endif + +template +T generate_uniform_int( + Engine& eng, T min_value, T max_value, + boost::mpl::true_ /** is_integral */) +{ + typedef T result_type; + typedef typename make_unsigned::type range_type; + typedef typename Engine::result_type base_result; + // ranges are always unsigned + typedef typename make_unsigned::type base_unsigned; + const range_type range = random::detail::subtract()(max_value, min_value); + const base_result bmin = (eng.min)(); + const base_unsigned brange = + random::detail::subtract()((eng.max)(), (eng.min)()); + + if(range == 0) { + return min_value; + } else if(brange == range) { + // this will probably never happen in real life + // basically nothing to do; just take care we don't overflow / underflow + base_unsigned v = random::detail::subtract()(eng(), bmin); + return random::detail::add()(v, min_value); + } else if(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 + + // limit == floor((range+1)/(brange+1)) + // Therefore limit*(brange+1) <= range+1 + range_type limit; + if(range == (std::numeric_limits::max)()) { + limit = range/(range_type(brange)+1); + if(range % (range_type(brange)+1) == range_type(brange)) + ++limit; + } else { + limit = (range+1)/(range_type(brange)+1); + } + + // We consider "result" as expressed to base (brange+1): + // For every power of (brange+1), we determine a random factor + range_type result = range_type(0); + range_type mult = range_type(1); + + // loop invariants: + // result < mult + // mult <= range + while(mult <= limit) { + // Postcondition: result <= range, thus no overflow + // + // limit*(brange+1)<=range+1 def. of limit (1) + // eng()-bmin<=brange eng() post. (2) + // and mult<=limit. loop condition (3) + // Therefore mult*(eng()-bmin+1)<=range+1 by (1),(2),(3) (4) + // Therefore mult*(eng()-bmin)+mult<=range+1 rearranging (4) (5) + // result(random::detail::subtract()(eng(), bmin) * mult); + + // equivalent to (mult * (brange+1)) == range+1, but avoids overflow. + if(mult * range_type(brange) == range - mult + 1) { + // The destination range is an integer power of + // the generator's range. + return(result); + } + + // Postcondition: mult <= range + // + // limit*(brange+1)<=range+1 def. of limit (1) + // mult<=limit loop condition (2) + // Therefore mult*(brange+1)<=range+1 by (1), (2) (3) + // mult*(brange+1)!=range+1 preceding if (4) + // Therefore mult*(brange+1) limit loop condition (1) + // Suppose range/mult >= brange+1 Assumption (2) + // range >= mult*(brange+1) by (2) (3) + // range+1 > mult*(brange+1) by (3) (4) + // range+1 > (limit+1)*(brange+1) by (1), (4) (5) + // (range+1)/(brange+1) > limit+1 by (5) (6) + // limit < floor((range+1)/(brange+1)) by (6) (7) + // limit==floor((range+1)/(brange+1)) def. of limit (8) + // not (2) reductio (9) + // + // loop postcondition: (range/mult)*mult+(mult-1) >= range + // + // (range/mult)*mult + range%mult == range identity (1) + // range%mult < mult def. of % (2) + // (range/mult)*mult+mult > range by (1), (2) (3) + // (range/mult)*mult+(mult-1) >= range by (3) (4) + // + // Note that the maximum value of result at this point is (mult-1), + // so after this final step, we generate numbers that can be + // at least as large as range. We have to really careful to avoid + // overflow in this final addition and in the rejection. Anything + // that overflows is larger than range and can thus be rejected. + + // range/mult < brange+1 -> no endless loop + range_type result_increment = + generate_uniform_int( + eng, + static_cast(0), + static_cast(range/mult), + boost::mpl::true_()); + if((std::numeric_limits::max)() / mult < result_increment) { + // The multiplcation would overflow. Reject immediately. + continue; + } + result_increment *= mult; + // unsigned integers are guaranteed to wrap on overflow. + result += result_increment; + if(result < result_increment) { + // The addition overflowed. Reject. + continue; + } + if(result > range) { + // Too big. Reject. + continue; + } + return random::detail::add()(result, min_value); + } + } else { // brange > range + base_unsigned bucket_size; + // it's safe to add 1 to range, as long as we cast it first, + // because we know that it is less than brange. However, + // we do need to be careful not to cause overflow by adding 1 + // to brange. + if(brange == (std::numeric_limits::max)()) { + bucket_size = brange / (static_cast(range)+1); + if(brange % (static_cast(range)+1) == static_cast(range)) { + ++bucket_size; + } + } else { + bucket_size = (brange+1) / (static_cast(range)+1); + } + for(;;) { + base_unsigned result = + random::detail::subtract()(eng(), bmin); + result /= bucket_size; + // result and range are non-negative, and result is possibly larger + // than range, so the cast is safe + if(result <= static_cast(range)) + return random::detail::add()(result, min_value); + } + } +} + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +template +inline T generate_uniform_int( + Engine& eng, T min_value, T max_value, + boost::mpl::false_ /** is_integral */) +{ + uniform_int_float wrapper(eng); + return generate_uniform_int(wrapper, min_value, max_value, boost::mpl::true_()); +} + +template +inline T generate_uniform_int(Engine& eng, T min_value, T max_value) +{ + typedef typename Engine::result_type base_result; + return generate_uniform_int(eng, min_value, max_value, + boost::is_integral()); +} + +} + +/** + * The class template uniform_int_distribution models a \random_distribution. + * On each invocation, it returns a random integer value uniformly + * distributed in the set of integers {min, min+1, min+2, ..., max}. + * + * The template parameter IntType shall denote an integer-like value type. + */ +template +class uniform_int_distribution +{ +public: + typedef IntType input_type; + typedef IntType result_type; + + class param_type + { + public: + + typedef uniform_int_distribution distribution_type; + + /** + * Constructs the parameters of a uniform_int_distribution. + * + * Requires min <= max + */ + explicit param_type( + IntType min_arg = 0, + IntType max_arg = (std::numeric_limits::max)()) + : _min(min_arg), _max(max_arg) + { + BOOST_ASSERT(_min <= _max); + } + + /** Returns the minimum value of the distribution. */ + IntType a() const { return _min; } + /** Returns the maximum value of the distribution. */ + IntType b() const { return _max; } + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + os << parm._min << " " << parm._max; + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + IntType min_in, max_in; + if(is >> min_in >> std::ws >> max_in) { + if(min_in <= max_in) { + parm._min = min_in; + parm._max = max_in; + } else { + is.setstate(std::ios_base::failbit); + } + } + return is; + } + + /** Returns true if the two sets of parameters are equal. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._min == rhs._min && lhs._max == rhs._max; } + + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + + IntType _min; + IntType _max; + }; + + /** + * Constructs a uniform_int_distribution. @c min and @c max are + * the parameters of the distribution. + * + * Requires: min <= max + */ + explicit uniform_int_distribution( + IntType min_arg = 0, + IntType max_arg = (std::numeric_limits::max)()) + : _min(min_arg), _max(max_arg) + { + BOOST_ASSERT(min_arg <= max_arg); + } + /** Constructs a uniform_int_distribution from its parameters. */ + explicit uniform_int_distribution(const param_type& parm) + : _min(parm.a()), _max(parm.b()) {} + + /** Returns the minimum value of the distribution */ + IntType min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + /** Returns the maximum value of the distribution */ + IntType max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + + /** Returns the minimum value of the distribution */ + IntType a() const { return _min; } + /** Returns the maximum value of the distribution */ + IntType b() const { return _max; } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_min, _max); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _min = parm.a(); + _max = parm.b(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + + /** Returns an integer uniformly distributed in the range [min, max]. */ + template + result_type operator()(Engine& eng) const + { return detail::generate_uniform_int(eng, _min, _max); } + + /** + * Returns an integer uniformly distributed in the range + * [param.a(), param.b()]. + */ + template + result_type operator()(Engine& eng, const param_type& parm) const + { return detail::generate_uniform_int(eng, parm.a(), parm.b()); } + + /** Writes the distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, uniform_int_distribution, ud) + { + os << ud.param(); + return os; + } + + /** Reads the distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, uniform_int_distribution, ud) + { + param_type parm; + if(is >> parm) { + ud.param(parm); + } + return is; + } + + /** + * Returns true if the two distributions will produce identical sequences + * of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(uniform_int_distribution, lhs, rhs) + { return lhs._min == rhs._min && lhs._max == rhs._max; } + + /** + * Returns true if the two distributions may produce different sequences + * of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(uniform_int_distribution) + +private: + IntType _min; + IntType _max; +}; + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_INT_HPP diff --git a/external/boost/random/uniform_on_sphere.hpp b/external/boost/random/uniform_on_sphere.hpp new file mode 100644 index 0000000..04071dc --- /dev/null +++ b/external/boost/random/uniform_on_sphere.hpp @@ -0,0 +1,229 @@ +/* boost random/uniform_on_sphere.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * 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 +#include // std::transform +#include // std::bind2nd, std::divides +#include +#include +#include +#include + +namespace boost { +namespace random { + +/** + * Instantiations of class template uniform_on_sphere model a + * \random_distribution. Such a distribution produces random + * numbers uniformly distributed on the unit sphere of arbitrary + * dimension @c dim. The @c Cont template parameter must be a STL-like + * container type with begin and end operations returning non-const + * ForwardIterators of type @c Cont::iterator. + */ +template > +class uniform_on_sphere +{ +public: + typedef RealType input_type; + typedef Cont result_type; + + class param_type + { + public: + + typedef uniform_on_sphere distribution_type; + + /** + * Constructs the parameters of a uniform_on_sphere + * distribution, given the dimension of the sphere. + */ + explicit param_type(int dim_arg = 2) : _dim(dim_arg) + { + BOOST_ASSERT(_dim >= 0); + } + + /** Returns the dimension of the sphere. */ + int dim() const { return _dim; } + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + os << parm._dim; + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + is >> parm._dim; + return is; + } + + /** Returns true if the two sets of parameters are equal. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._dim == rhs._dim; } + + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + int _dim; + }; + + /** + * Constructs a @c uniform_on_sphere distribution. + * @c dim is the dimension of the sphere. + * + * Requires: dim >= 0 + */ + explicit uniform_on_sphere(int dim_arg = 2) + : _container(dim_arg), _dim(dim_arg) { } + + /** + * Constructs a @c uniform_on_sphere distribution from its parameters. + */ + explicit uniform_on_sphere(const param_type& parm) + : _container(parm.dim()), _dim(parm.dim()) { } + + // compiler-generated copy ctor and assignment operator are fine + + /** Returns the dimension of the sphere. */ + int dim() const { return _dim; } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_dim); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _dim = parm.dim(); + _container.resize(_dim); + } + + /** + * Returns the smallest value that the distribution can produce. + * Note that this is required to approximate the standard library's + * requirements. The behavior is defined according to lexicographical + * comparison so that for a container type of std::vector, + * dist.min() <= x <= dist.max() where x is any value produced + * by the distribution. + */ + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const + { + result_type result(_dim); + if(_dim != 0) { + result.front() = RealType(-1.0); + } + return result; + } + /** + * Returns the largest value that the distribution can produce. + * Note that this is required to approximate the standard library's + * requirements. The behavior is defined according to lexicographical + * comparison so that for a container type of std::vector, + * dist.min() <= x <= dist.max() where x is any value produced + * by the distribution. + */ + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { + result_type result(_dim); + if(_dim != 0) { + result.front() = RealType(1.0); + } + return result; + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { _normal.reset(); } + + /** + * Returns a point uniformly distributed over the surface of + * a sphere of dimension dim(). + */ + template + 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; + } + using std::sqrt; + // for all i: result[i] /= sqrt(sqsum) + std::transform(_container.begin(), _container.end(), _container.begin(), + std::bind2nd(std::divides(), sqrt(sqsum))); + return _container; + } + + /** + * Returns a point uniformly distributed over the surface of + * a sphere of dimension param.dim(). + */ + template + result_type operator()(Engine& eng, const param_type& parm) const + { + return uniform_on_sphere(parm)(eng); + } + + /** Writes the distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, uniform_on_sphere, sd) + { + os << sd._dim; + return os; + } + + /** Reads the distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, uniform_on_sphere, sd) + { + is >> sd._dim; + sd._container.resize(sd._dim); + return is; + } + + /** + * Returns true if the two distributions will produce identical + * sequences of values, given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(uniform_on_sphere, lhs, rhs) + { return lhs._dim == rhs._dim && lhs._normal == rhs._normal; } + + /** + * Returns true if the two distributions may produce different + * sequences of values, given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(uniform_on_sphere) + +private: + normal_distribution _normal; + result_type _container; + int _dim; +}; + +} // namespace random + +using random::uniform_on_sphere; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP diff --git a/external/boost/random/uniform_real.hpp b/external/boost/random/uniform_real.hpp new file mode 100644 index 0000000..396072e --- /dev/null +++ b/external/boost/random/uniform_real.hpp @@ -0,0 +1,82 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include + +namespace boost { + +/** + * The distribution function uniform_real models a random distribution. + * On each invocation, it returns a random floating-point value uniformly + * distributed in the range [min..max). + * + * This class is deprecated. Please use @c uniform_real_distribution in + * new code. + */ +template +class uniform_real : public random::uniform_real_distribution +{ + typedef random::uniform_real_distribution base_type; +public: + + class param_type : public base_type::param_type + { + public: + typedef uniform_real distribution_type; + /** + * Constructs the parameters of a uniform_real distribution. + * + * Requires: min <= max + */ + explicit param_type(RealType min_arg = RealType(0.0), + RealType max_arg = RealType(1.0)) + : base_type::param_type(min_arg, max_arg) + {} + }; + + /** + * Constructs a uniform_real object. @c min and @c max are the + * parameters of the distribution. + * + * Requires: min <= max + */ + explicit uniform_real(RealType min_arg = RealType(0.0), + RealType max_arg = RealType(1.0)) + : base_type(min_arg, max_arg) + { + BOOST_ASSERT(min_arg <= max_arg); + } + + /** Constructs a uniform_real distribution from its parameters. */ + explicit uniform_real(const param_type& parm) + : base_type(parm) + {} + + /** Returns the parameters of the distribution */ + param_type param() const { return param_type(this->a(), this->b()); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) { this->base_type::param(parm); } +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_REAL_HPP diff --git a/external/boost/random/uniform_real_distribution.hpp b/external/boost/random/uniform_real_distribution.hpp new file mode 100644 index 0000000..61b235a --- /dev/null +++ b/external/boost/random/uniform_real_distribution.hpp @@ -0,0 +1,239 @@ +/* boost random/uniform_real_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_UNIFORM_REAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_UNIFORM_REAL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { +namespace detail { + +template +T generate_uniform_real( + Engine& eng, T min_value, T max_value, + boost::mpl::false_ /** is_integral */) +{ + for(;;) { + typedef T result_type; + typedef typename Engine::result_type base_result; + result_type numerator = static_cast(eng() - (eng.min)()); + result_type divisor = static_cast((eng.max)() - (eng.min)()); + BOOST_ASSERT(divisor > 0); + BOOST_ASSERT(numerator >= 0 && numerator <= divisor); + T result = numerator / divisor * (max_value - min_value) + min_value; + if(result < max_value) return result; + } +} + +template +T generate_uniform_real( + Engine& eng, T min_value, T max_value, + boost::mpl::true_ /** is_integral */) +{ + for(;;) { + typedef T result_type; + typedef typename Engine::result_type base_result; + result_type numerator = static_cast(subtract()(eng(), (eng.min)())); + result_type divisor = static_cast(subtract()((eng.max)(), (eng.min)())) + 1; + BOOST_ASSERT(divisor > 0); + BOOST_ASSERT(numerator >= 0 && numerator <= divisor); + T result = numerator / divisor * (max_value - min_value) + min_value; + if(result < max_value) return result; + } +} + +template +inline T generate_uniform_real(Engine& eng, T min_value, T max_value) +{ + typedef typename Engine::result_type base_result; + return generate_uniform_real(eng, min_value, max_value, + boost::is_integral()); +} + +} + +/** + * The class template uniform_real_distribution models a \random_distribution. + * On each invocation, it returns a random floating-point value uniformly + * distributed in the range [min..max). + */ +template +class uniform_real_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + class param_type + { + public: + + typedef uniform_real_distribution distribution_type; + + /** + * Constructs the parameters of a uniform_real_distribution. + * + * Requires min <= max + */ + explicit param_type(RealType min_arg = RealType(0.0), + RealType max_arg = RealType(1.0)) + : _min(min_arg), _max(max_arg) + { + BOOST_ASSERT(_min <= _max); + } + + /** Returns the minimum value of the distribution. */ + RealType a() const { return _min; } + /** Returns the maximum value of the distribution. */ + RealType b() const { return _max; } + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + os << parm._min << " " << parm._max; + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + RealType min_in, max_in; + if(is >> min_in >> std::ws >> max_in) { + if(min_in <= max_in) { + parm._min = min_in; + parm._max = max_in; + } else { + is.setstate(std::ios_base::failbit); + } + } + return is; + } + + /** Returns true if the two sets of parameters are equal. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._min == rhs._min && lhs._max == rhs._max; } + + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + + RealType _min; + RealType _max; + }; + + /** + * Constructs a uniform_real_distribution. @c min and @c max are + * the parameters of the distribution. + * + * Requires: min <= max + */ + explicit uniform_real_distribution( + RealType min_arg = RealType(0.0), + RealType max_arg = RealType(1.0)) + : _min(min_arg), _max(max_arg) + { + BOOST_ASSERT(min_arg <= max_arg); + } + /** Constructs a uniform_real_distribution from its parameters. */ + explicit uniform_real_distribution(const param_type& parm) + : _min(parm.a()), _max(parm.b()) {} + + /** Returns the minimum value of the distribution */ + RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + /** Returns the maximum value of the distribution */ + RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + + /** Returns the minimum value of the distribution */ + RealType a() const { return _min; } + /** Returns the maximum value of the distribution */ + RealType b() const { return _max; } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_min, _max); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _min = parm.a(); + _max = parm.b(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + + /** Returns a value uniformly distributed in the range [min, max). */ + template + result_type operator()(Engine& eng) const + { return detail::generate_uniform_real(eng, _min, _max); } + + /** + * Returns a value uniformly distributed in the range + * [param.a(), param.b()). + */ + template + result_type operator()(Engine& eng, const param_type& parm) const + { return detail::generate_uniform_real(eng, parm.a(), parm.b()); } + + /** Writes the distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, uniform_real_distribution, ud) + { + os << ud.param(); + return os; + } + + /** Reads the distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, uniform_real_distribution, ud) + { + param_type parm; + if(is >> parm) { + ud.param(parm); + } + return is; + } + + /** + * Returns true if the two distributions will produce identical sequences + * of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(uniform_real_distribution, lhs, rhs) + { return lhs._min == rhs._min && lhs._max == rhs._max; } + + /** + * Returns true if the two distributions may produce different sequences + * of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(uniform_real_distribution) + +private: + RealType _min; + RealType _max; +}; + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_INT_HPP diff --git a/external/boost/random/uniform_smallint.hpp b/external/boost/random/uniform_smallint.hpp new file mode 100644 index 0000000..745fa8e --- /dev/null +++ b/external/boost/random/uniform_smallint.hpp @@ -0,0 +1,288 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// uniform integer distribution on a small range [min, max] + +/** + * The distribution function uniform_smallint models a \random_distribution. + * On each invocation, it returns a random integer value uniformly distributed + * in the set of integer numbers {min, min+1, min+2, ..., max}. It assumes + * that the desired range (max-min+1) is small compared to the range of the + * underlying source of random numbers and thus makes no attempt to limit + * quantization errors. + * + * Let \f$r_{\mathtt{out}} = (\mbox{max}-\mbox{min}+1)\f$ the desired range of + * integer numbers, and + * let \f$r_{\mathtt{base}}\f$ be the range of the underlying source of random + * numbers. Then, for the uniform distribution, the theoretical probability + * for any number i in the range \f$r_{\mathtt{out}}\f$ will be + * \f$\displaystyle p_{\mathtt{out}}(i) = \frac{1}{r_{\mathtt{out}}}\f$. + * Likewise, assume a uniform distribution on \f$r_{\mathtt{base}}\f$ for + * the underlying source of random numbers, i.e. + * \f$\displaystyle p_{\mathtt{base}}(i) = \frac{1}{r_{\mathtt{base}}}\f$. + * Let \f$p_{\mathtt{out\_s}}(i)\f$ denote the random + * distribution generated by @c uniform_smallint. Then the sum over all + * i in \f$r_{\mathtt{out}}\f$ of + * \f$\displaystyle + * \left(\frac{p_{\mathtt{out\_s}}(i)}{p_{\mathtt{out}}(i)} - 1\right)^2\f$ + * shall not exceed + * \f$\displaystyle \frac{r_{\mathtt{out}}}{r_{\mathtt{base}}^2} + * (r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}) + * (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})\f$. + * + * The template parameter IntType shall denote an integer-like value type. + * + * @xmlnote + * The property above is the square sum of the relative differences + * in probabilities between the desired uniform distribution + * \f$p_{\mathtt{out}}(i)\f$ and the generated distribution + * \f$p_{\mathtt{out\_s}}(i)\f$. + * The property can be fulfilled with the calculation + * \f$(\mbox{base\_rng} \mbox{ mod } r_{\mathtt{out}})\f$, as follows: + * Let \f$r = r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}\f$. + * The base distribution on \f$r_{\mathtt{base}}\f$ is folded onto the + * range \f$r_{\mathtt{out}}\f$. The numbers i < r have assigned + * \f$\displaystyle + * \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor+1\f$ + * numbers of the base distribution, the rest has only \f$\displaystyle + * \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor\f$. + * Therefore, + * \f$\displaystyle p_{\mathtt{out\_s}}(i) = + * \left(\left\lfloor\frac{r_{\mathtt{base}}} + * {r_{\mathtt{out}}}\right\rfloor+1\right) / + * r_{\mathtt{base}}\f$ for i < r and \f$\displaystyle p_{\mathtt{out\_s}}(i) = + * \left\lfloor\frac{r_{\mathtt{base}}} + * {r_{\mathtt{out}}}\right\rfloor/r_{\mathtt{base}}\f$ otherwise. + * Substituting this in the + * above sum formula leads to the desired result. + * @endxmlnote + * + * Note: The upper bound for + * \f$(r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}) + * (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})\f$ is + * \f$\displaystyle \frac{r_{\mathtt{out}}^2}{4}\f$. Regarding the upper bound + * for the square sum of the relative quantization error of + * \f$\displaystyle \frac{r_\mathtt{out}^3}{4r_{\mathtt{base}}^2}\f$, it + * seems wise to either choose \f$r_{\mathtt{base}}\f$ so that + * \f$r_{\mathtt{base}} > 10r_{\mathtt{out}}^2\f$ or ensure that + * \f$r_{\mathtt{base}}\f$ is + * divisible by \f$r_{\mathtt{out}}\f$. + */ +template +class uniform_smallint +{ +public: + typedef IntType input_type; + typedef IntType result_type; + + class param_type + { + public: + + typedef uniform_smallint distribution_type; + + /** constructs the parameters of a @c uniform_smallint distribution. */ + param_type(IntType min_arg = 0, IntType max_arg = 9) + : _min(min_arg), _max(max_arg) + { + BOOST_ASSERT(_min <= _max); + } + + /** Returns the minimum value. */ + IntType a() const { return _min; } + /** Returns the maximum value. */ + IntType b() const { return _max; } + + + /** Writes the parameters to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { + os << parm._min << " " << parm._max; + return os; + } + + /** Reads the parameters from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { + is >> parm._min >> std::ws >> parm._max; + return is; + } + + /** Returns true if the two sets of parameters are equal. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._min == rhs._min && lhs._max == rhs._max; } + + /** Returns true if the two sets of parameters are different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + IntType _min; + IntType _max; + }; + + /** + * Constructs a @c uniform_smallint. @c min and @c max are the + * lower and upper bounds of the output range, respectively. + */ + explicit uniform_smallint(IntType min_arg = 0, IntType max_arg = 9) + : _min(min_arg), _max(max_arg) {} + + /** + * Constructs a @c uniform_smallint from its parameters. + */ + explicit uniform_smallint(const param_type& parm) + : _min(parm.a()), _max(parm.b()) {} + + /** Returns the minimum value of the distribution. */ + result_type a() const { return _min; } + /** Returns the maximum value of the distribution. */ + result_type b() const { return _max; } + /** Returns the minimum value of the distribution. */ + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + /** Returns the maximum value of the distribution. */ + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_min, _max); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _min = parm.a(); + _max = parm.b(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + + /** Returns a value uniformly distributed in the range [min(), max()]. */ + template + result_type operator()(Engine& eng) const + { + typedef typename Engine::result_type base_result; + return generate(eng, boost::is_integral()); + } + + /** Returns a value uniformly distributed in the range [param.a(), param.b()]. */ + template + result_type operator()(Engine& eng, const param_type& parm) const + { return uniform_smallint(parm)(eng); } + + /** Writes the distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, uniform_smallint, ud) + { + os << ud._min << " " << ud._max; + return os; + } + + /** Reads the distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, uniform_smallint, ud) + { + is >> ud._min >> std::ws >> ud._max; + return is; + } + + /** + * Returns true if the two distributions will produce identical + * sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(uniform_smallint, lhs, rhs) + { return lhs._min == rhs._min && lhs._max == rhs._max; } + + /** + * Returns true if the two distributions may produce different + * sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(uniform_smallint) + +private: + + // \cond show_private + template + result_type generate(Engine& eng, boost::mpl::true_) const + { + // equivalent to (eng() - eng.min()) % (_max - _min + 1) + _min, + // but guarantees no overflow. + typedef typename Engine::result_type base_result; + typedef typename boost::make_unsigned::type base_unsigned; + typedef typename boost::make_unsigned::type range_type; + range_type range = random::detail::subtract()(_max, _min); + base_unsigned base_range = + random::detail::subtract()((eng.max)(), (eng.min)()); + base_unsigned val = + random::detail::subtract()(eng(), (eng.min)()); + if(range >= base_range) { + return boost::random::detail::add()( + static_cast(val), _min); + } else { + base_unsigned modulus = static_cast(range) + 1; + return boost::random::detail::add()( + static_cast(val % modulus), _min); + } + } + + template + result_type generate(Engine& eng, boost::mpl::false_) const + { + typedef typename Engine::result_type base_result; + typedef typename boost::make_unsigned::type range_type; + range_type range = random::detail::subtract()(_max, _min); + base_result val = boost::uniform_01()(eng); + // what is the worst that can possibly happen here? + // base_result may not be able to represent all the values in [0, range] + // exactly. If this happens, it will cause round off error and we + // won't be able to produce all the values in the range. We don't + // care about this because the user has already told us not to by + // using uniform_smallint. However, we do need to be careful + // to clamp the result, or floating point rounding can produce + // an out of range result. + range_type offset = static_cast(val * (static_cast(range) + 1)); + if(offset > range) return _max; + return boost::random::detail::add()(offset , _min); + } + // \endcond + + result_type _min; + result_type _max; +}; + +} // namespace random + +using random::uniform_smallint; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_SMALLINT_HPP diff --git a/external/boost/random/variate_generator.hpp b/external/boost/random/variate_generator.hpp new file mode 100644 index 0000000..ac69800 --- /dev/null +++ b/external/boost/random/variate_generator.hpp @@ -0,0 +1,122 @@ +/* boost random/variate_generator.hpp header file + * + * Copyright Jens Maurer 2002 + * Copyright Steven Watanabe 2011 + * Distributed under the Boost Software License, Version 1.0. (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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_RANDOM_GENERATOR_HPP +#define BOOST_RANDOM_RANDOM_GENERATOR_HPP + +#include + +#include + +namespace boost { + +/// \cond hide_private_members + +namespace random { + +///\endcond + +/** + * A random variate generator is used to join a random number + * generator together with a random number distribution. + * Boost.Random provides a vast choice of \generators as well + * as \distributions. + * + * The argument for the template parameter Engine shall be of + * the form U, U&, or U*, where U models a + * \uniform_random_number_generator. Then, the member + * engine_value_type names U (not the pointer or reference to U). + * + * Specializations of @c variate_generator satisfy the + * requirements of CopyConstructible. They also satisfy the + * requirements of Assignable unless the template parameter + * Engine is of the form U&. + * + * The complexity of all functions specified in this section + * is constant. No function described in this section except + * the constructor throws an exception. + */ +template +class variate_generator +{ +private: + typedef boost::random::detail::ptr_helper helper_type; +public: + typedef typename helper_type::value_type engine_value_type; + typedef Engine engine_type; + typedef Distribution distribution_type; + typedef typename Distribution::result_type result_type; + + /** + * Constructs a @c variate_generator object with the associated + * \uniform_random_number_generator eng and the associated + * \random_distribution d. + * + * Throws: If and what the copy constructor of Engine or + * Distribution throws. + */ + variate_generator(Engine e, Distribution d) + : _eng(e), _dist(d) { } + + /** Returns: distribution()(engine()) */ + result_type operator()() { return _dist(engine()); } + /** + * Returns: distribution()(engine(), value). + */ + template + result_type operator()(const T& value) { return _dist(engine(), value); } + + /** + * Returns: A reference to the associated uniform random number generator. + */ + engine_value_type& engine() { return helper_type::ref(_eng); } + /** + * Returns: A reference to the associated uniform random number generator. + */ + const engine_value_type& engine() const { return helper_type::ref(_eng); } + + /** Returns: A reference to the associated \random_distribution. */ + distribution_type& distribution() { return _dist; } + /** + * Returns: A reference to the associated random distribution. + */ + const distribution_type& distribution() const { return _dist; } + + /** + * Precondition: distribution().min() is well-formed + * + * Returns: distribution().min() + */ + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().min)(); } + /** + * Precondition: distribution().max() is well-formed + * + * Returns: distribution().max() + */ + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().max)(); } + +private: + Engine _eng; + distribution_type _dist; +}; + +} // namespace random + +using random::variate_generator; + +} // namespace boost + +#include + +#endif // BOOST_RANDOM_RANDOM_GENERATOR_HPP diff --git a/external/boost/random/weibull_distribution.hpp b/external/boost/random/weibull_distribution.hpp new file mode 100644 index 0000000..2c8a26f --- /dev/null +++ b/external/boost/random/weibull_distribution.hpp @@ -0,0 +1,177 @@ +/* boost random/weibull_distribution.hpp header file + * + * Copyright Steven Watanabe 2010 + * Distributed under the Boost Software License, Version 1.0. (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: weibull_distribution.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ + */ + +#ifndef BOOST_RANDOM_WEIBULL_DISTRIBUTION_HPP +#define BOOST_RANDOM_WEIBULL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +/** + * The Weibull distribution is a real valued distribution with two + * parameters a and b, producing values >= 0. + * + * It has \f$\displaystyle p(x) = \frac{a}{b}\left(\frac{x}{b}\right)^{a-1}e^{-\left(\frac{x}{b}\right)^a}\f$. + */ +template +class weibull_distribution { +public: + typedef RealType result_type; + typedef RealType input_type; + + class param_type { + public: + typedef weibull_distribution distribution_type; + + /** + * Constructs a @c param_type from the "a" and "b" parameters + * of the distribution. + * + * Requires: a > 0 && b > 0 + */ + explicit param_type(RealType a_arg = 1.0, RealType b_arg = 1.0) + : _a(a_arg), _b(b_arg) + {} + + /** Returns the "a" parameter of the distribtuion. */ + RealType a() const { return _a; } + /** Returns the "b" parameter of the distribution. */ + RealType b() const { return _b; } + + /** Writes a @c param_type to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm) + { os << parm._a << ' ' << parm._b; return os; } + + /** Reads a @c param_type from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm) + { is >> parm._a >> std::ws >> parm._b; return is; } + + /** Returns true if the two sets of parameters are the same. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs) + { return lhs._a == rhs._a && lhs._b == rhs._b; } + + /** Returns true if the two sets of parameters are the different. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type) + + private: + RealType _a; + RealType _b; + }; + + /** + * Constructs a @c weibull_distribution from its "a" and "b" parameters. + * + * Requires: a > 0 && b > 0 + */ + explicit weibull_distribution(RealType a_arg = 1.0, RealType b_arg = 1.0) + : _a(a_arg), _b(b_arg) + {} + /** Constructs a @c weibull_distribution from its parameters. */ + explicit weibull_distribution(const param_type& parm) + : _a(parm.a()), _b(parm.b()) + {} + + /** + * Returns a random variate distributed according to the + * @c weibull_distribution. + */ + template + RealType operator()(URNG& urng) const + { + using std::pow; + using std::log; + return _b*pow(-log(1 - uniform_01()(urng)), 1/_a); + } + + /** + * Returns a random variate distributed accordint to the Weibull + * distribution with parameters specified by @c param. + */ + template + RealType operator()(URNG& urng, const param_type& parm) const + { + return weibull_distribution(parm)(urng); + } + + /** Returns the "a" parameter of the distribution. */ + RealType a() const { return _a; } + /** Returns the "b" parameter of the distribution. */ + RealType b() const { return _b; } + + /** Returns the smallest value that the distribution can produce. */ + RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + /** Returns the largest value that the distribution can produce. */ + RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { return std::numeric_limits::infinity(); } + + /** Returns the parameters of the distribution. */ + param_type param() const { return param_type(_a, _b); } + /** Sets the parameters of the distribution. */ + void param(const param_type& parm) + { + _a = parm.a(); + _b = parm.b(); + } + + /** + * Effects: Subsequent uses of the distribution do not depend + * on values produced by any engine prior to invoking reset. + */ + void reset() { } + + /** Writes a @c weibull_distribution to a @c std::ostream. */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, weibull_distribution, wd) + { + os << wd.param(); + return os; + } + + /** Reads a @c weibull_distribution from a @c std::istream. */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, weibull_distribution, wd) + { + param_type parm; + if(is >> parm) { + wd.param(parm); + } + return is; + } + + /** + * Returns true if the two instances of @c weibull_distribution will + * return identical sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(weibull_distribution, lhs, rhs) + { return lhs._a == rhs._a && lhs._b == rhs._b; } + + /** + * Returns true if the two instances of @c weibull_distribution will + * return different sequences of values given equal generators. + */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(weibull_distribution) + +private: + RealType _a; + RealType _b; +}; + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_WEIBULL_DISTRIBUTION_HPP diff --git a/external/boost/random/xor_combine.hpp b/external/boost/random/xor_combine.hpp new file mode 100644 index 0000000..d997a1c --- /dev/null +++ b/external/boost/random/xor_combine.hpp @@ -0,0 +1,207 @@ +/* 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 71018 2011-04-05 21:27:52Z steven_watanabe $ + * + */ + +#ifndef BOOST_RANDOM_XOR_COMBINE_HPP +#define BOOST_RANDOM_XOR_COMBINE_HPP + +#include +#include +#include +#include // for std::min and std::max +#include +#include +#include // uint32_t +#include +#include +#include + +namespace boost { +namespace random { + +/** + * Instantiations of @c xor_combine_engine model a + * \pseudo_random_number_generator. To produce its output it + * invokes each of the base generators, shifts their results + * and xors them together. + */ +template +class xor_combine_engine +{ +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, shift2 = s2); + + /** + * Constructors a @c xor_combine_engine by default constructing + * both base generators. + */ + xor_combine_engine() : _rng1(), _rng2() { } + + /** Constructs a @c xor_combine by copying two base generators. */ + xor_combine_engine(const base1_type & rng1, const base2_type & rng2) + : _rng1(rng1), _rng2(rng2) { } + + /** + * Constructs a @c xor_combine_engine, seeding both base generators + * with @c v. + * + * @xmlwarning + * The exact algorithm used by this function may change in the future. + * @endxmlwarning + */ + BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(xor_combine_engine, + result_type, v) + { seed(v); } + + /** + * Constructs a @c xor_combine_engine, seeding both base generators + * with values produced by @c seq. + */ + BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(xor_combine_engine, + SeedSeq, seq) + { seed(seq); } + + /** + * Constructs a @c xor_combine_engine, seeding both base generators + * with values from the iterator range [first, last) and changes + * first to point to the element after the last one used. If there + * are not enough elements in the range to seed both generators, + * throws @c std::invalid_argument. + */ + template xor_combine_engine(It& first, It last) + : _rng1(first, last), _rng2( /* advanced by other call */ first, last) { } + + /** Calls @c seed() for both base generators. */ + void seed() { _rng1.seed(); _rng2.seed(); } + + /** @c seeds both base generators with @c v. */ + BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(xor_combine_engine, result_type, v) + { _rng1.seed(v); _rng2.seed(v); } + + /** @c seeds both base generators with values produced by @c seq. */ + BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(xor_combine_engine, SeedSeq, seq) + { _rng1.seed(seq); _rng2.seed(seq); } + + /** + * seeds both base generators with values from the iterator + * range [first, last) and changes first to point to the element + * after the last one used. If there are not enough elements in + * the range to seed both generators, throws @c std::invalid_argument. + */ + template void seed(It& first, It last) + { + _rng1.seed(first, last); + _rng2.seed(first, last); + } + + /** Returns the first base generator. */ + const base1_type& base1() const { return _rng1; } + + /** Returns the second base generator. */ + const base2_type& base2() const { return _rng2; } + + /** Returns the next value of the generator. */ + result_type operator()() + { + return (_rng1() << s1) ^ (_rng2() << s2); + } + + /** Fills a range with random values */ + template + void generate(Iter first, Iter last) + { detail::generate_from_int(*this, first, last); } + + /** Advances the state of the generator by @c z. */ + void discard(boost::uintmax_t z) + { + _rng1.discard(z); + _rng2.discard(z); + } + + /** Returns the smallest value that the generator can produce. */ + static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return (std::min)((URNG1::min)(), (URNG2::min)()); } + /** Returns the largest value that the generator can produce. */ + static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () { return (std::max)((URNG1::min)(), (URNG2::max)()); } + + /** + * Writes the textual representation of the generator to a @c std::ostream. + */ + BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, xor_combine_engine, s) + { + os << s._rng1 << ' ' << s._rng2; + return os; + } + + /** + * Reads the textual representation of the generator from a @c std::istream. + */ + BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, xor_combine_engine, s) + { + is >> s._rng1 >> std::ws >> s._rng2; + return is; + } + + /** Returns true if the two generators will produce identical sequences. */ + BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(xor_combine_engine, x, y) + { return x._rng1 == y._rng1 && x._rng2 == y._rng2; } + + /** Returns true if the two generators will produce different sequences. */ + BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(xor_combine_engine) + +private: + base1_type _rng1; + base2_type _rng2; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool xor_combine_engine::has_fixed_range; +template +const int xor_combine_engine::shift1; +template +const int xor_combine_engine::shift2; +#endif + +/// \cond show_private + +/** Provided for backwards compatibility. */ +template +class xor_combine : public xor_combine_engine +{ + typedef xor_combine_engine base_type; +public: + typedef typename base_type::result_type result_type; + xor_combine() {} + xor_combine(result_type val) : base_type(val) {} + template + xor_combine(It& first, It last) : base_type(first, last) {} + xor_combine(const URNG1 & rng1, const URNG2 & rng2) + : base_type(rng1, rng2) { } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (std::min)((this->base1().min)(), (this->base2().min)()); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (std::max)((this->base1().min)(), (this->base2().max)()); } +}; + +/// \endcond + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_XOR_COMBINE_HPP diff --git a/external/boost/range/algorithm/equal.hpp b/external/boost/range/algorithm/equal.hpp new file mode 100644 index 0000000..a3ebc29 --- /dev/null +++ b/external/boost/range/algorithm/equal.hpp @@ -0,0 +1,188 @@ +// Boost.Range library +// +// Copyright Neil Groves 2009. +// Use, modification and distribution is subject to the 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_ALGORITHM_EQUAL_HPP_INCLUDED +#define BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED + +#include +#include +#include + +namespace boost +{ + namespace range_detail + { + // An implementation of equality comparison that is optimized for iterator + // traversal categories less than RandomAccessTraversal. + template< class SinglePassTraversalReadableIterator1, + class SinglePassTraversalReadableIterator2, + class IteratorCategoryTag1, + class IteratorCategoryTag2 > + inline bool equal_impl( SinglePassTraversalReadableIterator1 first1, + SinglePassTraversalReadableIterator1 last1, + SinglePassTraversalReadableIterator2 first2, + SinglePassTraversalReadableIterator2 last2, + IteratorCategoryTag1, + IteratorCategoryTag2 ) + { + do + { + // If we have reached the end of the left range then this is + // the end of the loop. They are equal if and only if we have + // simultaneously reached the end of the right range. + if (first1 == last1) + return first2 == last2; + + // If we have reached the end of the right range at this line + // it indicates that the right range is shorter than the left + // and hence the result is false. + if (first2 == last2) + return false; + + // continue looping if and only if the values are equal + } while(*first1++ == *first2++); + + // Reaching this line in the algorithm indicates that a value + // inequality has been detected. + return false; + } + + template< class SinglePassTraversalReadableIterator1, + class SinglePassTraversalReadableIterator2, + class IteratorCategoryTag1, + class IteratorCategoryTag2, + class BinaryPredicate > + inline bool equal_impl( SinglePassTraversalReadableIterator1 first1, + SinglePassTraversalReadableIterator1 last1, + SinglePassTraversalReadableIterator2 first2, + SinglePassTraversalReadableIterator2 last2, + BinaryPredicate pred, + IteratorCategoryTag1, + IteratorCategoryTag2 ) + { + do + { + // If we have reached the end of the left range then this is + // the end of the loop. They are equal if and only if we have + // simultaneously reached the end of the right range. + if (first1 == last1) + return first2 == last2; + + // If we have reached the end of the right range at this line + // it indicates that the right range is shorter than the left + // and hence the result is false. + if (first2 == last2) + return false; + + // continue looping if and only if the values are equal + } while(pred(*first1++, *first2++)); + + // Reaching this line in the algorithm indicates that a value + // inequality has been detected. + return false; + } + + // An implementation of equality comparison that is optimized for + // random access iterators. + template< class RandomAccessTraversalReadableIterator1, + class RandomAccessTraversalReadableIterator2 > + inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1, + RandomAccessTraversalReadableIterator1 last1, + RandomAccessTraversalReadableIterator2 first2, + RandomAccessTraversalReadableIterator2 last2, + std::random_access_iterator_tag, + std::random_access_iterator_tag ) + { + return ((last1 - first1) == (last2 - first2)) + && std::equal(first1, last1, first2); + } + + template< class RandomAccessTraversalReadableIterator1, + class RandomAccessTraversalReadableIterator2, + class BinaryPredicate > + inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1, + RandomAccessTraversalReadableIterator1 last1, + RandomAccessTraversalReadableIterator2 first2, + RandomAccessTraversalReadableIterator2 last2, + BinaryPredicate pred ) + { + return ((last1 - first1) == (last2 - first2)) + && std::equal(first1, last1, first2, pred); + } + + template< class SinglePassTraversalReadableIterator1, + class SinglePassTraversalReadableIterator2 > + inline bool equal( SinglePassTraversalReadableIterator1 first1, + SinglePassTraversalReadableIterator1 last1, + SinglePassTraversalReadableIterator2 first2, + SinglePassTraversalReadableIterator2 last2 ) + { + BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1; + BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2; + + return equal_impl(first1, last1, first2, last2, tag1, tag2); + } + + template< class SinglePassTraversalReadableIterator1, + class SinglePassTraversalReadableIterator2, + class BinaryPredicate > + inline bool equal( SinglePassTraversalReadableIterator1 first1, + SinglePassTraversalReadableIterator1 last1, + SinglePassTraversalReadableIterator2 first2, + SinglePassTraversalReadableIterator2 last2, + BinaryPredicate pred ) + { + BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1; + BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2; + + return equal_impl(first1, last1, first2, last2, pred, tag1, tag2); + } + + } // namespace range_detail + + namespace range + { + + /// \brief template function equal + /// + /// range-based version of the equal std algorithm + /// + /// \pre SinglePassRange1 is a model of the SinglePassRangeConcept + /// \pre SinglePassRange2 is a model of the SinglePassRangeConcept + /// \pre BinaryPredicate is a model of the BinaryPredicateConcept + template< class SinglePassRange1, class SinglePassRange2 > + inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2 ) + { + BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept )); + BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept )); + + return ::boost::range_detail::equal( + ::boost::begin(rng1), ::boost::end(rng1), + ::boost::begin(rng2), ::boost::end(rng2) ); + } + + /// \overload + template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate > + inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2, + BinaryPredicate pred ) + { + BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept )); + BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept )); + + return ::boost::range_detail::equal( + ::boost::begin(rng1), ::boost::end(rng1), + ::boost::begin(rng2), ::boost::end(rng2), + pred); + } + + } // namespace range + using range::equal; +} // namespace boost + +#endif // include guard diff --git a/external/boost/range/as_literal.hpp b/external/boost/range/as_literal.hpp new file mode 100644 index 0000000..f67ead7 --- /dev/null +++ b/external/boost/range/as_literal.hpp @@ -0,0 +1,127 @@ +// Boost.Range 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/range/ +// + +#ifndef BOOST_RANGE_AS_LITERAL_HPP +#define BOOST_RANGE_AS_LITERAL_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +#include +#else + +#include +#include + +#include + +#include +#ifndef BOOST_NO_CWCHAR +#include +#endif + +namespace boost +{ + namespace range_detail + { + inline std::size_t length( const char* s ) + { + return strlen( s ); + } + +#ifndef BOOST_NO_CWCHAR + inline std::size_t length( const wchar_t* s ) + { + return wcslen( s ); + } +#endif + + // + // Remark: the compiler cannot choose between T* and T[sz] + // overloads, so we must put the T* internal to the + // unconstrained version. + // + + inline bool is_char_ptr( char* ) + { + return true; + } + + inline bool is_char_ptr( const char* ) + { + return true; + } + +#ifndef BOOST_NO_CWCHAR + inline bool is_char_ptr( wchar_t* ) + { + return true; + } + + inline bool is_char_ptr( const wchar_t* ) + { + return true; + } +#endif + + template< class T > + inline long is_char_ptr( T /* r */ ) + { + return 0L; + } + + template< class T > + inline iterator_range + make_range( T* const r, bool ) + { + return iterator_range( r, r + length(r) ); + } + + template< class T > + inline iterator_range::type> + make_range( T& r, long ) + { + return boost::make_iterator_range( r ); + } + + } + + template< class Range > + inline iterator_range::type> + as_literal( Range& r ) + { + return range_detail::make_range( r, range_detail::is_char_ptr(r) ); + } + + template< class Range > + inline iterator_range::type> + as_literal( const Range& r ) + { + return range_detail::make_range( r, range_detail::is_char_ptr(r) ); + } + + template< class Char, std::size_t sz > + inline iterator_range as_literal( Char (&arr)[sz] ) + { + return range_detail::make_range( arr, range_detail::is_char_ptr(arr) ); + } + + template< class Char, std::size_t sz > + inline iterator_range as_literal( const Char (&arr)[sz] ) + { + return range_detail::make_range( arr, range_detail::is_char_ptr(arr) ); + } +} + +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +#endif diff --git a/external/boost/range/begin.hpp b/external/boost/range/begin.hpp new file mode 100644 index 0000000..c668488 --- /dev/null +++ b/external/boost/range/begin.hpp @@ -0,0 +1,143 @@ +// 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 + +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +#include +#else + +#include + +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_iterator::type + range_begin( C& c ) + { + // + // If you get a compile-error here, it is most likely because + // you have not implemented range_begin() properly in + // the namespace of C + // + return c.begin(); + } + + ////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////// + + template< typename Iterator > + inline Iterator range_begin( const std::pair& p ) + { + return p.first; + } + + template< typename Iterator > + inline Iterator range_begin( std::pair& p ) + { + return p.first; + } + + ////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////// + + // + // May this be discarded? Or is it needed for bad compilers? + // + template< typename T, std::size_t sz > + inline const T* range_begin( const T (&a)[sz] ) + { + return a; + } + + template< typename T, std::size_t sz > + inline T* range_begin( T (&a)[sz] ) + { + return a; + } + + +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ +} // namespace 'range_detail' +#endif + +// Use a ADL namespace barrier to avoid ambiguity with other unqualified +// calls. This is particularly important with C++0x encouraging +// unqualified calls to begin/end. +namespace range_adl_barrier +{ + +template< class T > +inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( T& r ) +{ +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ + using namespace range_detail; +#endif + return range_begin( r ); +} + +template< class T > +inline BOOST_DEDUCED_TYPENAME range_iterator::type begin( const T& r ) +{ +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ + !BOOST_WORKAROUND(__GNUC__, < 3) \ + /**/ + using namespace range_detail; +#endif + return range_begin( r ); +} + + } // namespace range_adl_barrier +} // namespace boost + +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +namespace boost +{ + namespace range_adl_barrier + { + template< class T > + inline BOOST_DEDUCED_TYPENAME range_iterator::type + const_begin( const T& r ) + { + return boost::range_adl_barrier::begin( r ); + } + } // namespace range_adl_barrier + + using namespace range_adl_barrier; +} // namespace boost + +#endif + diff --git a/external/boost/range/concepts.hpp b/external/boost/range/concepts.hpp new file mode 100644 index 0000000..5965293 --- /dev/null +++ b/external/boost/range/concepts.hpp @@ -0,0 +1,366 @@ +// Boost.Range library concept checks +// +// Copyright Neil Groves 2009. Use, modification and distribution +// are subject to the 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 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 +#include +#include +#include +#include +#include +#include + +/*! + * \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 + * BOOST_CONCEPT_ASSERT((ForwardRangeConcept)); + * \endcode + * + * A different concept check is required to ensure writeable value + * access. For example to check for a ForwardRange that can be written + * to, the following code is required. + * + * \code + * BOOST_CONCEPT_ASSERT((WriteableForwardRangeConcept)); + * \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 { + + namespace range_detail { + +#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT + +// List broken compiler versions here: + #ifdef __GNUC__ + // GNUC 4.2 has strange issues correctly detecting compliance with the Concepts + // hence the least disruptive approach is to turn-off the concept checking for + // this version of the compiler. + #if __GNUC__ == 4 && __GNUC_MINOR__ == 2 + #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0 + #endif + #endif + + #ifdef __BORLANDC__ + #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0 + #endif + + #ifdef __PATHCC__ + #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0 + #endif + +// Default to using the concept asserts unless we have defined it off +// during the search for black listed compilers. + #ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT + #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1 + #endif + +#endif + +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + #define BOOST_RANGE_CONCEPT_ASSERT( x ) BOOST_CONCEPT_ASSERT( x ) +#else + #define BOOST_RANGE_CONCEPT_ASSERT( x ) +#endif + + // Rationale for the inclusion of redefined iterator concept + // classes: + // + // The Range algorithms often do not require that the iterators are + // Assignable or default constructable, but the correct standard + // conformant iterators do require the iterators to be a model of the + // Assignable concept. + // Iterators that contains a functor that is not assignable therefore + // are not correct models of the standard iterator concepts, + // despite being adequate for most algorithms. An example of this + // use case is the combination of the boost::adaptors::filtered + // class with a boost::lambda::bind generated functor. + // Ultimately modeling the range concepts using composition + // with the Boost.Iterator concepts would render the library + // incompatible with many common Boost.Lambda expressions. + template + struct IncrementableIteratorConcept : CopyConstructible + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + typedef BOOST_DEDUCED_TYPENAME iterator_traversal::type traversal_category; + + BOOST_RANGE_CONCEPT_ASSERT(( + Convertible< + traversal_category, + incrementable_traversal_tag + >)); + + BOOST_CONCEPT_USAGE(IncrementableIteratorConcept) + { + ++i; + (void)i++; + } + private: + Iterator i; +#endif + }; + + template + struct SinglePassIteratorConcept + : IncrementableIteratorConcept + , EqualityComparable + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + BOOST_RANGE_CONCEPT_ASSERT(( + Convertible< + BOOST_DEDUCED_TYPENAME SinglePassIteratorConcept::traversal_category, + single_pass_traversal_tag + >)); + + BOOST_CONCEPT_USAGE(SinglePassIteratorConcept) + { + Iterator i2(++i); + boost::ignore_unused_variable_warning(i2); + + // deliberately we are loose with the postfix version for the single pass + // iterator due to the commonly poor adherence to the specification means that + // many algorithms would be unusable, whereas actually without the check they + // work + (void)(i++); + + BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::reference r1(*i); + boost::ignore_unused_variable_warning(r1); + + BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::reference r2(*(++i)); + boost::ignore_unused_variable_warning(r2); + } + private: + Iterator i; +#endif + }; + + template + struct ForwardIteratorConcept + : SinglePassIteratorConcept + , DefaultConstructible + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::difference_type difference_type; + + BOOST_MPL_ASSERT((is_integral)); + BOOST_MPL_ASSERT_RELATION(std::numeric_limits::is_signed, ==, true); + + BOOST_RANGE_CONCEPT_ASSERT(( + Convertible< + BOOST_DEDUCED_TYPENAME ForwardIteratorConcept::traversal_category, + forward_traversal_tag + >)); + + BOOST_CONCEPT_USAGE(ForwardIteratorConcept) + { + // See the above note in the SinglePassIteratorConcept about the handling of the + // postfix increment. Since with forward and better iterators there is no need + // for a proxy, we can sensibly require that the dereference result + // is convertible to reference. + Iterator i2(i++); + boost::ignore_unused_variable_warning(i2); + BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::reference r(*(i++)); + boost::ignore_unused_variable_warning(r); + } + private: + Iterator i; +#endif + }; + + template + struct BidirectionalIteratorConcept + : ForwardIteratorConcept + { + #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + BOOST_RANGE_CONCEPT_ASSERT(( + Convertible< + BOOST_DEDUCED_TYPENAME BidirectionalIteratorConcept::traversal_category, + bidirectional_traversal_tag + >)); + + BOOST_CONCEPT_USAGE(BidirectionalIteratorConcept) + { + --i; + (void)i--; + } + private: + Iterator i; + #endif + }; + + template + struct RandomAccessIteratorConcept + : BidirectionalIteratorConcept + { + #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + BOOST_RANGE_CONCEPT_ASSERT(( + Convertible< + BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::traversal_category, + random_access_traversal_tag + >)); + + BOOST_CONCEPT_USAGE(RandomAccessIteratorConcept) + { + i += n; + i = i + n; + i = n + i; + i -= n; + i = i - n; + n = i - j; + } + private: + BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::difference_type n; + Iterator i; + Iterator j; + #endif + }; + + } // namespace range_detail + + //! Check if a type T models the SinglePassRange range concept. + template + struct SinglePassRangeConcept + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + typedef BOOST_DEDUCED_TYPENAME range_iterator::type const_iterator; + typedef BOOST_DEDUCED_TYPENAME range_iterator::type iterator; + + BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept)); + BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept)); + + BOOST_CONCEPT_USAGE(SinglePassRangeConcept) + { + // This has been modified from assigning to this->i + // (where i was a member variable) to improve + // compatibility with Boost.Lambda + iterator i1 = boost::begin(*m_range); + iterator i2 = boost::end(*m_range); + + ignore_unused_variable_warning(i1); + ignore_unused_variable_warning(i2); + + const_constraints(*m_range); + } + + private: + void const_constraints(const T& const_range) + { + const_iterator ci1 = boost::begin(const_range); + const_iterator ci2 = boost::end(const_range); + + ignore_unused_variable_warning(ci1); + ignore_unused_variable_warning(ci2); + } + + // Rationale: + // The type of m_range is T* rather than T because it allows + // T to be an abstract class. The other obvious alternative of + // T& produces a warning on some compilers. + T* m_range; +#endif + }; + + //! Check if a type T models the ForwardRange range concept. + template + struct ForwardRangeConcept : SinglePassRangeConcept + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept)); + BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept)); +#endif + }; + + template + struct WriteableRangeConcept + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + typedef BOOST_DEDUCED_TYPENAME range_iterator::type iterator; + + BOOST_CONCEPT_USAGE(WriteableRangeConcept) + { + *i = v; + } + private: + iterator i; + BOOST_DEDUCED_TYPENAME range_value::type v; +#endif + }; + + //! Check if a type T models the WriteableForwardRange range concept. + template + struct WriteableForwardRangeConcept + : ForwardRangeConcept + , WriteableRangeConcept + { + }; + + //! Check if a type T models the BidirectionalRange range concept. + template + struct BidirectionalRangeConcept : ForwardRangeConcept + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept)); + BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept)); +#endif + }; + + //! Check if a type T models the WriteableBidirectionalRange range concept. + template + struct WriteableBidirectionalRangeConcept + : BidirectionalRangeConcept + , WriteableRangeConcept + { + }; + + //! Check if a type T models the RandomAccessRange range concept. + template + struct RandomAccessRangeConcept : BidirectionalRangeConcept + { +#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT + BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept)); + BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept)); +#endif + }; + + //! Check if a type T models the WriteableRandomAccessRange range concept. + template + struct WriteableRandomAccessRangeConcept + : RandomAccessRangeConcept + , WriteableRangeConcept + { + }; + +} // namespace boost + +#endif // BOOST_RANGE_CONCEPTS_HPP diff --git a/external/boost/range/config.hpp b/external/boost/range/config.hpp new file mode 100644 index 0000000..4e7fb24 --- /dev/null +++ b/external/boost/range/config.hpp @@ -0,0 +1,54 @@ +// 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 + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include + +#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 ) || BOOST_WORKAROUND( __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/external/boost/range/const_iterator.hpp b/external/boost/range/const_iterator.hpp new file mode 100644 index 0000000..875320f --- /dev/null +++ b/external/boost/range/const_iterator.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_CONST_ITERATOR_HPP +#define BOOST_RANGE_CONST_ITERATOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#else + +#include +#include +#include +#include + +namespace boost +{ + ////////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////////// + + namespace range_detail { + BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator ) + } + + template< typename C > + struct range_const_iterator : range_detail::extract_const_iterator + {}; + + ////////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////////// + + template< typename Iterator > + struct range_const_iterator< std::pair > + { + typedef Iterator type; + }; + + ////////////////////////////////////////////////////////////////////////// + // array + ////////////////////////////////////////////////////////////////////////// + + template< typename T, std::size_t sz > + struct range_const_iterator< T[sz] > + { + typedef const T* type; + }; + +} // namespace boost + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif diff --git a/external/boost/range/detail/as_literal.hpp b/external/boost/range/detail/as_literal.hpp new file mode 100644 index 0000000..0bd9a15 --- /dev/null +++ b/external/boost/range/detail/as_literal.hpp @@ -0,0 +1,33 @@ +// Boost.Range 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/range/ +// + +#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP +#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +namespace boost +{ + template< class Range > + inline iterator_range::type> + as_literal( Range& r ) + { + return ::boost::make_iterator_range( ::boost::range_detail::str_begin(r), + ::boost::range_detail::str_end(r) ); + } + +} + +#endif diff --git a/external/boost/range/detail/begin.hpp b/external/boost/range/detail/begin.hpp new file mode 100644 index 0000000..f3da732 --- /dev/null +++ b/external/boost/range/detail/begin.hpp @@ -0,0 +1,94 @@ +// 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_MSVC +#include +#include +#include +#if BOOST_WORKAROUND(BOOST_MSVC, < 1310) +# include +#endif + +namespace boost +{ + + namespace range_detail + { + template< typename T > + struct range_begin; + + ////////////////////////////////////////////////////////////////////// + // default + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_begin + { + template< typename C > + static BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type fun( C& c ) + { + return c.begin(); + }; + }; + + ////////////////////////////////////////////////////////////////////// + // pair + ////////////////////////////////////////////////////////////////////// + + template<> + struct range_begin + { + template< typename P > + static BOOST_RANGE_DEDUCED_TYPENAME range_iterator

    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

  2. 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

    mog4}a2HVIoUiB`75*7T57UJH8;bsHg+HM1 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 z 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

Fim+XXYlxao|oO96;Pk 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_path.o b/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_path.o new file mode 100644 index 0000000000000000000000000000000000000000..a08ea564369f72bae7ae28e1b9c4d77d96c50d75 GIT binary patch literal 40872 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_portability.o b/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v2/src/v2_portability.o new file mode 100644 index 0000000000000000000000000000000000000000..e282c262a9fbea1304f7f7ad7924c7f529cf3371 GIT binary patch literal 14232 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 literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/codecvt_error_category.o b/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/codecvt_error_category.o new file mode 100644 index 0000000000000000000000000000000000000000..c43cb1eecfe45930c9de300f6710d74a340324c8 GIT binary patch literal 9176 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 RR=(vXU9N+T6Ukft{{nOO-R}SZ literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/path_traits.o b/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/path_traits.o new file mode 100644 index 0000000000000000000000000000000000000000..70d54e9e6af475f9c9c63f6dce4b0a84909273ea GIT binary patch literal 15832 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 Nj>JlIP9eAae*<+S=H&nY literal 0 HcmV?d00001 diff --git a/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/portability.o b/external/bin.v2/libs/filesystem/build/gcc-13/release/link-static/threading-multi/v3/src/portability.o new file mode 100644 index 0000000000000000000000000000000000000000..be049ee0000c719cd94f76374634a06f825f113e GIT binary patch literal 14232 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